diff --git a/cmd/user/main.go b/cmd/user/main.go index b527297..475e1ef 100644 --- a/cmd/user/main.go +++ b/cmd/user/main.go @@ -11,6 +11,7 @@ import ( "github.com/google/uuid" "golang.org/x/crypto/bcrypt" + "mal/internal/database" "mal/internal/db" ) @@ -21,13 +22,19 @@ func main() { } defer func() { _ = dbConn.Close() }() - if len(os.Args) == 2 && os.Args[1] == "update-avatar" { - updateAvatars(dbConn) - return + if len(os.Args) == 2 { + switch os.Args[1] { + case "update-avatar": + updateAvatars(dbConn) + return + case "run-fixes": + runFixes(dbConn) + return + } } if len(os.Args) != 3 { - log.Fatalf("Usage: go run cmd/user/main.go \n go run cmd/user/main.go update-avatar") + log.Fatalf("Usage: go run cmd/user/main.go \n go run cmd/user/main.go update-avatar\n go run cmd/user/main.go run-fixes") } username := os.Args[1] @@ -107,3 +114,31 @@ func updateAvatars(dbConn *sql.DB) { fmt.Printf("Updated avatars for %d user(s)\n", count) } + +func runFixes(dbConn *sql.DB) { + if err := database.RunMigrationsAndFixes(dbConn); err != nil { + log.Fatalf("run migrations and fixes: %v", err) + } + + rows, err := dbConn.Query("SELECT id, applied_at FROM data_fixes ORDER BY id ASC") + if err != nil { + log.Fatalf("list applied fixes: %v", err) + } + defer func() { _ = rows.Close() }() + + count := 0 + for rows.Next() { + var id string + var appliedAt string + if err := rows.Scan(&id, &appliedAt); err != nil { + log.Fatalf("scan applied fix: %v", err) + } + fmt.Printf("%s applied_at=%s\n", id, appliedAt) + count++ + } + if err := rows.Err(); err != nil { + log.Fatalf("iterate applied fixes: %v", err) + } + + fmt.Printf("Applied fixes: %d\n", count) +} diff --git a/justfile b/justfile index 0a51098..dd5273b 100644 --- a/justfile +++ b/justfile @@ -46,3 +46,6 @@ clean: new-data-fix name: bun scripts/new-data-fix.ts {{name}} + +run-fixes: + go run ./cmd/user run-fixes