headless_lms_server/controllers/main_frontend/courses/
students.rs1use crate::prelude::*;
3
4use headless_lms_models::chapters::CourseUserInfo;
5use headless_lms_models::library::students_view::{
6 CertificateGridRow, CompletionGridRow, ProgressOverview,
7};
8
9#[instrument(skip(pool))]
11async fn get_progress(
12 course_id: web::Path<Uuid>,
13 pool: web::Data<PgPool>,
14 user: AuthUser,
15) -> ControllerResult<web::Json<ProgressOverview>> {
16 let mut conn = pool.acquire().await?;
17 let token = authorize(
18 &mut conn,
19 Act::Teach,
20 Some(user.id),
21 Res::Course(*course_id),
22 )
23 .await?;
24 let res =
25 headless_lms_models::library::students_view::get_progress(&mut conn, *course_id).await?;
26
27 token.authorized_ok(web::Json(res))
28}
29
30#[instrument(skip(pool))]
32async fn get_course_users(
33 course_id: web::Path<Uuid>,
34 pool: web::Data<PgPool>,
35 user: AuthUser,
36) -> ControllerResult<web::Json<Vec<CourseUserInfo>>> {
37 let mut conn = pool.acquire().await?;
38 let token = authorize(
39 &mut conn,
40 Act::Teach,
41 Some(user.id),
42 Res::Course(*course_id),
43 )
44 .await?;
45 let res = headless_lms_models::library::students_view::get_course_users(&mut conn, *course_id)
46 .await?;
47
48 token.authorized_ok(web::Json(res))
49}
50
51#[instrument(skip(pool))]
53async fn get_completions(
54 course_id: web::Path<Uuid>,
55 pool: web::Data<PgPool>,
56 user: AuthUser,
57) -> ControllerResult<web::Json<Vec<CompletionGridRow>>> {
58 let mut conn = pool.acquire().await?;
59 let token = authorize(
60 &mut conn,
61 Act::Teach,
62 Some(user.id),
63 Res::Course(*course_id),
64 )
65 .await?;
66 let rows = headless_lms_models::library::students_view::get_completions_grid_by_course_id(
67 &mut conn, *course_id,
68 )
69 .await?;
70
71 token.authorized_ok(web::Json(rows))
72}
73
74#[instrument(skip(pool))]
76async fn get_certificates(
77 course_id: web::Path<Uuid>,
78 pool: web::Data<PgPool>,
79 user: AuthUser,
80) -> ControllerResult<web::Json<Vec<CertificateGridRow>>> {
81 let mut conn = pool.acquire().await?;
82 let token = authorize(
83 &mut conn,
84 Act::Teach,
85 Some(user.id),
86 Res::Course(*course_id),
87 )
88 .await?;
89 let rows = headless_lms_models::library::students_view::get_certificates_grid_by_course_id(
90 &mut conn, *course_id,
91 )
92 .await?;
93
94 token.authorized_ok(web::Json(rows))
95}
96
97pub fn _add_routes(cfg: &mut web::ServiceConfig) {
98 cfg.route("/progress", web::get().to(get_progress));
99 cfg.route("/users", web::get().to(get_course_users));
100 cfg.route("/completions", web::get().to(get_completions));
101 cfg.route("/certificates", web::get().to(get_certificates));
102}