feat(admin): 新增通用KV系统配置管理接口

新增后台配置管理相关的表单请求类,添加通用设置的列表查询和更新接口,支持按分组筛选配置项并返回标准化的配置数据
This commit is contained in:
2026-05-14 11:17:41 +08:00
parent d877b5e37a
commit e294430c86
4 changed files with 112 additions and 0 deletions

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

View 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'],
];
}
}

View 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'],
];
}
}