headless_lms_server/controllers/main_frontend/
course_auditing.rs1use headless_lms_models::courses::CourseAuditingData;
2use models::courses::CourseAuditingDataUpdate;
3use utoipa::OpenApi;
4
5use crate::prelude::*;
6
7#[derive(OpenApi)]
8#[openapi(paths(get_courses_for_auditing, update_course_auditing_data))]
9pub(crate) struct MainFrontendCourseAuditingApiDoc;
10
11#[utoipa::path(
15 get,
16 path = "/",
17 operation_id = "getCoursesForAuditing",
18 tag = "course_auditing",
19 responses(
20 (status = 200, description = "Courses for auditing", body = Vec<CourseAuditingData>)
21 )
22)]
23#[instrument(skip(pool))]
24async fn get_courses_for_auditing(
25 pool: web::Data<PgPool>,
26 user: AuthUser,
27) -> ControllerResult<web::Json<Vec<CourseAuditingData>>> {
28 let mut conn = pool.acquire().await?;
29
30 let data = models::courses::all_courses_for_auditing(&mut conn).await?;
31
32 let token = authorize(&mut conn, Act::View, Some(user.id), Res::GlobalPermissions).await?;
33 token.authorized_ok(web::Json(data))
34}
35
36#[utoipa::path(
40 put,
41 path = "/{course_id}",
42 operation_id = "updateCourseAuditingData",
43 tag = "course_auditing",
44 params(
45 ("course_id" = Uuid, Path, description = "Course id")
46 ),
47 request_body = CourseAuditingDataUpdate,
48 responses(
49 (status = 200, description = "Updated course", body = CourseAuditingData)
50 )
51)]
52#[instrument(skip(pool, app_conf))]
53async fn update_course_auditing_data(
54 payload: web::Json<CourseAuditingDataUpdate>,
55 app_conf: web::Data<ApplicationConfiguration>,
56 course_id: web::Path<Uuid>,
57 pool: web::Data<PgPool>,
58 user: AuthUser,
59) -> ControllerResult<web::Json<CourseAuditingData>> {
60 let mut conn = pool.acquire().await?;
61
62 models::courses::update_course_auditing_data(
63 &mut conn,
64 app_conf.as_ref(),
65 *course_id,
66 payload.0,
67 )
68 .await?;
69
70 let updated_course = models::courses::course_auditing_data_by_id(&mut conn, *course_id).await?;
71
72 let token = authorize(&mut conn, Act::Edit, Some(user.id), Res::GlobalPermissions).await?;
73
74 token.authorized_ok(web::Json(updated_course))
75}
76
77pub fn _add_routes(cfg: &mut ServiceConfig) {
85 cfg.route("/", web::get().to(get_courses_for_auditing))
86 .route("/{course_id}", web::put().to(update_course_auditing_data));
87}