fix(sagent): cascade task and collection deletes over the collaboration tables
ZhenYi committed
Modified lib/sagent/src/services/collections.rs lib/sagent/src/services/collections.rs +41 −1 View lib/sagent/src/services/collections.rs
@@ -2,7 +2,10 @@
22
33use models::dir::dirs::{self, DirKind};
44use models::sagent::agent::AgentState;
5use models::sagent::{agent, agent_event_line, agent_message, agent_watch, agents};
5use models::sagent::{
6 agent, agent_artifact, agent_event_line, agent_label, agent_member, agent_message,
7 agent_relation_label, agent_relation_repo, agent_user, agent_watch, agents,
8};
69use sea_orm::sea_query::LockType;
710use sea_orm::{
811 ActiveModelTrait, ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, QueryOrder,
@@ -398,6 +401,26 @@
398401 .collect();
399402
400403 if !task_ids.is_empty() {
404 agent_artifact::Entity::delete_many()
405 .filter(agent_artifact::Column::AgentId.is_in(task_ids.clone()))
406 .exec(txn)
407 .await?;
408 agent_relation_repo::Entity::delete_many()
409 .filter(agent_relation_repo::Column::AgentId.is_in(task_ids.clone()))
410 .exec(txn)
411 .await?;
412 agent_relation_label::Entity::delete_many()
413 .filter(agent_relation_label::Column::AgentId.is_in(task_ids.clone()))
414 .exec(txn)
415 .await?;
416 agent_user::Entity::delete_many()
417 .filter(agent_user::Column::AgentId.is_in(task_ids.clone()))
418 .exec(txn)
419 .await?;
420 agent_member::Entity::delete_many()
421 .filter(agent_member::Column::AgentId.is_in(task_ids.clone()))
422 .exec(txn)
423 .await?;
401424 agent_message::Entity::delete_many()
402425 .filter(agent_message::Column::AgentId.is_in(task_ids.clone()))
403426 .exec(txn)
@@ -420,6 +443,23 @@
420443 .filter(agent::Column::CollectionId.eq(collection.id))
421444 .exec(txn)
422445 .await?;
446 let label_ids: Vec<Uuid> = agent_label::Entity::find()
447 .filter(agent_label::Column::DirId.eq(collection.dir_id))
448 .all(txn)
449 .await?
450 .into_iter()
451 .map(|row| row.id)
452 .collect();
453 if !label_ids.is_empty() {
454 agent_relation_label::Entity::delete_many()
455 .filter(agent_relation_label::Column::LabelId.is_in(label_ids))
456 .exec(txn)
457 .await?;
458 }
459 agent_label::Entity::delete_many()
460 .filter(agent_label::Column::DirId.eq(collection.dir_id))
461 .exec(txn)
462 .await?;
423463 agents::Entity::delete_by_id(collection.id)
424464 .exec(txn)
425465 .await?;
Modified lib/sagent/src/services/tasks.rs lib/sagent/src/services/tasks.rs +24 −1 View lib/sagent/src/services/tasks.rs
@@ -1,6 +1,9 @@
11use models::sagent::agent::{AgentPriority, AgentState};
22use models::sagent::agent_member::{self, AgentMemberKind};
3use models::sagent::{agent, agent_event_line, agent_message, agent_relation_label, agent_watch};
3use models::sagent::{
4 agent, agent_artifact, agent_event_line, agent_message, agent_relation_label,
5 agent_relation_repo, agent_user, agent_watch,
6};
47use sea_orm::sea_query::LockType;
58use sea_orm::{
69 ActiveModelTrait, ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, QueryOrder,
@@ -368,6 +371,26 @@
368371 .primary()
369372 .transaction::<_, (), SagentError>(|txn| {
370373 Box::pin(async move {
374 agent_artifact::Entity::delete_many()
375 .filter(agent_artifact::Column::AgentId.eq(task.id))
376 .exec(txn)
377 .await?;
378 agent_relation_repo::Entity::delete_many()
379 .filter(agent_relation_repo::Column::AgentId.eq(task.id))
380 .exec(txn)
381 .await?;
382 agent_relation_label::Entity::delete_many()
383 .filter(agent_relation_label::Column::AgentId.eq(task.id))
384 .exec(txn)
385 .await?;
386 agent_user::Entity::delete_many()
387 .filter(agent_user::Column::AgentId.eq(task.id))
388 .exec(txn)
389 .await?;
390 agent_member::Entity::delete_many()
391 .filter(agent_member::Column::AgentId.eq(task.id))
392 .exec(txn)
393 .await?;
371394 agent_message::Entity::delete_many()
372395 .filter(agent_message::Column::AgentId.eq(task.id))
373396 .exec(txn)