106 lines
2.8 KiB
Go
106 lines
2.8 KiB
Go
package service
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"dd_fiber_api/internal/document"
|
|
"dd_fiber_api/internal/document/dao"
|
|
"dd_fiber_api/pkg/snowflake"
|
|
)
|
|
|
|
// DocumentService 文档管理服务
|
|
type DocumentService struct {
|
|
folderDAO *dao.FolderDAO
|
|
fileDAO *dao.FileDAO
|
|
}
|
|
|
|
// NewDocumentService 创建 DocumentService
|
|
func NewDocumentService(folderDAO *dao.FolderDAO, fileDAO *dao.FileDAO) *DocumentService {
|
|
return &DocumentService{folderDAO: folderDAO, fileDAO: fileDAO}
|
|
}
|
|
|
|
// ListFolders 列出所有文件夹
|
|
func (s *DocumentService) ListFolders() ([]*document.DocFolder, error) {
|
|
return s.folderDAO.List()
|
|
}
|
|
|
|
// CreateFolder 创建文件夹
|
|
func (s *DocumentService) CreateFolder(req *document.CreateFolderRequest) (*document.DocFolder, error) {
|
|
id := snowflake.GetInstance().NextIDString()
|
|
f := &document.DocFolder{
|
|
ID: id,
|
|
Name: req.Name,
|
|
SortOrder: req.SortOrder,
|
|
}
|
|
if err := s.folderDAO.Create(f); err != nil {
|
|
return nil, err
|
|
}
|
|
return s.folderDAO.GetByID(id)
|
|
}
|
|
|
|
// UpdateFolder 更新文件夹
|
|
func (s *DocumentService) UpdateFolder(req *document.UpdateFolderRequest) error {
|
|
f, err := s.folderDAO.GetByID(req.ID)
|
|
if err != nil || f == nil {
|
|
return fmt.Errorf("文件夹不存在")
|
|
}
|
|
f.Name = req.Name
|
|
f.SortOrder = req.SortOrder
|
|
return s.folderDAO.Update(f)
|
|
}
|
|
|
|
// DeleteFolder 删除文件夹(同时删除其下文件记录)
|
|
func (s *DocumentService) DeleteFolder(id string) error {
|
|
_ = s.fileDAO.DeleteByFolderID(id)
|
|
return s.folderDAO.Delete(id)
|
|
}
|
|
|
|
// ListFiles 列出文件夹下的文件
|
|
func (s *DocumentService) ListFiles(folderID string) ([]*document.DocFile, error) {
|
|
return s.fileDAO.ListByFolderID(folderID)
|
|
}
|
|
|
|
// CreateFile 创建文档记录
|
|
func (s *DocumentService) CreateFile(req *document.CreateFileRequest) (*document.DocFile, error) {
|
|
if req.FolderID == "" || req.FileURL == "" {
|
|
return nil, fmt.Errorf("folder_id 和 file_url 必填")
|
|
}
|
|
folder, err := s.folderDAO.GetByID(req.FolderID)
|
|
if err != nil || folder == nil {
|
|
return nil, fmt.Errorf("文件夹不存在")
|
|
}
|
|
id := snowflake.GetInstance().NextIDString()
|
|
name := req.Name
|
|
if name == "" {
|
|
name = req.FileName
|
|
}
|
|
f := &document.DocFile{
|
|
ID: id,
|
|
FolderID: req.FolderID,
|
|
Name: name,
|
|
FileName: req.FileName,
|
|
FileURL: req.FileURL,
|
|
FileSize: req.FileSize,
|
|
MimeType: req.MimeType,
|
|
}
|
|
if err := s.fileDAO.Create(f); err != nil {
|
|
return nil, err
|
|
}
|
|
return s.fileDAO.GetByID(id)
|
|
}
|
|
|
|
// UpdateFile 更新文档(名称)
|
|
func (s *DocumentService) UpdateFile(req *document.UpdateFileRequest) error {
|
|
f, err := s.fileDAO.GetByID(req.ID)
|
|
if err != nil || f == nil {
|
|
return fmt.Errorf("文档不存在")
|
|
}
|
|
f.Name = req.Name
|
|
return s.fileDAO.Update(f)
|
|
}
|
|
|
|
// DeleteFile 删除文档记录
|
|
func (s *DocumentService) DeleteFile(id string) error {
|
|
return s.fileDAO.Delete(id)
|
|
}
|