af30846091
Validation of a player's order now applies every command against a transient game-state snapshot and records the per-command outcome (cmdApplied, cmdErrorCode) in each command's meta. The order is persisted even when some commands are rejected, and the response is 202 + UserGamesOrder so clients can surface the partial failure without the chain collapsing into "downstream service is unavailable". Pkg/error consts are reshelved onto three explicit ranges with a package doc and helpers (IsInternalCode/IsInputCode/IsGameStateCode): 1xxx internal/server (500/501), 2xxx structural input (400), 3xxx game-state per-command rejection (400 when escaping HTTP, otherwise recorded as cmdErrorCode). Two pre-existing typos fixed mechanically (ErrBeakGroupNumberNotEnough -> ErrBreakGroupNumberNotEnough, ErrRaceExinct -> ErrRaceExtinct) along with all callsites. Engine errorResponse maps *GenericError by shelf rather than mapping everything to 500. The Quit-not-last structural check in Controller.ValidateOrder is preserved and its type assertion fixed (was a value assertion against a pointer-typed command, so the check silently never fired). Backend, gateway and UI are unchanged — they were already correct on the 202 path; only the engine collapsing per-command rejection into 500 was needed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
30 lines
815 B
Go
30 lines
815 B
Go
package error
|
|
|
|
func NewRaceExtinctError(arg ...any) error {
|
|
return newGenericError(ErrRaceExtinct, arg...)
|
|
}
|
|
|
|
func NewGameNotInitializedError(arg ...any) error {
|
|
return newGenericError(ErrGameNotInitialized, arg...)
|
|
}
|
|
|
|
func NewReportNotFoundError(arg ...any) error {
|
|
return newGenericError(ErrReportNotFound, arg...)
|
|
}
|
|
|
|
func NewGameStateError(arg ...any) error {
|
|
return newGenericError(ErrGameStateInvalid, arg...)
|
|
}
|
|
|
|
func NewDeleteShipTypeExistingGroupError(arg ...any) error {
|
|
return newGenericError(ErrDeleteShipTypeExistingGroup, arg...)
|
|
}
|
|
|
|
func NewDeleteShipTypePlanetProductionError(arg ...any) error {
|
|
return newGenericError(ErrDeleteShipTypePlanetProduction, arg...)
|
|
}
|
|
|
|
func NewDeleteSciencePlanetProductionError(arg ...any) error {
|
|
return newGenericError(ErrDeleteSciencePlanetProduction, arg...)
|
|
}
|