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