diff --git a/src/lib/db.go b/src/lib/db.go deleted file mode 100644 index a4722f2..0000000 --- a/src/lib/db.go +++ /dev/null @@ -1,15 +0,0 @@ -package lib - -import ( - "context" - "database/sql" -) - -func InjectDB(ctx context.Context, db *sql.DB) context.Context { - return context.WithValue(ctx, "__db__", db) -} - -func ExtractDB(ctx context.Context) *sql.DB { - v, _ := ctx.Value("__db__").(*sql.DB) - return v -} diff --git a/src/lib/db/db.go b/src/lib/db/db.go new file mode 100644 index 0000000..3f70730 --- /dev/null +++ b/src/lib/db/db.go @@ -0,0 +1,19 @@ +package db + +import ( + "context" + "database/sql" +) + +func Inject(ctx context.Context, db *sql.DB) context.Context { + return context.WithValue(ctx, "__db__", db) +} + +func From(ctx context.Context) *sql.DB { + return Extract(ctx) +} + +func Extract(ctx context.Context) *sql.DB { + v, _ := ctx.Value("__db__").(*sql.DB) + return v +} diff --git a/src/lib/db/db_test.go b/src/lib/db/db_test.go new file mode 100644 index 0000000..8309420 --- /dev/null +++ b/src/lib/db/db_test.go @@ -0,0 +1,22 @@ +package db_test + +import ( + "context" + "database/sql" + "gitea/price-is-wrong/src/lib/db" + "testing" +) + +func TestInjectDB(t *testing.T) { + ctx := context.Background() + d := &sql.DB{} + + injected := db.Inject(ctx, d) + extracted := db.Extract(injected) + + if d != extracted { + t.Fatal("couldnt extract injected db") + } else if extracted != db.From(injected) { + t.Fatal("couldnt from extracted db") + } +} diff --git a/src/lib/db_test.go b/src/lib/db_test.go deleted file mode 100644 index aec2322..0000000 --- a/src/lib/db_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package lib_test - -import ( - "context" - "database/sql" - "gitea/price-is-wrong/src/lib" - "testing" -) - -func TestInjectDB(t *testing.T) { - ctx := context.Background() - db := &sql.DB{} - - injected := lib.InjectDB(ctx, db) - extracted := lib.ExtractDB(injected) - - if db != extracted { - t.Fatal("couldnt extract injected db") - } -} diff --git a/src/lib/test.go b/src/lib/test.go index 96dcf40..7e7c8bd 100644 --- a/src/lib/test.go +++ b/src/lib/test.go @@ -6,15 +6,17 @@ import ( "path" "testing" + "gitea/price-is-wrong/src/lib/db" + _ "github.com/glebarez/sqlite" ) func NewTestCtx(t *testing.T) context.Context { d := t.TempDir() - db, err := sql.Open("sqlite", path.Join(d, "db.db")) + b, err := sql.Open("sqlite", path.Join(d, "db.db")) if err != nil { t.Fatal(err) } - t.Cleanup(func() { db.Close() }) - return InjectDB(context.Background(), db) + t.Cleanup(func() { b.Close() }) + return db.Inject(context.Background(), b) } diff --git a/src/lib/test_test.go b/src/lib/test_test.go index 572ffb8..af5ff40 100644 --- a/src/lib/test_test.go +++ b/src/lib/test_test.go @@ -3,6 +3,7 @@ package lib_test import ( "context" "gitea/price-is-wrong/src/lib" + "gitea/price-is-wrong/src/lib/db" "sync" "testing" ) @@ -14,14 +15,12 @@ func TestTestCtx(t *testing.T) { t.Run("subtest", func(t *testing.T) { defer wg.Done() ctx = lib.NewTestCtx(t) - db := lib.ExtractDB(ctx) - if _, err := db.Exec(`SELECT 1`); err != nil { + if _, err := db.Extract(ctx).Exec(`SELECT 1`); err != nil { t.Fatal(err) } }) wg.Wait() - db := lib.ExtractDB(ctx) - if _, err := db.Exec(`SELECT 1`); err == nil { + if _, err := db.Extract(ctx).Exec(`SELECT 1`); err == nil { t.Fatal(err) } } diff --git a/src/state/fsm/lobby/internal/lobby.go b/src/state/fsm/lobby/internal/lobby.go deleted file mode 100644 index c0a09b3..0000000 --- a/src/state/fsm/lobby/internal/lobby.go +++ /dev/null @@ -1,11 +0,0 @@ -package lobby - -import "context" - -type Lobby interface{} - -type lobby struct{} - -func NewLobby(ctx context.Context) (Lobby, error) { - return lobby{}, nil -} diff --git a/src/state/fsm/lobby/lobby.go b/src/state/fsm/lobby/lobby.go new file mode 100644 index 0000000..6d60f5e --- /dev/null +++ b/src/state/fsm/lobby/lobby.go @@ -0,0 +1,41 @@ +package lobby + +import ( + "context" + "fmt" + "gitea/price-is-wrong/src/lib" + "io" +) + +type Lobby struct{} + +func Open(ctx context.Context, id string) (Lobby, error) { + result, err := open(ctx, id) + if err != nil { + return Lobby{}, err + } + if result != nil { + } else if err := create(ctx, id); err != nil { + return Lobby{}, err + } else if result, err = open(ctx, id); err != nil { + return Lobby{}, err + } else if result != nil { + } else { + return Lobby{}, fmt.Errorf("unable to create new lobby %s", id) + } + return *result, err +} + +func open(ctx context.Context, id string) (*Lobby, error) { + return nil, io.EOF +} + +func create(ctx context.Context, id string) error { + return io.EOF +} + +func init(ctx context.Context) error { + _, err := lib.ExtractDB(ctx).ExecContext(ctx, ` + `) + return err +}