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
+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(())
}
}