1
0
Fork 0

[golang] fixed sql migrations

This commit is contained in:
Julien Dessaux 2024-06-01 01:25:16 +02:00
parent 4069b524b2
commit 44477a6dbd
Signed by: adyxax
GPG key ID: F92E51B86E07177E
3 changed files with 25 additions and 12 deletions

View file

@ -51,7 +51,7 @@ func run(
client *api.Client, client *api.Client,
) error { ) error {
// ----- Get token or register --------------------------------------------- // ----- Get token or register ---------------------------------------------
r, err := client.Register("COSMIC", "ADYXAX-GO") register, err := client.Register("COSMIC", "ADYXAX-GO")
if err != nil { if err != nil {
apiError := &api.APIError{} apiError := &api.APIError{}
if errors.As(err, &apiError) { if errors.As(err, &apiError) {
@ -59,9 +59,14 @@ func run(
case 4111: // Agent symbol has already been claimed case 4111: // Agent symbol has already been claimed
token, err := db.GetToken() token, err := db.GetToken()
if err != nil || token == "" { 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) 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: default:
return fmt.Errorf("failed to register: %w\n", err) return fmt.Errorf("failed to register: %w\n", err)
} }
@ -71,18 +76,19 @@ func run(
} else { } else {
token, err := db.GetToken() token, err := db.GetToken()
if err != nil || token == "" { 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) return fmt.Errorf("failed to save token: %w", err)
} }
client.SetToken(r.Token) client.SetToken(register.Token)
} else { } else {
return fmt.Errorf("TODO server reset not implemented yet") return fmt.Errorf("TODO server reset not implemented yet")
} }
} }
// ----- Update agent ------------------------------------------------------
agent, err := client.MyAgent()
slog.Info("agent", "agent", agent, "err", err)
// ----- Get ships --------------------------------------------------------- // ----- Get ships ---------------------------------------------------------
ships, err := client.MyShips() 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 return nil
} }

View file

@ -61,15 +61,22 @@ func DBInit(ctx context.Context, url string) (myDB *DB, err error) {
return nil, err return nil, err
} }
tx, err := db.Begin()
if err != nil {
return nil, err
}
for version < len(statements) { 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 return nil, err
} }
version++ 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 return nil, err
} }
tx.Commit()
return &DB{ctx: ctx, db: db}, nil return &DB{ctx: ctx, db: db}, nil
} }

View file

@ -1,7 +1,7 @@
CREATE TABLE schema_version ( CREATE TABLE schema_version (
version INTEGER NOT NULL version INTEGER NOT NULL
); );
CREATE TABLE tokens ( CREATE TABLE tokens (
id INTEGER PRIMARY KEY, id INTEGER PRIMARY KEY,
data TEXT NOT NULL data TEXT NOT NULL
); );