Files
lotteryLaravel/app/Http/Controllers/Api/V1/Admin/AdminSettingController.php
kang 0841fbed32 feat: 增强管理员功能与数据处理
- 在多个控制器中引入 agent_node_id,以支持基于代理节点的权限和数据过滤。
- 更新 AdminRole 和 AdminUser 模型,新增角色范围和代理节点相关功能,提升角色管理的灵活性。
- 在请求验证中添加 agent_node_id 字段,确保 API 接口支持代理节点的相关操作。
- 优化 LotterySettings 服务,支持批量写入设置,提升配置管理的效率。
- 更新仪表板和报告服务,增强数据统计功能,确保管理员能够获取更全面的统计信息。
2026-06-02 14:36:58 +08:00

105 lines
3.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Http\Controllers\Api\V1\Admin;
use App\Http\Controllers\Controller;
use App\Http\Middleware\RecordAdminApiAudit;
use App\Http\Requests\Admin\AdminSettingBatchUpdateRequest;
use App\Http\Requests\Admin\AdminSettingIndexRequest;
use App\Http\Requests\Admin\AdminSettingUpdateRequest;
use App\Models\LotterySetting;
use App\Services\AuditLogger;
use App\Support\ApiResponse;
use App\Services\LotterySettings;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
/**
* 后台运营配置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();
LotterySettings::put(
$key,
$request->validated('value'),
$setting ? $setting->group_name : (explode('.', $key)[0] ?? 'general'),
$setting ? $setting->description_zh : null,
);
$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,
]);
}
public function batchUpdate(AdminSettingBatchUpdateRequest $request): JsonResponse
{
/** @var list<array{key: string, value: mixed}> $items */
$items = $request->validated('items');
DB::transaction(static function () use ($items): void {
LotterySettings::putMany($items);
});
$keys = array_map(static fn (array $item): string => (string) $item['key'], $items);
$rows = LotterySetting::query()
->whereIn('setting_key', $keys)
->orderBy('setting_key')
->get();
$admin = $request->lotteryAdmin();
if ($admin !== null) {
AuditLogger::recordForAdmin(
$admin,
$request,
moduleCode: 'settings',
actionCode: 'batch_update',
targetType: 'lottery_settings',
targetId: 'batch',
beforeJson: null,
afterJson: [
'keys' => $keys,
'count' => count($keys),
],
);
$request->attributes->set(RecordAdminApiAudit::ATTRIBUTE_AUDIT_RECORDED, true);
}
return ApiResponse::success([
'items' => $rows->map(fn (LotterySetting $s): array => [
'key' => $s->setting_key,
'value' => $s->value_json,
'group' => $s->group_name,
'description' => $s->description_zh,
])->values()->all(),
]);
}
}