core/internal/domain/base_player.go

139 lines
2.5 KiB
Go

package domain
import (
"math"
"net/url"
)
type BasePlayer struct {
id int
name string
numVillages int
points int
rank int
tribeID int
od OpponentsDefeated
profileURL *url.URL
}
const basePlayerModelName = "BasePlayer"
func NewBasePlayer(
id int,
name string,
numVillages int,
points int,
rank int,
tribeID int,
od OpponentsDefeated,
profileURL *url.URL,
) (BasePlayer, error) {
if err := validateIntInRange(id, 1, math.MaxInt); err != nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "id",
Err: err,
}
}
if err := validateStringLen(name, playerNameMinLength, playerNameMaxLength); err != nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "name",
Err: err,
}
}
if err := validateIntInRange(numVillages, 0, math.MaxInt); err != nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "numVillages",
Err: err,
}
}
if err := validateIntInRange(points, 0, math.MaxInt); err != nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "points",
Err: err,
}
}
if err := validateIntInRange(rank, 0, math.MaxInt); err != nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "rank",
Err: err,
}
}
if err := validateIntInRange(tribeID, 0, math.MaxInt); err != nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "tribeID",
Err: err,
}
}
if profileURL == nil {
return BasePlayer{}, ValidationError{
Model: basePlayerModelName,
Field: "profileURL",
Err: ErrNil,
}
}
return BasePlayer{
id: id,
name: name,
numVillages: numVillages,
points: points,
rank: rank,
tribeID: tribeID,
od: od,
profileURL: profileURL,
}, nil
}
func (p BasePlayer) ID() int {
return p.id
}
func (p BasePlayer) Name() string {
return p.name
}
func (p BasePlayer) NumVillages() int {
return p.numVillages
}
func (p BasePlayer) Points() int {
return p.points
}
func (p BasePlayer) Rank() int {
return p.rank
}
func (p BasePlayer) TribeID() int {
return p.tribeID
}
func (p BasePlayer) OD() OpponentsDefeated {
return p.od
}
func (p BasePlayer) ProfileURL() *url.URL {
if p.profileURL == nil {
return &url.URL{}
}
return p.profileURL
}
func (p BasePlayer) IsZero() bool {
return p == BasePlayer{}
}
type BasePlayers []BasePlayer