refactor(FE-174): implement create, update, and delete grading methods in RecordingApi and update handlers

This commit is contained in:
rstubryan
2025-11-03 09:28:20 +07:00
parent c26e174885
commit 9a4d961dee
3 changed files with 61 additions and 20 deletions
@@ -29,7 +29,6 @@ import toast from 'react-hot-toast';
import Card from '@/components/Card'; import Card from '@/components/Card';
import StepItem from '@/components/steps/StepItem'; import StepItem from '@/components/steps/StepItem';
import { useModal } from '@/components/Modal';
import { useGradingFormHandlers } from './useGradingFormHandlers'; import { useGradingFormHandlers } from './useGradingFormHandlers';
interface GradingFormProps { interface GradingFormProps {
@@ -19,14 +19,15 @@ export const useGradingFormHandlers = (gradingId?: number) => {
const createGradingHandler = useCallback( const createGradingHandler = useCallback(
async (payload: CreateGradingPayload) => { async (payload: CreateGradingPayload) => {
const res = await RecordingApi.customRequest('gradings', { const res = (await RecordingApi.createGrading(payload)) as
method: 'POST', | BaseApiResponse<unknown>
payload, | undefined;
}) as BaseApiResponse<unknown>;
if (isResponseError(res)) { if (!res || isResponseError(res)) {
setRecordingFormErrorMessage(res.message); setRecordingFormErrorMessage(res?.message || 'Failed to add Grading');
return; return;
} }
toast.success(res?.message || 'Successfully added Grading!'); toast.success(res?.message || 'Successfully added Grading!');
router.push('/production/recording'); router.push('/production/recording');
}, },
@@ -35,12 +36,14 @@ export const useGradingFormHandlers = (gradingId?: number) => {
const updateGradingHandler = useCallback( const updateGradingHandler = useCallback(
async (gradingId: number, payload: UpdateGradingPayload) => { async (gradingId: number, payload: UpdateGradingPayload) => {
const res = await RecordingApi.customRequest(`gradings/${gradingId}`, { const res = (await RecordingApi.updateGrading(gradingId, payload)) as
method: 'PUT', | BaseApiResponse<unknown>
payload, | undefined;
}) as BaseApiResponse<unknown>;
if (isResponseError(res)) { if (!res || isResponseError(res)) {
setRecordingFormErrorMessage(res.message); setRecordingFormErrorMessage(
res?.message || 'Failed to update Grading'
);
return; return;
} }
toast.success(res?.message || 'Successfully updated Grading!'); toast.success(res?.message || 'Successfully updated Grading!');
@@ -59,17 +62,21 @@ export const useGradingFormHandlers = (gradingId?: number) => {
setIsDeleteLoading(true); setIsDeleteLoading(true);
try { try {
const res = await RecordingApi.customRequest(`gradings/${gradingId}`, { const res = (await RecordingApi.deleteGrading(gradingId)) as
method: 'DELETE', | BaseApiResponse<unknown>
}) as BaseApiResponse<unknown>; | undefined;
if (isResponseError(res)) {
setRecordingFormErrorMessage(res.message); if (!res || isResponseError(res)) {
setRecordingFormErrorMessage(
res?.message || 'Failed to delete Grading'
);
return; return;
} }
deleteModal.closeModal(); deleteModal.closeModal();
toast.success(res?.message || 'Successfully delete Grading!'); toast.success(res?.message || 'Successfully delete Grading!');
router.push('/production/recording'); router.push('/production/recording');
} catch (error) { } catch (err) {
console.error(err);
setRecordingFormErrorMessage('Failed to delete Grading'); setRecordingFormErrorMessage('Failed to delete Grading');
} finally { } finally {
setIsDeleteLoading(false); setIsDeleteLoading(false);
@@ -85,4 +92,4 @@ export const useGradingFormHandlers = (gradingId?: number) => {
deleteRecordingClickHandler, deleteRecordingClickHandler,
confirmationModalDeleteClickHandler, confirmationModalDeleteClickHandler,
}; };
}; };
+35
View File
@@ -9,6 +9,8 @@ import {
CreateRecordingPayload, CreateRecordingPayload,
Recording, Recording,
UpdateRecordingPayload, UpdateRecordingPayload,
CreateGradingPayload,
UpdateGradingPayload,
} from '@/types/api/production/recording'; } from '@/types/api/production/recording';
import { import {
Chickin, Chickin,
@@ -59,6 +61,39 @@ export class RecordingService extends BaseApiService<
}, },
}); });
} }
async createGrading(
payload: CreateGradingPayload
): Promise<BaseApiResponse<unknown> | undefined> {
return await this.customRequest<BaseApiResponse<unknown>>('gradings', {
method: 'POST',
payload,
});
}
async updateGrading(
gradingId: number,
payload: UpdateGradingPayload
): Promise<BaseApiResponse<unknown> | undefined> {
return await this.customRequest<BaseApiResponse<unknown>>(
`gradings/${gradingId}`,
{
method: 'PUT',
payload,
}
);
}
async deleteGrading(
gradingId: number
): Promise<BaseApiResponse<unknown> | undefined> {
return await this.customRequest<BaseApiResponse<unknown>>(
`gradings/${gradingId}`,
{
method: 'DELETE',
}
);
}
} }
export const RecordingApi = new RecordingService('/production/recordings'); export const RecordingApi = new RecordingService('/production/recordings');