File size: 3,359 Bytes
42f149e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# API Structure Documentation
## Structure

```
/src/app/api/v1/
β”œβ”€β”€ definitions/
β”‚   β”œβ”€β”€ route.ts                                  GET /api/v1/definitions
β”‚   └── [definitionId]/
β”‚       └── rounds/
β”‚           └── route.ts                          GET /api/v1/definitions/{id}/rounds
β”œβ”€β”€ rounds/
β”‚   β”œβ”€β”€ route.ts                                  GET /api/v1/rounds
β”‚   β”œβ”€β”€ metadata/
β”‚   β”‚   └── route.ts                              GET /api/v1/rounds/metadata
β”‚   └── [roundId]/
β”‚       β”œβ”€β”€ route.ts                              GET /api/v1/rounds/{id}
β”‚       β”œβ”€β”€ leaderboard/
β”‚       β”‚   └── route.ts                          GET /api/v1/rounds/{id}/leaderboard
β”‚       β”œβ”€β”€ models/
β”‚       β”‚   └── route.ts                          GET /api/v1/rounds/{id}/models
β”‚       └── series/
β”‚           β”œβ”€β”€ route.ts                          GET /api/v1/rounds/{id}/series
β”‚           └── [seriesId]/
β”‚               β”œβ”€β”€ data/
β”‚               β”‚   └── route.ts                  GET /api/v1/rounds/{id}/series/{id}/data
β”‚               └── forecasts/
β”‚                   └── route.ts                  GET /api/v1/rounds/{id}/series/{id}/forecasts
└── models/
    β”œβ”€β”€ rankings/
    β”‚   └── route.ts                              GET /api/v1/models/rankings
    β”œβ”€β”€ ranking-filters/
    β”‚   └── route.ts                              GET /api/v1/models/ranking-filters
    └── [modelId]/
        β”œβ”€β”€ route.ts                              GET /api/v1/models/{id}
        β”œβ”€β”€ rankings/
        β”‚   └── route.ts                          GET /api/v1/models/{id}/rankings
        β”œβ”€β”€ series-by-definition/
        β”‚   └── route.ts                          GET /api/v1/models/{id}/series-by-definition
        └── definitions/
            └── [definitionId]/
                └── series/
                    └── [seriesId]/
                        └── forecasts/
                            └── route.ts          GET /api/v1/models/{id}/definitions/{id}/series/{id}/forecasts
```

## Service Layer

The service layer has been organized into three domain-specific files:

### definitionService.ts
Handles challenge definition-related API calls:
- `getDefinitionRounds()` - Get rounds for a specific definition

### roundService.ts
Handles round-related API calls:
- `getChallenges()` - List all rounds (previously called challenges)
- `getRoundsMetadata()` - Get filter metadata
- `getChallengeSeries()` - Get series for a round
- `getSeriesData()` - Get time series data
- `getSeriesForecasts()` - Get forecasts for a series
- `getRoundModels()` - Get models participating in a round

### modelService.ts
Handles model-related API calls:
- `getFilteredRankings()` - Get model rankings with filters
- `getRankingFilters()` - Get available ranking filters
- `getModelDetails()` - Get model details
- `getModelRankings()` - Get model ranking history
- `getModelSeriesByDefinition()` - Get series grouped by definition
- `getModelSeriesForecasts()` - Get model forecasts across rounds

## Authentication

All API routes forward the `X-API-Key` header to the backend API for authentication.