feat(bet-provider): 添加开注商管理功能,包括增删改查接口及相关模型和迁移文件
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin\BetProvider;
|
||||
|
||||
use App\Models\BetProvider;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
final class AdminBetProviderController extends Controller
|
||||
{
|
||||
public function index(): JsonResponse
|
||||
{
|
||||
return ApiResponse::success([
|
||||
'items' => BetProvider::query()
|
||||
->orderBy('sort_order')
|
||||
->orderBy('id')
|
||||
->get()
|
||||
->map(fn (BetProvider $provider): array => $this->present($provider))
|
||||
->values()
|
||||
->all(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$data = $request->validate([
|
||||
'code' => ['required', 'string', 'max:32', 'regex:/^[A-Za-z0-9_-]+$/', Rule::unique('bet_providers', 'code')],
|
||||
'name' => ['required', 'string', 'max:64'],
|
||||
'is_enabled' => ['sometimes', 'boolean'],
|
||||
'sort_order' => ['sometimes', 'integer', 'min:0'],
|
||||
]);
|
||||
|
||||
$provider = BetProvider::query()->create([
|
||||
'code' => strtoupper((string) $data['code']),
|
||||
'name' => trim((string) $data['name']),
|
||||
'is_enabled' => (bool) ($data['is_enabled'] ?? true),
|
||||
'sort_order' => (int) ($data['sort_order'] ?? 0),
|
||||
]);
|
||||
|
||||
return ApiResponse::success($this->present($provider));
|
||||
}
|
||||
|
||||
public function update(Request $request, BetProvider $betProvider): JsonResponse
|
||||
{
|
||||
$data = $request->validate([
|
||||
'name' => ['sometimes', 'required', 'string', 'max:64'],
|
||||
'is_enabled' => ['sometimes', 'boolean'],
|
||||
'sort_order' => ['sometimes', 'integer', 'min:0'],
|
||||
]);
|
||||
|
||||
$betProvider->fill(array_filter([
|
||||
'name' => isset($data['name']) ? trim((string) $data['name']) : null,
|
||||
'is_enabled' => array_key_exists('is_enabled', $data) ? (bool) $data['is_enabled'] : null,
|
||||
'sort_order' => array_key_exists('sort_order', $data) ? (int) $data['sort_order'] : null,
|
||||
], static fn (mixed $value): bool => $value !== null))->save();
|
||||
|
||||
$betProvider->refresh();
|
||||
|
||||
return ApiResponse::success($this->present($betProvider));
|
||||
}
|
||||
|
||||
private function present(BetProvider $provider): array
|
||||
{
|
||||
return [
|
||||
'id' => (int) $provider->id,
|
||||
'code' => $provider->code,
|
||||
'name' => $provider->name,
|
||||
'is_enabled' => (bool) $provider->is_enabled,
|
||||
'sort_order' => (int) $provider->sort_order,
|
||||
'is_default' => $provider->code === BetProvider::DEFAULT_CODE,
|
||||
'created_at' => $provider->created_at?->toIso8601String(),
|
||||
'updated_at' => $provider->updated_at?->toIso8601String(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -83,6 +83,10 @@ final class AdminTicketItemIndexController extends Controller
|
||||
|
||||
$number = trim((string) ($validated['number'] ?? ''));
|
||||
$this->applyTicketItemNumberSearch($query, $number);
|
||||
$providerCode = strtoupper(trim((string) ($validated['provider_code'] ?? '')));
|
||||
if ($providerCode !== '') {
|
||||
$query->where('ticket_items.provider_code', $providerCode);
|
||||
}
|
||||
$this->applyOrderPlacedDateRange(
|
||||
$query,
|
||||
is_string($validated['start_date'] ?? null) ? $validated['start_date'] : null,
|
||||
@@ -113,6 +117,8 @@ final class AdminTicketItemIndexController extends Controller
|
||||
'order_no' => $row->order?->order_no,
|
||||
'draw_no' => $row->draw?->draw_no,
|
||||
'currency_code' => $row->order?->currency_code,
|
||||
'provider_code' => $row->provider_code,
|
||||
'provider_name' => $row->provider_name,
|
||||
'play_code' => $row->play_code,
|
||||
'original_number' => $row->original_number,
|
||||
// 历史字段:保留兼容,实际单位为 minor。
|
||||
|
||||
@@ -57,6 +57,8 @@ final class AdminTicketItemShowController extends Controller
|
||||
'draw_id' => (int) $item->draw_id,
|
||||
'draw_no' => $item->draw?->draw_no,
|
||||
'currency_code' => $item->order?->currency_code,
|
||||
'provider_code' => $item->provider_code,
|
||||
'provider_name' => $item->provider_name,
|
||||
'player_id' => $item->player_id,
|
||||
'site_code' => $item->player?->site_code,
|
||||
'site_player_id' => $item->player?->site_player_id,
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\BetProvider;
|
||||
|
||||
use App\Models\BetProvider;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
/** GET /api/v1/bet-providers — 玩家端可选开注商。 */
|
||||
final class BetProviderIndexController extends Controller
|
||||
{
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
$items = BetProvider::query()
|
||||
->where('is_enabled', true)
|
||||
->orderBy('sort_order')
|
||||
->orderBy('id')
|
||||
->get(['code', 'name', 'sort_order'])
|
||||
->map(fn (BetProvider $provider): array => [
|
||||
'code' => $provider->code,
|
||||
'name' => $provider->name,
|
||||
'sort_order' => (int) $provider->sort_order,
|
||||
'is_default' => $provider->code === BetProvider::DEFAULT_CODE,
|
||||
])
|
||||
->values()
|
||||
->all();
|
||||
|
||||
return ApiResponse::success(['items' => $items]);
|
||||
}
|
||||
}
|
||||
@@ -148,6 +148,8 @@ final class TicketItemShowController extends Controller
|
||||
'order_status' => $item->order?->status,
|
||||
'draw_no' => $draw?->draw_no,
|
||||
'currency_code' => $item->order?->currency_code,
|
||||
'provider_code' => $item->provider_code,
|
||||
'provider_name' => $item->provider_name,
|
||||
'play_code' => $item->play_code,
|
||||
'dimension' => $item->dimension,
|
||||
'digit_slot' => $item->digit_slot,
|
||||
|
||||
@@ -79,6 +79,8 @@ final class TicketItemsIndexController extends Controller
|
||||
'order_status' => $row->order?->status,
|
||||
'draw_no' => $row->draw?->draw_no,
|
||||
'currency_code' => $row->order?->currency_code,
|
||||
'provider_code' => $row->provider_code,
|
||||
'provider_name' => $row->provider_name,
|
||||
'play_code' => $row->play_code,
|
||||
'original_number' => $row->original_number,
|
||||
'total_bet_amount' => $totalBet,
|
||||
|
||||
Reference in New Issue
Block a user