Files
orbits/internal/server/database/functions.go
T
2026-04-23 21:50:53 +02:00

65 lines
1.3 KiB
Go

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
}