From 1e42085ce6e91eae88344c260e91a9f2f4edb92a Mon Sep 17 00:00:00 2001 From: Bel LaPointe <153096461+breel-render@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:57:28 -0700 Subject: [PATCH] whee sqlite --- cmd/server/config.go | 38 ++++--------------------- cmd/server/db.go | 67 ++++++++++++++++++++++++++++++++++++++++++++ cmd/server/main.go | 2 +- go.mod | 18 +++++++++++- go.sum | 30 ++++++++++++++++++++ 5 files changed, 120 insertions(+), 35 deletions(-) create mode 100644 cmd/server/db.go diff --git a/cmd/server/config.go b/cmd/server/config.go index b21f616..101b7b2 100644 --- a/cmd/server/config.go +++ b/cmd/server/config.go @@ -2,10 +2,8 @@ package main import ( "context" - "database/sql" "flag" "os" - "time" ) type Config struct { @@ -17,7 +15,7 @@ type Config struct { } } -func NewConfig() (Config, error) { +func NewConfig(ctx context.Context) (Config, error) { var c Config fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) @@ -26,39 +24,13 @@ func NewConfig() (Config, error) { fs.StringVar(&c.DB.Scheme, "db-scheme", "sqlite", "sql scheme") fs.StringVar(&c.DB.Conn, "db-conn", "/tmp/out.sql", "sql conn string") - err := fs.Parse(os.Args[1:]) - return c, err -} - -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, + if err := fs.Parse(os.Args[1:]); err != nil { + return Config{}, err } - sql, err := db.dial(ctx) - if sql != nil { - sql.Close() + if _, err := NewDB(ctx, c.DB.Scheme, c.DB.Conn); err != nil { + return Config{}, 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 } diff --git a/cmd/server/db.go b/cmd/server/db.go new file mode 100644 index 0000000..21398ef --- /dev/null +++ b/cmd/server/db.go @@ -0,0 +1,67 @@ +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 +} diff --git a/cmd/server/main.go b/cmd/server/main.go index 36fafa2..adc4635 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -22,7 +22,7 @@ func main() { } func run(ctx context.Context) error { - config, err := NewConfig() + config, err := NewConfig(ctx) if err != nil { return err } diff --git a/go.mod b/go.mod index 6239923..e2b43e3 100644 --- a/go.mod +++ b/go.mod @@ -4,4 +4,20 @@ go 1.22.3 require golang.org/x/time v0.8.0 -require github.com/coder/websocket v1.8.12 // indirect +require ( + github.com/coder/websocket v1.8.12 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/glebarez/go-sqlite v1.21.2 // indirect + github.com/glebarez/sqlite v1.11.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + golang.org/x/sys v0.7.0 // indirect + gorm.io/gorm v1.25.7 // indirect + modernc.org/libc v1.22.5 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/sqlite v1.23.1 // indirect +) diff --git a/go.sum b/go.sum index ec4e17a..7ba098b 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,34 @@ github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo= +github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k= +github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= +github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A= +gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= +modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM= +modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=