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

88 lines
1.8 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) {
fileRecords, err := database.ListFiles(s.db)
if err != nil {
return nil, err
}
resp := make([]assets.FileResponse, 0, len(fileRecords))
for _, f := range fileRecords {
resp = append(resp, assets.FileResponse{
ID: f.ID,
MetaName: f.MetaName,
MediaType: string(f.MediaType),
FileName: f.FileName,
FilePath: f.FilePath,
Checksum: f.Checksum,
CreatedAt: f.CreatedAt,
UpdatedAt: f.ExpiresAt,
})
}
return resp, nil
}
func (s *FileService) Create(r io.Reader, filename string) (assets.FileResponse, error) {
f, err := database.BuildFileRecord(r, filename, s.env.ContentDirectory)
if err != nil {
return assets.FileResponse{}, err
}
if err := database.CreateFile(s.db, &f); err != nil {
return assets.FileResponse{}, err
}
resp := assets.FileResponse{
ID: f.ID,
MetaName: f.MetaName,
MediaType: string(f.MediaType),
FileName: f.FileName,
FilePath: f.FilePath,
Checksum: f.Checksum,
CreatedAt: f.CreatedAt,
UpdatedAt: f.UpdatedAt,
}
return resp, nil
}
func (s *FileService) DeleteByName(filename string) error {
fileRecord, err := database.FindFileByName(s.db, filename)
if err != nil {
return err
}
_ = os.Remove(fileRecord.FilePath)
if err := database.DeleteFileByID(s.db, fileRecord.ID); err != nil {
return err
}
return nil
}
func (s *FileService) DeleteRecordByID(id int) error {
return database.DeleteFileByID(s.db, id)
}