headless_lms_models/
page_audio_files.rs1use crate::prelude::*;
2
3#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct PageAudioFile {
6 pub id: Uuid,
7 pub page_id: Uuid,
8 pub created_at: DateTime<Utc>,
9 pub deleted_at: Option<DateTime<Utc>>,
10 pub path: String,
11 pub mime_type: String,
12}
13
14pub async fn insert_page_audio(
15 conn: &mut PgConnection,
16 page_id: Uuid,
17 audio_file_path: &str,
18 mime_type: &str,
19) -> ModelResult<()> {
20 sqlx::query!(
21 r"
22INSERT INTO page_audio_files (
23 page_id,
24 path,
25 mime_type
26)
27VALUES($1, $2, $3)
28 ",
29 page_id,
30 audio_file_path,
31 mime_type,
32 )
33 .execute(conn)
34 .await?;
35 Ok(())
36}
37
38pub async fn delete_page_audio(conn: &mut PgConnection, id: Uuid) -> ModelResult<String> {
39 let response = sqlx::query!(
40 r#"
41UPDATE page_audio_files
42SET deleted_at = now()
43WHERE id = $1
44RETURNING path
45 "#,
46 id
47 )
48 .fetch_one(conn)
49 .await?;
50 Ok(response.path)
51}
52
53pub async fn get_page_audio_files(
54 conn: &mut PgConnection,
55 page_id: Uuid,
56) -> ModelResult<Vec<PageAudioFile>> {
57 let audio_files = sqlx::query_as!(
58 PageAudioFile,
59 "
60SELECT *
61FROM page_audio_files
62WHERE page_id = $1
63AND deleted_at IS NULL;
64",
65 page_id
66 )
67 .fetch_all(conn)
68 .await?;
69 Ok(audio_files)
70}
71
72pub async fn get_page_audio_files_by_id(
73 conn: &mut PgConnection,
74 id: Uuid,
75) -> ModelResult<PageAudioFile> {
76 let audio_files = sqlx::query_as!(
77 PageAudioFile,
78 "
79SELECT *
80FROM page_audio_files
81WHERE id = $1
82AND deleted_at IS NULL;
83",
84 id
85 )
86 .fetch_one(conn)
87 .await?;
88 Ok(audio_files)
89}