feat: more validators
This commit is contained in:
@@ -3,6 +3,7 @@ package game
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
@@ -17,9 +18,9 @@ const (
|
||||
|
||||
var (
|
||||
CargoTypeSet map[string]CargoType = map[string]CargoType{
|
||||
CargoColonist.String(): CargoColonist,
|
||||
CargoMaterial.String(): CargoMaterial,
|
||||
CargoCapital.String(): CargoCapital,
|
||||
strings.ToLower(CargoColonist.String()): CargoColonist,
|
||||
strings.ToLower(CargoMaterial.String()): CargoMaterial,
|
||||
strings.ToLower(CargoCapital.String()): CargoCapital,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package game
|
||||
|
||||
import "strings"
|
||||
|
||||
type RouteType string
|
||||
|
||||
const (
|
||||
@@ -11,10 +13,10 @@ const (
|
||||
|
||||
var (
|
||||
RouteTypeSet map[string]RouteType = map[string]RouteType{
|
||||
RouteMaterial.String(): RouteMaterial,
|
||||
RouteCapital.String(): RouteCapital,
|
||||
RouteColonist.String(): RouteColonist,
|
||||
RouteEmpty.String(): RouteEmpty,
|
||||
strings.ToLower(RouteMaterial.String()): RouteMaterial,
|
||||
strings.ToLower(RouteCapital.String()): RouteCapital,
|
||||
strings.ToLower(RouteColonist.String()): RouteColonist,
|
||||
strings.ToLower(RouteEmpty.String()): RouteEmpty,
|
||||
}
|
||||
RouteToCargo map[RouteType]CargoType = map[RouteType]CargoType{
|
||||
RouteColonist: CargoColonist,
|
||||
|
||||
@@ -35,31 +35,162 @@ const (
|
||||
CommandTypePlanetRouteRemove CommandType = "planetRouteRemove"
|
||||
)
|
||||
|
||||
type DecodableCommand interface {
|
||||
CommandType() CommandType
|
||||
}
|
||||
|
||||
type CommandMeta struct {
|
||||
Type CommandType `json:"@type" binding:"required,notblank"`
|
||||
}
|
||||
|
||||
func (cm CommandMeta) CommandType() CommandType {
|
||||
return cm.Type
|
||||
}
|
||||
|
||||
type CommandRaceQuit struct {
|
||||
CommandMeta
|
||||
}
|
||||
|
||||
type CommandRaceVote struct {
|
||||
CommandMeta
|
||||
Recipient string `json:"recipient" binding:"required,notblank"`
|
||||
Acceptor string `json:"acceptor" binding:"required,notblank"`
|
||||
}
|
||||
|
||||
type CommandRaceRelation struct {
|
||||
CommandMeta
|
||||
Opponent string `json:"recipient" binding:"required,notblank"`
|
||||
Acceptor string `json:"acceptor" binding:"required,notblank"`
|
||||
Relation string `json:"relation" binding:"required,notblank"`
|
||||
}
|
||||
|
||||
type CommandShipClassCreate struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank"`
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
Drive float64 `json:"drive" binding:"eq=0|gte=1"`
|
||||
Armament int `json:"armament" binding:"ammoWeapons=Weapons"`
|
||||
Weapons float64 `json:"weapons" binding:"ammoWeapons=Armament"`
|
||||
Shields float64 `json:"shields" binding:"eq=0|gte=1"`
|
||||
Cargo float64 `json:"cargo" binding:"eq=0|gte=1"`
|
||||
}
|
||||
|
||||
type CommandShipClassMerge struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank,entity,nefield=Target"`
|
||||
Target string `json:"target" binding:"required,notblank,entity,nefield=Class"`
|
||||
}
|
||||
|
||||
type CommandShipClassRemove struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
}
|
||||
|
||||
type CommandShipGroupLoad struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Cargo string `json:"cargo" binding:"required,notblank,oneof=COL MAT CAP"`
|
||||
Ships int `json:"ships" binding:"gte=0"`
|
||||
Quantity float64 `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandShipGroupUnload struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Ships int `json:"ships" binding:"gte=0"`
|
||||
Quantity float64 `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandShipGroupSend struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Destination int `json:"planetNumber" binding:"gte=0"`
|
||||
Quantity int `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandShipGroupUpgrade struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Tech string `json:"tech" binding:"oneof=ALL DRIVE WEAPONS SHIELDS CARGO"`
|
||||
MaxShips int `json:"maxShips" binding:"gte=0"`
|
||||
Level int `json:"level" binding:"gte=1"`
|
||||
}
|
||||
|
||||
type CommandShipGroupMerge struct {
|
||||
CommandMeta
|
||||
}
|
||||
|
||||
type CommandShipGroupBreak struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Quantity int `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandShipGroupDismantle struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Quantity int `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandShipGroupTransfer struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Acceptor string `json:"acceptor" binding:"required,notblank"`
|
||||
Quantity int `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandShipGroupJoinFleet struct {
|
||||
CommandMeta
|
||||
ID string `json:"id" binding:"required,uuid_rfc4122"`
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
Quantity int `json:"quantity" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandFleetMerge struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank,entity,nefield=Target"`
|
||||
Target string `json:"target" binding:"required,notblank,entity,nefield=Name"`
|
||||
}
|
||||
|
||||
type CommandFleetSend struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
Destination int `json:"planetNumber" binding:"gte=0"`
|
||||
}
|
||||
|
||||
type CommandScienceCreate struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
Drive float64 `json:"drive" binding:"gte=0,lte=1"`
|
||||
Weapons float64 `json:"weapons" binding:"gte=0,lte=1"`
|
||||
Shields float64 `json:"shields" binding:"gte=0,lte=1"`
|
||||
Cargo float64 `json:"cargo" binding:"gte=0,lte=1"`
|
||||
}
|
||||
|
||||
type CommandScienceRemove struct {
|
||||
CommandMeta
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
}
|
||||
|
||||
type CommandPlanetRename struct {
|
||||
CommandMeta
|
||||
Number int `json:"planetNumber" binding:"gte=0"`
|
||||
Name string `json:"name" binding:"required,notblank,entity"`
|
||||
}
|
||||
|
||||
type CommandPlanetProduce struct {
|
||||
CommandMeta
|
||||
Number int `json:"planetNumber" binding:"gte=0"`
|
||||
Production string `json:"production" binding:"oneof=MAT CAP DRIVE WEAPONS SHIELDS CARGO SCIENCE SHIP"`
|
||||
Subject string `json:"subject" binding:"subject"`
|
||||
}
|
||||
|
||||
type CommandPlanetRouteSet struct {
|
||||
CommandMeta
|
||||
Origin int `json:"fromPlanetNumber" binding:"gte=0,nefield=Destination"`
|
||||
Destination int `json:"toPlanetNumber" binding:"gte=0,nefield=Number"`
|
||||
LoadType string `json:"loadType" binding:"oneof=MAT CAP COL EMP"`
|
||||
}
|
||||
|
||||
type CommandPlanetRouteRemove struct {
|
||||
CommandMeta
|
||||
Origin int `json:"fromPlanetNumber" binding:"gte=0,nefield=Destination"`
|
||||
LoadType string `json:"loadType" binding:"oneof=MAT CAP COL EMP"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user