-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathroute.ts
More file actions
82 lines (71 loc) · 2.27 KB
/
route.ts
File metadata and controls
82 lines (71 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import { NextRequest, NextResponse } from 'next/server'
import workersData from '../../../../workers.json'
// GET /api/services
export async function GET(request: NextRequest) {
try {
// Simulate API delay
await new Promise(resolve => setTimeout(resolve, 50 + Math.random() * 100))
const services = Array.from(new Set(workersData.map(worker => worker.service)))
const serviceStats = services.map(service => {
const workersInService = workersData.filter(worker => worker.service === service)
const avgPrice = Math.round(
workersInService.reduce((sum, worker) => sum + worker.pricePerDay, 0) / workersInService.length
)
const minPrice = Math.min(...workersInService.map(w => w.pricePerDay))
const maxPrice = Math.max(...workersInService.map(w => w.pricePerDay))
return {
name: service,
count: workersInService.length,
averagePrice: avgPrice,
priceRange: {
min: minPrice,
max: maxPrice
}
}
})
// Sort by count (most popular services first)
serviceStats.sort((a, b) => b.count - a.count)
const { searchParams } = new URL(request.url)
const includeStats = searchParams.get('stats') === 'true'
if (includeStats) {
return NextResponse.json({
success: true,
data: serviceStats,
metadata: {
totalServices: services.length,
totalWorkers: workersData.length
},
timestamp: new Date().toISOString()
}, {
status: 200,
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'public, max-age=300',
}
})
} else {
return NextResponse.json({
success: true,
data: services,
metadata: {
count: services.length
},
timestamp: new Date().toISOString()
}, {
status: 200,
headers: {
'Content-Type': 'application/json',
'Cache-Control': 'public, max-age=300',
}
})
}
} catch (error) {
console.error('API Error:', error)
return NextResponse.json({
success: false,
error: 'Internal Server Error',
message: 'Failed to fetch services',
timestamp: new Date().toISOString()
}, { status: 500 })
}
}