Feat: save re-save single shared file

This commit is contained in:
HFO4
2020-01-29 13:45:27 +08:00
parent 0d7c0793b2
commit e2f6dab70c
10 changed files with 241 additions and 88 deletions

View File

@@ -13,7 +13,7 @@ type Folder struct {
// 表字段
gorm.Model
Name string `gorm:"unique_index:idx_only_one_name"`
ParentID uint `gorm:"index:parent_id;unique_index:idx_only_one_name"`
ParentID *uint `gorm:"index:parent_id;unique_index:idx_only_one_name"`
OwnerID uint `gorm:"index:owner_id"`
// 数据库忽略字段
@@ -192,7 +192,7 @@ func (folder *Folder) CopyFolderTo(folderID uint, dstFolder *Folder) (size uint6
// 顶级目录直接指向新的目的目录
if folder.ID == folderID {
newID = dstFolder.ID
} else if IDCache, ok := newIDCache[folder.ParentID]; ok {
} else if IDCache, ok := newIDCache[*folder.ParentID]; ok {
newID = IDCache
} else {
util.Log().Warning("无法取得新的父目录:%d", folder.ParentID)
@@ -202,7 +202,7 @@ func (folder *Folder) CopyFolderTo(folderID uint, dstFolder *Folder) (size uint6
// 插入新的目录记录
oldID := folder.ID
folder.Model = gorm.Model{}
folder.ParentID = newID
folder.ParentID = &newID
if err = DB.Create(&folder).Error; err != nil {
return size, err
}
@@ -262,6 +262,40 @@ func (folder *Folder) Rename(new string) error {
return nil
}
// CopyChildFrom 将给定文件和拷贝至自身并更改所有者ID
func (folder *Folder) CopyChildFrom(folders []Folder, files []File) error {
// 开启事务
tx := DB.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 记录文件父目录对应复制的新目录ID
var newParent = make(map[uint]uint, len(folders))
// TODO 复制目录结构
// 复制子文件
for _, file := range files {
file.ID = 0
file.UserID = folder.OwnerID
if newParentID, ok := newParent[file.FolderID]; ok {
file.FolderID = newParentID
} else {
file.FolderID = folder.ID
}
if err := tx.Create(&file).Error; err != nil {
tx.Rollback()
return err
}
}
return tx.Commit().Error
}
/*
实现 FileInfo.FileInfo 接口
TODO 测试

View File

@@ -515,7 +515,6 @@ func TestFolder_FileInfoInterface(t *testing.T) {
UpdatedAt: time.Date(2019, 12, 21, 12, 40, 0, 0, time.UTC),
},
Name: "test_name",
ParentID: 0,
OwnerID: 0,
Position: "/test",
}

View File

@@ -47,7 +47,7 @@ func Init() {
// Debug模式下输出所有 SQL 日志
if conf.SystemConfig.Debug {
db.LogMode(false)
db.LogMode(true)
}
//db.SetLogger(util.Log())

View File

@@ -60,7 +60,7 @@ type UserOption struct {
// Root 获取用户的根目录
func (user *User) Root() (*Folder, error) {
var folder Folder
err := DB.Where("parent_id = 0 AND owner_id = ?", user.ID).First(&folder).Error
err := DB.Where("parent_id is NULL AND owner_id = ?", user.ID).First(&folder).Error
return &folder, err
}