87 lines
2.2 KiB
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)
|
|
}
|