Files
orbits/internal/server/service/fileservice.go
T

75 lines
1.6 KiB
Go

package service
import (
"io"
"orbits-server/internal/server/api/assets"
"orbits-server/internal/server/bootstrap"
"orbits-server/internal/server/database"
"os"
"gorm.io/gorm"
)
type FileService struct {
db *gorm.DB
env bootstrap.Environment
}
func NewFileService(db *gorm.DB, env bootstrap.Environment) *FileService {
return &FileService{db: db, env: env}
}
func (s *FileService) ListFiles() ([]assets.FileResponse, error) {
files, err := database.ListFiles(s.db)
if err != nil {
return nil, err
}
resp := make([]assets.FileResponse, 0, len(files))
for _, f := range files {
resp = append(resp, assets.FileResponse{
ID: f.ID,
MetaName: f.MetaName,
FileName: f.FileName,
MediaType: string(f.MediaType),
CreatedAt: f.CreatedAt,
ExpiresAt: f.ExpiresAt,
})
}
return resp, nil
}
func (s *FileService) Create(r io.Reader, filename string) (database.File, error) {
fileRecord, err := database.BuildFileRecord(r, filename, s.env.ContentDirectory)
if err != nil {
return database.File{}, err
}
if err := database.CreateFile(s.db, &fileRecord); err != nil {
return database.File{}, err
}
return fileRecord, nil
}
func (s *FileService) DeleteByName(filename string) (database.File, error) {
fileRecord, err := database.FindFileByName(s.db, filename)
if err != nil {
return database.File{}, err
}
_ = os.Remove(fileRecord.FilePath)
if err := database.DeleteFileByID(s.db, fileRecord.ID); err != nil {
return database.File{}, err
}
return fileRecord, nil
}
func (s *FileService) DeleteByID(id int) {
_ = database.DeleteFileByID(s.db, id)
}