headless_lms_server/controllers/main_frontend/
email_templates.rs1use models::email_templates::EmailTemplate;
4use utoipa::OpenApi;
5
6use crate::prelude::*;
7
8#[derive(OpenApi)]
9#[openapi(paths(get_all_email_templates, delete_email_template))]
10pub(crate) struct MainFrontendEmailTemplatesApiDoc;
11
12#[instrument(skip(pool))]
16#[utoipa::path(
17 get,
18 path = "",
19 operation_id = "getEmailTemplates",
20 tag = "email_templates",
21 responses(
22 (status = 200, description = "Email templates", body = Vec<EmailTemplate>)
23 )
24)]
25async fn get_all_email_templates(
26 pool: web::Data<PgPool>,
27 user: AuthUser,
28) -> ControllerResult<web::Json<Vec<EmailTemplate>>> {
29 let mut conn = pool.acquire().await?;
30 let token = authorize(
31 &mut conn,
32 Act::Administrate,
33 Some(user.id),
34 Res::GlobalPermissions,
35 )
36 .await?;
37 let email_templates = models::email_templates::get_all_email_templates(&mut conn).await?;
38 token.authorized_ok(web::Json(email_templates))
39}
40
41#[instrument(skip(pool))]
45#[utoipa::path(
46 delete,
47 path = "/{email_template_id}",
48 operation_id = "deleteEmailTemplate",
49 tag = "email_templates",
50 params(
51 ("email_template_id" = Uuid, Path, description = "Email template id")
52 ),
53 responses(
54 (status = 200, description = "Deleted email template", body = EmailTemplate)
55 )
56)]
57async fn delete_email_template(
58 email_template_id: web::Path<Uuid>,
59 pool: web::Data<PgPool>,
60 user: AuthUser,
61) -> ControllerResult<web::Json<EmailTemplate>> {
62 let mut conn = pool.acquire().await?;
63 let deleted =
64 models::email_templates::delete_email_template(&mut conn, *email_template_id).await?;
65
66 let token = authorize(&mut conn, Act::Teach, Some(user.id), Res::AnyCourse).await?;
67 token.authorized_ok(web::Json(deleted))
68}
69
70pub fn _add_routes(cfg: &mut ServiceConfig) {
78 cfg.route("", web::get().to(get_all_email_templates)).route(
79 "/{email_template_id}",
80 web::delete().to(delete_email_template),
81 );
82}