headless_lms_server/controllers/main_frontend/course_credit_registrations/
export.rs1use crate::domain::csv_export::{
4 credit_registrations_export::CreditRegistrationsExportOperation, general_export,
5};
6use crate::prelude::*;
7
8#[instrument(skip(pool))]
13#[utoipa::path(
14 get,
15 path = "/courses/{course_id}/export",
16 operation_id = "exportCourseCreditRegistrations",
17 tag = "course-credit-registrations",
18 params(("course_id" = Uuid, Path, description = "Course id")),
19 responses(
20 (status = 200, description = "The course's credit registrations", body = String, content_type = "text/csv")
21 )
22)]
23pub async fn export_course_credit_registrations(
24 user: AuthUser,
25 pool: web::Data<PgPool>,
26 course_id: web::Path<Uuid>,
27) -> ControllerResult<HttpResponse> {
28 let mut conn = pool.acquire().await?;
29 let token =
30 super::authorize_credit_registration_teacher(&mut conn, user.id, *course_id).await?;
31
32 let course = models::courses::get_course(&mut conn, *course_id).await?;
33 general_export(
34 pool,
35 &format!(
36 "attachment; filename=\"{} - Credit registrations {}.csv\"",
37 course.name,
38 Utc::now().format("%Y-%m-%d")
39 ),
40 CreditRegistrationsExportOperation {
41 course_id: *course_id,
42 },
43 token,
44 )
45 .await
46}
47
48pub fn _add_routes(cfg: &mut ServiceConfig) {
49 cfg.route(
50 "/courses/{course_id}/export",
51 web::get().to(export_course_credit_registrations),
52 );
53}