core/internal/bun/bunmodel/tribe_change.go

87 lines
2.2 KiB
Go

package bunmodel
import (
"fmt"
"time"
"gitea.dwysokinski.me/twhelp/corev3/internal/domain"
"github.com/uptrace/bun"
)
type TribeChange struct {
bun.BaseModel `bun:"table:tribe_changes,alias:tc"`
ID int `bun:"id,pk,autoincrement,identity"`
ServerKey string `bun:"server_key,nullzero"`
PlayerID int `bun:"player_id,nullzero"`
Player Player `bun:"player,rel:belongs-to,join:player_id=id,join:server_key=server_key"`
NewTribeID int `bun:"new_tribe_id,nullzero"`
NewTribe Tribe `bun:"new_tribe,rel:belongs-to,join:new_tribe_id=id,join:server_key=server_key"`
OldTribeID int `bun:"old_tribe_id,nullzero"`
OldTribe Tribe `bun:"old_tribe,rel:belongs-to,join:old_tribe_id=id,join:server_key=server_key"`
CreatedAt time.Time `bun:"created_at,nullzero"`
}
func (tc TribeChange) ToDomain() (domain.TribeChange, error) {
converted, err := domain.UnmarshalTribeChangeFromDatabase(
tc.ID,
tc.ServerKey,
tc.PlayerID,
tc.OldTribeID,
tc.NewTribeID,
tc.CreatedAt,
)
if err != nil {
return domain.TribeChange{}, fmt.Errorf(
"couldn't construct domain.TribeChange (id=%d): %w",
tc.ID,
err,
)
}
return converted, nil
}
//nolint:gocyclo
func (tc TribeChange) ToDomainWithRelations() (domain.TribeChangeWithRelations, error) {
converted, err := tc.ToDomain()
if err != nil {
return domain.TribeChangeWithRelations{}, err
}
player, err := tc.Player.ToMeta()
if err != nil {
return domain.TribeChangeWithRelations{}, err
}
var oldTribe domain.NullTribeMeta
if tc.OldTribe.ID > 0 {
oldTribe.Valid = true
oldTribe.V, err = tc.OldTribe.ToMeta()
if err != nil {
return domain.TribeChangeWithRelations{}, err
}
}
var newTribe domain.NullTribeMeta
if tc.NewTribe.ID > 0 {
newTribe.Valid = true
newTribe.V, err = tc.NewTribe.ToMeta()
if err != nil {
return domain.TribeChangeWithRelations{}, err
}
}
return converted.WithRelations(player, oldTribe, newTribe), nil
}
type TribeChanges []TribeChange
func (tcs TribeChanges) ToDomain() (domain.TribeChanges, error) {
return sliceToDomain(tcs)
}
func (tcs TribeChanges) ToDomainWithRelations() (domain.TribeChangesWithRelations, error) {
return sliceToDomainWithRelations(tcs)
}