Files
lotteryLaravel/app/Http/Controllers/Api/V1/Admin/BetProvider/AdminBetProviderController.php
kang 2d50980999
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled
feat(bet-provider): 添加开注商管理功能,包括增删改查接口及相关模型和迁移文件
2026-07-08 15:56:35 +08:00

79 lines
2.8 KiB
PHP

<?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(),
];
}
}