summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2024-06-01 01:25:16 +0200
committerJulien Dessaux2024-06-01 01:25:16 +0200
commit44477a6dbd1398657c892d649b364439739c473c (patch)
tree8762cebe5988506bc8d5879e984cb599add93c68
parent[golang] simplified the api design some more (diff)
downloadspacetraders-44477a6dbd1398657c892d649b364439739c473c.tar.gz
spacetraders-44477a6dbd1398657c892d649b364439739c473c.tar.bz2
spacetraders-44477a6dbd1398657c892d649b364439739c473c.zip
[golang] fixed sql migrations
Diffstat (limited to '')
-rw-r--r--golang/cmd/spacetraders/main.go20
-rw-r--r--golang/pkg/database/migrations.go11
-rw-r--r--golang/pkg/database/sql/000_init.sql6
3 files changed, 25 insertions, 12 deletions
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
);