48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { prisma } from '@/libs/prisma'
|
|
import { type Suitable } from '@/types/Suitable'
|
|
|
|
export async function GET(request: NextRequest) {
|
|
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 = ':roofMtCd'
|
|
--productName AND msm.product_name LIKE '%:productName%'
|
|
;
|
|
`
|
|
|
|
// 검색 조건 설정
|
|
if (category) {
|
|
query = query.replace('--roofMtCd ', '')
|
|
query = query.replace(':roofMtCd', 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: '데이터 조회 중 오류가 발생했습니다' }, { status: 500 })
|
|
}
|
|
}
|