Skip to main content

headless_lms_server/controllers/
mod.rs

1/*!
2Handlers for HTTP requests to `/api/v0`.
3
4This documents all endpoints. Select a module below for a namespace.
5
6*/
7
8// tracing::instrument seems to have issues with this
9#![allow(clippy::suspicious_else_formatting)]
10
11pub mod auth;
12pub mod cms;
13pub mod course_material;
14pub mod errors;
15pub mod exercise_services;
16pub mod files;
17pub mod health;
18pub mod helpers;
19pub mod langs;
20pub mod main_frontend;
21pub mod mock_azure;
22pub mod mock_document_storage;
23pub mod other_domain_redirects;
24pub mod study_registry;
25pub mod tmc_server;
26
27use crate::domain::error::{ControllerError, ControllerErrorType};
28use actix_web::{
29    HttpRequest, HttpResponse, ResponseError,
30    web::{self, ServiceConfig},
31};
32use headless_lms_utils::prelude::*;
33use serde::{Deserialize, Serialize};
34use utoipa::ToSchema;
35
36/// Result of a image upload. Tells where the uploaded image can be retrieved from.
37#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, ToSchema)]
38
39pub struct UploadResult {
40    pub url: String,
41}
42
43/// Add controllers from all the submodules.
44pub fn configure_controllers(
45    cfg: &mut ServiceConfig,
46    app_conf: web::Data<ApplicationConfiguration>,
47) {
48    cfg.service(web::scope("/course-material").configure(course_material::_add_routes))
49        .service(web::scope("/cms").configure(cms::_add_routes))
50        .service(web::scope("/files").configure(files::_add_routes))
51        .service(web::scope("/main-frontend").configure(main_frontend::_add_routes))
52        .service(web::scope("/auth").configure(auth::_add_routes))
53        .service(web::scope("/errors").configure(errors::_add_routes))
54        .service(web::scope("/study-registry").configure(study_registry::_add_routes))
55        .service(web::scope("/exercise-services").configure(exercise_services::_add_routes))
56        .service(
57            web::scope("/other-domain-redirects").configure(other_domain_redirects::_add_routes),
58        )
59        .service(web::scope("/health").configure(health::_add_routes))
60        .service(web::scope("/langs").configure(langs::_add_routes))
61        .service(web::scope("/tmc-server").configure(tmc_server::_add_routes))
62        .default_service(web::to(not_found));
63    if app_conf.test_chatbot && app_conf.test_mode {
64        cfg.service(web::scope("/mock-azure").configure(mock_azure::_add_routes))
65            .service(
66                web::scope("/mock-document-storage").configure(mock_document_storage::_add_routes),
67            );
68    }
69}
70
71async fn not_found(req: HttpRequest) -> HttpResponse {
72    ControllerError::new(
73        ControllerErrorType::NotFound,
74        format!("No handler found for route '{}'", req.path()),
75        None,
76    )
77    .error_response()
78}