TS-Arena / src /app /api /v1 /API_STRUCTURE.md
Henrik Albers
convert to next.js
42f149e

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.