From 4f60f1c9a0e5db51caadad6aeef04278baf71571 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Tue, 24 Mar 2026 09:12:31 +0100 Subject: [PATCH] feat(03-02): wire DATABASE_URL branching in main.go and fix cross-dialect UNIQUE detection - Add DATABASE_URL env var branching: pgx/PostgreSQL when set, SQLite when absent - Blank-import github.com/jackc/pgx/v5/stdlib to register 'pgx' driver - Log 'Using PostgreSQL database' or 'Using SQLite database at {path}' on startup - Replace RunMigrations with RunSQLiteMigrations (rename from Plan 01) - Fix TagsHandler UNIQUE detection to use strings.ToLower for cross-dialect compat --- cmd/diunwebhook/main.go | 41 ++++++++++++++++++++++------------ pkg/diunwebhook/diunwebhook.go | 2 +- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/cmd/diunwebhook/main.go b/cmd/diunwebhook/main.go index 9b9bc17..79b724d 100644 --- a/cmd/diunwebhook/main.go +++ b/cmd/diunwebhook/main.go @@ -12,26 +12,39 @@ import ( "time" diun "awesomeProject/pkg/diunwebhook" + _ "github.com/jackc/pgx/v5/stdlib" _ "modernc.org/sqlite" ) func main() { - dbPath := os.Getenv("DB_PATH") - if dbPath == "" { - dbPath = "./diun.db" + databaseURL := os.Getenv("DATABASE_URL") + var store diun.Store + if databaseURL != "" { + db, err := sql.Open("pgx", databaseURL) + if err != nil { + log.Fatalf("sql.Open postgres: %v", err) + } + if err := diun.RunPostgresMigrations(db); err != nil { + log.Fatalf("RunPostgresMigrations: %v", err) + } + store = diun.NewPostgresStore(db) + log.Println("Using PostgreSQL database") + } else { + dbPath := os.Getenv("DB_PATH") + if dbPath == "" { + dbPath = "./diun.db" + } + db, err := sql.Open("sqlite", dbPath) + if err != nil { + log.Fatalf("sql.Open sqlite: %v", err) + } + if err := diun.RunSQLiteMigrations(db); err != nil { + log.Fatalf("RunSQLiteMigrations: %v", err) + } + store = diun.NewSQLiteStore(db) + log.Printf("Using SQLite database at %s", dbPath) } - db, err := sql.Open("sqlite", dbPath) - if err != nil { - log.Fatalf("sql.Open: %v", err) - } - - if err := diun.RunMigrations(db); err != nil { - log.Fatalf("RunMigrations: %v", err) - } - - store := diun.NewSQLiteStore(db) - secret := os.Getenv("WEBHOOK_SECRET") if secret == "" { log.Println("WARNING: WEBHOOK_SECRET not set — webhook endpoint is unprotected") diff --git a/pkg/diunwebhook/diunwebhook.go b/pkg/diunwebhook/diunwebhook.go index 8bb5e9c..e8aa58c 100644 --- a/pkg/diunwebhook/diunwebhook.go +++ b/pkg/diunwebhook/diunwebhook.go @@ -169,7 +169,7 @@ func (s *Server) TagsHandler(w http.ResponseWriter, r *http.Request) { } tag, err := s.store.CreateTag(req.Name) if err != nil { - if strings.Contains(err.Error(), "UNIQUE") { + if strings.Contains(strings.ToLower(err.Error()), "unique") { http.Error(w, "conflict: tag name already exists", http.StatusConflict) return }