Files
marmarislocal/app/api/widget/nearby/route.ts
T
2026-07-13 14:42:07 +03:00

61 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
const listings = await mockDb.getListings({
neighborhoodId: neighborhood.id
})
// 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',
}
})
}