package constants // EnakGame values (docs/rfc-enakgame.md §5). Each set matches a CHECK in the // migrations. // games.status. const ( GameStatusDraft = "DRAFT" GameStatusActive = "ACTIVE" GameStatusInactive = "INACTIVE" // The old games, and games taken out of EnakGame for good. Never changed again. GameStatusArchived = "ARCHIVED" ) // game_reward_configs.reward_type (§8). const ( GameRewardTypeFixed = "FIXED" GameRewardTypeScoreBased = "SCORE_BASED" GameRewardTypeOutcomeBased = "OUTCOME_BASED" GameRewardTypeProbability = "PROBABILITY" ) // game_reward_configs.status. Only status ever changes on a config (D7). const ( GameRewardConfigStatusDraft = "DRAFT" GameRewardConfigStatusActive = "ACTIVE" GameRewardConfigStatusRetired = "RETIRED" ) // game_sessions.status: STARTED → COMPLETED | REFUNDED | EXPIRED (D4). const ( GameSessionStatusStarted = "STARTED" GameSessionStatusCompleted = "COMPLETED" GameSessionStatusRefunded = "REFUNDED" GameSessionStatusExpired = "EXPIRED" ) // game_sessions.refund_reason (§7.3). const ( GameSessionRefundSystemError = "SYSTEM_ERROR" GameSessionRefundGameDeactivated = "GAME_DEACTIVATED" ) // game_budgets.scope (§5.6). const ( GameBudgetScopeGlobal = "GLOBAL" GameBudgetScopeEvent = "EVENT" ) // audit_logs.actor_type (§5.9). const ( AuditActorUser = "USER" AuditActorSystem = "SYSTEM" ) // audit_logs.source: where a change came from. const ( AuditSourceAdminAPI = "admin_api" AuditSourceBudgetController = "budget_controller" AuditSourceSessionJob = "session_job" AuditSourceBudgetPeriodJob = "budget_period_job" AuditSourceCustomerAPI = "customer_api" ) // audit_logs.entity_type: what an audit row is about (§13). const ( AuditEntityGame = "GAME" AuditEntityGameRewardConfig = "GAME_REWARD_CONFIG" AuditEntityGameBudget = "GAME_BUDGET" AuditEntityGameEvent = "GAME_EVENT" AuditEntityGameSession = "GAME_SESSION" AuditEntityVoucher = "VOUCHER" ) // audit_logs.action on a GAME_BUDGET whose recommendation was accepted. const AuditActionRecommendationAccepted = "RECOMMENDATION_ACCEPTED" // game_reward_counters.scope_type: what an Economy Guard counter counts for (§5.8). const ( GameRewardScopeUser = "USER" GameRewardScopeGame = "GAME" GameRewardScopeEvent = "EVENT" GameRewardScopeGlobal = "GLOBAL" ) // vouchers.voucher_type (§5.7). const ( VoucherTypeFixedValue = "FIXED_VALUE" VoucherTypePercentage = "PERCENTAGE" VoucherTypeFreeItem = "FREE_ITEM" VoucherTypeMerchantBenefit = "MERCHANT_BENEFIT" ) // vouchers.stock_mode: where a redemption's voucher comes from. const ( // A counted stock with nothing to hand out but the redemption itself. VoucherStockStatic = "STATIC" // One imported code per redemption. VoucherStockCodePool = "CODE_POOL" // Issued by a provider (§7.5), not before EG-801. VoucherStockExternal = "EXTERNAL" ) // vouchers.status. const ( VoucherStatusDraft = "DRAFT" VoucherStatusActive = "ACTIVE" VoucherStatusInactive = "INACTIVE" VoucherStatusArchived = "ARCHIVED" ) // voucher_codes.status. const ( VoucherCodeAvailable = "AVAILABLE" VoucherCodeReserved = "RESERVED" VoucherCodeRedeemed = "REDEEMED" VoucherCodeExpired = "EXPIRED" VoucherCodeCancelled = "CANCELLED" ) // voucher_redemptions.status. const ( VoucherRedemptionPending = "PENDING" VoucherRedemptionCompleted = "COMPLETED" VoucherRedemptionFailed = "FAILED" ) // Budget statuses (PRD §32), from its utilization and forecast against its thresholds. const ( GameBudgetHealthy = "HEALTHY" GameBudgetWarning = "WARNING" GameBudgetCritical = "CRITICAL" GameBudgetExhausted = "EXHAUSTED" ) // Thresholds of a budget that sets none, in percent (PRD §8). Pending RFC §19.2 #4. const ( GameBudgetWarningDefault = int64(70) GameBudgetCriticalDefault = int64(90) ) // game_events.status. An ACTIVE event changes rewards only between its start_at and // end_at. const ( GameEventStatusDraft = "DRAFT" GameEventStatusActive = "ACTIVE" GameEventStatusEnded = "ENDED" GameEventStatusCancelled = "CANCELLED" ) // Budget Controller guardrails of a budget that sets none (PRD §31). Pending RFC // §19.2 #4. const ( // Percent a recommendation may move rewards by, either way. GameBudgetMaxStepDefault = int64(10) // Bounds of a game's multiplier, in percent of the configuration its admin wrote. GameBudgetMinMultiplierDefault = int64(50) GameBudgetMaxMultiplierDefault = int64(150) // Days after an accepted recommendation before the next one, in the organization. // The same as the forecast window, so the next one sees the effect of the last. GameBudgetCooldownDaysDefault = int64(7) ) // What a Budget Controller recommendation says (docs/rfc-enakgame.md §10). Only // RECOMMENDED can be accepted. const ( GameBudgetRecommended = "RECOMMENDED" // The forecast meets the budget closely enough that rewards stay. GameBudgetRecommendationNoChange = "NO_CHANGE" // The last accepted recommendation of the organization is too recent. GameBudgetRecommendationCooldown = "COOLDOWN" // Every game is already at its min or max multiplier. GameBudgetRecommendationAtLimit = "AT_LIMIT" // No cost in the forecast window to extrapolate from. GameBudgetRecommendationNoData = "INSUFFICIENT_DATA" // The budget's period has not started or has no day left after today. GameBudgetRecommendationOutOfPeriod = "OUT_OF_PERIOD" )