58 lines
1.4 KiB
Rust
58 lines
1.4 KiB
Rust
use async_trait::async_trait;
|
|
use std::vec;
|
|
use uuid::Uuid;
|
|
|
|
use crate::content::{
|
|
collection::{CollectionData, CollectionRepository, DEFAULT_COLLECTIONS},
|
|
Error,
|
|
};
|
|
|
|
use super::Database;
|
|
|
|
#[async_trait]
|
|
impl CollectionRepository for Database {
|
|
async fn list_collections(&self, site: &Uuid) -> Result<Vec<CollectionData>, Error> {
|
|
Ok(sqlx::query_as!(
|
|
CollectionData,
|
|
r#"SELECT id, slug, name, parent FROM collections WHERE site = $1"#,
|
|
site
|
|
)
|
|
.fetch_all(&self.pool)
|
|
.await?)
|
|
}
|
|
|
|
async fn create_default_collections(&self, site: &Uuid) -> Result<(), Error> {
|
|
let mut tx = self.pool.begin().await?;
|
|
|
|
let mut uuids = vec![];
|
|
for (slug, name) in DEFAULT_COLLECTIONS {
|
|
let record = sqlx::query!(
|
|
r#"INSERT INTO collections (id, site, slug, name)
|
|
VALUES ($1, $2, $3, $4)
|
|
RETURNING id"#,
|
|
Uuid::now_v7(),
|
|
site,
|
|
slug,
|
|
name
|
|
)
|
|
.fetch_one(&mut tx)
|
|
.await?;
|
|
uuids.push(record.id);
|
|
}
|
|
|
|
sqlx::query!(
|
|
r#"UPDATE sites
|
|
SET default_collection = $1
|
|
WHERE id = $2"#,
|
|
uuids[0],
|
|
site
|
|
)
|
|
.execute(&mut tx)
|
|
.await?;
|
|
|
|
tx.commit().await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|