82 lines
2.5 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { HttpStatusCode } from 'axios'
import { loggerWrapper } from '@/libs/api-wrapper'
import { prisma } from '@/libs/prisma'
/**
* @api {get} /api/suitable/pick 지붕재 적합성 데이터 아이디 조회 API
* @apiName GetSuitablePick
* @apiGroup Suitable
*
* @apiDescription
* 지붕재 적합성 데이터의 검색 조건에 맞는 main_id와 detail_id를 조회
*
* @apiParam {String} [category] 지붕재그룹코드 (예: RMG001)
* @apiParam {String} [keyword] 검색키워드
*
* @apiExample {curl} Example usage:
* curl -X GET \
* -G "category=RMG001" \
* -G "keyword=검색키워드" \
* http://localhost:3000/api/suitable/pick
*
* @apiSuccess {Array} suitableIdSet 지붕재 적합성 데이터의 아이디 목록
* @apiSuccessExample {json} Success-Response:
* [
* {
* "id": 1,
* "detail_id": "1,2,3"
* }
* ]
*/
async function getSuitablePick(request: NextRequest): Promise<NextResponse> {
try {
const searchParams = request.nextUrl.searchParams
const category = searchParams.get('category')
const keyword = searchParams.get('keyword')
let query = `
SELECT
msm.id
, details.detail_id
FROM ms_suitable_main msm
LEFT JOIN (
SELECT
msd.main_id
, STRING_AGG(msd.id, ',') AS detail_id
FROM ms_suitable_detail msd
GROUP BY msd.main_id
) AS details
ON msm.id = details.main_id
WHERE 1=1
--roofMtCd AND msm.roof_mt_cd IN (:roofMtCd)
--productName AND msm.product_name LIKE '%:productName%'
;
`
/* 검색 조건 설정 */
if (category) {
const roofMtQuery = `
SELECT roof_mt_cd
FROM ms_suitable_roof_material_group
WHERE roof_matl_grp_cd = ':roofMtGrpCd'
`
query = query.replace('--roofMtCd ', '')
query = query.replace(':roofMtCd', roofMtQuery.replace(':roofMtGrpCd', category))
}
if (keyword) {
query = query.replace('--productName ', '')
query = query.replace(':productName', keyword)
}
const suitableIdSet = await prisma.$queryRawUnsafe(query)
return NextResponse.json(suitableIdSet)
} catch (error) {
console.error(`데이터 조회 중 오류가 발생했습니다: ${error}`)
return NextResponse.json({ error: `데이터 조회 중 오류가 발생했습니다: ${error}` }, { status: HttpStatusCode.InternalServerError })
}
}
export const GET = loggerWrapper(getSuitablePick)