diff --git a/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php b/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php new file mode 100644 index 0000000..8b02d48 --- /dev/null +++ b/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php @@ -0,0 +1,60 @@ +validated(); + $query = LotterySetting::query()->orderBy('setting_key'); + + if (! empty($validated['group'])) { + $query->where('group_name', $validated['group']); + } + + $items = $query->get()->map(fn (LotterySetting $s): array => [ + 'key' => $s->setting_key, + 'value' => $s->value_json, + 'group' => $s->group_name, + 'description' => $s->description_zh, + ]); + + return ApiResponse::success(['items' => $items]); + } + + public function update(AdminSettingUpdateRequest $request, string $key): JsonResponse + { + $setting = LotterySetting::query()->where('setting_key', $key)->first(); + if ($setting === null) { + return ApiResponse::error('Setting not found', 404); + } + + LotterySettings::put( + $key, + $request->validated('value'), + $setting->group_name, + $setting->description_zh, + ); + + $fresh = LotterySetting::query()->where('setting_key', $key)->first(); + + return ApiResponse::success([ + 'key' => $fresh->setting_key, + 'value' => $fresh->value_json, + 'group' => $fresh->group_name, + 'description' => $fresh->description_zh, + ]); + } +} diff --git a/app/Http/Requests/Admin/AdminSettingIndexRequest.php b/app/Http/Requests/Admin/AdminSettingIndexRequest.php new file mode 100644 index 0000000..b9fdf4d --- /dev/null +++ b/app/Http/Requests/Admin/AdminSettingIndexRequest.php @@ -0,0 +1,20 @@ + ['sometimes', 'nullable', 'string', 'max:64'], + ]; + } +} diff --git a/app/Http/Requests/Admin/AdminSettingUpdateRequest.php b/app/Http/Requests/Admin/AdminSettingUpdateRequest.php new file mode 100644 index 0000000..f253a84 --- /dev/null +++ b/app/Http/Requests/Admin/AdminSettingUpdateRequest.php @@ -0,0 +1,20 @@ + ['required'], + ]; + } +} diff --git a/routes/api/v1/admin/config.php b/routes/api/v1/admin/config.php index 1bfbe0f..3197a84 100644 --- a/routes/api/v1/admin/config.php +++ b/routes/api/v1/admin/config.php @@ -18,6 +18,7 @@ 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\PlayConfigVersionStoreController; use App\Http\Controllers\Api\V1\Admin\Config\PlayConfigVersionPublishController; +use App\Http\Controllers\Api\V1\Admin\AdminSettingController; /** * 管理员配置管理路由(玩法/赔率/封顶)。 @@ -105,3 +106,14 @@ Route::middleware('admin.permission:prd.play_switch.manage|prd.odds.manage|prd.r ->name('risk-cap-versions.publish'); }); }); + +// 通用 KV 设置(钱包限额等) +Route::middleware('admin.permission:prd.wallet_reconcile.manage') + ->prefix('settings') + ->name('api.v1.admin.settings.') + ->group(function (): void { + Route::get('/', AdminSettingController::class.'@index') + ->name('index'); + Route::put('{key}', AdminSettingController::class.'@update') + ->name('update'); + });