53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package migrations
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"gitea.dwysokinski.me/twhelp/core/internal/bun/bunmodel"
|
|
"github.com/uptrace/bun"
|
|
)
|
|
|
|
func init() {
|
|
migrations.MustRegister(func(ctx context.Context, db *bun.DB) error {
|
|
var servers bunmodel.Servers
|
|
|
|
if err := db.NewSelect().
|
|
Model(&servers).
|
|
ExcludeColumn("snapshot_created_at").
|
|
Where("special = false").
|
|
Scan(ctx); err != nil {
|
|
return fmt.Errorf("couldn't select servers from the db: %w", err)
|
|
}
|
|
|
|
for _, s := range servers {
|
|
numPlayers, err := db.NewSelect().Model((*bunmodel.Player)(nil)).Where("server_key = ?", s.Key).Count(ctx)
|
|
if err != nil {
|
|
return fmt.Errorf("%s: numPlayers: %w", s.Key, err)
|
|
}
|
|
|
|
numTribes, err := db.NewSelect().Model((*bunmodel.Tribe)(nil)).Where("server_key = ?", s.Key).Count(ctx)
|
|
if err != nil {
|
|
return fmt.Errorf("%s: numTribes: %w", s.Key, err)
|
|
}
|
|
|
|
_, err = db.NewUpdate().
|
|
Model((*bunmodel.Server)(nil)).
|
|
Returning("NULL").
|
|
Where("key = ?", s.Key).
|
|
Set("num_players = ?", numPlayers).
|
|
Set("num_inactive_players = ?", numPlayers-s.NumActivePlayers).
|
|
Set("num_tribes = ?", numTribes).
|
|
Set("num_inactive_tribes = ?", numTribes-s.NumActiveTribes).
|
|
Exec(ctx)
|
|
if err != nil {
|
|
return fmt.Errorf("%s: %w", s.Key, err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}, func(_ context.Context, _ *bun.DB) error {
|
|
return nil
|
|
})
|
|
}
|