headless_lms_models/
page_audio_files.rs

1use 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}