Feat: re-save shared folder to user's space

This commit is contained in:
HFO4
2020-01-31 11:27:52 +08:00
parent b1a9943b0c
commit f5d79b1f94
10 changed files with 51 additions and 60 deletions

View File

@@ -13,7 +13,7 @@ var (
ErrIllegalObjectName = errors.New("目标名称非法")
ErrClientCanceled = errors.New("客户端取消操作")
ErrInsertFileRecord = serializer.NewError(serializer.CodeDBError, "无法插入文件记录", nil)
ErrFileExisted = serializer.NewError(serializer.CodeObjectExist, "同名文件已存在", nil)
ErrFileExisted = serializer.NewError(serializer.CodeObjectExist, "同名文件或目录已存在", nil)
ErrFolderExisted = serializer.NewError(serializer.CodeObjectExist, "同名目录已存在", nil)
ErrPathNotExist = serializer.NewError(404, "路径不存在", nil)
ErrObjectNotExist = serializer.NewError(404, "文件不存在", nil)

View File

@@ -76,6 +76,8 @@ type FileSystem struct {
FileTarget []model.File
// 当前正在处理的目录对象
DirTarget []model.Folder
// 相对根目录
Root *model.Folder
/*
钩子函数
@@ -107,6 +109,7 @@ func (fs *FileSystem) reset() {
fs.Policy = nil
fs.Hooks = nil
fs.Handler = nil
fs.Root = nil
}
// NewFileSystem 初始化一个文件系统

View File

@@ -377,22 +377,24 @@ func (fs *FileSystem) SaveTo(ctx context.Context, path string) error {
return ErrPathNotExist
}
// TODO 列目录
var (
totalSize uint64
err error
)
// 计算要复制的总大小
var totalSize uint64
for _, file := range fs.FileTarget {
totalSize += file.Size
if len(fs.DirTarget) > 0 {
totalSize, err = fs.DirTarget[0].CopyFolderTo(fs.DirTarget[0].ID, folder)
} else {
parent := model.Folder{
OwnerID: fs.FileTarget[0].UserID,
}
parent.ID = fs.FileTarget[0].FolderID
totalSize, err = parent.MoveOrCopyFileTo([]uint{fs.FileTarget[0].ID}, folder, true)
}
// 扣除用户容量
if !fs.User.IncreaseStorage(totalSize) {
return ErrInsufficientCapacity
}
err := folder.CopyChildFrom(fs.DirTarget, fs.FileTarget)
fs.User.IncreaseStorageWithoutCheck(totalSize)
if err != nil {
fs.User.DeductionStorage(totalSize)
return ErrFileExisted.WithError(err)
}

View File

@@ -23,9 +23,9 @@ func (fs *FileSystem) IsPathExist(path string) (bool, *model.Folder) {
// TODO:测试新增
var currentFolder *model.Folder
// 如果已设定目录对象,则从给定目录向下遍历
if len(fs.DirTarget) > 0 {
currentFolder = &fs.DirTarget[0]
// 如果已设定目录对象,则从给定目录向下遍历
if fs.Root != nil {
currentFolder = fs.Root
}
for _, folderName := range pathList {