2024-01-01 07:49:47 +00:00
|
|
|
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 {
|
|
|
|
return p.profileURL
|
|
|
|
}
|
|
|
|
|
2024-01-01 10:20:30 +00:00
|
|
|
func (p BasePlayer) IsZero() bool {
|
|
|
|
return p == BasePlayer{}
|
|
|
|
}
|
|
|
|
|
2024-01-01 07:49:47 +00:00
|
|
|
type BasePlayers []BasePlayer
|