189 lines
11 KiB
PHP
189 lines
11 KiB
PHP
<?php
|
||
|
||
use App\Http\Controllers\Api\V1\Admin\Auth\CaptchaController;
|
||
use App\Http\Controllers\Api\V1\Admin\Auth\LoginController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\OddsItemsReplaceController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\OddsVersionIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\OddsVersionPublishController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\OddsVersionShowController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\OddsVersionStoreController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigItemsReplaceController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionPublishController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionShowController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionStoreController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\RiskCapItemsReplaceController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\RiskCapVersionIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\RiskCapVersionPublishController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\RiskCapVersionShowController;
|
||
use App\Http\Controllers\Api\V1\Admin\Config\RiskCapVersionStoreController;
|
||
use App\Http\Controllers\Api\V1\Admin\Draw\AdminDrawIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Draw\AdminDrawResultBatchesIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Draw\AdminDrawShowController;
|
||
use App\Http\Controllers\Api\V1\Admin\Draw\DrawResultBatchPublishController;
|
||
use App\Http\Controllers\Api\V1\Admin\PingController as AdminPingController;
|
||
use App\Http\Controllers\Api\V1\Admin\Player\PlayerWalletShowController;
|
||
use App\Http\Controllers\Api\V1\Admin\PlayTypeIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\PlayTypePatchController;
|
||
use App\Http\Controllers\Api\V1\Admin\Risk\AdminRiskPoolIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Risk\AdminRiskPoolLockLogIndexController;
|
||
use App\Http\Controllers\Api\V1\Admin\Risk\AdminRiskPoolShowController;
|
||
use App\Http\Controllers\Api\V1\Admin\Wallet\TransferOrderListController;
|
||
use App\Http\Controllers\Api\V1\Admin\Wallet\WalletTransactionListController;
|
||
use App\Http\Controllers\Api\V1\Draw\DrawCurrentController;
|
||
use App\Http\Controllers\Api\V1\Draw\DrawResultShowController;
|
||
use App\Http\Controllers\Api\V1\Draw\DrawResultsIndexController;
|
||
use App\Http\Controllers\Api\V1\HealthController;
|
||
use App\Http\Controllers\Api\V1\Play\PlayEffectiveCatalogController;
|
||
use App\Http\Controllers\Api\V1\Player\MeController;
|
||
use App\Http\Controllers\Api\V1\Player\PingController as PlayerPingController;
|
||
use App\Http\Controllers\Api\V1\Ticket\TicketPlaceController;
|
||
use App\Http\Controllers\Api\V1\Ticket\TicketPreviewController;
|
||
use App\Http\Controllers\Api\V1\Wallet\WalletBalanceController;
|
||
use App\Http\Controllers\Api\V1\Wallet\WalletLogsController;
|
||
use App\Http\Controllers\Api\V1\Wallet\WalletTransferInController;
|
||
use App\Http\Controllers\Api\V1\Wallet\WalletTransferOutController;
|
||
use Illuminate\Support\Facades\Route;
|
||
|
||
/*
|
||
| Laravel 为本文件自动加前缀 `api`,此处再写 `v1`,故完整路径形如 `/api/v1/health`。
|
||
*/
|
||
|
||
Route::prefix('v1')->group(function (): void {
|
||
// 名称:服务健康检查
|
||
Route::get('health', HealthController::class)->name('api.v1.health');
|
||
|
||
// 名称:当前期号(下注大厅倒计时;无需登录)
|
||
Route::get('draw/current', DrawCurrentController::class)->name('api.v1.draw.current');
|
||
// 名称:已发布开奖往期 / 单期(公开)
|
||
Route::get('draw/results', DrawResultsIndexController::class)->name('api.v1.draw.results');
|
||
Route::get('draw/results/{draw_no}', DrawResultShowController::class)
|
||
->where('draw_no', '[0-9]{8}-[0-9]{3}')
|
||
->name('api.v1.draw.results.show');
|
||
|
||
// 名称:生效玩法 / 赔率 / 封顶目录(阶段 4;公开)
|
||
Route::get('play/effective', PlayEffectiveCatalogController::class)->name('api.v1.play.effective');
|
||
|
||
Route::prefix('player')
|
||
->name('api.v1.player.')
|
||
->group(function (): void {
|
||
// 名称:玩家端连通性探测
|
||
Route::get('ping', PlayerPingController::class)->name('ping');
|
||
});
|
||
|
||
Route::middleware('lottery.player')->group(function (): void {
|
||
Route::prefix('player')
|
||
->name('api.v1.player.')
|
||
->group(function (): void {
|
||
// 名称:当前登录玩家信息
|
||
Route::get('me', MeController::class)->name('me');
|
||
});
|
||
|
||
Route::prefix('wallet')
|
||
->name('api.v1.wallet.')
|
||
->group(function (): void {
|
||
// 名称:彩票钱包余额查询
|
||
Route::get('balance', WalletBalanceController::class)->name('balance');
|
||
// 名称:钱包流水(PRD §10.1.1)
|
||
Route::get('logs', WalletLogsController::class)->name('logs');
|
||
// 名称:主站 → 彩票 转入
|
||
Route::post('transfer-in', WalletTransferInController::class)->name('transfer-in');
|
||
// 名称:彩票 → 主站 转出
|
||
Route::post('transfer-out', WalletTransferOutController::class)->name('transfer-out');
|
||
});
|
||
|
||
Route::prefix('ticket')
|
||
->name('api.v1.ticket.')
|
||
->group(function (): void {
|
||
Route::post('preview', TicketPreviewController::class)->name('preview');
|
||
Route::post('place', TicketPlaceController::class)->name('place');
|
||
});
|
||
});
|
||
|
||
Route::prefix('admin')
|
||
->name('api.v1.admin.')
|
||
->group(function (): void {
|
||
Route::middleware('throttle:admin-auth-captcha')
|
||
->get('auth/captcha', CaptchaController::class)
|
||
->name('auth.captcha');
|
||
|
||
Route::middleware('throttle:admin-auth-login')
|
||
->post('auth/login', LoginController::class)
|
||
->name('auth.login');
|
||
|
||
Route::middleware(['auth:sanctum', 'lottery.admin'])->group(function (): void {
|
||
// 名称:后台接口连通性探测(需 Bearer Token)
|
||
Route::get('ping', AdminPingController::class)->name('ping');
|
||
// 资金:转账单 / 流水 / 玩家钱包
|
||
Route::get('wallet/transfer-orders', TransferOrderListController::class)
|
||
->name('wallet.transfer-orders');
|
||
Route::get('wallet/transactions', WalletTransactionListController::class)
|
||
->name('wallet.transactions');
|
||
Route::get('players/{player}/wallets', PlayerWalletShowController::class)
|
||
->name('players.wallets');
|
||
// 期号:列表 / 详情 / 批次(开奖结果与审核数据)
|
||
Route::get('draws', AdminDrawIndexController::class)->name('draws.index');
|
||
Route::get('draws/{draw}', AdminDrawShowController::class)->name('draws.show');
|
||
Route::get('draws/{draw}/result-batches', AdminDrawResultBatchesIndexController::class)
|
||
->name('draws.result-batches.index');
|
||
// 阶段 5:风险池 / 占用流水 / 售罄监控(后台 §13.4)
|
||
Route::get('draws/{draw}/risk-pools/{number_4d}', AdminRiskPoolShowController::class)
|
||
->where('number_4d', '[0-9]{4}')
|
||
->name('draws.risk-pools.show');
|
||
Route::get('draws/{draw}/risk-pool-lock-logs', AdminRiskPoolLockLogIndexController::class)
|
||
->name('draws.risk-pool-lock-logs.index');
|
||
Route::get('draws/{draw}/risk-pools', AdminRiskPoolIndexController::class)
|
||
->name('draws.risk-pools.index');
|
||
// 名称:发布待审核开奖批次(人工审核)
|
||
Route::post(
|
||
'draws/{draw}/result-batches/{batch}/publish',
|
||
DrawResultBatchPublishController::class,
|
||
)->name('draws.result-batches.publish');
|
||
|
||
// 阶段 4:玩法目录 + 赔率 + 风控封顶(版本化管理)
|
||
Route::get('play-types', PlayTypeIndexController::class)->name('play-types.index');
|
||
Route::patch('play-types/{play_code}', PlayTypePatchController::class)
|
||
->where('play_code', '[a-z0-9_]+')
|
||
->name('play-types.patch');
|
||
|
||
Route::prefix('config')->name('config.')->group(function (): void {
|
||
Route::get('play-versions', PlayConfigVersionIndexController::class)->name('play-versions.index');
|
||
Route::post('play-versions', PlayConfigVersionStoreController::class)->name('play-versions.store');
|
||
Route::get('play-versions/{id}', PlayConfigVersionShowController::class)
|
||
->whereNumber('id')
|
||
->name('play-versions.show');
|
||
Route::put('play-versions/{id}/items', PlayConfigItemsReplaceController::class)
|
||
->whereNumber('id')
|
||
->name('play-versions.items.replace');
|
||
Route::post('play-versions/{id}/publish', PlayConfigVersionPublishController::class)
|
||
->whereNumber('id')
|
||
->name('play-versions.publish');
|
||
|
||
Route::get('odds-versions', OddsVersionIndexController::class)->name('odds-versions.index');
|
||
Route::post('odds-versions', OddsVersionStoreController::class)->name('odds-versions.store');
|
||
Route::get('odds-versions/{id}', OddsVersionShowController::class)
|
||
->whereNumber('id')
|
||
->name('odds-versions.show');
|
||
Route::put('odds-versions/{id}/items', OddsItemsReplaceController::class)
|
||
->whereNumber('id')
|
||
->name('odds-versions.items.replace');
|
||
Route::post('odds-versions/{id}/publish', OddsVersionPublishController::class)
|
||
->whereNumber('id')
|
||
->name('odds-versions.publish');
|
||
|
||
Route::get('risk-cap-versions', RiskCapVersionIndexController::class)->name('risk-cap-versions.index');
|
||
Route::post('risk-cap-versions', RiskCapVersionStoreController::class)->name('risk-cap-versions.store');
|
||
Route::get('risk-cap-versions/{id}', RiskCapVersionShowController::class)
|
||
->whereNumber('id')
|
||
->name('risk-cap-versions.show');
|
||
Route::put('risk-cap-versions/{id}/items', RiskCapItemsReplaceController::class)
|
||
->whereNumber('id')
|
||
->name('risk-cap-versions.items.replace');
|
||
Route::post('risk-cap-versions/{id}/publish', RiskCapVersionPublishController::class)
|
||
->whereNumber('id')
|
||
->name('risk-cap-versions.publish');
|
||
});
|
||
});
|
||
});
|
||
});
|