260316:1319 Refactor to NestJS 11 #1
Build and Deploy / deploy (push) Successful in 3m25s

This commit is contained in:
admin
2026-03-16 13:19:01 +07:00
parent 25c50792e7
commit a75ba3105f
5 changed files with 39 additions and 38 deletions
@@ -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<string, unknown>) => masterDataService.createDiscipline(data as unknown as Parameters<typeof masterDataService.createDiscipline>[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() {
<SelectItem value="all">All Contracts</SelectItem>
{contracts.map((c) => (
<SelectItem key={c.id} value={c.id.toString()}>
{c.contractName} ({c.contractNo})
{c.contractName} ({c.contractCode})
</SelectItem>
))}
</SelectContent>
@@ -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() {
<SelectItem value="all">All Contracts</SelectItem>
{contracts.map((c) => (
<SelectItem key={c.id} value={c.id.toString()}>
{c.contractName} ({c.contractNo})
{c.contractName} ({c.contractCode})
</SelectItem>
))}
</SelectContent>
@@ -57,6 +57,7 @@ export default function TagsPage() {
const formatPayload = (data: Record<string, unknown>) => {
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 {
+22 -22
View File
@@ -125,18 +125,18 @@ export const numberingApi = {
* Get all templates
*/
getTemplates: async (): Promise<NumberingTemplate[]> => {
const res = await apiClient.get<NumberingTemplate[]>('/admin/document-numbering/templates');
return res.data;
const res = await apiClient.get<any>('/admin/document-numbering/templates');
return res.data.data || res.data;
},
/**
* Get templates for a specific project
*/
getTemplatesByProject: async (projectId: number): Promise<NumberingTemplate[]> => {
const res = await apiClient.get<NumberingTemplate[]>(
const res = await apiClient.get<any>(
`/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<NumberingTemplate>): Promise<NumberingTemplate> => {
const res = await apiClient.post<NumberingTemplate>(
const res = await apiClient.post<any>(
'/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<DocumentNumberAudit[]> => {
const res = await apiClient.get<DocumentNumberAudit[]>(
const res = await apiClient.get<any>(
`/document-numbering/logs/audit?limit=${limit}`
);
return res.data;
return res.data.data || res.data;
},
/**
* Get error logs
*/
getErrorLogs: async (limit = 100): Promise<DocumentNumberError[]> => {
const res = await apiClient.get<DocumentNumberError[]>(
const res = await apiClient.get<any>(
`/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<any>(
'/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<any>(
'/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<any>(
'/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<any>(
'/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<any>(
'/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<NumberSequence[]>(url);
return res.data;
const res = await apiClient.get<any>(url);
return res.data.data || res.data;
},
/**
@@ -119,12 +119,12 @@ export const drawingMasterDataService = {
async createContractVolume(data: CreateContractVolumeDto): Promise<ContractVolume> {
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<CreateContractVolumeDto>): Promise<ContractVolume> {
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<void> {
@@ -141,12 +141,12 @@ export const drawingMasterDataService = {
async createContractCategory(data: CreateContractCategoryDto): Promise<ContractCategory> {
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<CreateContractCategoryDto>): Promise<ContractCategory> {
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<void> {
@@ -163,7 +163,7 @@ export const drawingMasterDataService = {
async createContractSubCategory(data: CreateContractSubCategoryDto): Promise<ContractSubCategory> {
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<CreateContractSubCategoryDto>
): Promise<ContractSubCategory> {
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<void> {
@@ -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<void> {
@@ -212,12 +212,12 @@ export const drawingMasterDataService = {
async createShopMainCategory(data: CreateShopMainCategoryDto): Promise<ShopMainCategory> {
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<CreateShopMainCategoryDto>): Promise<ShopMainCategory> {
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<void> {
@@ -234,12 +234,12 @@ export const drawingMasterDataService = {
async createShopSubCategory(data: CreateShopSubCategoryDto): Promise<ShopSubCategory> {
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<CreateShopSubCategoryDto>): Promise<ShopSubCategory> {
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<void> {