55 lines
2.5 KiB
Go
55 lines
2.5 KiB
Go
package lobby
|
|
|
|
import "errors"
|
|
|
|
// Sentinel errors surface common rejection reasons across the lobby
|
|
// package. Handlers map them to HTTP envelopes through `respondLobbyError`
|
|
// in `internal/server/handlers_user_lobby_helpers.go`.
|
|
//
|
|
// Adding a new sentinel here is a deliberate API change: it appears in the
|
|
// handler error map and may surface as a new wire `code` value. Reuse the
|
|
// existing set when the behaviour overlaps.
|
|
var (
|
|
// ErrInvalidInput reports request-level validation failures (empty
|
|
// fields, malformed cron expressions, unknown enum values, race-name
|
|
// policy rejections). Maps to 400 invalid_request.
|
|
ErrInvalidInput = errors.New("lobby: invalid input")
|
|
|
|
// ErrNotFound reports that the requested record (game, application,
|
|
// invite, membership, race name) does not exist or is not visible to
|
|
// the caller. Maps to 404 not_found.
|
|
ErrNotFound = errors.New("lobby: not found")
|
|
|
|
// ErrForbidden reports that the caller is authenticated but not
|
|
// authorised for the requested action — most commonly "not the owner
|
|
// of this private game". Maps to 403 forbidden.
|
|
ErrForbidden = errors.New("lobby: forbidden")
|
|
|
|
// ErrConflict reports that the requested action conflicts with the
|
|
// current persisted state (illegal status transition, duplicate
|
|
// application, race-name canonical taken, invite already redeemed).
|
|
// Maps to 409 conflict.
|
|
ErrConflict = errors.New("lobby: conflict")
|
|
|
|
// ErrInvalidStatus reports a state-machine transition rejected by the
|
|
// game/application/invite/membership status. Treated as ErrConflict
|
|
// at the wire boundary; carried as a separate sentinel so transition
|
|
// callers can branch on it without parsing the wrapped message.
|
|
ErrInvalidStatus = errors.New("lobby: invalid status transition")
|
|
|
|
// ErrRaceNameTaken reports that a race-name canonical key is already
|
|
// claimed by a different user (registered, reserved, or
|
|
// pending_registration). Treated as ErrConflict at the wire boundary.
|
|
ErrRaceNameTaken = errors.New("lobby: race name is taken")
|
|
|
|
// ErrEntitlementExceeded reports that the caller already holds the
|
|
// maximum number of registered race names allowed by their tier.
|
|
// Treated as ErrConflict at the wire boundary.
|
|
ErrEntitlementExceeded = errors.New("lobby: entitlement quota exceeded")
|
|
|
|
// ErrPendingExpired reports that the pending_registration window
|
|
// passed before the user attempted to promote it to registered.
|
|
// Treated as ErrConflict at the wire boundary.
|
|
ErrPendingExpired = errors.New("lobby: pending registration expired")
|
|
)
|