From a75ba3105f50b5db8eaa5cf918f292d944cc3e3d Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 16 Mar 2026 13:19:01 +0700 Subject: [PATCH] 260316:1319 Refactor to NestJS 11 #1 --- .../reference/disciplines/page.tsx | 6 +-- .../doc-control/reference/rfa-types/page.tsx | 4 +- .../admin/doc-control/reference/tags/page.tsx | 1 + frontend/lib/api/numbering.ts | 44 +++++++++---------- .../services/drawing-master-data.service.ts | 22 +++++----- 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx index a92f6dd..3a27bb8 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/disciplines/page.tsx @@ -44,7 +44,7 @@ export default function DisciplinesPage() { ]; const contractOptions = contracts.map((c) => ({ - label: `${c.contractName} (${c.contractNo})`, + label: `${c.contractName} (${c.contractCode})`, value: c.id, })); @@ -57,7 +57,7 @@ export default function DisciplinesPage() { queryKey={['disciplines', selectedContractId ?? 'all']} fetchFn={() => masterDataService.getDisciplines(selectedContractId ? parseInt(selectedContractId) : undefined)} createFn={(data: Record) => masterDataService.createDiscipline(data as unknown as Parameters[0])} - updateFn={(id, data) => Promise.reject('Not implemented yet')} // Update endpoint needs to be verified/added if missing + updateFn={(id, data) => Promise.reject('Not implemented yet')} deleteFn={(id) => masterDataService.deleteDiscipline(id)} columns={columns} filters={ @@ -73,7 +73,7 @@ export default function DisciplinesPage() { All Contracts {contracts.map((c) => ( - {c.contractName} ({c.contractNo}) + {c.contractName} ({c.contractCode}) ))} diff --git a/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx index ff4f5e8..2370bd4 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/rfa-types/page.tsx @@ -48,7 +48,7 @@ export default function RfaTypesPage() { ]; const contractOptions = contracts.map((c) => ({ - label: `${c.contractName} (${c.contractNo})`, + label: `${c.contractName} (${c.contractCode})`, value: c.id, })); @@ -76,7 +76,7 @@ export default function RfaTypesPage() { All Contracts {contracts.map((c) => ( - {c.contractName} ({c.contractNo}) + {c.contractName} ({c.contractCode}) ))} diff --git a/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx b/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx index e566bb4..fac1f03 100644 --- a/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/reference/tags/page.tsx @@ -57,6 +57,7 @@ export default function TagsPage() { const formatPayload = (data: Record) => { const payload = { ...data }; + // Backend entity uses project_id (underscore) per ADR-017/018 schema if (!payload.project_id || payload.project_id === "") { payload.project_id = null; } else { diff --git a/frontend/lib/api/numbering.ts b/frontend/lib/api/numbering.ts index 156d2c9..eebac45 100644 --- a/frontend/lib/api/numbering.ts +++ b/frontend/lib/api/numbering.ts @@ -125,18 +125,18 @@ export const numberingApi = { * Get all templates */ getTemplates: async (): Promise => { - const res = await apiClient.get('/admin/document-numbering/templates'); - return res.data; + const res = await apiClient.get('/admin/document-numbering/templates'); + return res.data.data || res.data; }, /** * Get templates for a specific project */ getTemplatesByProject: async (projectId: number): Promise => { - const res = await apiClient.get( + const res = await apiClient.get( `/admin/document-numbering/templates?projectId=${projectId}` ); - return res.data; + return res.data.data || res.data; }, /** @@ -151,11 +151,11 @@ export const numberingApi = { * Save (create or update) a template */ saveTemplate: async (dto: Partial): Promise => { - const res = await apiClient.post( + const res = await apiClient.post( '/admin/document-numbering/templates', dto ); - return res.data; + return res.data.data || res.data; }, /** @@ -173,30 +173,30 @@ export const numberingApi = { * Get audit logs */ getAuditLogs: async (limit = 100): Promise => { - const res = await apiClient.get( + const res = await apiClient.get( `/document-numbering/logs/audit?limit=${limit}` ); - return res.data; + return res.data.data || res.data; }, /** * Get error logs */ getErrorLogs: async (limit = 100): Promise => { - const res = await apiClient.get( + const res = await apiClient.get( `/document-numbering/logs/errors?limit=${limit}` ); - return res.data; + return res.data.data || res.data; }, /** * Get metrics (audit + errors combined) */ getMetrics: async (): Promise<{ audit: DocumentNumberAudit[]; errors: DocumentNumberError[] }> => { - const res = await apiClient.get<{ audit: DocumentNumberAudit[]; errors: DocumentNumberError[] }>( + const res = await apiClient.get( '/admin/document-numbering/metrics' ); - return res.data; + return res.data.data || res.data; }, // ---------------------------------------------------------- @@ -207,44 +207,44 @@ export const numberingApi = { * Manually override/set a counter value */ manualOverride: async (dto: ManualOverrideDto): Promise<{ success: boolean; message: string }> => { - const res = await apiClient.post<{ success: boolean; message: string }>( + const res = await apiClient.post( '/admin/document-numbering/manual-override', dto ); - return res.data; + return res.data.data || res.data; }, /** * Void a document number and generate replacement */ voidAndReplace: async (dto: VoidAndReplaceDto): Promise<{ newNumber: string; auditId: number }> => { - const res = await apiClient.post<{ newNumber: string; auditId: number }>( + const res = await apiClient.post( '/admin/document-numbering/void-and-replace', dto ); - return res.data; + return res.data.data || res.data; }, /** * Cancel/skip a document number */ cancelNumber: async (dto: CancelNumberDto): Promise<{ success: boolean }> => { - const res = await apiClient.post<{ success: boolean }>( + const res = await apiClient.post( '/admin/document-numbering/cancel', dto ); - return res.data; + return res.data.data || res.data; }, /** * Bulk import counter values */ bulkImport: async (items: BulkImportItem[]): Promise<{ imported: number; errors: string[] }> => { - const res = await apiClient.post<{ imported: number; errors: string[] }>( + const res = await apiClient.post( '/admin/document-numbering/bulk-import', items ); - return res.data; + return res.data.data || res.data; }, /** @@ -265,8 +265,8 @@ export const numberingApi = { const url = projectId ? `/document-numbering/sequences?projectId=${projectId}` : '/document-numbering/sequences'; - const res = await apiClient.get(url); - return res.data; + const res = await apiClient.get(url); + return res.data.data || res.data; }, /** diff --git a/frontend/lib/services/drawing-master-data.service.ts b/frontend/lib/services/drawing-master-data.service.ts index 799fb97..6cd554a 100644 --- a/frontend/lib/services/drawing-master-data.service.ts +++ b/frontend/lib/services/drawing-master-data.service.ts @@ -119,12 +119,12 @@ export const drawingMasterDataService = { async createContractVolume(data: CreateContractVolumeDto): Promise { const response = await apiClient.post(`/drawings/master-data/contract/volumes`, data); - return response.data; + return response.data?.data || response.data; }, async updateContractVolume(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/contract/volumes/${id}`, data); - return response.data; + return response.data?.data || response.data; }, async deleteContractVolume(id: number): Promise { @@ -141,12 +141,12 @@ export const drawingMasterDataService = { async createContractCategory(data: CreateContractCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/contract/categories`, data); - return response.data; + return response.data?.data || response.data; }, async updateContractCategory(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/contract/categories/${id}`, data); - return response.data; + return response.data?.data || response.data; }, async deleteContractCategory(id: number): Promise { @@ -163,7 +163,7 @@ export const drawingMasterDataService = { async createContractSubCategory(data: CreateContractSubCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/contract/sub-categories`, data); - return response.data; + return response.data?.data || response.data; }, async updateContractSubCategory( @@ -171,7 +171,7 @@ export const drawingMasterDataService = { data: Partial ): Promise { const response = await apiClient.patch(`/drawings/master-data/contract/sub-categories/${id}`, data); - return response.data; + return response.data?.data || response.data; }, async deleteContractSubCategory(id: number): Promise { @@ -195,7 +195,7 @@ export const drawingMasterDataService = { subCategoryId: number; }): Promise<{ id: number }> { const response = await apiClient.post(`/drawings/master-data/contract/mappings`, data); - return response.data; + return response.data?.data || response.data; }, async deleteContractMapping(id: number): Promise { @@ -212,12 +212,12 @@ export const drawingMasterDataService = { async createShopMainCategory(data: CreateShopMainCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/shop/main-categories`, data); - return response.data; + return response.data?.data || response.data; }, async updateShopMainCategory(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/shop/main-categories/${id}`, data); - return response.data; + return response.data?.data || response.data; }, async deleteShopMainCategory(id: number): Promise { @@ -234,12 +234,12 @@ export const drawingMasterDataService = { async createShopSubCategory(data: CreateShopSubCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/shop/sub-categories`, data); - return response.data; + return response.data?.data || response.data; }, async updateShopSubCategory(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/shop/sub-categories/${id}`, data); - return response.data; + return response.data?.data || response.data; }, async deleteShopSubCategory(id: number): Promise {