初始化
This commit is contained in:
94
server/repository/folder_repo.go
Normal file
94
server/repository/folder_repo.go
Normal file
@@ -0,0 +1,94 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"seeyon-filesystem/config"
|
||||
"seeyon-filesystem/model"
|
||||
)
|
||||
|
||||
// FolderRepository 文件夹数据访问
|
||||
type FolderRepository struct{}
|
||||
|
||||
// NewFolderRepository 创建文件夹Repository实例
|
||||
func NewFolderRepository() *FolderRepository {
|
||||
return &FolderRepository{}
|
||||
}
|
||||
|
||||
// Create 创建文件夹
|
||||
func (r *FolderRepository) Create(folder *model.Folder) error {
|
||||
return config.DB.Create(folder).Error
|
||||
}
|
||||
|
||||
// FindByID 根据ID查找文件夹
|
||||
func (r *FolderRepository) FindByID(id uint64) (*model.Folder, error) {
|
||||
var folder model.Folder
|
||||
err := config.DB.First(&folder, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &folder, nil
|
||||
}
|
||||
|
||||
// ListByParent 查询子文件夹列表
|
||||
func (r *FolderRepository) ListByParent(parentID uint64, ownerID uint64) ([]model.Folder, error) {
|
||||
var folders []model.Folder
|
||||
err := config.DB.Where("parent_id = ? AND owner_id = ? AND status = 1", parentID, ownerID).
|
||||
Order("name ASC").Find(&folders).Error
|
||||
return folders, err
|
||||
}
|
||||
|
||||
// FindByPath 根据路径查找文件夹
|
||||
func (r *FolderRepository) FindByPath(path string, ownerID uint64) (*model.Folder, error) {
|
||||
var folder model.Folder
|
||||
err := config.DB.Where("path = ? AND owner_id = ? AND status = 1", path, ownerID).First(&folder).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &folder, nil
|
||||
}
|
||||
|
||||
// FindByNameAndParent 根据名称和父文件夹查找(用于判断重名)
|
||||
func (r *FolderRepository) FindByNameAndParent(name string, parentID uint64, ownerID uint64) (*model.Folder, error) {
|
||||
var folder model.Folder
|
||||
err := config.DB.Where("name = ? AND parent_id = ? AND owner_id = ? AND status = 1",
|
||||
name, parentID, ownerID).First(&folder).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &folder, nil
|
||||
}
|
||||
|
||||
// ListTrashed 查询回收站文件夹
|
||||
func (r *FolderRepository) ListTrashed(ownerID uint64) ([]model.Folder, error) {
|
||||
var folders []model.Folder
|
||||
err := config.DB.Where("owner_id = ? AND status = 0", ownerID).
|
||||
Order("updated_at DESC").Find(&folders).Error
|
||||
return folders, err
|
||||
}
|
||||
|
||||
// Update 更新文件夹
|
||||
func (r *FolderRepository) Update(folder *model.Folder) error {
|
||||
return config.DB.Save(folder).Error
|
||||
}
|
||||
|
||||
// SoftDelete 软删除
|
||||
func (r *FolderRepository) SoftDelete(id uint64) error {
|
||||
return config.DB.Model(&model.Folder{}).Where("id = ?", id).Update("status", 0).Error
|
||||
}
|
||||
|
||||
// Restore 从回收站恢复
|
||||
func (r *FolderRepository) Restore(id uint64) error {
|
||||
return config.DB.Model(&model.Folder{}).Where("id = ?", id).Update("status", 1).Error
|
||||
}
|
||||
|
||||
// HardDelete 永久删除
|
||||
func (r *FolderRepository) HardDelete(id uint64) error {
|
||||
return config.DB.Unscoped().Delete(&model.Folder{}, id).Error
|
||||
}
|
||||
|
||||
// GetChildrenPath 获取所有子孙文件夹的路径前缀(用于级联操作)
|
||||
func (r *FolderRepository) GetChildrenByPath(pathPrefix string, ownerID uint64) ([]model.Folder, error) {
|
||||
var folders []model.Folder
|
||||
err := config.DB.Where("path LIKE ? AND owner_id = ?",
|
||||
pathPrefix+"%", ownerID).Find(&folders).Error
|
||||
return folders, err
|
||||
}
|
||||
Reference in New Issue
Block a user