Files
lcbp3/frontend/lib/services/correspondence.service.ts
T
admin aa82b890a5
CI / CD Pipeline / build (push) Failing after 17m3s
CI / CD Pipeline / deploy (push) Has been skipped
260324:2133 Refactor correspondence & rfa
2026-03-24 21:33:59 +07:00

118 lines
4.0 KiB
TypeScript

// File: lib/services/correspondence.service.ts
import apiClient from '@/lib/api/client';
import { SearchCorrespondenceDto } from '@/types/dto/correspondence/search-correspondence.dto';
import { CreateCorrespondenceDto } from '@/types/dto/correspondence/create-correspondence.dto';
// Import DTO ใหม่
import { SubmitCorrespondenceDto } from '@/types/dto/correspondence/submit-correspondence.dto';
import { WorkflowActionDto } from '@/types/dto/correspondence/workflow-action.dto';
import { AddReferenceDto } from '@/types/dto/correspondence/add-reference.dto';
export const correspondenceService = {
// ... (getAll, getById, create, update, delete เดิมคงไว้) ...
getAll: async (params?: SearchCorrespondenceDto) => {
const response = await apiClient.get('/correspondences', { params });
return response.data;
},
getByUuid: async (uuid: string) => {
const response = await apiClient.get(`/correspondences/${uuid}`);
return response.data.data; // Unwrap NestJS Interceptor 'data' wrapper
},
create: async (data: CreateCorrespondenceDto) => {
const response = await apiClient.post('/correspondences', data);
return response.data;
},
update: async (uuid: string, data: Partial<CreateCorrespondenceDto>) => {
const response = await apiClient.put(`/correspondences/${uuid}`, data);
return response.data;
},
delete: async (uuid: string) => {
const response = await apiClient.delete(`/correspondences/${uuid}`);
return response.data;
},
cancel: async (uuid: string, reason: string) => {
const response = await apiClient.delete(`/correspondences/${uuid}`, {
data: { reason },
});
return response.data;
},
// --- 🔥 New Methods ---
/**
* ส่งเอกสาร (Submit) เพื่อเริ่ม Workflow
*/
submit: async (uuid: string, data: SubmitCorrespondenceDto) => {
const response = await apiClient.post(`/correspondences/${uuid}/submit`, data);
return response.data;
},
/**
* ดำเนินการ Workflow (เช่น Approve, Reject) ในขั้นตอนปัจจุบัน
*/
processWorkflow: async (uuid: string, data: WorkflowActionDto) => {
const response = await apiClient.post(`/correspondences/${uuid}/workflow`, data);
return response.data;
},
/**
* ดึงรายการเอกสารอ้างอิง
*/
getReferences: async (uuid: string) => {
const response = await apiClient.get(`/correspondences/${uuid}/references`);
return response.data;
},
/**
* เพิ่มเอกสารอ้างอิง
*/
addReference: async (uuid: string, data: AddReferenceDto) => {
const response = await apiClient.post(`/correspondences/${uuid}/references`, data);
return response.data;
},
/**
* ลบเอกสารอ้างอิง (ใช้ path param ตาม backend: DELETE /:uuid/references/:targetUuid)
*/
removeReference: async (uuid: string, targetUuid: string) => {
const response = await apiClient.delete(`/correspondences/${uuid}/references/${targetUuid}`);
return response.data;
},
/**
* ดึง Tags ของ correspondence
*/
getTags: async (uuid: string) => {
const response = await apiClient.get(`/correspondences/${uuid}/tags`);
return response.data;
},
/**
* เพิ่ม Tag ให้ correspondence
*/
addTag: async (uuid: string, tagId: number) => {
const response = await apiClient.post(`/correspondences/${uuid}/tags/${tagId}`);
return response.data;
},
/**
* ลบ Tag ออกจาก correspondence
*/
removeTag: async (uuid: string, tagId: number) => {
const response = await apiClient.delete(`/correspondences/${uuid}/tags/${tagId}`);
return response.data;
},
/**
* Preview Document Number
*/
previewNumber: async (data: Partial<CreateCorrespondenceDto>) => {
const response = await apiClient.post('/correspondences/preview-number', data);
return response.data;
},
};