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 StepItem from '@/components/steps/StepItem';
import { useModal } from '@/components/Modal';
import { useGradingFormHandlers } from './useGradingFormHandlers';
interface GradingFormProps {
@@ -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<unknown>;
if (isResponseError(res)) {
setRecordingFormErrorMessage(res.message);
const res = (await RecordingApi.createGrading(payload)) as
| BaseApiResponse<unknown>
| 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<unknown>;
if (isResponseError(res)) {
setRecordingFormErrorMessage(res.message);
const res = (await RecordingApi.updateGrading(gradingId, payload)) as
| BaseApiResponse<unknown>
| 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<unknown>;
if (isResponseError(res)) {
setRecordingFormErrorMessage(res.message);
const res = (await RecordingApi.deleteGrading(gradingId)) as
| BaseApiResponse<unknown>
| 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,
};
};
};
+35
View File
@@ -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<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');