From 4f7d9bb80ccab06d49595544e18e1a060fd50806 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 16 Mar 2026 15:24:26 +0700 Subject: [PATCH] 260316:1524 Refactor to UUID --- .../admin/doc-control/contracts/page.tsx | 19 ++++++++++--------- frontend/hooks/use-master-data.ts | 10 +++++----- frontend/types/dto/contract/contract.dto.ts | 4 ++-- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/frontend/app/(admin)/admin/doc-control/contracts/page.tsx b/frontend/app/(admin)/admin/doc-control/contracts/page.tsx index 1c4192a..60bd46f 100644 --- a/frontend/app/(admin)/admin/doc-control/contracts/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/contracts/page.tsx @@ -50,14 +50,13 @@ import { SearchContractDto, CreateContractDto, UpdateContractDto } from "@/types import { AxiosError } from "axios"; interface Project { - id: number; + id: string; // ADR-019: uuid exposed as 'id' projectCode: string; projectName: string; } interface Contract { - uuid: string; - id?: number; // Excluded from API responses (ADR-019) + id: string; // ADR-019: uuid exposed as 'id' contractCode: string; contractName: string; projectId: number; @@ -65,6 +64,7 @@ interface Contract { startDate?: string; endDate?: string; project?: { + id: string; // ADR-019: project uuid exposed as 'id' projectCode: string; projectName: string; } @@ -145,7 +145,7 @@ export default function ContractsPage() { const confirmDelete = () => { if (contractToDelete) { - deleteContract.mutate(contractToDelete.uuid, { + deleteContract.mutate(contractToDelete.id, { onSuccess: () => { setDeleteDialogOpen(false); setContractToDelete(null); @@ -213,9 +213,9 @@ export default function ContractsPage() { ]; const handleEdit = (contract: Contract) => { - setEditingUuid(contract.uuid); - // ADR-019: projectId might be a number or a UUID string from the entity response - const pId = String((contract as any).id || (contract as any).projectId || ""); + setEditingUuid(contract.id); + // ADR-019: project.id is the project's UUID (exposed via @Expose) + const pId = contract.project?.id || ''; reset({ contractCode: contract.contractCode, contractName: contract.contractName, @@ -242,10 +242,11 @@ export default function ContractsPage() { const onSubmit = (data: ContractFormData) => { // ADR-019: Resolve projectId (ID or UUID) + // ADR-019: projectId is now a UUID string — backend resolveProjectId handles both const submitData = { ...data, - projectId: isNaN(Number(data.projectId)) ? data.projectId : Number(data.projectId), - } as any; + projectId: data.projectId, + }; if (editingUuid) { updateContract.mutate({ uuid: editingUuid, data: submitData }); diff --git a/frontend/hooks/use-master-data.ts b/frontend/hooks/use-master-data.ts index 41ad909..005ff55 100644 --- a/frontend/hooks/use-master-data.ts +++ b/frontend/hooks/use-master-data.ts @@ -15,7 +15,7 @@ export const masterDataKeys = { all: ['masterData'] as const, organizations: () => [...masterDataKeys.all, 'organizations'] as const, correspondenceTypes: () => [...masterDataKeys.all, 'correspondenceTypes'] as const, - disciplines: (contractId?: number) => [...masterDataKeys.all, 'disciplines', contractId] as const, + disciplines: (contractId?: number | string) => [...masterDataKeys.all, 'disciplines', contractId] as const, }; export function useOrganizations(params?: SearchOrganizationDto) { @@ -74,7 +74,7 @@ export function useDeleteOrganization() { }); } -export function useDisciplines(contractId?: number) { +export function useDisciplines(contractId?: number | string) { return useQuery({ queryKey: masterDataKeys.disciplines(contractId), queryFn: () => masterDataService.getDisciplines(contractId), @@ -88,10 +88,10 @@ export function useProjects(isActive: boolean = true) { }); } -export function useContracts(projectId: number = 1) { +export function useContracts(projectId?: number | string) { return useQuery({ - queryKey: ['contracts', projectId], - queryFn: () => contractService.getAll({ projectId }), + queryKey: ['contracts', projectId ?? 'all'], + queryFn: () => contractService.getAll(projectId ? { projectId } : undefined), }); } diff --git a/frontend/types/dto/contract/contract.dto.ts b/frontend/types/dto/contract/contract.dto.ts index d092fff..5370669 100644 --- a/frontend/types/dto/contract/contract.dto.ts +++ b/frontend/types/dto/contract/contract.dto.ts @@ -1,7 +1,7 @@ export interface CreateContractDto { contractCode: string; contractName: string; - projectId: number; + projectId: number | string; description?: string; startDate?: string; endDate?: string; @@ -11,7 +11,7 @@ export type UpdateContractDto = Partial; export interface SearchContractDto { search?: string; - projectId?: number; + projectId?: number | string; page?: number; limit?: number; }