// File: lib/services/drawing-master-data.service.ts import apiClient from "@/lib/api/client"; // =========================== // Contract Drawing Volumes // =========================== export interface ContractVolume { id: number; projectId: number; volumeCode: string; volumeName: string; description?: string; sortOrder: number; } export interface CreateContractVolumeDto { projectId: number; volumeCode: string; volumeName: string; description?: string; sortOrder: number; } // =========================== // Contract Drawing Categories // =========================== export interface ContractCategory { id: number; projectId: number; catCode: string; catName: string; description?: string; sortOrder: number; } export interface CreateContractCategoryDto { projectId: number; catCode: string; catName: string; description?: string; sortOrder: number; } // =========================== // Contract Drawing Sub-categories // =========================== export interface ContractSubCategory { id: number; projectId: number; subCatCode: string; subCatName: string; description?: string; sortOrder: number; } export interface CreateContractSubCategoryDto { projectId: number; subCatCode: string; subCatName: string; description?: string; sortOrder: number; } // =========================== // Shop Drawing Main Categories // =========================== export interface ShopMainCategory { id: number; projectId: number; mainCategoryCode: string; mainCategoryName: string; description?: string; isActive: boolean; sortOrder: number; } export interface CreateShopMainCategoryDto { projectId: number; mainCategoryCode: string; mainCategoryName: string; description?: string; isActive?: boolean; sortOrder: number; } // =========================== // Shop Drawing Sub-categories // =========================== export interface ShopSubCategory { id: number; projectId: number; subCategoryCode: string; subCategoryName: string; description?: string; isActive: boolean; sortOrder: number; } export interface CreateShopSubCategoryDto { projectId: number; subCategoryCode: string; subCategoryName: string; description?: string; isActive?: boolean; sortOrder: number; } // =========================== // Service // =========================== export const drawingMasterDataService = { // --- Contract Volumes --- async getContractVolumes(projectId: number): Promise { const response = await apiClient.get(`/drawings/master-data/contract/volumes`, { params: { projectId }, }); return response.data; }, async createContractVolume(data: CreateContractVolumeDto): Promise { const response = await apiClient.post(`/drawings/master-data/contract/volumes`, data); return response.data; }, async updateContractVolume(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/contract/volumes/${id}`, data); return response.data; }, async deleteContractVolume(id: number): Promise { await apiClient.delete(`/drawings/master-data/contract/volumes/${id}`); }, // --- Contract Categories --- async getContractCategories(projectId: number): Promise { const response = await apiClient.get(`/drawings/master-data/contract/categories`, { params: { projectId }, }); return response.data; }, async createContractCategory(data: CreateContractCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/contract/categories`, data); return response.data; }, async updateContractCategory(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/contract/categories/${id}`, data); return response.data; }, async deleteContractCategory(id: number): Promise { await apiClient.delete(`/drawings/master-data/contract/categories/${id}`); }, // --- Contract Sub-categories --- async getContractSubCategories(projectId: number): Promise { const response = await apiClient.get(`/drawings/master-data/contract/sub-categories`, { params: { projectId }, }); return response.data; }, async createContractSubCategory(data: CreateContractSubCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/contract/sub-categories`, data); return response.data; }, async updateContractSubCategory(id: number, data: Partial): Promise { const response = await apiClient.patch(`/drawings/master-data/contract/sub-categories/${id}`, data); return response.data; }, async deleteContractSubCategory(id: number): Promise { await apiClient.delete(`/drawings/master-data/contract/sub-categories/${id}`); }, // --- Contract Category Mappings --- async getContractMappings( projectId: number, categoryId?: number ): Promise<{ id: number; subCategory: ContractSubCategory; category: ContractCategory }[]> { const response = await apiClient.get(`/drawings/master-data/contract/mappings`, { params: { projectId, categoryId }, }); return response.data; }, async createContractMapping(data: { projectId: number; categoryId: number; subCategoryId: number; }): Promise<{ id: number }> { const response = await apiClient.post(`/drawings/master-data/contract/mappings`, data); return response.data; }, async deleteContractMapping(id: number): Promise { await apiClient.delete(`/drawings/master-data/contract/mappings/${id}`); }, // --- Shop Main Categories --- async getShopMainCategories(projectId: number): Promise { const response = await apiClient.get(`/drawings/master-data/shop/main-categories`, { params: { projectId }, }); return response.data; }, async createShopMainCategory(data: CreateShopMainCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/shop/main-categories`, data); return 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; }, async deleteShopMainCategory(id: number): Promise { await apiClient.delete(`/drawings/master-data/shop/main-categories/${id}`); }, // --- Shop Sub-categories --- async getShopSubCategories(projectId: number, mainCategoryId?: number): Promise { const response = await apiClient.get(`/drawings/master-data/shop/sub-categories`, { params: { projectId, mainCategoryId }, }); return response.data; }, async createShopSubCategory(data: CreateShopSubCategoryDto): Promise { const response = await apiClient.post(`/drawings/master-data/shop/sub-categories`, data); return 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; }, async deleteShopSubCategory(id: number): Promise { await apiClient.delete(`/drawings/master-data/shop/sub-categories/${id}`); }, };