Merge pull request 'feat: qna 등록 알림 메일 송신 api 추가' (#89) from feature/qna into dev
Reviewed-on: #89
This commit is contained in:
commit
6ac9207ec5
64
src/app/api/qna/notify/route.ts
Normal file
64
src/app/api/qna/notify/route.ts
Normal file
@ -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<NextResponse> {
|
||||||
|
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: '<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)
|
||||||
Loading…
x
Reference in New Issue
Block a user