67 lines
2.0 KiB
TypeScript
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',
|
|
}
|
|
})
|
|
}
|