1import { NextRequest, NextResponse } from 'next/server';
2import { fieldpineServerApi } from '@/lib/server/fieldpineApi';
3import { cookies } from 'next/headers';
5// Verify session middleware
6async function verifySession(request: NextRequest) {
7 const cookieStore = await cookies();
8 const sessionCookie = cookieStore.get('fieldpine-session');
15 const session = JSON.parse(sessionCookie.value);
16 const now = Date.now();
17 const sessionAge = now - session.timestamp;
18 const maxAge = 8 * 60 * 60 * 1000; // 8 hours
20 if (sessionAge > maxAge || !session.authenticated) {
30export async function GET(request: NextRequest) {
32 // Verify authentication
33 const session = await verifySession(request);
35 return NextResponse.json(
36 { error: 'Unauthorized' },
41 // Rate limiting - Get client IP from headers
42 const clientId = request.headers.get('x-forwarded-for') ||
43 request.headers.get('x-real-ip') ||
44 request.headers.get('cf-connecting-ip') ||
47 if (!fieldpineServerApi.checkClientRateLimit(clientId)) {
48 return NextResponse.json(
49 { error: 'Rate limit exceeded' },
54 // Parse query parameters
55 const { searchParams } = new URL(request.url);
57 limit: searchParams.get('limit') ? parseInt(searchParams.get('limit')!) : undefined
60 // Return demo locations data for now
63 { id: 1, name: "Main Store", address: "123 Main St", city: "Sydney" },
64 { id: 2, name: "Mall Location", address: "456 Shopping Ave", city: "Melbourne" }
68 return NextResponse.json({ success: true, data: locations });
71 console.error('Locations API error:', error);
72 return NextResponse.json(
73 { error: 'Failed to fetch locations' },
79export async function POST(request: NextRequest) {
80 return NextResponse.json(
81 { error: 'Method not allowed' },