diff options
Diffstat (limited to 'lib/vendors/service.ts')
| -rw-r--r-- | lib/vendors/service.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/vendors/service.ts b/lib/vendors/service.ts index f4ba815c..e6a2a139 100644 --- a/lib/vendors/service.ts +++ b/lib/vendors/service.ts @@ -34,6 +34,8 @@ import { countVendorMaterials, selectVendorMaterials, insertVendorMaterial, + getVendorContactById, + updateVendorContactById, } from "./repository"; @@ -42,6 +44,7 @@ import type { GetVendorsSchema, GetVendorContactsSchema, CreateVendorContactSchema, + UpdateVendorContactSchema, GetVendorItemsSchema, CreateVendorItemSchema, GetRfqHistorySchema, @@ -635,6 +638,8 @@ export async function createVendorContact(input: CreateVendorContactSchema) { vendorId: input.vendorId, contactName: input.contactName, contactPosition: input.contactPosition || "", + contactDepartment: input.contactDepartment || "", + contactTask: input.contactTask || "", contactEmail: input.contactEmail, contactPhone: input.contactPhone || "", isPrimary: input.isPrimary || false, @@ -651,6 +656,35 @@ export async function createVendorContact(input: CreateVendorContactSchema) { } } +export async function updateVendorContact(id: number, input: UpdateVendorContactSchema) { + unstable_noStore(); // Next.js 서버 액션 캐싱 방지 + try { + const vendorContact = await getVendorContactById(id); + if (!vendorContact) { + return { data: null, error: "Contact not found" }; + } + + await db.transaction(async (tx) => { + // DB Update + await updateVendorContactById(tx, id, { + contactName: input.contactName, + contactPosition: input.contactPosition, + contactDepartment: input.contactDepartment, + contactTask: input.contactTask, + contactEmail: input.contactEmail, + contactPhone: input.contactPhone, + isPrimary: input.isPrimary, + }); + }); + + // 캐시 무효화 (협력업체 연락처 목록 등) + revalidateTag(`vendor-contacts-${vendorContact.vendorId}`); + + return { data: null, error: null }; + } catch (err) { + return { data: null, error: getErrorMessage(err) }; + } +} ///item |
