diff --git a/src/app/api-utlities/errors/authorization.error.ts b/src/app/api-utlities/errors/authorization.error.ts new file mode 100644 index 0000000..4c54758 --- /dev/null +++ b/src/app/api-utlities/errors/authorization.error.ts @@ -0,0 +1 @@ +export class AuthorizationError extends Error {} diff --git a/src/app/api/bonus/info/route.ts b/src/app/api/bonus/info/route.ts index cbe7ea3..dd9621c 100644 --- a/src/app/api/bonus/info/route.ts +++ b/src/app/api/bonus/info/route.ts @@ -2,6 +2,7 @@ import { RequestCookie } from 'next/dist/compiled/@edge-runtime/cookies'; import { NextRequest } from 'next/server'; import oriyoClient from '@/app/api-utlities/clients/oriyo.client'; +import { AuthorizationError } from '@/app/api-utlities/errors/authorization.error'; import { authorizationMiddleware } from '../../middlewares/auth.middleware'; import { validationErrorHandler } from '../../middlewares/error-handler.middleware'; @@ -16,6 +17,10 @@ const routeHandler = async (req: NextRequest, requestCookie: RequestCookie) => { }, }); + if (oriyoResponse.status === 401) { + throw new AuthorizationError(); + } + return new Response(JSON.stringify(oriyoResponse.data), { headers: { 'Content-Type': 'application/json' }, }); diff --git a/src/app/api/bonus/transactions/route.ts b/src/app/api/bonus/transactions/route.ts index e86c618..5b664a5 100644 --- a/src/app/api/bonus/transactions/route.ts +++ b/src/app/api/bonus/transactions/route.ts @@ -3,6 +3,7 @@ import { NextRequest } from 'next/server'; import { z } from 'zod'; import oriyoClient from '@/app/api-utlities/clients/oriyo.client'; +import { AuthorizationError } from '@/app/api-utlities/errors/authorization.error'; import { getParams } from '@/app/api-utlities/utilities/get-params'; import { authorizationMiddleware } from '../../middlewares/auth.middleware'; @@ -34,6 +35,25 @@ const routeHandler = async (req: NextRequest, requestCookie: RequestCookie) => { }, }); + if (oriyoResponse.status === 404) + return new Response( + JSON.stringify({ + transactions: [], + card_id, + current_page: validatedRequest.page, + limit: validatedRequest.limit, + total_records: 0, + total_pages: 0, + }), + { + headers: { 'Content-Type': 'application/json' }, + }, + ); + + if (oriyoResponse.status === 401) { + throw new AuthorizationError(); + } + if (oriyoResponse.data.error) throw oriyoResponse.data; return new Response(JSON.stringify(oriyoResponse.data), { diff --git a/src/app/api/corporate/transactions/route.ts b/src/app/api/corporate/transactions/route.ts index 63154ac..3e545af 100644 --- a/src/app/api/corporate/transactions/route.ts +++ b/src/app/api/corporate/transactions/route.ts @@ -3,6 +3,7 @@ import { NextRequest } from 'next/server'; import { z } from 'zod'; import oriyoClient from '@/app/api-utlities/clients/oriyo.client'; +import { AuthorizationError } from '@/app/api-utlities/errors/authorization.error'; import { getParams } from '@/app/api-utlities/utilities/get-params'; import { authorizationMiddleware } from '../../middlewares/auth.middleware'; @@ -34,6 +35,24 @@ const routeHandler = async (req: NextRequest, requestCookie: RequestCookie) => { }, }); + if (oriyoResponse.status === 404) + return new Response( + JSON.stringify({ + transactions: [], + current_page: validatedRequest.page, + limit: validatedRequest.limit, + total_records: 0, + total_pages: 0, + }), + { + headers: { 'Content-Type': 'application/json' }, + }, + ); + + if (oriyoResponse.status === 401) { + throw new AuthorizationError(); + } + if (oriyoResponse.data.error) throw oriyoResponse.data; return new Response(JSON.stringify(oriyoResponse.data), { diff --git a/src/app/api/middlewares/auth.middleware.ts b/src/app/api/middlewares/auth.middleware.ts index 352ca76..bc71635 100644 --- a/src/app/api/middlewares/auth.middleware.ts +++ b/src/app/api/middlewares/auth.middleware.ts @@ -1,6 +1,7 @@ -import { has } from 'lodash'; import { NextRequest, NextResponse } from 'next/server'; +import { AuthorizationError } from '@/app/api-utlities/errors/authorization.error'; + export const authorizationMiddleware = (handler: Function, authorizationTokenKey: string) => async (req: NextRequest, ...args: any[]) => { @@ -16,7 +17,7 @@ export const authorizationMiddleware = try { return await handler(req, requestedToken, ...args); } catch (error) { - if (has(error, 'code') && error.code === 401) { + if (error instanceof AuthorizationError) { const response = NextResponse.json( { message: 'Authorization session was timed out' }, { status: 401 }, diff --git a/src/entities/transactions/model/types.ts b/src/entities/transactions/model/types.ts index 02cc3c8..5ceb9b1 100644 --- a/src/entities/transactions/model/types.ts +++ b/src/entities/transactions/model/types.ts @@ -1,6 +1,5 @@ export interface TransactionResponse { transactions: Transaction[]; - card_id: string; current_page: number; limit: number; total_records: number; diff --git a/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx b/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx index 977b5fc..912c887 100644 --- a/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx +++ b/src/pages-templates/(dashboard)/corporate-dashboard/index.tsx @@ -25,7 +25,7 @@ import { TransactionsTable } from '@/widgets/transactions-table'; export function CorporateDashboard() { const { t } = useTextController(); - const { data, isLoading } = useFetchMyCorporateInfoQuery({}); + const { data } = useFetchMyCorporateInfoQuery({}); const [request, setTransactionFetchRequest] = useState({ limit: 10, @@ -159,12 +159,18 @@ export function CorporateDashboard() { - {transactionsResponse && ( - - )} + diff --git a/src/pages-templates/(dashboard)/customer-dashboard/index.tsx b/src/pages-templates/(dashboard)/customer-dashboard/index.tsx index 7a0ad8d..c60743c 100644 --- a/src/pages-templates/(dashboard)/customer-dashboard/index.tsx +++ b/src/pages-templates/(dashboard)/customer-dashboard/index.tsx @@ -148,12 +148,18 @@ export function CustomerDashboard() { - {transactionsResponse && ( - - )} + diff --git a/src/widgets/transactions-table.tsx b/src/widgets/transactions-table.tsx index 34bc0d2..9a90181 100644 --- a/src/widgets/transactions-table.tsx +++ b/src/widgets/transactions-table.tsx @@ -2,7 +2,7 @@ import { format } from 'date-fns'; import { ru } from 'date-fns/locale'; -import { CalendarIcon } from 'lucide-react'; +import { CalendarIcon, X } from 'lucide-react'; import { useEffect, useState } from 'react'; import { @@ -46,8 +46,10 @@ export const TransactionsTable = ({ data, onChange, }: TransactionsTableProps) => { - const [startDate, setStartDate] = useState(undefined); - const [endDate, setEndDate] = useState(undefined); + const [startDate, setStartDate] = useState( + new Date(new Date().setMonth(new Date().getMonth() - 1)), + ); + const [endDate, setEndDate] = useState(new Date()); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage, setItemsPerPage] = useState(10); @@ -128,6 +130,9 @@ export const TransactionsTable = ({ initialFocus /> + @@ -155,16 +160,12 @@ export const TransactionsTable = ({ initialFocus /> + - -