Files
lotteryLaravel/routes/api.php

226 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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\Draw\DrawSettlementRunController;
use App\Http\Controllers\Api\V1\Admin\Jackpot\AdminJackpotContributionIndexController;
use App\Http\Controllers\Api\V1\Admin\Jackpot\AdminJackpotPayoutLogIndexController;
use App\Http\Controllers\Api\V1\Admin\Jackpot\AdminJackpotPoolIndexController;
use App\Http\Controllers\Api\V1\Admin\Jackpot\AdminJackpotPoolUpdateController;
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\Settlement\AdminSettlementBatchDetailsController;
use App\Http\Controllers\Api\V1\Admin\Settlement\AdminSettlementBatchIndexController;
use App\Http\Controllers\Api\V1\Admin\Settlement\AdminSettlementBatchShowController;
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\Jackpot\JackpotSummaryController;
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\TicketDrawMyMatchController;
use App\Http\Controllers\Api\V1\Ticket\TicketItemShowController;
use App\Http\Controllers\Api\V1\Ticket\TicketItemsIndexController;
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');
Route::get('jackpot/summary', JackpotSummaryController::class)->name('api.v1.jackpot.summary');
// 名称:生效玩法 / 赔率 / 封顶目录(阶段 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::get('items', TicketItemsIndexController::class)->name('items.index');
Route::get('items/{ticket_no}', TicketItemShowController::class)
->where('ticket_no', 'TK[0-9]+')
->name('items.show');
Route::get('draws/{draw_no}/my-match', TicketDrawMyMatchController::class)
->where('draw_no', '[0-9]{8}-[0-9]{3}')
->name('draws.my-match');
});
});
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');
Route::post('draws/{draw}/settlement/run', DrawSettlementRunController::class)
->name('draws.settlement.run');
Route::get('settlement-batches', AdminSettlementBatchIndexController::class)
->name('settlement-batches.index');
Route::get('settlement-batches/{batch}', AdminSettlementBatchShowController::class)
->name('settlement-batches.show');
Route::get('settlement-batches/{batch}/details', AdminSettlementBatchDetailsController::class)
->name('settlement-batches.details');
Route::get('jackpot/pools', AdminJackpotPoolIndexController::class)->name('jackpot.pools.index');
Route::put('jackpot/pools/{pool}', AdminJackpotPoolUpdateController::class)->name('jackpot.pools.update');
Route::get('jackpot/payout-logs', AdminJackpotPayoutLogIndexController::class)
->name('jackpot.payout-logs.index');
Route::get('jackpot/contributions', AdminJackpotContributionIndexController::class)
->name('jackpot.contributions.index');
// 阶段 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');
});
});
});
});