This commit is contained in:
Rio
2026-06-18 12:16:27 +07:00
parent 7de3a3b4b1
commit 5c0ab92401
84 changed files with 12562 additions and 285 deletions
+59
View File
@@ -0,0 +1,59 @@
import { NextResponse } from 'next/server';
import { prisma } from '@/lib/db';
import { getSessionUser } from '@/lib/auth';
export const revalidate = 0;
export async function GET() {
try {
const user = await getSessionUser();
if (!user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
const bookings = await prisma.booking.findMany({
where: {
userId: user.userId,
},
include: {
seats: true,
schedule: {
include: {
route: true,
},
},
},
orderBy: {
createdAt: 'desc',
},
});
const serializedBookings = bookings.map((booking) => ({
id: booking.id,
bookingCode: booking.bookingCode,
passengerName: booking.passengerName,
passengerEmail: booking.passengerEmail,
passengerPhone: booking.passengerPhone,
totalPrice: Number(booking.totalPrice),
status: booking.status,
paymentMethod: booking.paymentMethod,
paymentTime: booking.paymentTime ? booking.paymentTime.toISOString() : null,
createdAt: booking.createdAt.toISOString(),
seats: booking.seats.map((s) => s.seatNumber),
schedule: {
departureTime: booking.schedule.departureTime.toISOString(),
arrivalTime: booking.schedule.arrivalTime.toISOString(),
vehicleType: booking.schedule.vehicleType,
departureCity: booking.schedule.route.departureCity,
arrivalCity: booking.schedule.route.arrivalCity,
durationMinutes: booking.schedule.route.durationMinutes,
price: Number(booking.schedule.price),
},
}));
return NextResponse.json({ bookings: serializedBookings });
} catch (error) {
console.error('Fetch user bookings error:', error);
return NextResponse.json({ error: 'Gagal mengambil data pemesanan.' }, { status: 500 });
}
}