You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bit4sat/storage/upload_model.go

63 lines
972 B
Go

package storage
import (
"errors"
"log"
"git.sp4ke.com/sp4ke/bit4sat-server.git/db"
"github.com/mattn/go-sqlite3"
)
var DB = db.DB
const (
DBUploadSchema = `
CREATE TABLE IF NOT EXISTS "upload" (
upload_id TEXT NOT NULL,
path TEXT DEFAULT '',
status INTEGER DEFAULT 0,
PRIMARY KEY("upload_id")
);
`
QNewUpload = `INSERT INTO upload (upload_id) VALUES (:upload_id)`
)
const (
UpNew = iota
UpWaitingPayment
UpReady
)
var (
ErrDoesNotExist = errors.New("does not exist")
ErrAlreadyExists = errors.New("already exists")
)
type Upload struct {
ID string `db:"upload_id"`
Path string
}
func (u *Upload) Write() error {
_, err := DB.Handle.NamedExec(QNewUpload, u)
sqlErr, isSqlErr := err.(sqlite3.Error)
if isSqlErr && sqlErr.Code == sqlite3.ErrConstraint {
return ErrAlreadyExists
}
if err != nil {
return err
}
return nil
}
func init() {
_, err := DB.Handle.Exec(DBUploadSchema)
if err != nil {
log.Fatal(err)
}
}