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
46RETURNING path
47",
48        id
49    )
50    .fetch_one(conn)
51    .await?;
52    Ok(res.path)
53}