48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
// user repositories
|
|
|
|
use crate::models::{user::User, user_asset::UserAsset};
|
|
|
|
use super::storage::Storage;
|
|
use anyhow::{Result, Context};
|
|
|
|
pub async fn get_user_by_id(storage: &Storage, user_id: &str) -> Result<User> {
|
|
sqlx::query_as::<_, User>("SELECT * FROM users WHERE id = $1")
|
|
.bind(user_id)
|
|
.fetch_one(&storage.0)
|
|
.await
|
|
.context("To get user by id.")
|
|
}
|
|
|
|
pub async fn get_users(storage: &Storage) -> Result<Vec<User>> {
|
|
sqlx::query_as::<_, User>("SELECT * FROM users")
|
|
.fetch_all(&storage.0)
|
|
.await
|
|
.context("To get users.")
|
|
}
|
|
|
|
pub async fn create_user_asset(storage: &Storage, asset: UserAsset) -> Result<()> {
|
|
sqlx::query("INSERT INTO user_assets
|
|
(id, user_id, mime_type, fingerprint, content, created_at)
|
|
VALUES ($1, $2, $3, $4, $5, $6)
|
|
")
|
|
.bind(&asset.id)
|
|
.bind(&asset.user_id)
|
|
.bind(&asset.mime_type)
|
|
.bind(&asset.fingerprint)
|
|
.bind(&asset.content)
|
|
.bind(&asset.created_at)
|
|
.execute(&storage.0)
|
|
.await
|
|
.context("While inserting user asset.")?;
|
|
// .bind(details_update.avatar.contents.to_vec())
|
|
Ok(())
|
|
}
|
|
|
|
pub async fn get_user_asset_by_id(storage: &Storage, id: &str) -> Result<UserAsset> {
|
|
sqlx::query_as("SELECT * FROM user_assets WHERE id = $1")
|
|
.bind(id)
|
|
.fetch_one(&storage.0)
|
|
.await
|
|
.context("To get user asset by id.")
|
|
}
|
|
|