59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package models
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"github.com/uptrace/bun"
|
|
"github.com/uptrace/bun/dialect/sqlitedialect"
|
|
"github.com/uptrace/bun/driver/sqliteshim"
|
|
)
|
|
|
|
type Persistence interface {
|
|
CreateCapture(context.Context, *Capture) error
|
|
GetCaptures(context.Context) ([]Capture, error)
|
|
}
|
|
|
|
type SQLitePersistence struct {
|
|
db *bun.DB
|
|
}
|
|
|
|
func NewSQLitePersistence(dbloc string) (*SQLitePersistence, error) {
|
|
sqldb, err := sql.Open(sqliteshim.ShimName, fmt.Sprintf("file:%s", dbloc))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
db := bun.NewDB(sqldb, sqlitedialect.New())
|
|
|
|
ctx := context.Background()
|
|
|
|
for _, model := range []interface{}{(*Capture)(nil), (*MapScore)(nil), (*Score)(nil)} {
|
|
_, err := db.NewCreateTable().Model(model).IfNotExists().Exec(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return &SQLitePersistence{
|
|
db,
|
|
}, nil
|
|
}
|
|
|
|
func (s *SQLitePersistence) GetCaptures(ctx context.Context) ([]Capture, error) {
|
|
var captures []Capture
|
|
err := s.db.NewSelect().Model(&captures).Scan(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return captures, nil
|
|
}
|
|
|
|
func (s *SQLitePersistence) CreateCapture(ctx context.Context, capture *Capture) error {
|
|
_, err := s.db.NewInsert().Model(capture).Exec(ctx)
|
|
|
|
return err
|
|
}
|