headless_lms_server/controllers/course_material/
course_modules.rsuse headless_lms_models::user_course_instance_exercise_service_variables;
use models::{course_modules, library::custom_view_exercises::CustomViewExerciseSubmissions};
use crate::{domain::authorization::skip_authorize, prelude::*};
#[instrument(skip(pool))]
async fn get_course_module_id_by_chapter_id(
chapter_id: web::Path<Uuid>,
pool: web::Data<PgPool>,
user: AuthUser,
) -> ControllerResult<web::Json<Uuid>> {
let mut conn = pool.acquire().await?;
let module_id = course_modules::get_course_module_id_by_chapter(&mut conn, *chapter_id).await?;
let token = skip_authorize();
token.authorized_ok(web::Json(module_id))
}
#[instrument(skip(pool))]
async fn get_default_course_module_id_by_course_id(
course_id: web::Path<Uuid>,
pool: web::Data<PgPool>,
user: AuthUser,
) -> ControllerResult<web::Json<Uuid>> {
let mut conn = pool.acquire().await?;
let module = course_modules::get_default_by_course_id(&mut conn, *course_id).await?;
let module_id = module.id;
let token = skip_authorize();
token.authorized_ok(web::Json(module_id))
}
#[instrument(skip(pool))]
async fn get_user_course_module_exercises_by_exercise_type(
path: web::Path<(Uuid, String, Uuid)>,
pool: web::Data<PgPool>,
user: AuthUser,
) -> ControllerResult<web::Json<CustomViewExerciseSubmissions>> {
let mut conn = pool.acquire().await?;
let (course_module_id, exercise_type, course_instance_id) = path.into_inner();
let exercise_tasks = models::exercise_task_submissions::get_user_custom_view_exercise_tasks_by_module_and_exercise_type(
&mut conn,
&exercise_type,
course_module_id,
user.id,
course_instance_id)
.await?;
let exercises = models::exercises::get_exercises_by_module_containing_exercise_type(
&mut conn,
&exercise_type,
course_module_id,
)
.await?;
let user_variables =
user_course_instance_exercise_service_variables::get_all_user_variables_for_user_and_course_instance_and_exercise_type(&mut conn, user.id, course_instance_id, &exercise_type).await?;
let token = skip_authorize();
let res = CustomViewExerciseSubmissions {
exercise_tasks,
exercises,
user_variables,
};
token.authorized_ok(web::Json(res))
}
pub fn _add_routes(cfg: &mut ServiceConfig) {
cfg.route(
"/chapter/{chapter_id}",
web::get().to(get_course_module_id_by_chapter_id),
)
.route(
"/course/{course_id}",
web::get().to(get_default_course_module_id_by_course_id),
)
.route(
"/{course_module_id}/exercise-tasks/{exercise_type}/{course_instance_id}",
web::get().to(get_user_course_module_exercises_by_exercise_type),
);
}