headless_lms_server/controllers/course_material/
page_audio_files.rs1use models::page_audio_files::PageAudioFile;
2
3use crate::prelude::*;
4
5async fn get_page_audio(
6 page_id: web::Path<Uuid>,
7 pool: web::Data<PgPool>,
8 user: Option<AuthUser>,
9 app_conf: web::Data<ApplicationConfiguration>,
10) -> ControllerResult<web::Json<Vec<PageAudioFile>>> {
11 let mut conn = pool.acquire().await?;
12 let page = models::pages::get_page(&mut conn, *page_id).await?;
13 let user_id = user.map(|u| u.id);
14 let token = authorize_access_to_course_material(
15 &mut conn,
16 user_id,
17 page.course_id.ok_or_else(|| {
18 ControllerError::new(
19 ControllerErrorType::NotFound,
20 "Course not found".to_string(),
21 None,
22 )
23 })?,
24 )
25 .await?;
26
27 let mut page_audio_files =
28 models::page_audio_files::get_page_audio_files(&mut conn, *page_id).await?;
29
30 let base_url = &app_conf.base_url;
31 for audio in page_audio_files.iter_mut() {
32 audio.path = format!("{base_url}/api/v0/files/{}", audio.path);
33 }
34
35 token.authorized_ok(web::Json(page_audio_files))
36}
37
38pub fn _add_routes(cfg: &mut ServiceConfig) {
46 cfg.route("/{page_id}/files", web::get().to(get_page_audio));
47}