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 { 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)