diff --git a/backend/src/modules/master/master.controller.ts b/backend/src/modules/master/master.controller.ts index 25afb08..89f67e9 100644 --- a/backend/src/modules/master/master.controller.ts +++ b/backend/src/modules/master/master.controller.ts @@ -93,6 +93,16 @@ export class MasterController { return this.masterService.deleteDiscipline(id); } + @Patch('disciplines/:id') + @RequirePermission('master_data.manage') + @ApiOperation({ summary: 'Update a discipline' }) + updateDiscipline( + @Param('id', ParseIntPipe) id: number, + @Body() dto: Partial & { contractId?: number | string } + ) { + return this.masterService.updateDiscipline(id, dto); + } + // --- Sub Types --- @Get('sub-types') @ApiOperation({ summary: 'Get all sub-types' }) diff --git a/backend/src/modules/master/master.service.ts b/backend/src/modules/master/master.service.ts index 5f01f8f..d5b0c38 100644 --- a/backend/src/modules/master/master.service.ts +++ b/backend/src/modules/master/master.service.ts @@ -206,6 +206,25 @@ export class MasterService { return { deleted: true }; } + async updateDiscipline( + id: number, + dto: Partial & { contractId?: number | string } + ) { + const discipline = await this.disciplineRepo.findOne({ where: { id } }); + if (!discipline) + throw new NotFoundException(`Discipline ID ${id} not found`); + + // Resolve contractId if provided + if (dto.contractId) { + dto.contractId = await this.uuidResolver.resolveContractId( + dto.contractId + ); + } + + Object.assign(discipline, dto); + return this.disciplineRepo.save(discipline); + } + // ================================================================= // 📑 Sub-Types Logic // ================================================================= diff --git a/frontend/app/(admin)/admin/doc-control/numbering/[id]/edit/page.tsx b/frontend/app/(admin)/admin/doc-control/numbering/[id]/edit/page.tsx index d1baf5a..d3ec23d 100644 --- a/frontend/app/(admin)/admin/doc-control/numbering/[id]/edit/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/numbering/[id]/edit/page.tsx @@ -32,7 +32,7 @@ export default function EditTemplatePage() { const { data: disciplines = [] } = useDisciplines(contractId); const selectedProjectName = - projects.find((p: { id?: number; publicId?: string; projectCode: string; projectName: string }) => + (projects as Array<{ id?: number; publicId?: string; projectCode: string; projectName: string }>).find((p) => String(p.publicId ?? p.id) === String(projectId)) ?.projectName || 'LCBP3'; diff --git a/frontend/app/(admin)/admin/doc-control/numbering/new/page.tsx b/frontend/app/(admin)/admin/doc-control/numbering/new/page.tsx index c74bbac..ed57108 100644 --- a/frontend/app/(admin)/admin/doc-control/numbering/new/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/numbering/new/page.tsx @@ -22,7 +22,7 @@ export default function NewTemplatePage() { const { data: disciplines = [] } = useDisciplines(contractId); const selectedProjectName = - projects.find((p: { id?: number; publicId?: string; projectName: string }) => + (projects as Array<{ id?: number; publicId?: string; projectName: string }>).find((p) => String(p.publicId ?? p.id) === String(projectId))?.projectName || 'LCBP3'; const handleSave = async (data: Partial) => { diff --git a/frontend/app/(admin)/admin/doc-control/projects/page.tsx b/frontend/app/(admin)/admin/doc-control/projects/page.tsx index ec67cf9..077b1da 100644 --- a/frontend/app/(admin)/admin/doc-control/projects/page.tsx +++ b/frontend/app/(admin)/admin/doc-control/projects/page.tsx @@ -33,12 +33,12 @@ import { import { Skeleton } from '@/components/ui/skeleton'; interface Project { - publicId: string; // ADR-019: uuid exposed as 'publicId' + publicId: string; projectCode: string; projectName: string; isActive: boolean; - createdAt: string; - updatedAt: string; + createdAt?: string; + updatedAt?: string; } const projectSchema = z.object({ diff --git a/frontend/app/(dashboard)/drawings/page.tsx b/frontend/app/(dashboard)/drawings/page.tsx index 6c4b94f..20cd152 100644 --- a/frontend/app/(dashboard)/drawings/page.tsx +++ b/frontend/app/(dashboard)/drawings/page.tsx @@ -40,7 +40,7 @@ export default function DrawingsPage() { )} - {projects.map((project: { id?: number; publicId?: string; projectName: string; projectCode: string }) => ( + {(projects as Array<{ id?: number; publicId?: string; projectName: string; projectCode: string }>).map((project) => ( {project.projectCode} - {project.projectName} diff --git a/frontend/hooks/use-projects.ts b/frontend/hooks/use-projects.ts index e5ed999..fe87ead 100644 --- a/frontend/hooks/use-projects.ts +++ b/frontend/hooks/use-projects.ts @@ -4,6 +4,15 @@ import { CreateProjectDto, UpdateProjectDto, SearchProjectDto } from '@/types/dt import { toast } from 'sonner'; import { getApiErrorMessage } from '@/types/api-error'; +export interface Project { + publicId: string; + projectCode: string; + projectName: string; + isActive: boolean; + createdAt?: string; + updatedAt?: string; +} + export const projectKeys = { all: ['projects'] as const, list: (params: SearchProjectDto) => [...projectKeys.all, 'list', params] as const, @@ -11,7 +20,7 @@ export const projectKeys = { }; export function useProjects(params?: SearchProjectDto) { - return useQuery({ + return useQuery({ queryKey: projectKeys.list(params || {}), queryFn: () => projectService.getAll(params), });