headless_lms_server/controllers/cms/
course_instances.rs1use models::course_instances::CourseInstance;
4use utoipa::OpenApi;
5
6use crate::prelude::*;
7
8#[derive(OpenApi)]
9#[openapi(paths(get_course_instance, get_organization_id))]
10pub(crate) struct CmsCourseInstancesApiDoc;
11
12#[instrument(skip(pool))]
16#[utoipa::path(
17 get,
18 path = "/{course_instance_id}",
19 operation_id = "getCmsCourseInstance",
20 tag = "cms_course_instances",
21 params(
22 ("course_instance_id" = Uuid, Path, description = "Course instance id")
23 ),
24 responses(
25 (status = 200, description = "Course instance", body = CourseInstance)
26 )
27)]
28async fn get_course_instance(
29 course_instance_id: web::Path<Uuid>,
30 pool: web::Data<PgPool>,
31 user: AuthUser,
32) -> ControllerResult<web::Json<CourseInstance>> {
33 let mut conn = pool.acquire().await?;
34 let token = authorize(
35 &mut conn,
36 Act::View,
37 Some(user.id),
38 Res::CourseInstance(*course_instance_id),
39 )
40 .await?;
41 let instance =
42 models::course_instances::get_course_instance(&mut conn, *course_instance_id).await?;
43 token.authorized_ok(web::Json(instance))
44}
45
46#[instrument(skip(pool))]
53#[utoipa::path(
54 get,
55 path = "/{course_instance_id}/organization",
56 operation_id = "getCmsCourseInstanceOrganizationId",
57 tag = "cms_course_instances",
58 params(
59 ("course_instance_id" = Uuid, Path, description = "Course instance id")
60 ),
61 responses(
62 (status = 200, description = "Organization id", body = Uuid)
63 )
64)]
65async fn get_organization_id(
66 course_instance_id: web::Path<Uuid>,
67 pool: web::Data<PgPool>,
68 user: AuthUser,
69) -> ControllerResult<web::Json<Uuid>> {
70 let mut conn = pool.acquire().await?;
71 let token = authorize(
72 &mut conn,
73 Act::View,
74 Some(user.id),
75 Res::CourseInstance(*course_instance_id),
76 )
77 .await?;
78 let organization =
79 models::course_instances::get_organization_id(&mut conn, *course_instance_id).await?;
80 token.authorized_ok(web::Json(organization))
81}
82
83pub fn _add_routes(cfg: &mut ServiceConfig) {
91 cfg.route("/{course_instance_id}", web::get().to(get_course_instance))
92 .route(
93 "/{course_instance_id}/organization",
94 web::get().to(get_organization_id),
95 );
96}