feat(game): 添加游戏历史记录实时同步功能
- 实现了游戏历史记录的实时推送和展示功能 - 添加了总奖池金额显示在历史记录界面中 - 新增 PeriodPayoutHistoryEntry 和 PeriodPayoutEventData 类型定义 - 在游戏状态管理中添加了待处理赔付历史记录状态 - 实现了 WebSocket 消息解析器来处理赔付数据 - 添加了移动端和桌面端历史记录组件的实时数据展示 - 集成了注册邀请码查询参数功能并优化了注册表单逻辑 - 重构了历史记录视图模型以支持实时数据流处理
This commit is contained in:
@@ -6,6 +6,7 @@ import type {
|
||||
JackpotHitEventDataDto,
|
||||
JackpotHitItemDto,
|
||||
PeriodEventData,
|
||||
PeriodPayoutEventData,
|
||||
UserStreakMessageData,
|
||||
WalletChangedData,
|
||||
} from '@/type'
|
||||
@@ -187,6 +188,58 @@ export function extractPeriodEventData(
|
||||
}
|
||||
}
|
||||
|
||||
function toNumberArray(value: unknown) {
|
||||
if (!Array.isArray(value)) {
|
||||
return []
|
||||
}
|
||||
|
||||
return value
|
||||
.map((item) => toOptionalNumber(item))
|
||||
.filter(
|
||||
(item): item is number =>
|
||||
typeof item === 'number' && Number.isInteger(item),
|
||||
)
|
||||
}
|
||||
|
||||
function toStringArray(value: unknown) {
|
||||
if (!Array.isArray(value)) {
|
||||
return []
|
||||
}
|
||||
|
||||
return value
|
||||
.map((item) => toOptionalString(item))
|
||||
.filter((item): item is string => typeof item === 'string')
|
||||
}
|
||||
|
||||
export function extractPeriodPayoutData(
|
||||
message: GameSocketMessage,
|
||||
): PeriodPayoutEventData | null {
|
||||
const period = extractPeriodEventData(message)
|
||||
|
||||
if (!period) {
|
||||
return null
|
||||
}
|
||||
|
||||
const data = getNestedRecord(message, 'data')
|
||||
const source = data ?? (message as Record<string, unknown>)
|
||||
const root = message as Record<string, unknown>
|
||||
|
||||
return {
|
||||
...period,
|
||||
betAmount: toOptionalString(source.bet_amount) ?? null,
|
||||
betFlowerNames: toStringArray(source.bet_flower_names),
|
||||
betNumbers: toNumberArray(source.bet_numbers),
|
||||
payoutRemainingSeconds:
|
||||
toOptionalNumber(source.payout_remaining_seconds) ?? null,
|
||||
payoutSeconds: toOptionalNumber(source.payout_seconds) ?? null,
|
||||
payoutUntil: toOptionalNumber(source.payout_until) ?? null,
|
||||
resultFlowerName: toOptionalString(source.result_flower_name) ?? null,
|
||||
serverTime:
|
||||
toOptionalNumber(source.server_time ?? root.server_time) ?? null,
|
||||
winAmount: toOptionalString(source.win_amount) ?? null,
|
||||
}
|
||||
}
|
||||
|
||||
export function extractWalletChangedData(
|
||||
message: GameSocketMessage,
|
||||
): WalletChangedData | null {
|
||||
|
||||
Reference in New Issue
Block a user