fix(fs): cannot delete file while user is deleted (fix #1586)

pull/1608/head
Aaron Liu 2023-02-07 20:04:53 +08:00
parent a93ea2cfa0
commit 2a1e82aede
2 changed files with 20 additions and 11 deletions

View File

@ -234,7 +234,7 @@ func DeleteFiles(files []*File, uid uint) error {
user.ID = uid user.ID = uid
var size uint64 var size uint64
for _, file := range files { for _, file := range files {
if file.UserID != uid { if uid > 0 && file.UserID != uid {
tx.Rollback() tx.Rollback()
return errors.New("user id not consistent") return errors.New("user id not consistent")
} }
@ -253,10 +253,12 @@ func DeleteFiles(files []*File, uid uint) error {
size += file.Size size += file.Size
} }
if uid > 0 {
if err := user.ChangeStorage(tx, "-", size); err != nil { if err := user.ChangeStorage(tx, "-", size); err != nil {
tx.Rollback() tx.Rollback()
return err return err
} }
}
return tx.Commit().Error return tx.Commit().Error
} }

View File

@ -103,16 +103,23 @@ func (service *FileBatchService) Delete(c *gin.Context) serializer.Response {
// 异步执行删除 // 异步执行删除
go func(files map[uint][]model.File) { go func(files map[uint][]model.File) {
for uid, file := range files { for uid, file := range files {
var (
fs *filesystem.FileSystem
err error
)
user, err := model.GetUserByID(uid) user, err := model.GetUserByID(uid)
if err != nil {
fs, err = filesystem.NewAnonymousFileSystem()
if err != nil { if err != nil {
continue continue
} }
} else {
fs, err := filesystem.NewFileSystem(&user) fs, err = filesystem.NewFileSystem(&user)
if err != nil { if err != nil {
fs.Recycle() fs.Recycle()
continue continue
} }
}
// 汇总文件ID // 汇总文件ID
ids := make([]uint, 0, len(file)) ids := make([]uint, 0, len(file))