package migrations import ( "context" "git.haelnorr.com/h/oslstats/internal/db" "github.com/uptrace/bun" ) func init() { Migrations.MustRegister( // UP migration func(ctx context.Context, conn *bun.DB) error { // Create playoff_brackets table _, err := conn.NewCreateTable(). Model((*db.PlayoffBracket)(nil)). IfNotExists(). Exec(ctx) if err != nil { return err } // Create playoff_series table _, err = conn.NewCreateTable(). Model((*db.PlayoffSeries)(nil)). IfNotExists(). Exec(ctx) if err != nil { return err } // Create playoff_matches table _, err = conn.NewCreateTable(). Model((*db.PlayoffMatch)(nil)). IfNotExists(). Exec(ctx) if err != nil { return err } // Add foreign key for winner_next_series_id _, err = conn.NewRaw(` ALTER TABLE playoff_series ADD CONSTRAINT fk_winner_next_series FOREIGN KEY (winner_next_series_id) REFERENCES playoff_series(id) ON DELETE SET NULL `).Exec(ctx) if err != nil { return err } // Add foreign key for loser_next_series_id _, err = conn.NewRaw(` ALTER TABLE playoff_series ADD CONSTRAINT fk_loser_next_series FOREIGN KEY (loser_next_series_id) REFERENCES playoff_series(id) ON DELETE SET NULL `).Exec(ctx) if err != nil { return err } return nil }, // DOWN migration func(ctx context.Context, conn *bun.DB) error { // Drop tables in reverse order (respecting foreign keys) _, err := conn.NewDropTable(). Model((*db.PlayoffMatch)(nil)). IfExists(). Cascade(). Exec(ctx) if err != nil { return err } _, err = conn.NewDropTable(). Model((*db.PlayoffSeries)(nil)). IfExists(). Cascade(). Exec(ctx) if err != nil { return err } _, err = conn.NewDropTable(). Model((*db.PlayoffBracket)(nil)). IfExists(). Cascade(). Exec(ctx) if err != nil { return err } return nil }, ) }