Files
marmarislocal/app/api/widget/nearby/route.ts
T

67 lines
2.0 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')
const categorySlug = searchParams.get('category')
const filters: Parameters<typeof mockDb.getListings>[0] = {}
// Neighborhood filtresi (opsiyonel - boşsa tüm Marmaris)
if (neighborhoodSlug) {
const neighborhood = await mockDb.getNeighborhoodBySlug(neighborhoodSlug)
if (neighborhood) {
filters.neighborhoodId = neighborhood.id
}
}
// Category filtresi (opsiyonel)
if (categorySlug) {
const categories = await mockDb.getCategories()
const cat = categories.find(c => c.slug === categorySlug)
if (cat) {
filters.categoryId = cat.id
}
}
const listings = await mockDb.getListings(filters)
// Shuffle for variety, limit to 5
const shuffled = listings.sort(() => 0.5 - Math.random()).slice(0, 5)
const formattedListings = shuffled.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 || 1),
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',
}
})
}