mirror of
https://github.com/Jackzmc/storage.git
synced 2025-05-06 22:43:20 +00:00
47 lines
No EOL
1.5 KiB
Rust
47 lines
No EOL
1.5 KiB
Rust
use anyhow::anyhow;
|
|
use chrono::NaiveDateTime;
|
|
use rocket::serde::{Serialize, Deserialize};
|
|
use rocket::time::Date;
|
|
use sqlx::{query_as};
|
|
use sqlx::types::{Uuid};
|
|
use crate::{models, DB};
|
|
use crate::library::Library;
|
|
use crate::models::repo::RepoModel;
|
|
use crate::objs::repo::{Repo};
|
|
use crate::user::User;
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct LibraryModel {
|
|
pub id: Uuid,
|
|
pub owner_id: Uuid,
|
|
pub repo_id: String,
|
|
pub created_at: NaiveDateTime,
|
|
pub name: String,
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct LibraryWithRepoModel {
|
|
pub library: LibraryModel,
|
|
pub storage_type: String,
|
|
}
|
|
|
|
pub async fn get_library(pool: &DB, library_id: &str) -> Result<Option<LibraryModel>, anyhow::Error> {
|
|
let library_id = Uuid::parse_str(library_id)?;
|
|
let library = query_as!(LibraryModel, "select * from storage.libraries where id = $1", library_id)
|
|
.fetch_optional(pool)
|
|
.await.map_err(anyhow::Error::from)?;
|
|
// if library.is_none() { return Ok(None) }
|
|
Ok(library)
|
|
}
|
|
|
|
pub async fn get_library_with_repo(pool: &DB, library_id: &str) -> Result<Option<LibraryWithRepoModel>, anyhow::Error> {
|
|
let Some(library) = get_library(pool, library_id).await? else {
|
|
return Ok(None)
|
|
};
|
|
let repo = models::repo::get_repo(pool, &library.repo_id).await?
|
|
.ok_or_else(|| anyhow!("Repository does not exist"))?;
|
|
Ok(Some(LibraryWithRepoModel {
|
|
storage_type: repo.storage_type,
|
|
library: library
|
|
}))
|
|
} |