first commit
This commit is contained in:
156
backend/internal/service/company_service.go
Executable file
156
backend/internal/service/company_service.go
Executable file
@@ -0,0 +1,156 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"mime/multipart"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/rovina/zsp-backend/internal/model"
|
||||
"github.com/rovina/zsp-backend/internal/repository"
|
||||
"github.com/rovina/zsp-backend/pkg/utils"
|
||||
)
|
||||
|
||||
type CompanyService interface {
|
||||
CreateFolder(name, description, category string) (*model.CompanyFolder, error)
|
||||
ListFolders() ([]model.CompanyFolder, error)
|
||||
GetFolderByID(id uint) (*model.CompanyFolder, error)
|
||||
UpdateFolder(id uint, name, description, category string) error
|
||||
DeleteFolder(id uint) error
|
||||
|
||||
UploadFiles(folderID *uint, companyName, fileCategory, expireDate, description string, files []*multipart.FileHeader) (int, error)
|
||||
ListFiles(folderID *uint) ([]model.CompanyFile, error)
|
||||
GetFileByID(id uint) (*model.CompanyFile, error)
|
||||
UpdateFile(id uint, companyName, fileCategory, expireDate, description string, folderID *uint) error
|
||||
DeleteFile(id uint) error
|
||||
}
|
||||
|
||||
type companyService struct {
|
||||
repo repository.CompanyRepository
|
||||
}
|
||||
|
||||
func NewCompanyService(repo repository.CompanyRepository) CompanyService {
|
||||
return &companyService{repo: repo}
|
||||
}
|
||||
|
||||
func (s *companyService) CreateFolder(name, description, category string) (*model.CompanyFolder, error) {
|
||||
f := &model.CompanyFolder{
|
||||
Name: name,
|
||||
Description: description,
|
||||
Category: category,
|
||||
CreateTime: time.Now(),
|
||||
UpdateTime: time.Now(),
|
||||
}
|
||||
if err := s.repo.CreateFolder(f); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
|
||||
func (s *companyService) ListFolders() ([]model.CompanyFolder, error) {
|
||||
return s.repo.ListFolders()
|
||||
}
|
||||
|
||||
func (s *companyService) GetFolderByID(id uint) (*model.CompanyFolder, error) {
|
||||
return s.repo.GetFolderByID(id)
|
||||
}
|
||||
|
||||
func (s *companyService) UpdateFolder(id uint, name, description, category string) error {
|
||||
f, err := s.repo.GetFolderByID(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
f.Name = name
|
||||
f.Description = description
|
||||
f.Category = category
|
||||
f.UpdateTime = time.Now()
|
||||
return s.repo.UpdateFolder(f)
|
||||
}
|
||||
|
||||
func (s *companyService) DeleteFolder(id uint) error {
|
||||
return s.repo.DeleteFolder(id)
|
||||
}
|
||||
|
||||
func (s *companyService) UploadFiles(folderID *uint, companyName, fileCategory, expireDate, description string, files []*multipart.FileHeader) (int, error) {
|
||||
basePath := "./data/company/files"
|
||||
if err := os.MkdirAll(basePath, os.ModePerm); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
var expire *time.Time
|
||||
if expireDate != "" {
|
||||
if t, err := time.Parse("2006-01-02", expireDate); err == nil {
|
||||
expire = &t
|
||||
}
|
||||
}
|
||||
|
||||
count := 0
|
||||
for _, fh := range files {
|
||||
filename := fmt.Sprintf("%d_%s", time.Now().UnixNano(), fh.Filename)
|
||||
savePath := filepath.Join(basePath, filename)
|
||||
if err := utils.SaveUploadedFile(fh, savePath); err != nil {
|
||||
return count, err
|
||||
}
|
||||
|
||||
ext := filepath.Ext(fh.Filename)
|
||||
if len(ext) > 0 {
|
||||
ext = ext[1:]
|
||||
}
|
||||
|
||||
file := &model.CompanyFile{
|
||||
FolderID: 0,
|
||||
FileName: fh.Filename,
|
||||
FileType: ext,
|
||||
FileSize: fh.Size,
|
||||
UploadTime: time.Now(),
|
||||
CompanyName: companyName,
|
||||
FileCategory: fileCategory,
|
||||
ExpireDate: expire,
|
||||
Description: description,
|
||||
FileURL: "files/" + filename,
|
||||
}
|
||||
if folderID != nil && *folderID > 0 {
|
||||
file.FolderID = *folderID
|
||||
}
|
||||
|
||||
if err := s.repo.CreateFile(file); err != nil {
|
||||
return count, err
|
||||
}
|
||||
count++
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func (s *companyService) ListFiles(folderID *uint) ([]model.CompanyFile, error) {
|
||||
return s.repo.ListFiles(folderID)
|
||||
}
|
||||
|
||||
func (s *companyService) GetFileByID(id uint) (*model.CompanyFile, error) {
|
||||
return s.repo.GetFileByID(id)
|
||||
}
|
||||
|
||||
func (s *companyService) UpdateFile(id uint, companyName, fileCategory, expireDate, description string, folderID *uint) error {
|
||||
f, err := s.repo.GetFileByID(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
f.CompanyName = companyName
|
||||
f.FileCategory = fileCategory
|
||||
f.Description = description
|
||||
if expireDate != "" {
|
||||
if t, err := time.Parse("2006-01-02", expireDate); err == nil {
|
||||
f.ExpireDate = &t
|
||||
}
|
||||
} else {
|
||||
f.ExpireDate = nil
|
||||
}
|
||||
if folderID != nil {
|
||||
f.FolderID = *folderID
|
||||
}
|
||||
return s.repo.UpdateFile(f)
|
||||
}
|
||||
|
||||
func (s *companyService) DeleteFile(id uint) error {
|
||||
return s.repo.DeleteFile(id)
|
||||
}
|
||||
Reference in New Issue
Block a user