package migrations import ( "database/sql" "fmt" ) func MigrateClosedAtConstraint(db *sql.DB) error { var count int err := db.QueryRow(` SELECT COUNT(*) FROM issues WHERE (CASE WHEN status = 'closed' THEN 1 ELSE 0 END) <> (CASE WHEN closed_at IS NOT NULL THEN 1 ELSE 0 END) `).Scan(&count) if err != nil { return fmt.Errorf("failed to count inconsistent issues: %w", err) } if count == 0 { return nil } _, err = db.Exec(` UPDATE issues SET closed_at = NULL WHERE status != 'closed' AND closed_at IS NOT NULL `) if err != nil { return fmt.Errorf("failed to clear closed_at for non-closed issues: %w", err) } _, err = db.Exec(` UPDATE issues SET closed_at = COALESCE(updated_at, CURRENT_TIMESTAMP) WHERE status = 'closed' AND closed_at IS NULL `) if err != nil { return fmt.Errorf("failed to set closed_at for closed issues: %w", err) } return nil }