diff --git a/src/app/api/qna/notify/route.ts b/src/app/api/qna/notify/route.ts new file mode 100644 index 0000000..866b8cc --- /dev/null +++ b/src/app/api/qna/notify/route.ts @@ -0,0 +1,64 @@ +import { NextRequest, NextResponse } from 'next/server' +import { HttpStatusCode } from 'axios' +import { loggerWrapper } from '@/libs/api-wrapper' +import { sendEmail } from '@/libs/mailer' +import { prisma } from '@/libs/prisma' + +async function notify(request: NextRequest): Promise { + const formData = await request.formData() + const qnaClsLrgCd = formData.get('qnaCd') as string + + // 메일 발송 테스트용 파라미터. 테스트 완료 시 제거. + // 여러 수신자에게 발송 시 ', '(콤마)로 구분하여 입력 + const testReceivers = formData.get('testReceivers') as string + + /* 파라미터 체크 */ + if (qnaClsLrgCd === '') { + return NextResponse.json({ error: '필수 파라미터가 누락되었습니다' }, { status: HttpStatusCode.BadRequest }) + } + + try { + /* 수신자 조회 */ + const receivers: string[] = await getReceiver(qnaClsLrgCd) + console.log('receivers: ', receivers) + + /* 메일 전송 */ + await sendEmail({ + from: 'test@test.com', + // to: receivers, // 테스트 완료 시 주석 해제 + to: testReceivers, + subject: '메일 전송 테스트 제목', + content: '

메일 전송 테스트입니다.

', + }) + + return NextResponse.json('success') + } catch (error) { + console.error(`error : ${error}`) + return NextResponse.json({ error: `error : ${error}` }, { status: HttpStatusCode.InternalServerError }) + } +} + +/* 수신자 조회 */ +const getReceiver = async (qnaClsLrgCd: string): Promise => { + const query = ` + OPEN SYMMETRIC KEY SYMMETRICKEY DECRYPTION BY CERTIFICATE CERTI_QSPJP; + SELECT CONVERT(NVARCHAR(100), DecryptByKey(bu.e_mail)) AS email + FROM BC_USER bu + WHERE bu.user_id IN ( + SELECT user_id + FROM SY_POLICY_U spu + WHERE policy_cd = ( + SELECT bcl.ref_chr2 + FROM BC_COMM_L bcl + WHERE bcl.head_cd = (SELECT head_cd FROM BC_COMM_H bch WHERE head_id = 'QNA_CLS_MID_CD') + AND bcl.ref_chr1 = '${qnaClsLrgCd}' + GROUP BY bcl.ref_chr2 + ) + ) + CLOSE SYMMETRIC KEY SYMMETRICKEY; + ` + const receivers: { email: string }[] = await prisma.$queryRawUnsafe(query) + return receivers.map((receiver) => receiver.email) +} + +export const POST = loggerWrapper(notify)