package main import ( "context" "database/sql" "io" "time" _ "github.com/glebarez/sqlite" ) type DB struct { scheme string conn string } func NewDB(ctx context.Context, scheme, conn string) (DB, error) { ctx, can := context.WithTimeout(ctx, time.Second*10) defer can() db := DB{ scheme: scheme, conn: conn, } sql, err := db.dial(ctx) if err != nil { return DB{}, err } defer sql.Close() if _, err := sql.ExecContext(ctx, ` CREATE TABLE IF NOT EXISTS users ( uuid TEXT, name TEXT ); CREATE TABLE IF NOT EXISTS games ( uuid TEXT ); CREATE TABLE IF NOT EXISTS players ( user_uuid TEXT, game_uuid TEXT ); CREATE TABLE IF NOT EXISTS events ( game_uuid TEXT ); `); err != nil { return DB{}, err } return db, err } func (db DB) dial(ctx context.Context) (*sql.DB, error) { c, err := sql.Open(db.scheme, db.conn) if err != nil { return nil, err } if err := c.PingContext(ctx); err != nil { return nil, err } return c, nil } func (db DB) GetParty(id string) (string, error) { return "", io.EOF }