duidui_fiber/internal/document/service/document_service.go
2026-03-27 10:34:03 +08:00

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)
}