import { NextResponse } from 'next/server'; import { getServerSession } from 'next-auth'; import { authOptions } from '../auth/[...nextauth]/route'; import { prisma } from '@/lib/prisma'; // Rotaları getir export async function GET() { try { // Oturum kontrolü const session = await getServerSession(authOptions); if (!session) { return NextResponse.json( { message: 'Oturum açmanız gerekiyor' }, { status: 401 } ); } // Kullanıcıyı bul const user = await prisma.user.findUnique({ where: { email: session.user?.email || '' } }); if (!user) { return NextResponse.json( { message: 'Kullanıcı bulunamadı' }, { status: 401 } ); } // Kullanıcının rotalarını getir const routes = await prisma.route.findMany({ where: { userId: user.id }, include: { addresses: { orderBy: { order: 'asc' } } }, orderBy: { createdAt: 'desc' } }); return NextResponse.json(routes); } catch (error) { console.error('Rotaları getirme hatası:', error); return NextResponse.json( { message: 'Rotalar yüklenirken bir hata oluştu' }, { status: 500 } ); } } // Yeni rota oluştur export async function POST(req: Request) { try { // Oturum kontrolü const session = await getServerSession(authOptions); console.log('Session:', session); if (!session?.user?.email) { return NextResponse.json( { success: false, error: 'Oturum açmanız gerekiyor' }, { status: 401 } ); } // Kullanıcı ID'sini veritabanından al const user = await prisma.user.findUnique({ where: { email: session.user.email } }); if (!user) { return NextResponse.json( { success: false, error: 'Kullanıcı bulunamadı' }, { status: 401 } ); } const { addresses } = await req.json(); // Adres kontrolü if (!addresses || !Array.isArray(addresses) || addresses.length < 2) { return NextResponse.json( { success: false, error: 'En az 2 geçerli adres gerekli' }, { status: 400 } ); } try { // Yeni rota oluştur const route = await prisma.route.create({ data: { userId: user.id, status: 'CREATED', addresses: { create: addresses.map((address: string, index: number) => { // Adresi parçalara ayır const parts = address.split(',').map((part: string) => part.trim()); const streetPart = parts[0] || ''; const locationPart = parts[1] || ''; // Posta kodu ve şehir bilgisini ayır const locationMatch = locationPart.match(/(\d{4})\s+([^0]+)/); const postcode = locationMatch ? locationMatch[1] : ''; const city = locationMatch ? locationMatch[2].replace(/\s*0+$/, '').trim() : ''; return { street: streetPart, city: city, postcode: postcode, country: 'Switzerland', order: index }; }) } }, include: { addresses: true } }); return NextResponse.json({ success: true, data: route }, { status: 201 }); } catch (dbError) { console.error('Veritabanı hatası:', dbError); return NextResponse.json( { success: false, error: 'Rota veritabanına kaydedilirken bir hata oluştu' }, { status: 500 } ); } } catch (error) { console.error('Rota oluşturma hatası:', error); return NextResponse.json( { success: false, error: error instanceof Error ? error.message : 'Rota oluşturulurken bir hata oluştu' }, { status: 500 } ); } }