1.优化接口/api/v1/getPlayerGameRecord

2.增加接口日志记录接口request和response
This commit is contained in:
2026-05-13 09:59:15 +08:00
parent e74fc6069c
commit 6a1fd639a4
8 changed files with 365 additions and 81 deletions

View File

@@ -352,12 +352,10 @@ auth-token: {authtoken}
- `auth-token: {authtoken}`
- Body 参数:
- `username`(可选):玩家账号;不传则**不按玩家筛选**(返回库内符合条件的记录,请谨慎使用)
- `start_create_time`(可选):创建时间下限,与表字段 `create_time` 比较(`>=`);不传则不限制
- `end_create_time`(可选):创建时间上限(`<=`);不传则不限制
- `page`(可选):页码,默认 `1`,小于 `1` 时按 `1` 处理
- `limit`(可选):每页条数,默认 `20`;若小于 `1` 或大于 `100` 则按 `20` 处理
- `start_create_time`(可选)`end_create_time`(可选):与表字段 `create_time` 比较;**仅允许落在「当前时间起向前 7 天」内**,且两者跨度**不得超过 7 天**;均不传时服务端默认查询该 7 天窗口。`end_create_time` 晚于当前时间时按当前时间截断;不满足规则时返回参数错误。
- `limit`(可选):返回条数上限,默认 `20`;若小于 `1` 或大于 `2000` 则按 `20` 处理
- 返回说明:
- 成功时 `data` 为**数组**当前页记录列表),每条为 `dice_play_record` 行数据,并附带 `dice_player``{ id, username, phone }`(若批量关联不到则为 `null`
- 成功时 `data` 为**数组**`id` 倒序,最多 `limit`),每条为 `dice_play_record` 行数据,并附带 `dice_player``{ id, username, phone }`(若批量关联不到则为 `null`
- 若传了 `username` 且玩家不存在:`data` 为空数组 `[]`
记录主要字段(与库表一致,节选):`id``player_id``admin_id``lottery_config_id``lottery_type``ante``paid_amount``is_win``win_coin``super_win_coin``reward_win_coin``use_coins``direction``reward_tier``lottery_id``start_index``target_index``roll_array``roll_number``lottery_name``status``create_time``update_time` 等。
@@ -436,7 +434,7 @@ auth-token: {authtoken}
- Body 参数:
- `username`(可选):玩家账号;不传则**不按玩家筛选**
- `start_create_time``end_create_time`(可选):同 `getPlayerGameRecord`,作用于 `create_time`
- `page``limit`(可选):分页规则同
- `limit`(可选):条数规则同 `getPlayerGameRecord`
- 返回说明:
- 成功时 `data` 为数组;每条为 `dice_player_wallet_record` 数据,并含关联 `dice_player``id, username, phone`
- 若传了 `username` 且玩家不存在:`data` 为空数组 `[]`
@@ -448,7 +446,7 @@ auth-token: {authtoken}
- 路径: `POST /api/v1/getPlayerTicketRecord`
- Header:
- `auth-token: {authtoken}`
- Body 参数:与 **7.4** 相同(`username``start_create_time``end_create_time``page``limit`
- Body 参数:与 **7.4** 相同(`username``start_create_time``end_create_time``limit`
- 返回说明:
- 成功时 `data``dice_player_ticket_record` 列表,含关联 `dice_player`
- 若传了 `username` 且玩家不存在:`data` 为空数组 `[]`
@@ -587,7 +585,6 @@ curl --location --request POST 'https://{your-domain}/api/v1/getPlayerGameRecord
--header 'auth-token: {authtoken}' \
--data-raw '{
"username":"test_player_001",
"page":1,
"limit":20
}'
```
@@ -600,7 +597,6 @@ curl --location --request POST 'https://{your-domain}/api/v1/getPlayerWalletReco
--header 'auth-token: {authtoken}' \
--data-raw '{
"username":"test_player_001",
"page":1,
"limit":20
}'
```
@@ -613,7 +609,6 @@ curl --location --request POST 'https://{your-domain}/api/v1/getPlayerTicketReco
--header 'auth-token: {authtoken}' \
--data-raw '{
"username":"test_player_001",
"page":1,
"limit":20
}'
```

View File

@@ -352,12 +352,10 @@ An independent endpoint is provided: `POST /api/v1/getGameList`, supporting both
- `auth-token: {authtoken}`
- Body parameters:
- `username` (optional): Player username; if omitted, **no player filter** is applied (returns matching rows from the database—use with care)
- `start_create_time` (optional): Lower bound on `create_time` (`>=`); if omitted, no lower bound
- `end_create_time` (optional): Upper bound on `create_time` (`<=`); if omitted, no upper bound
- `page` (optional): Page number, default `1`; values less than `1` are treated as `1`
- `limit` (optional): Page size, default `20`; if less than `1` or greater than `100`, it is treated as `20`
- `start_create_time` (optional), `end_create_time` (optional): Filter on `create_time`. Queries are **restricted to the rolling 7-day window ending at server “now”**, and the span between the two bounds **must not exceed 7 days**. If both are omitted, the server defaults to that full 7-day window. If `end_create_time` is after “now”, it is truncated to “now”. Invalid ranges return a parameter error.
- `limit` (optional): Maximum number of rows to return, default `20`; if less than `1` or greater than `2000`, it is treated as `20`
- Response notes:
- On success, `data` is an **array** (current page). Each item is a `dice_play_record` row plus `dice_player`: `{ id, username, phone }` (or `null` if the player cannot be resolved)
- On success, `data` is an **array** (ordered by `id` descending, at most `limit` rows). Each item is a `dice_play_record` row plus `dice_player`: `{ id, username, phone }` (or `null` if the player cannot be resolved)
- If `username` is provided but the player does not exist: `data` is an empty array `[]`
Main fields (same as table columns, partial list): `id`, `player_id`, `admin_id`, `lottery_config_id`, `lottery_type`, `ante`, `paid_amount`, `is_win`, `win_coin`, `super_win_coin`, `reward_win_coin`, `use_coins`, `direction`, `reward_tier`, `lottery_id`, `start_index`, `target_index`, `roll_array`, `roll_number`, `lottery_name`, `status`, `create_time`, `update_time`, etc.
@@ -436,7 +434,7 @@ If the integrators wallet flow requires “return lobby URL after transfer”
- Body parameters:
- `username` (optional): Player username; if omitted, **no player filter** is applied
- `start_create_time`, `end_create_time` (optional): Same as `getPlayerGameRecord`, applied to `create_time`
- `page`, `limit` (optional): Same pagination rules as above
- `limit` (optional): Same rules as `getPlayerGameRecord`
- Response notes:
- On success, `data` is an array of `dice_player_wallet_record` rows with related `dice_player` (`id`, `username`, `phone`)
- If `username` is provided but the player does not exist: `data` is an empty array `[]`
@@ -448,7 +446,7 @@ If the integrators wallet flow requires “return lobby URL after transfer”
- Path: `POST /api/v1/getPlayerTicketRecord`
- Header:
- `auth-token: {authtoken}`
- Body parameters: Same as **7.4** (`username`, `start_create_time`, `end_create_time`, `page`, `limit`)
- Body parameters: Same as **7.4** (`username`, `start_create_time`, `end_create_time`, `limit`)
- Response notes:
- On success, `data` is a list of `dice_player_ticket_record` rows with related `dice_player`
- If `username` is provided but the player does not exist: `data` is an empty array `[]`
@@ -587,7 +585,6 @@ curl --location --request POST 'https://{your-domain}/api/v1/getPlayerGameRecord
--header 'auth-token: {authtoken}' \
--data-raw '{
"username":"test_player_001",
"page":1,
"limit":20
}'
```
@@ -600,7 +597,6 @@ curl --location --request POST 'https://{your-domain}/api/v1/getPlayerWalletReco
--header 'auth-token: {authtoken}' \
--data-raw '{
"username":"test_player_001",
"page":1,
"limit":20
}'
```
@@ -613,7 +609,6 @@ curl --location --request POST 'https://{your-domain}/api/v1/getPlayerTicketReco
--header 'auth-token: {authtoken}' \
--data-raw '{
"username":"test_player_001",
"page":1,
"limit":20
}'
```

View File

@@ -142,7 +142,7 @@ Endpoints like "get player game record" or wallet histories can easily trigger N
- Use `whereIn('player_id', $playerIds)` instead of one query per player.
- Use eager loading (`with(['dicePlayer'])`) for related player info.
- Keep page size (`limit`) moderate (for example, 100 rows or less per page).
- Keep `limit` reasonable for load (default `20`, maximum `2000`; records are always scoped to a rolling 7-day window).
### 4.4 Redis vs DB coordination

View File

@@ -145,7 +145,7 @@
- 使用 `whereIn('player_id', $playerIds)` 做批量查询;
- 使用 `with(['dicePlayer'])` 或 join 预加载关联的玩家信息;
- 控制单页 `limit`,例如不超过 100 条
- 控制 `limit` 以兼顾负载(默认 `20`,上限 `2000`;接口已固定为「最近 7 天」时间窗)
### 4.4 Redis 与 DB 的整体协同