From 9a4d961deef4e58670e1fbb1b7b9dd48149a52ca Mon Sep 17 00:00:00 2001 From: rstubryan Date: Mon, 3 Nov 2025 09:28:20 +0700 Subject: [PATCH] refactor(FE-174): implement create, update, and delete grading methods in RecordingApi and update handlers --- .../recording/grading/form/GradingForm.tsx | 1 - .../grading/form/useGradingFormHandlers.ts | 45 +++++++++++-------- src/services/api/production.ts | 35 +++++++++++++++ 3 files changed, 61 insertions(+), 20 deletions(-) diff --git a/src/components/pages/production/recording/grading/form/GradingForm.tsx b/src/components/pages/production/recording/grading/form/GradingForm.tsx index 57e55f3d..4f41fc16 100644 --- a/src/components/pages/production/recording/grading/form/GradingForm.tsx +++ b/src/components/pages/production/recording/grading/form/GradingForm.tsx @@ -29,7 +29,6 @@ import toast from 'react-hot-toast'; import Card from '@/components/Card'; import StepItem from '@/components/steps/StepItem'; -import { useModal } from '@/components/Modal'; import { useGradingFormHandlers } from './useGradingFormHandlers'; interface GradingFormProps { diff --git a/src/components/pages/production/recording/grading/form/useGradingFormHandlers.ts b/src/components/pages/production/recording/grading/form/useGradingFormHandlers.ts index c24a644b..6cc5c8b0 100644 --- a/src/components/pages/production/recording/grading/form/useGradingFormHandlers.ts +++ b/src/components/pages/production/recording/grading/form/useGradingFormHandlers.ts @@ -19,14 +19,15 @@ export const useGradingFormHandlers = (gradingId?: number) => { const createGradingHandler = useCallback( async (payload: CreateGradingPayload) => { - const res = await RecordingApi.customRequest('gradings', { - method: 'POST', - payload, - }) as BaseApiResponse; - if (isResponseError(res)) { - setRecordingFormErrorMessage(res.message); + const res = (await RecordingApi.createGrading(payload)) as + | BaseApiResponse + | undefined; + + if (!res || isResponseError(res)) { + setRecordingFormErrorMessage(res?.message || 'Failed to add Grading'); return; } + toast.success(res?.message || 'Successfully added Grading!'); router.push('/production/recording'); }, @@ -35,12 +36,14 @@ export const useGradingFormHandlers = (gradingId?: number) => { const updateGradingHandler = useCallback( async (gradingId: number, payload: UpdateGradingPayload) => { - const res = await RecordingApi.customRequest(`gradings/${gradingId}`, { - method: 'PUT', - payload, - }) as BaseApiResponse; - if (isResponseError(res)) { - setRecordingFormErrorMessage(res.message); + const res = (await RecordingApi.updateGrading(gradingId, payload)) as + | BaseApiResponse + | undefined; + + if (!res || isResponseError(res)) { + setRecordingFormErrorMessage( + res?.message || 'Failed to update Grading' + ); return; } toast.success(res?.message || 'Successfully updated Grading!'); @@ -59,17 +62,21 @@ export const useGradingFormHandlers = (gradingId?: number) => { setIsDeleteLoading(true); try { - const res = await RecordingApi.customRequest(`gradings/${gradingId}`, { - method: 'DELETE', - }) as BaseApiResponse; - if (isResponseError(res)) { - setRecordingFormErrorMessage(res.message); + const res = (await RecordingApi.deleteGrading(gradingId)) as + | BaseApiResponse + | undefined; + + if (!res || isResponseError(res)) { + setRecordingFormErrorMessage( + res?.message || 'Failed to delete Grading' + ); return; } deleteModal.closeModal(); toast.success(res?.message || 'Successfully delete Grading!'); router.push('/production/recording'); - } catch (error) { + } catch (err) { + console.error(err); setRecordingFormErrorMessage('Failed to delete Grading'); } finally { setIsDeleteLoading(false); @@ -85,4 +92,4 @@ export const useGradingFormHandlers = (gradingId?: number) => { deleteRecordingClickHandler, confirmationModalDeleteClickHandler, }; -}; \ No newline at end of file +}; diff --git a/src/services/api/production.ts b/src/services/api/production.ts index 788b9eb7..a2853803 100644 --- a/src/services/api/production.ts +++ b/src/services/api/production.ts @@ -9,6 +9,8 @@ import { CreateRecordingPayload, Recording, UpdateRecordingPayload, + CreateGradingPayload, + UpdateGradingPayload, } from '@/types/api/production/recording'; import { Chickin, @@ -59,6 +61,39 @@ export class RecordingService extends BaseApiService< }, }); } + + async createGrading( + payload: CreateGradingPayload + ): Promise | undefined> { + return await this.customRequest>('gradings', { + method: 'POST', + payload, + }); + } + + async updateGrading( + gradingId: number, + payload: UpdateGradingPayload + ): Promise | undefined> { + return await this.customRequest>( + `gradings/${gradingId}`, + { + method: 'PUT', + payload, + } + ); + } + + async deleteGrading( + gradingId: number + ): Promise | undefined> { + return await this.customRequest>( + `gradings/${gradingId}`, + { + method: 'DELETE', + } + ); + } } export const RecordingApi = new RecordingService('/production/recordings');