From 44477a6dbd1398657c892d649b364439739c473c Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sat, 1 Jun 2024 01:25:16 +0200 Subject: [golang] fixed sql migrations --- golang/cmd/spacetraders/main.go | 20 +++++++++++++------- golang/pkg/database/migrations.go | 11 +++++++++-- golang/pkg/database/sql/000_init.sql | 6 +++--- 3 files changed, 25 insertions(+), 12 deletions(-) (limited to 'golang') diff --git a/golang/cmd/spacetraders/main.go b/golang/cmd/spacetraders/main.go index 75a9125..242dee3 100644 --- a/golang/cmd/spacetraders/main.go +++ b/golang/cmd/spacetraders/main.go @@ -51,7 +51,7 @@ func run( client *api.Client, ) error { // ----- Get token or register --------------------------------------------- - r, err := client.Register("COSMIC", "ADYXAX-GO") + register, err := client.Register("COSMIC", "ADYXAX-GO") if err != nil { apiError := &api.APIError{} if errors.As(err, &apiError) { @@ -59,9 +59,14 @@ func run( case 4111: // Agent symbol has already been claimed token, err := db.GetToken() if err != nil || token == "" { - return fmt.Errorf("failed to register and failed to get a token from the database: someone stole are agent's callsign: %w", err) + return fmt.Errorf("failed to register and failed to get a token from the database: someone stole our agent's callsign: %w", err) } client.SetToken(token) + agent, err := client.MyAgent() + if err != nil { + return fmt.Errorf("failed to get agent: %w", err) + } + slog.Info("agent", "agent", agent) default: return fmt.Errorf("failed to register: %w\n", err) } @@ -71,18 +76,19 @@ func run( } else { token, err := db.GetToken() if err != nil || token == "" { - if err := db.AddToken(r.Token); err != nil { + if err := db.AddToken(register.Token); err != nil { return fmt.Errorf("failed to save token: %w", err) } - client.SetToken(r.Token) + client.SetToken(register.Token) } else { return fmt.Errorf("TODO server reset not implemented yet") } } - // ----- Update agent ------------------------------------------------------ - agent, err := client.MyAgent() - slog.Info("agent", "agent", agent, "err", err) // ----- Get ships --------------------------------------------------------- ships, err := client.MyShips() + err = client.Dock(&ships[0]) + slog.Info("dock", "ship", ships[0].Nav.Status, "err", err) + err = client.Orbit(&ships[0]) + slog.Info("orbit", "ship", ships[0].Nav.Status, "err", err) return nil } diff --git a/golang/pkg/database/migrations.go b/golang/pkg/database/migrations.go index 94207a5..81cebaa 100644 --- a/golang/pkg/database/migrations.go +++ b/golang/pkg/database/migrations.go @@ -61,15 +61,22 @@ func DBInit(ctx context.Context, url string) (myDB *DB, err error) { return nil, err } + tx, err := db.Begin() + if err != nil { + return nil, err + } for version < len(statements) { - if _, err = db.ExecContext(ctx, statements[version]); err != nil { + if _, err = tx.ExecContext(ctx, statements[version]); err != nil { + tx.Rollback() return nil, err } version++ } - if _, err = db.ExecContext(ctx, `DELETE FROM schema_version; INSERT INTO schema_version (version) VALUES (?);`, version); err != nil { + if _, err = tx.ExecContext(ctx, `DELETE FROM schema_version; INSERT INTO schema_version (version) VALUES (?);`, version); err != nil { + tx.Rollback() return nil, err } + tx.Commit() return &DB{ctx: ctx, db: db}, nil } diff --git a/golang/pkg/database/sql/000_init.sql b/golang/pkg/database/sql/000_init.sql index c06d2d3..bd92821 100644 --- a/golang/pkg/database/sql/000_init.sql +++ b/golang/pkg/database/sql/000_init.sql @@ -1,7 +1,7 @@ CREATE TABLE schema_version ( - version INTEGER NOT NULL + version INTEGER NOT NULL ); CREATE TABLE tokens ( - id INTEGER PRIMARY KEY, - data TEXT NOT NULL + id INTEGER PRIMARY KEY, + data TEXT NOT NULL ); -- cgit v1.2.3