algohub_server/utils/
asset.rs

1use std::path::PathBuf;
2
3use anyhow::Result;
4use surrealdb::{engine::remote::ws::Client, sql::Thing, Surreal};
5
6use crate::models::{asset::Asset, UserRecordId};
7
8pub async fn create(
9    db: &Surreal<Client>,
10    owner: UserRecordId,
11    name: &str,
12    path: PathBuf,
13) -> Result<Option<Asset>> {
14    Ok(db
15        .create("asset")
16        .content(Asset {
17            id: None,
18            name: name.to_string(),
19            owner: owner.into(),
20            path,
21        })
22        .await?)
23}
24
25pub async fn get_by_id(db: &Surreal<Client>, id: &str) -> Result<Option<Asset>> {
26    Ok(db.select(("asset", id)).await?)
27}
28
29pub async fn list_by_owner(db: &Surreal<Client>, owner: UserRecordId) -> Result<Vec<Asset>> {
30    Ok(db
31        .query("SELECT * FROM asset WHERE owner = $owner")
32        .bind(("owner", Into::<Thing>::into(owner)))
33        .await?
34        .take(0)?)
35}
36
37pub async fn delete(db: &Surreal<Client>, id: &str) -> Result<Option<Asset>> {
38    Ok(db.delete(("asset", id)).await?)
39}