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.
63 lines
972 B
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)
|
|
}
|
|
|
|
}
|