This commit is contained in:
2026-07-31 11:04:34 +02:00
parent 086e5ab0ea
commit 621f8cefa0
9 changed files with 165 additions and 46 deletions
+25 -10
View File
@@ -1,11 +1,12 @@
use crate::domain::dto::server::{
CreateServerRequest, ServerExplorerItemResponse, ServerResponse, ServerRolePermissionResponse,
ServerTreeResponse, ServerUserPermissionResponse, UpdateServerRequest,
};
use crate::models::{
category, channel, server, server_item_order, server_role_permission, server_user_permission,
};
use crate::repositories::types::{ServerExplorerItem, ServerTree};
use crate::domain::dto::server::{
CreateServerRequest, ServerResponse, ServerRolePermissionResponse,
ServerUserPermissionResponse, UpdateServerRequest,
};
use crate::routes::category::mapper::category_model_to_category_response;
use crate::routes::channel::mapper::channel_model_to_channel_response;
use sea_orm::Set;
use std::collections::HashMap;
use uuid::Uuid;
@@ -66,7 +67,7 @@ pub fn build_server_tree(
orders: Vec<server_item_order::Model>,
channels: Vec<channel::Model>,
categories: Vec<category::Model>,
) -> ServerTree {
) -> ServerTreeResponse {
// Map d'accès rapide : resource_id -> order_key
let order_map: HashMap<Uuid, i64> = orders
.into_iter()
@@ -91,18 +92,32 @@ pub fn build_server_tree(
}
// Préparer les éléments racine (catégories & canaux orphelins) avec leur order_key
let mut root_items: Vec<(ServerExplorerItem, i64)> = Vec::new();
let mut root_items: Vec<(ServerExplorerItemResponse, i64)> = Vec::new();
for cat in categories {
let cat_id = cat.id;
let order_key = order_map.get(&cat_id).copied().unwrap_or(i64::MAX);
let chans = category_channels.remove(&cat_id).unwrap_or_default();
root_items.push((ServerExplorerItem::Category(cat, chans), order_key));
let cat_response = category_model_to_category_response(cat);
let chan_responses = chans
.into_iter()
.map(channel_model_to_channel_response)
.collect();
root_items.push((
ServerExplorerItemResponse::Category(cat_response, chan_responses),
order_key,
));
}
for chan in orphan_channels {
let order_key = order_map.get(&chan.id).copied().unwrap_or(i64::MAX);
root_items.push((ServerExplorerItem::Channel(chan), order_key));
let chan_response = channel_model_to_channel_response(chan);
root_items.push((
ServerExplorerItemResponse::Channel(chan_response),
order_key,
));
}
// Tri du niveau racine par order_key
@@ -110,5 +125,5 @@ pub fn build_server_tree(
let items = root_items.into_iter().map(|(item, _)| item).collect();
ServerTree { items }
ServerTreeResponse { items }
}