init
This commit is contained in:
@@ -6,6 +6,7 @@ use crate::repositories::computed_permission::ComputedPermissionRepository;
|
||||
use crate::repositories::group::GroupRepository;
|
||||
use crate::repositories::message::MessageRepository;
|
||||
use crate::repositories::server::ServerRepository;
|
||||
use crate::repositories::server_item_order::ServerItemOrderRepository;
|
||||
use crate::repositories::user::UserRepository;
|
||||
use event_bus::EventBus;
|
||||
use sea_orm::DatabaseConnection;
|
||||
@@ -17,6 +18,7 @@ mod computed_permission;
|
||||
mod group;
|
||||
mod message;
|
||||
mod server;
|
||||
mod server_item_order;
|
||||
pub mod types;
|
||||
mod user;
|
||||
|
||||
@@ -35,6 +37,7 @@ pub struct Repositories {
|
||||
pub message: MessageRepository,
|
||||
pub user: UserRepository,
|
||||
pub computed_permission: ComputedPermissionRepository,
|
||||
pub server_item_order: ServerItemOrderRepository,
|
||||
}
|
||||
|
||||
impl Repositories {
|
||||
@@ -63,6 +66,9 @@ impl Repositories {
|
||||
computed_permission: ComputedPermissionRepository {
|
||||
context: context.clone(),
|
||||
},
|
||||
server_item_order: ServerItemOrderRepository {
|
||||
context: context.clone(),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
use crate::models::server_item_order;
|
||||
use crate::models::server_item_order::OrderedResourceType;
|
||||
use crate::repositories::{AnyResult, RepositoryContext};
|
||||
use sea_orm::{
|
||||
ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, QueryOrder, TransactionTrait,
|
||||
};
|
||||
use std::sync::Arc;
|
||||
use uuid::Uuid;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct ServerItemOrderRepository {
|
||||
pub context: Arc<RepositoryContext>,
|
||||
}
|
||||
|
||||
impl ServerItemOrderRepository {
|
||||
/// Récupère la liste ordonnée pour un serveur (racine ou spécifique à une catégorie)
|
||||
pub async fn get_by_server(&self, server_id: Uuid) -> AnyResult<Vec<server_item_order::Model>> {
|
||||
Ok(server_item_order::Entity::find()
|
||||
.filter(server_item_order::Column::ServerId.eq(server_id))
|
||||
.order_by_asc(server_item_order::Column::OrderKey)
|
||||
.all(&self.context.db)
|
||||
.await?)
|
||||
}
|
||||
|
||||
/// Réorganise en bloc (reorder) une liste d'éléments dans un serveur ou une catégorie
|
||||
pub async fn update_orders(
|
||||
&self,
|
||||
server_id: Uuid,
|
||||
items: Vec<(Uuid, OrderedResourceType, Option<Uuid>, i64)>, // (resource_id, resource_type, parent_category_id, order_key)
|
||||
) -> AnyResult<()> {
|
||||
self.context
|
||||
.db
|
||||
.transaction::<_, (), anyhow::Error>(|txn| {
|
||||
Box::pin(async move {
|
||||
for (resource_id, res_type, parent_cat_id, order_key) in items {
|
||||
// Logique de mise à jour / upsert des order_key
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
})
|
||||
.await?;
|
||||
|
||||
self.context.events.emit("server_order_updated", server_id);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user