1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
"use server"
/**
* MDG 마이그레이션 진행되지 않은 상태라 PLM DB를 싱크해 사용했으므로, 추후 수정 필요
* PLM 쪽으로는 업데이트 불가능하므로, 최초 1회 마이그레이션한 데이터만 사용할 것임
* node-cron 으로 PLM 데이터 동기화할 필요도 없다는 얘기
*/
import { revalidateTag } from "next/cache"
import { vendorMdgService, type VendorUpdateData } from "./mdg-service"
import { z } from "zod"
// 벤더 업데이트 데이터 스키마
const vendorUpdateSchema = z.object({
vendorId: z.string().min(1, "Vendor ID is required"),
updateData: z.object({
VNDRNM_1: z.string().optional(),
VNDRNM_2: z.string().optional(),
VNDRNM_ABRV_1: z.string().optional(),
BIZR_NO: z.string().optional(),
CO_REG_NO: z.string().optional(),
CO_VLM: z.string().optional(),
REPR_NM: z.string().optional(),
REP_TEL_NO: z.string().optional(),
REPR_RESNO: z.string().optional(),
REPRESENTATIVE_EMAIL: z.string().optional(),
BIZTP: z.string().optional(),
BIZCON: z.string().optional(),
NTN_CD: z.string().optional(),
ADR_1: z.string().optional(),
ADR_2: z.string().optional(),
POSTAL_CODE: z.string().optional(),
ADDR_DETAIL_1: z.string().optional(),
})
})
export type VendorUpdateInput = z.infer<typeof vendorUpdateSchema>
/**
* MDG 벤더 기본 정보 업데이트 서버 액션
*/
export async function updateMdgVendorBasicInfo(input: VendorUpdateInput) {
try {
// 입력 데이터 검증
const validatedData = vendorUpdateSchema.parse(input)
// 벤더 ID로 벤더 코드 조회
const vendorCode = await vendorMdgService.getVendorCodeByVendorId(validatedData.vendorId)
if (!vendorCode) {
return {
success: false,
error: "벤더를 찾을 수 없습니다."
}
}
// MDG 서비스를 통해 벤더 정보 업데이트
const success = await vendorMdgService.updateVendorBasicInfo(
vendorCode,
validatedData.updateData
)
if (success) {
// 캐시 무효화
revalidateTag(`vendor-details-${validatedData.vendorId}`)
revalidateTag("vendors")
return {
success: true,
message: "벤더 정보가 성공적으로 업데이트되었습니다."
}
} else {
return {
success: false,
error: "벤더 정보 업데이트에 실패했습니다."
}
}
} catch (error) {
console.error("MDG 벤더 정보 업데이트 중 오류:", error)
if (error instanceof z.ZodError) {
return {
success: false,
error: `입력 데이터 오류: ${error.errors[0].message}`
}
}
return {
success: false,
error: error instanceof Error ? error.message : "알 수 없는 오류가 발생했습니다."
}
}
}
|