feat(admin): 新增通用KV系统配置管理接口
新增后台配置管理相关的表单请求类,添加通用设置的列表查询和更新接口,支持按分组筛选配置项并返回标准化的配置数据
This commit is contained in:
60
app/Http/Controllers/Api/V1/Admin/AdminSettingController.php
Normal file
60
app/Http/Controllers/Api/V1/Admin/AdminSettingController.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Admin;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\AdminSettingIndexRequest;
|
||||
use App\Http\Requests\Admin\AdminSettingUpdateRequest;
|
||||
use App\Models\LotterySetting;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Services\LotterySettings;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/**
|
||||
* 后台:运营配置(KV 设置)读写。
|
||||
*/
|
||||
final class AdminSettingController extends Controller
|
||||
{
|
||||
public function index(AdminSettingIndexRequest $request): JsonResponse
|
||||
{
|
||||
$validated = $request->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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
20
app/Http/Requests/Admin/AdminSettingIndexRequest.php
Normal file
20
app/Http/Requests/Admin/AdminSettingIndexRequest.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
final class AdminSettingIndexRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'group' => ['sometimes', 'nullable', 'string', 'max:64'],
|
||||
];
|
||||
}
|
||||
}
|
||||
20
app/Http/Requests/Admin/AdminSettingUpdateRequest.php
Normal file
20
app/Http/Requests/Admin/AdminSettingUpdateRequest.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
final class AdminSettingUpdateRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'value' => ['required'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user