headless_lms_server/controllers/cms/
exercise_services.rs

1//! Controllers for requests starting with `/api/v0/cms/exercise-services`.
2
3use models::exercise_services::ExerciseServiceIframeRenderingInfo;
4use utoipa::OpenApi;
5
6use crate::prelude::*;
7
8#[derive(OpenApi)]
9#[openapi(paths(get_all_exercise_services))]
10pub(crate) struct CmsExerciseServicesApiDoc;
11
12/**
13GET `/api/v0/cms/exercise-services` - List all exercise services configured in the system.
14*/
15#[instrument(skip(pool))]
16#[utoipa::path(
17    get,
18    path = "",
19    operation_id = "getCmsExerciseServices",
20    tag = "cms_exercise_services",
21    responses(
22        (status = 200, description = "Exercise services", body = Vec<ExerciseServiceIframeRenderingInfo>)
23    )
24)]
25async fn get_all_exercise_services(
26    pool: web::Data<PgPool>,
27    user: AuthUser,
28) -> ControllerResult<web::Json<Vec<ExerciseServiceIframeRenderingInfo>>> {
29    let mut conn = pool.acquire().await?;
30    let token = authorize(&mut conn, Act::Teach, Some(user.id), Res::AnyCourse).await?;
31    let res =
32        models::exercise_services::get_all_exercise_services_iframe_rendering_infos(&mut conn)
33            .await?;
34
35    token.authorized_ok(web::Json(res))
36}
37
38pub fn _add_routes(cfg: &mut ServiceConfig) {
39    cfg.route("", web::get().to(get_all_exercise_services));
40}