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
//! Controllers for requests starting with `/api/v0/cms/exercise-services`.

use models::exercise_services::ExerciseServiceIframeRenderingInfo;

use crate::{domain::models_requests, prelude::*};

/**
GET `/api/v0/cms/exercise-services` - List all exercise services configured in the system.
*/
#[instrument(skip(pool))]
async fn get_all_exercise_services(
    pool: web::Data<PgPool>,
    user: AuthUser,
) -> ControllerResult<web::Json<Vec<ExerciseServiceIframeRenderingInfo>>> {
    let mut conn = pool.acquire().await?;
    let token = authorize(&mut conn, Act::Teach, Some(user.id), Res::AnyCourse).await?;
    let res = models::exercise_services::get_all_exercise_services_iframe_rendering_infos(
        &mut conn,
        models_requests::fetch_service_info,
    )
    .await?;

    token.authorized_ok(web::Json(res))
}

pub fn _add_routes(cfg: &mut ServiceConfig) {
    cfg.route("", web::get().to(get_all_exercise_services));
}