headless_lms_server/controllers/main_frontend/
exercise_services.rs1use models::exercise_services::{ExerciseService, ExerciseServiceNewOrUpdate};
4
5use crate::prelude::*;
6
7#[instrument(skip(pool))]
11async fn delete_exercise_service(
12 exercise_service_id: web::Path<Uuid>,
13 pool: web::Data<PgPool>,
14 user: AuthUser,
15) -> ControllerResult<web::Json<ExerciseService>> {
16 let mut conn = pool.acquire().await?;
17 let token = authorize(&mut conn, Act::Edit, Some(user.id), Res::ExerciseService).await?;
18
19 let deleted =
20 models::exercise_services::delete_exercise_service(&mut conn, *exercise_service_id).await?;
21
22 token.authorized_ok(web::Json(deleted))
23}
24
25#[instrument(skip(pool))]
29async fn add_exercise_service(
30 pool: web::Data<PgPool>,
31 user: AuthUser,
32 payload: web::Json<ExerciseServiceNewOrUpdate>,
33) -> ControllerResult<web::Json<ExerciseService>> {
34 let mut conn = pool.acquire().await?;
35 let token = authorize(&mut conn, Act::Edit, Some(user.id), Res::ExerciseService).await?;
36
37 let exercise_service = payload.0;
38 let created =
39 models::exercise_services::insert_exercise_service(&mut conn, &exercise_service).await?;
40
41 token.authorized_ok(web::Json(created))
42}
43
44#[instrument(skip(pool))]
48async fn get_exercise_service_by_id(
49 exercise_service_id: web::Path<Uuid>,
50 pool: web::Data<PgPool>,
51 user: AuthUser,
52) -> ControllerResult<web::Json<ExerciseService>> {
53 let mut conn = pool.acquire().await?;
54 let exercise_service =
55 models::exercise_services::get_exercise_service(&mut conn, *exercise_service_id).await?;
56
57 let token = authorize(&mut conn, Act::Teach, Some(user.id), Res::ExerciseService).await?;
58 token.authorized_ok(web::Json(exercise_service))
59}
60
61#[instrument(skip(pool))]
65async fn get_exercise_services(
66 pool: web::Data<PgPool>,
67 user: AuthUser,
68) -> ControllerResult<web::Json<Vec<ExerciseService>>> {
69 let mut conn = pool.acquire().await?;
70 let exercise_services = models::exercise_services::get_exercise_services(&mut conn).await?;
71
72 let token = authorize(&mut conn, Act::Teach, Some(user.id), Res::ExerciseService).await?;
73 token.authorized_ok(web::Json(exercise_services))
74}
75
76#[instrument(skip(pool))]
80async fn update_exercise_service(
81 payload: web::Json<ExerciseServiceNewOrUpdate>,
82 exercise_service_id: web::Path<Uuid>,
83 pool: web::Data<PgPool>,
84 user: AuthUser,
85) -> ControllerResult<web::Json<ExerciseService>> {
86 let mut conn = pool.acquire().await?;
87 let token = authorize(&mut conn, Act::Edit, Some(user.id), Res::ExerciseService).await?;
88
89 let updated_exercise_service = payload.0;
90 let updated_service = models::exercise_services::update_exercise_service(
91 &mut conn,
92 *exercise_service_id,
93 &updated_exercise_service,
94 )
95 .await?;
96
97 token.authorized_ok(web::Json(updated_service))
98}
99
100pub fn _add_routes(cfg: &mut ServiceConfig) {
108 cfg.route("/", web::post().to(add_exercise_service))
109 .route("/", web::get().to(get_exercise_services))
110 .route(
111 "/{exercise_service_id}",
112 web::delete().to(delete_exercise_service),
113 )
114 .route(
115 "/{exercise_service_id}",
116 web::put().to(update_exercise_service),
117 )
118 .route(
119 "/{exercise_service_id}",
120 web::get().to(get_exercise_service_by_id),
121 );
122}