algohub_server/utils/
asset.rs1use 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}