headless_lms_models/
file_uploads.rs

1use crate::prelude::*;
2
3pub async fn insert(
4    conn: &mut PgConnection,
5    name: &str,
6    path: &str,
7    mime: &str,
8    uploader: Option<Uuid>,
9) -> ModelResult<Uuid> {
10    let res = sqlx::query!(
11        r#"
12INSERT INTO file_uploads(path, name, mime, uploaded_by_user)
13VALUES ($1, $2, $3, $4)
14RETURNING id
15"#,
16        path,
17        name,
18        mime,
19        uploader
20    )
21    .fetch_one(conn)
22    .await?;
23    Ok(res.id)
24}
25
26pub async fn get_filename(conn: &mut PgConnection, path: &str) -> ModelResult<String> {
27    let res = sqlx::query!(
28        r#"
29SELECT name
30FROM file_uploads
31WHERE path = $1
32"#,
33        path,
34    )
35    .fetch_one(conn)
36    .await?;
37    Ok(res.name)
38}
39
40pub async fn delete_and_fetch_path(conn: &mut PgConnection, id: Uuid) -> ModelResult<String> {
41    let res = sqlx::query!(
42        "
43UPDATE file_uploads
44SET deleted_at = now()
45WHERE id = $1
46AND deleted_at IS NULL
47RETURNING path
48",
49        id
50    )
51    .fetch_one(conn)
52    .await?;
53    Ok(res.path)
54}