package service import ( "time" "xps/datamodel" "xps/datasource" "xps/repositories" minio "xps/three_party" ) type TargetFile struct { FileName string FilePath string } type UploadService interface { UploadFile(ocId, userId, dirId int64, file TargetFile)(*datamodel.DocFile, error) UploadFiles(ocId, userId, dirId int64, files []TargetFile)([]datamodel.DocFile, error) } type uploadService struct { repo *repositories.DocFileRepo } func NewUploadService() UploadService { return &uploadService{ repo: repositories.NewDocFileRepo(datasource.InstanceMaster()), } } func (s* uploadService) UploadFile(ocId, userId, dirId int64, file TargetFile) (*datamodel.DocFile, error) { dFile, err1 := minio.UploadFile(file.FileName, file.FilePath) if err1 != nil { return nil, err1 } fileId := NewID() docFile := &datamodel.DocFile{ OcId: ocId, FileId: fileId, FileTitle: dFile.FileName, FileIcon: "", FileExt: dFile.FileExt, DirId: dirId, FileUrl: dFile.FileUrl, FileSize: dFile.FileSize, FileAuthor: "", FileMimeType: dFile.FileMimeType, FileDesc: "", UploadedAt: time.Time{}, UploadedBy: 0, CreatedBy: userId, CreatedAt: time.Time{}, UpdatedBy: 0, UpdatedAt: time.Time{}, DeletedFlag: 0, DeletedBy: 0, DeletedAt: time.Time{}, } err2 := s.repo.Create(docFile) if err2 != nil { return nil, err2 } return docFile, nil } func (s* uploadService) UploadFiles(ocId, userId, dirId int64, files []TargetFile) ([]datamodel.DocFile, error) { docFileList := make([]datamodel.DocFile, 0) for _, f := range files { // 1. Upload to minio dFile, err1 := minio.UploadFile(f.FileName, f.FilePath) if err1 != nil { return nil, err1 } // 2. DocFile fileId := NewID() docFile := datamodel.DocFile{ OcId: ocId, FileId: fileId, FileTitle: dFile.FileName, FileIcon: "", FileExt: dFile.FileExt, DirId: dirId, FileUrl: dFile.FileUrl, FileSize: dFile.FileSize, FileAuthor: "", FileMimeType: dFile.FileMimeType, FileDesc: "", UploadedAt: time.Time{}, UploadedBy: 0, CreatedBy: userId, CreatedAt: time.Time{}, UpdatedBy: 0, UpdatedAt: time.Time{}, DeletedFlag: 0, DeletedBy: 0, DeletedAt: time.Time{}, } err2 := s.repo.Create(&docFile) if err2 != nil { return nil, err2 } // 3. DocFileList docFileList = append(docFileList, docFile) } return docFileList, nil }