116 lines
3.0 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { loggerWrapper } from '@/libs/api-wrapper'
import { prisma } from '@/libs/prisma'
import { CommonCode } from '@/types/Inquiry'
async function getCommCode(request: NextRequest): Promise<NextResponse> {
try {
const searchParams = request.nextUrl.searchParams
const headId = searchParams.get('headId')
if (headId === 'QNA_CD') {
return getQnaCd()
}
// @ts-ignore
const commHeadData = await prisma.BC_COMM_H.findFirst({
where: {
HEAD_ID: headId,
},
select: {
HEAD_CD: true,
},
})
if (!commHeadData) {
return NextResponse.json({ error: `${headId}를 찾을 수 없습니다` }, { status: 404 })
}
if (headId === 'SALES_OFFICE_CD') {
return getSaleOffice(commHeadData.HEAD_CD)
}
// @ts-ignore
const roofMaterials: CommCode[] = await prisma.BC_COMM_L.findMany({
where: {
HEAD_CD: commHeadData.HEAD_CD,
},
select: {
HEAD_CD: true,
CODE: true,
CODE_JP: true,
},
orderBy: {
CODE: 'asc',
},
})
return NextResponse.json(roofMaterials)
} catch (error) {
console.error('❌ 데이터 조회 중 오류가 발생했습니다:', error)
return NextResponse.json({ error: '데이터 조회 중 오류가 발생했습니다' }, { status: 500 })
}
}
const getSaleOffice = async (headCode: string) => {
// @ts-ignore
const commCodeSaleOffice: CommCode[] = await prisma.BC_COMM_L.findMany({
where: {
HEAD_CD: headCode,
REF_NUM1: 1,
},
select: {
CODE: true,
CODE_JP: true,
REF_CHR1: true,
REF_NUM1: true,
},
})
return NextResponse.json(commCodeSaleOffice)
}
/**
* @description QNA 공통 코드 조회
* @returns {CommonCode[]} QNA 공통 코드 목록
*/
const getQnaCd = async () => {
// @ts-ignore
const headCdList: { HEAD_CD: string; HEAD_ID: string }[] = await prisma.BC_COMM_H.findMany({
where: {
OR: [{ HEAD_ID: { in: ['QNA_CLS_LRG_CD'] } }, { HEAD_ID: { in: ['QNA_CLS_MID_CD'] } }, { HEAD_ID: { in: ['QNA_CLS_SML_CD'] } }],
},
select: {
HEAD_CD: true,
HEAD_ID: true,
},
})
const result: CommonCode[] = []
// @ts-ignore
const commCodeQna: CommCode[] = await prisma.BC_COMM_L.findMany({
where: {
HEAD_CD: {
in: headCdList.map((item) => item.HEAD_CD).filter(Boolean),
},
},
select: {
HEAD_CD: true,
CODE: true,
CODE_JP: true,
REF_CHR1: true,
},
})
commCodeQna.forEach((item) => {
result.push({
// @ts-ignore
headCd: item.HEAD_CD,
// @ts-ignore
headId: headCdList.find((headCd) => headCd.HEAD_CD === item.HEAD_CD)?.HEAD_ID ?? '',
// @ts-ignore
code: item.CODE,
// @ts-ignore
name: item.CODE_JP,
// @ts-ignore
refChar1: item.REF_CHR1 ?? '',
})
})
return NextResponse.json(result)
}
export const GET = loggerWrapper(getCommCode)