65 lines
1.3 KiB
Go
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
|
|
}
|