headless_lms_server/controllers/cms/
email_templates.rs

1//! Controllers for requests starting with `/api/v0/cms/email-templates`.
2
3use models::email_templates::{EmailTemplate, EmailTemplateUpdate};
4
5use crate::prelude::*;
6
7/**
8GET `/api/v0/cms/email-templates/:id`
9*/
10#[instrument(skip(pool))]
11async fn get_email_template(
12    email_template_id: web::Path<Uuid>,
13    pool: web::Data<PgPool>,
14    user: AuthUser,
15) -> ControllerResult<web::Json<EmailTemplate>> {
16    let mut conn = pool.acquire().await?;
17    let email_templates =
18        models::email_templates::get_email_template(&mut conn, *email_template_id).await?;
19    let token = if let Some(course_id) = email_templates.course_id {
20        authorize(&mut conn, Act::Teach, Some(user.id), Res::Course(course_id)).await?
21    } else {
22        authorize(
23            &mut conn,
24            Act::Administrate,
25            Some(user.id),
26            Res::GlobalPermissions,
27        )
28        .await?
29    };
30    token.authorized_ok(web::Json(email_templates))
31}
32
33/**
34PUT `/api/v0/cms/email-templates/:id
35*/
36#[instrument(skip(pool))]
37async fn update_email_template(
38    email_template_id: web::Path<Uuid>,
39    payload: web::Json<EmailTemplateUpdate>,
40    pool: web::Data<PgPool>,
41    user: AuthUser,
42) -> ControllerResult<web::Json<EmailTemplate>> {
43    let mut conn = pool.acquire().await?;
44    let template =
45        models::email_templates::get_email_template(&mut conn, *email_template_id).await?;
46    let token = if let Some(course_id) = template.course_id {
47        authorize(&mut conn, Act::Teach, Some(user.id), Res::Course(course_id)).await?
48    } else {
49        authorize(
50            &mut conn,
51            Act::Administrate,
52            Some(user.id),
53            Res::GlobalPermissions,
54        )
55        .await?
56    };
57    let request_update_template = payload.0;
58    let updated_template = models::email_templates::update_email_template(
59        &mut conn,
60        *email_template_id,
61        request_update_template,
62    )
63    .await?;
64    token.authorized_ok(web::Json(updated_template))
65}
66
67/**
68Add a route for each controller in this module.
69
70The name starts with an underline in order to appear before other functions in the module documentation.
71
72We add the routes by calling the route method instead of using the route annotations because this method preserves the function signatures for documentation.
73*/
74pub fn _add_routes(cfg: &mut ServiceConfig) {
75    cfg.route("/{email_template_id}", web::get().to(get_email_template))
76        .route("/{email_template_id}", web::put().to(update_email_template));
77}