This commit is contained in:
2026-08-02 10:13:49 +02:00
parent ba51dde1c2
commit 9dbb7ffd5b
9 changed files with 558 additions and 108 deletions
+18 -27
View File
@@ -1,9 +1,7 @@
use crate::models::category;
use crate::models::server_item_order::{self, OrderedResourceType};
use crate::models::server_item_order::OrderedResourceType;
use crate::services::ServicesContext;
use sea_orm::{
ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, QuerySelect, Set, TransactionTrait,
};
use sea_orm::{ActiveModelTrait, EntityTrait, Set, TransactionTrait};
use std::sync::Arc;
use uuid::Uuid;
@@ -24,6 +22,13 @@ impl CategoryService {
) -> Result<category::Model, anyhow::Error> {
let db = &self.service_context.repositories.server.context.db;
let event_bus = &self.service_context.event_bus;
let server_order = self
.service_context
.services
.get()
.expect("services initialized")
.server_order
.clone();
let cat = db
.transaction::<_, category::Model, anyhow::Error>(|txn| {
@@ -35,25 +40,9 @@ impl CategoryService {
};
let cat = active.insert(txn).await?;
let max_order: Option<i64> = server_item_order::Entity::find()
.filter(server_item_order::Column::ServerId.eq(server_id))
.filter(server_item_order::Column::ParentCategoryId.is_null())
.select_only()
.column_as(server_item_order::Column::OrderKey.max(), "max_key")
.into_tuple::<Option<i64>>()
.one(txn)
.await?
.flatten();
let order_item = server_item_order::ActiveModel {
server_id: Set(server_id),
resource_id: Set(cat.id),
resource_type: Set(OrderedResourceType::Category),
parent_category_id: Set(None),
order_key: Set(max_order.unwrap_or(0) + 1),
..Default::default()
};
order_item.insert(txn).await?;
server_order
.append(txn, server_id, cat.id, OrderedResourceType::Category, None)
.await?;
Ok(cat)
})
@@ -98,10 +87,12 @@ impl CategoryService {
let txn = db.begin().await?;
server_item_order::Entity::delete_many()
.filter(server_item_order::Column::ResourceId.eq(id))
.filter(server_item_order::Column::ResourceType.eq(OrderedResourceType::Category))
.exec(&txn)
self.service_context
.services
.get()
.expect("services initialized")
.server_order
.remove(&txn, id, OrderedResourceType::Category)
.await?;
let res = category::Entity::delete_by_id(id).exec(&txn).await?;