package database import ( "fmt" "io" "log/slog" "orbits-server/internal/shared/utility" "path/filepath" "gorm.io/gorm" ) // it has been made more general for DRY purposes // this function should only be called after manually checking the filetype func BuildFileRecord(r io.Reader, origName string, contentDirectory string) (File, error) { ext := filepath.Ext(origName) category := utility.CategorizeMediaType(ext) if category == utility.Unspecified { return File{}, fmt.Errorf("unsupported filetype") } checksum, err := utility.GenerateHashFromReader(r) if err != nil { slog.Error("failed to calculate hash of file at given path", "error", err) return File{}, err } safeName := utility.GenerateSafeName(category, ext) destPath := filepath.Join(contentDirectory, safeName) fData := File{ MediaType: category, MetaName: origName, FileName: safeName, FilePath: destPath, Checksum: checksum, } return fData, nil } func GetState(db *gorm.DB) (Command, error) { var state Command if err := db.First(&state).Error; err != nil { return Command{}, err } return state, nil } func GetFiles(db *gorm.DB) ([]File, error) { var files []File return files, db.Find(&files).Error } func RegisterFile(db *gorm.DB, f File) error { return db.Create(&f).Error } func DeregisterFile(db *gorm.DB, f File) error { return db.Delete(&f).Error }