@@ -3,7 +3,7 @@ use crate::internal::{
33 files:: increase_file_reference_count,
44 groups:: { find_group_by_id, increase_group_reference_count} ,
55} ;
6- use crate :: model:: schema:: file_groups;
6+ use crate :: model:: schema:: { file_groups} ;
77use diesel:: prelude:: * ;
88use std:: fmt:: { Debug , Formatter , Result as fmtResult} ;
99
@@ -27,6 +27,31 @@ pub fn create_file_group(
2727 let _ = result?;
2828 Ok ( new_file_group)
2929}
30+
31+ pub fn delete_file_group (
32+ conn : & mut SqliteConnection ,
33+ file_id : i32 ,
34+ group_id : i32 ,
35+ ) -> Result < usize , AppError > {
36+ let result = conn. transaction :: < _ , AppError , _ > ( |conn| {
37+ // 减少组和标签的引用计数
38+ decrease_group_reference_count ( conn, group_id) ?;
39+ decrease_file_reference_count ( conn, file_id) ?;
40+
41+ // 删除关联记录
42+ let deleted_count = diesel:: delete (
43+ file_groups:: table
44+ . filter ( file_groups:: group_id. eq ( group_id) )
45+ . filter ( file_groups:: file_id. eq ( file_id) )
46+ )
47+ . execute ( conn) ?;
48+
49+ Ok ( deleted_count)
50+ } ) ;
51+
52+ result. map_err ( |e| e)
53+ }
54+
3055impl Debug for FileGroupDTO {
3156 fn fmt ( & self , f : & mut Formatter < ' _ > ) -> fmtResult {
3257 write ! ( f, "FileGroup {{ file_id: {}, group_id: {} }}" , self . file_id, self . group_id)
@@ -39,6 +64,8 @@ use super::models::FileGroupCondition;
3964use diesel:: dsl:: not;
4065use diesel:: sql_types:: Bool ;
4166use diesel:: sqlite:: Sqlite ;
67+ use crate :: internal:: files:: decrease_file_reference_count;
68+ use crate :: internal:: groups:: decrease_group_reference_count;
4269
4370// 将 FileGroupCondition 转换为 diesel 查询条件的辅助函数
4471fn build_file_group_condition ( condition : FileGroupCondition ) -> Box < dyn BoxableExpression < file_groups:: table , Sqlite , SqlType = diesel:: sql_types:: Bool > > {
0 commit comments