From 77251c540b569047d564a90fa97bb4b99f11a5a4 Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Sat, 28 Mar 2026 13:58:53 +0300 Subject: [PATCH] fix: align webhook regenerate route with frontend path --- internal/api/router.go | 2 +- internal/store/models.go | 1 + internal/store/registries.go | 14 +++++++------- internal/store/store.go | 24 +++++++++++++++++++++--- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/internal/api/router.go b/internal/api/router.go index d729088..bc80e41 100644 --- a/internal/api/router.go +++ b/internal/api/router.go @@ -177,7 +177,7 @@ func (s *Server) Router() chi.Router { r.Get("/settings", s.getSettings) r.Put("/settings", s.updateSettings) r.Get("/settings/webhook-url", s.getWebhookURL) - r.Post("/settings/regenerate", s.regenerateWebhookSecret) + r.Post("/settings/webhook-url/regenerate", s.regenerateWebhookSecret) }) }) diff --git a/internal/store/models.go b/internal/store/models.go index 4f44b43..a136115 100644 --- a/internal/store/models.go +++ b/internal/store/models.go @@ -36,6 +36,7 @@ type Registry struct { URL string `json:"url"` Type string `json:"type"` Token string `json:"token"` + Owner string `json:"owner"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } diff --git a/internal/store/registries.go b/internal/store/registries.go index 6c7c743..bf5c524 100644 --- a/internal/store/registries.go +++ b/internal/store/registries.go @@ -15,9 +15,9 @@ func (s *Store) CreateRegistry(r Registry) (Registry, error) { r.UpdatedAt = r.CreatedAt _, err := s.db.Exec( - `INSERT INTO registries (id, name, url, type, token, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?)`, - r.ID, r.Name, r.URL, r.Type, r.Token, r.CreatedAt, r.UpdatedAt, + `INSERT INTO registries (id, name, url, type, token, owner, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, + r.ID, r.Name, r.URL, r.Type, r.Token, r.Owner, r.CreatedAt, r.UpdatedAt, ) if err != nil { return Registry{}, fmt.Errorf("insert registry: %w", err) @@ -29,9 +29,9 @@ func (s *Store) CreateRegistry(r Registry) (Registry, error) { func (s *Store) GetRegistryByID(id string) (Registry, error) { var r Registry err := s.db.QueryRow( - `SELECT id, name, url, type, token, created_at, updated_at + `SELECT id, name, url, type, token, owner, created_at, updated_at FROM registries WHERE id = ?`, id, - ).Scan(&r.ID, &r.Name, &r.URL, &r.Type, &r.Token, &r.CreatedAt, &r.UpdatedAt) + ).Scan(&r.ID, &r.Name, &r.URL, &r.Type, &r.Token, &r.Owner, &r.CreatedAt, &r.UpdatedAt) if errors.Is(err, sql.ErrNoRows) { return Registry{}, fmt.Errorf("registry %s: %w", id, ErrNotFound) } @@ -45,9 +45,9 @@ func (s *Store) GetRegistryByID(id string) (Registry, error) { func (s *Store) GetRegistryByName(name string) (Registry, error) { var r Registry err := s.db.QueryRow( - `SELECT id, name, url, type, token, created_at, updated_at + `SELECT id, name, url, type, token, owner, created_at, updated_at FROM registries WHERE name = ?`, name, - ).Scan(&r.ID, &r.Name, &r.URL, &r.Type, &r.Token, &r.CreatedAt, &r.UpdatedAt) + ).Scan(&r.ID, &r.Name, &r.URL, &r.Type, &r.Token, &r.Owner, &r.CreatedAt, &r.UpdatedAt) if errors.Is(err, sql.ErrNoRows) { return Registry{}, fmt.Errorf("registry %q: %w", name, ErrNotFound) } diff --git a/internal/store/store.go b/internal/store/store.go index 0a3e7bf..0d5fa43 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -56,10 +56,28 @@ func (s *Store) DB() *sql.DB { return s.db } -// migrate creates all tables if they do not already exist. +// migrate creates all tables if they do not already exist, then runs +// incremental migrations for schema changes added after initial release. func (s *Store) migrate() error { - _, err := s.db.Exec(schema) - return err + if _, err := s.db.Exec(schema); err != nil { + return err + } + return s.runMigrations() +} + +// runMigrations applies additive schema changes that cannot be expressed +// with CREATE TABLE IF NOT EXISTS. +func (s *Store) runMigrations() error { + migrations := []string{ + // Add owner column to registries (2026-03-28). + `ALTER TABLE registries ADD COLUMN owner TEXT NOT NULL DEFAULT ''`, + } + + for _, m := range migrations { + // Ignore errors from already-applied migrations (duplicate column). + _, _ = s.db.Exec(m) + } + return nil } const schema = `