Skip to content

Commit aff96c2

Browse files
authored
Merge pull request #965 from PayButton/feat/paybutton-transactions-count
feat: paybutton transactions count endpoint
2 parents bf6238b + 65d5978 commit aff96c2

3 files changed

Lines changed: 53 additions & 3 deletions

File tree

pages/api/paybutton/transactions/[id].ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { RESPONSE_MESSAGES } from 'constants/index'
22
import { fetchTransactionsByPaybuttonId } from 'services/transactionService'
33
import * as paybuttonService from 'services/paybuttonService'
44
import { setSession } from 'utils/setSession'
5+
import { parseError } from 'utils/validators'
56

67
export default async (req: any, res: any): Promise<void> => {
78
if (req.method === 'GET') {
@@ -19,14 +20,15 @@ export default async (req: any, res: any): Promise<void> => {
1920

2021
res.status(200).json({ transactions })
2122
} catch (err: any) {
22-
if (err.message === RESPONSE_MESSAGES.NO_TRANSACTION_FOUND_404.message) {
23+
const parsedError = parseError(err)
24+
if (parsedError.message === RESPONSE_MESSAGES.NO_TRANSACTION_FOUND_404.message) {
2325
res.status(RESPONSE_MESSAGES.NO_TRANSACTION_FOUND_404.statusCode)
2426
.json(RESPONSE_MESSAGES.NO_TRANSACTION_FOUND_404)
25-
} else if (err.message === RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400.message) {
27+
} else if (parsedError.message === RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400.message) {
2628
res.status(RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400.statusCode)
2729
.json(RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400)
2830
} else {
29-
res.status(500).json({ statusCode: 500, message: err.message })
31+
res.status(500).json({ statusCode: 500, message: parsedError.message })
3032
}
3133
}
3234
} else {
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { fetchTxCountByPaybuttonId } from 'services/transactionService'
2+
import { RESPONSE_MESSAGES } from 'constants/index'
3+
import { fetchPaybuttonById } from 'services/paybuttonService'
4+
import { setSession } from 'utils/setSession'
5+
import { parseError } from 'utils/validators'
6+
7+
export default async (req: any, res: any): Promise<void> => {
8+
if (req.method === 'GET') {
9+
try {
10+
await setSession(req, res)
11+
const paybuttonId = req.query.id as string
12+
const userId = req.session.userId
13+
const paybutton = await fetchPaybuttonById(paybuttonId)
14+
if (paybutton.providerUserId !== userId) {
15+
throw new Error(RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400.message)
16+
}
17+
const count = await fetchTxCountByPaybuttonId(paybuttonId)
18+
res.status(200).send(count)
19+
} catch (err: any) {
20+
const parsedError = parseError(err)
21+
switch (parsedError.message) {
22+
case RESPONSE_MESSAGES.NO_BUTTON_FOUND_404.message:
23+
res.status(404).json(RESPONSE_MESSAGES.NO_BUTTON_FOUND_404)
24+
break
25+
case RESPONSE_MESSAGES.USER_ID_NOT_PROVIDED_400.message:
26+
res.status(400).json(RESPONSE_MESSAGES.USER_ID_NOT_PROVIDED_400)
27+
break
28+
case RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400.message:
29+
res.status(400).json(RESPONSE_MESSAGES.RESOURCE_DOES_NOT_BELONG_TO_USER_400)
30+
break
31+
default:
32+
res.status(500).json({ statusCode: 500, message: err.message })
33+
}
34+
}
35+
}
36+
}

services/transactionService.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,3 +771,15 @@ export async function fetchAllPaymentsByUserId (
771771

772772
return transactions
773773
}
774+
775+
export async function fetchTxCountByPaybuttonId (paybuttonId: string): Promise<number> {
776+
const addressIdList = await fetchAddressesByPaybuttonId(paybuttonId)
777+
778+
return await prisma.transaction.count({
779+
where: {
780+
addressId: {
781+
in: addressIdList
782+
}
783+
}
784+
})
785+
}

0 commit comments

Comments
 (0)