scanfile/server/internal/database/file.go
2025-05-27 15:00:19 +02:00

65 lines
1.3 KiB
Go

package database
import (
"mime/multipart"
"time"
"git.jmbit.de/jmb/scanfile/server/internal/store"
)
type File struct {
Id int64
Uuid string //used for file blob storage etc.
Name string //Name of the file
Description string //Any text to add to it for context
MimeType string
Size int64
CreatedAt time.Time `xorm:"create"`
UpdatedAt time.Time `xorm:"updated"`
}
// Insert File to DB
func (f File) Insert() error {
_, err := engine.InsertOne(f)
return err
}
// CreateFile() creates the filesystem object and the DB entry for a file
func CreateFile(name string, fileData multipart.File, size int64) (File, error) {
file := File{
Name: name,
Size: size,
}
uuid, err := store.SaveFile(fileData)
if err != nil {
return file, err
}
file.Uuid = uuid
file.MimeType, _ = store.GetFileType(file.Uuid)
err = file.Insert()
if err != nil {
return file, nil
}
return file, nil
}
func FileByID(id int64) (File, error) {
file := File{Id: id}
success, err := engine.Get(&file)
if err != nil || success == false {
return file, err
}
return file, nil
}
func FileByUUID(uuid string) (File, error) {
file := File{Uuid: uuid}
success, err := engine.Get(&file)
if err != nil || success == false {
return file, err
}
return file, nil
}