Files
oslstats/internal/db/migrations/20260308140000_add_playoffs.go
2026-03-15 17:43:39 +11:00

99 lines
1.9 KiB
Go

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
},
)
}