package bunmodel import ( "fmt" "time" "gitea.dwysokinski.me/twhelp/core/internal/domain" "github.com/uptrace/bun" ) var ServerMetaColumns = []string{"key", "url", "open"} type Server struct { bun.BaseModel `bun:"table:servers,alias:server"` Key string `bun:"key,nullzero,pk"` URL string `bun:"url,nullzero"` Open bool `bun:"open"` Special bool `bun:"special"` NumPlayers int `bun:"num_players"` NumActivePlayers int `bun:"num_active_players"` NumInactivePlayers int `bun:"num_inactive_players"` NumTribes int `bun:"num_tribes"` NumActiveTribes int `bun:"num_active_tribes"` NumInactiveTribes int `bun:"num_inactive_tribes"` NumVillages int `bun:"num_villages"` NumPlayerVillages int `bun:"num_player_villages"` NumBarbarianVillages int `bun:"num_barbarian_villages"` NumBonusVillages int `bun:"num_bonus_villages"` Config ServerConfig `bun:"config"` BuildingInfo BuildingInfo `bun:"building_info"` UnitInfo UnitInfo `bun:"unit_info"` CreatedAt time.Time `bun:"created_at,nullzero"` SnapshotCreatedAt time.Time `bun:"snapshot_created_at,nullzero"` PlayerDataUpdatedAt time.Time `bun:"player_data_synced_at,nullzero"` PlayerSnapshotsCreatedAt time.Time `bun:"player_snapshots_created_at,nullzero"` TribeDataUpdatedAt time.Time `bun:"tribe_data_synced_at,nullzero"` TribeSnapshotsCreatedAt time.Time `bun:"tribe_snapshots_created_at,nullzero"` VillageDataUpdatedAt time.Time `bun:"village_data_synced_at,nullzero"` EnnoblementDataUpdatedAt time.Time `bun:"ennoblement_data_synced_at,nullzero"` VersionCode string `bun:"version_code,nullzero"` } func (s Server) ToDomain() (domain.Server, error) { serverCfg, err := s.Config.ToDomain() if err != nil { return domain.Server{}, fmt.Errorf("couldn't construct domain.Server (key=%s): %w", s.Key, err) } buildingInfo, err := s.BuildingInfo.ToDomain() if err != nil { return domain.Server{}, fmt.Errorf("couldn't construct domain.Server (key=%s): %w", s.Key, err) } unitInfo, err := s.UnitInfo.ToDomain() if err != nil { return domain.Server{}, fmt.Errorf("couldn't construct domain.Server (key=%s): %w", s.Key, err) } converted, err := domain.UnmarshalServerFromDatabase( s.Key, s.VersionCode, s.URL, s.Open, s.Special, s.NumPlayers, s.NumActivePlayers, s.NumInactivePlayers, s.NumTribes, s.NumActiveTribes, s.NumInactiveTribes, s.NumVillages, s.NumPlayerVillages, s.NumBarbarianVillages, s.NumBonusVillages, serverCfg, buildingInfo, unitInfo, s.CreatedAt, s.SnapshotCreatedAt, s.PlayerDataUpdatedAt, s.PlayerSnapshotsCreatedAt, s.TribeDataUpdatedAt, s.TribeSnapshotsCreatedAt, s.VillageDataUpdatedAt, s.EnnoblementDataUpdatedAt, ) if err != nil { return domain.Server{}, fmt.Errorf("couldn't construct domain.Server (key=%s): %w", s.Key, err) } return converted, nil } func (s Server) ToMeta() (domain.ServerMeta, error) { converted, err := domain.UnmarshalServerMetaFromDatabase(s.Key, s.URL, s.Open) if err != nil { return domain.ServerMeta{}, fmt.Errorf("couldn't construct domain.ServerMeta (key=%s): %w", s.Key, err) } return converted, nil } type Servers []Server func (ss Servers) ToDomain() (domain.Servers, error) { return sliceToDomain(ss) }