MCPcopy Create free account
hub / github.com/53AI/53AIHub / deleteFileWithCascade

Function deleteFileWithCascade

api/model/file.go:1045–1090  ·  view source on GitHub ↗

deleteFileWithCascade 级联删除文件及其所有相关数据

(eid int64, fileID int64)

Source from the content-addressed store, hash-verified

1043
1044// deleteFileWithCascade 级联删除文件及其所有相关数据
1045func deleteFileWithCascade(eid int64, fileID int64) error {
1046 // 获取文件信息
1047 file, err := GetFileByID(eid, fileID)
1048 if err != nil {
1049 return fmt.Errorf("获取文件信息失败: %v", err)
1050 }
1051
1052 // 检查是否为目录类型,目录删除逻辑不变
1053 if file.Type == FILE_TYPE_DIR {
1054 tx := DB.Begin()
1055 defer func() {
1056 if r := recover(); r != nil {
1057 tx.Rollback()
1058 }
1059 }()
1060
1061 var entityIDs []int64
1062 if err := tx.Model(&EntityChunkRelation{}).
1063 Distinct("entity_id").
1064 Where("eid = ? AND file_id = ?", eid, fileID).
1065 Pluck("entity_id", &entityIDs).Error; err != nil {
1066 tx.Rollback()
1067 return fmt.Errorf("查询实体关联失败: %v", err)
1068 }
1069
1070 if err := tx.Where("eid = ? AND file_id = ?", eid, fileID).Delete(&EntityChunkRelation{}).Error; err != nil {
1071 tx.Rollback()
1072 return fmt.Errorf("删除实体关联失败: %v", err)
1073 }
1074
1075 if err := tx.Where("eid = ? AND id = ?", eid, fileID).Delete(&File{}).Error; err != nil {
1076 tx.Rollback()
1077 return err
1078 }
1079
1080 if err := DeleteOrphanEntitiesByIDsWithDB(tx, eid, entityIDs); err != nil {
1081 tx.Rollback()
1082 return fmt.Errorf("清理孤儿实体失败: %v", err)
1083 }
1084
1085 return tx.Commit().Error
1086 }
1087
1088 // 对于文件类型,执行级联删除
1089 return cascadeDeleteFileData(eid, fileID)
1090}
1091
1092// cascadeDeleteFileData 级联删除文件相关数据
1093func cascadeDeleteFileData(eid int64, fileID int64) error {

Callers 2

DeleteFileFunction · 0.85

Calls 5

GetFileByIDFunction · 0.85
cascadeDeleteFileDataFunction · 0.85
ErrorfMethod · 0.80
DeleteMethod · 0.65

Tested by

no test coverage detected