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