api/routes/modules/assignments/config/mod.rs
1/// Routes under `/assignments/{assignment_id}/config`:
2///
3/// - `POST /` → Save or replace the assignment configuration on disk.
4/// Accepts a JSON object matching the [`ExecutionConfig`] schema (see `/default` for structure).
5///
6/// - `GET /` → Load the assignment configuration from disk if it exists; otherwise returns an empty object.
7/// The format is based on the [`ExecutionConfig`] struct from `util::execution_config`.
8///
9/// - `GET /default` → Returns the system's default [`ExecutionConfig`] used to initialize new configurations.
10///
11/// Configuration files are stored under:
12/// `ASSIGNMENT_STORAGE_ROOT/module_{id}/assignment_{id}/config/config.json`
13use axum::{
14 Router,
15 routing::{get, post},
16};
17use get::{get_assignment_config, get_default_assignment_config};
18use post::set_assignment_config;
19use util::state::AppState;
20
21use crate::routes::modules::assignments::config::post::reset_assignment_config;
22
23pub mod get;
24pub mod post;
25
26pub fn config_routes() -> Router<AppState> {
27 Router::new()
28 .route("/", post(set_assignment_config))
29 .route("/", get(get_assignment_config))
30 .route("/default", get(get_default_assignment_config))
31 .route("/reset", post(reset_assignment_config)) // TODO Tests
32}