This commit is contained in:
2026-07-25 08:55:36 +02:00
parent b54b60c988
commit 6fb8ab19aa
4 changed files with 191 additions and 0 deletions
+6
View File
@@ -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(),
},
}
}
}
+46
View File
@@ -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(())
}
}