summaryrefslogtreecommitdiff
path: root/lib/vendors/mdg-actions.ts
blob: ac57aec4d5ff35a81dcd6da1427f94d44f781305 (plain)
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 : "알 수 없는 오류가 발생했습니다."
    }
  }
}