feat: qna 등록 알림 메일 송신 api 추가

This commit is contained in:
Daseul Kim 2025-07-02 15:25:25 +09:00
parent 9f653dbe4a
commit 1baaece2fc

View File

@ -0,0 +1,60 @@
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<NextResponse> {
const formData = await request.formData()
const qnaClsLrgCd = formData.get('qnaCd') 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: 'seul@interplug.co.kr', // to: 'test@test.com',
subject: '메일 전송 테스트 제목',
content: '<h1>메일 전송 테스트입니다.</h1>',
})
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<string[]> => {
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)