62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { mockDb } from '@/lib/mockDb'
|
|
|
|
export async function GET(req: NextRequest) {
|
|
const { searchParams } = new URL(req.url)
|
|
const neighborhoodSlug = searchParams.get('neighborhood')
|
|
|
|
if (!neighborhoodSlug) {
|
|
return NextResponse.json({ error: 'Neighborhood is required' }, { status: 400 })
|
|
}
|
|
|
|
// Get neighborhood
|
|
const neighborhood = await mockDb.getNeighborhoodBySlug(neighborhoodSlug)
|
|
if (!neighborhood) {
|
|
return NextResponse.json({ listings: [] }, {
|
|
headers: {
|
|
'Access-Control-Allow-Origin': '*',
|
|
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
|
}
|
|
})
|
|
}
|
|
|
|
// Get listings in that neighborhood that are local approved
|
|
const listings = await mockDb.getListings({
|
|
neighborhoodId: neighborhood.id,
|
|
isLocalApproved: true
|
|
})
|
|
|
|
// Format response matching widget needs
|
|
const formattedListings = listings.map(l => ({
|
|
id: l.id,
|
|
name: l.nameTr,
|
|
nameEn: l.nameEn,
|
|
nameRu: l.nameRu,
|
|
slug: l.slug,
|
|
categorySlug: l.category?.slug || 'isletme',
|
|
categoryName: l.category?.nameTr || '',
|
|
neighborhoodName: l.neighborhood?.nameTr || '',
|
|
rating: l.rating,
|
|
priceSymbols: '₺'.repeat(l.priceRange),
|
|
coverImage: l.images && l.images.length > 0 ? l.images[0].url : 'https://images.unsplash.com/photo-1555396273-367ea4eb4db5?w=800&auto=format&fit=crop&q=80'
|
|
}))
|
|
|
|
return NextResponse.json({ listings: formattedListings }, {
|
|
headers: {
|
|
'Access-Control-Allow-Origin': '*',
|
|
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
|
}
|
|
})
|
|
}
|
|
|
|
// Handle preflight OPTIONS request
|
|
export async function OPTIONS() {
|
|
return new NextResponse(null, {
|
|
headers: {
|
|
'Access-Control-Allow-Origin': '*',
|
|
'Access-Control-Allow-Methods': 'GET, OPTIONS',
|
|
'Access-Control-Allow-Headers': 'Content-Type',
|
|
}
|
|
})
|
|
}
|