235 lines
7.9 KiB
PHP
235 lines
7.9 KiB
PHP
<?php
|
||||
|
|
declare(strict_types=1);
|
|||
|
|
/**
|
|||
|
|
*+------------------
|
|||
|
|
* madong
|
|||
|
|
*+------------------
|
|||
|
|
* Copyright (c) https://gitee.com/motion-code All rights reserved.
|
|||
|
|
*+------------------
|
|||
|
|
* Author: Mr. April (405784684@qq.com)
|
|||
|
|
*+------------------
|
|||
|
|
* Official Website: http://www.madong.tech
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
namespace app\api\controller\system;
|
|||
|
|
|
|||
|
|
use app\api\controller\Base;
|
|||
|
|
use app\api\middleware\ApiAccessTokenMiddleware;
|
|||
|
|
use app\api\schema\request\system\ConfigGroupQueryRequest;
|
|||
|
|
use app\api\schema\request\system\ConfigQueryRequest;
|
|||
|
|
use app\api\schema\request\system\ConfigValueRequest;
|
|||
|
|
use app\service\api\system\ConfigService;
|
|||
|
|
use core\tool\Json;
|
|||
|
|
use madong\swagger\annotation\response\SimpleResponse;
|
|||
|
|
use madong\swagger\attribute\AllowAnonymous;
|
|||
|
|
use OpenApi\Attributes as OA;
|
|||
|
|
use support\annotation\Middleware;
|
|||
|
|
use support\Request;
|
|||
|
|
use WebmanTech\Swagger\DTO\SchemaConstants;
|
|||
|
|
|
|||
|
|
//#[Middleware(ApiAccessTokenMiddleware::class)]
|
|||
|
|
final class ConfigController extends Base
|
|||
|
|
{
|
|||
|
|
public function __construct(ConfigService $service)
|
|||
|
|
{
|
|||
|
|
$this->service = $service;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 按分组获取配置
|
|||
|
|
*
|
|||
|
|
* @param Request $request
|
|||
|
|
* @param string $group_code
|
|||
|
|
*
|
|||
|
|
* @return \support\Response
|
|||
|
|
* @throws \Exception
|
|||
|
|
*/
|
|||
|
|
#[OA\Get(
|
|||
|
|
path: "/system/config/group/{group_code}",
|
|||
|
|
summary: "按分组获取配置",
|
|||
|
|
tags: ["系统配置"],
|
|||
|
|
x: [
|
|||
|
|
SchemaConstants::X_SCHEMA_REQUEST => ConfigGroupQueryRequest::class,
|
|||
|
|
]
|
|||
|
|
)]
|
|||
|
|
#[SimpleResponse(schema: [], example: '{"site_open": "1","site_url": "http://127.0.0.1:8001","site_name": "madong-admin","site_logo": "https://madong.tech/assets/images/logo.svg","site_network_security": "2024042441号-2","site_description": "快速开发框架","site_record_no": "2024042442","site_icp_url": "https://beian.miit.gov.cn/","site_network_security_url": ""}')]
|
|||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
|||
|
|
public function getByGroup(Request $request, string $group_code): \support\Response
|
|||
|
|
{
|
|||
|
|
try {
|
|||
|
|
// 参数验证
|
|||
|
|
if (empty($group_code)) {
|
|||
|
|
return Json::fail('分组编码不能为空');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$options = [
|
|||
|
|
'enabled_only' => $request->input('enabled_only', true),
|
|||
|
|
'with_metadata' => $request->input('with_metadata', false),
|
|||
|
|
];
|
|||
|
|
$result = $this->service->getByGroup($group_code, [], $options);
|
|||
|
|
return Json::success('操作成功', $result);
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
|
|||
|
|
return Json::fail($e->getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#[OA\Get(
|
|||
|
|
path: "/system/config/code/{code}",
|
|||
|
|
summary: "按code获取配置",
|
|||
|
|
tags: ["系统配置"],
|
|||
|
|
x: [
|
|||
|
|
SchemaConstants::X_SCHEMA_REQUEST => ConfigQueryRequest::class,
|
|||
|
|
]
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "code",
|
|||
|
|
description: "配置编码",
|
|||
|
|
in: "path",
|
|||
|
|
required: true,
|
|||
|
|
schema: new OA\Schema(type: "string"),
|
|||
|
|
)]
|
|||
|
|
#[SimpleResponse(schema: [], example: ' {"site_open": "1","site_url": "http://127.0.0.1:8001"}')]
|
|||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
|||
|
|
public function getByCode(Request $request, string $code): \support\Response
|
|||
|
|
{
|
|||
|
|
try {
|
|||
|
|
// 参数验证
|
|||
|
|
if (empty($code)) {
|
|||
|
|
return Json::fail('配置编码不能为空');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$groupCode = $request->input('group_code', '');
|
|||
|
|
$options = [];
|
|||
|
|
if (!empty($groupCode)) {
|
|||
|
|
$options['group_code'] = $groupCode;
|
|||
|
|
}
|
|||
|
|
$result = $this->service->config($code, [], $options);
|
|||
|
|
return Json::success('操作成功', $result);
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
return Json::fail($e->getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取特定配置项的特定键值
|
|||
|
|
*
|
|||
|
|
* @param Request $request
|
|||
|
|
* @param string $code
|
|||
|
|
*
|
|||
|
|
* @return \support\Response
|
|||
|
|
* @throws \Exception
|
|||
|
|
*/
|
|||
|
|
#[OA\Get(
|
|||
|
|
path: "/system/config/{code}/value",
|
|||
|
|
summary: "获取特定配置项的特定键值",
|
|||
|
|
tags: ["系统配置"],
|
|||
|
|
x: [
|
|||
|
|
SchemaConstants::X_SCHEMA_REQUEST => ConfigValueRequest::class,
|
|||
|
|
]
|
|||
|
|
)]
|
|||
|
|
#[SimpleResponse(schema: [], example: [])]
|
|||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
|||
|
|
public function getValue(Request $request, string $code): \support\Response
|
|||
|
|
{
|
|||
|
|
try {
|
|||
|
|
// 参数验证
|
|||
|
|
if (empty($code)) {
|
|||
|
|
return Json::fail('配置项编码不能为空');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$groupCode = $request->input('group_code');
|
|||
|
|
$key = $request->input('key');
|
|||
|
|
|
|||
|
|
if (empty($groupCode) || empty($key)) {
|
|||
|
|
return Json::fail('分组编码和配置键不能为空');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result = $this->service->getValue($code, $key, null, ['group_code' => $groupCode]);
|
|||
|
|
return Json::success('操作成功', $result);
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
return Json::fail($e->getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取所有配置并按分组整理
|
|||
|
|
*
|
|||
|
|
* @param Request $request
|
|||
|
|
*
|
|||
|
|
* @return \support\Response
|
|||
|
|
* @throws \Exception
|
|||
|
|
*/
|
|||
|
|
#[OA\Get(
|
|||
|
|
path: "/system/config/all-grouped",
|
|||
|
|
summary: "获取所有配置并按分组整理",
|
|||
|
|
tags: ["系统配置"],
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "enabled_only",
|
|||
|
|
description: "是否只获取启用的配置项",
|
|||
|
|
in: "query",
|
|||
|
|
required: false,
|
|||
|
|
schema: new OA\Schema(type: "boolean", default: true),
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "group_filter",
|
|||
|
|
description: "分组过滤,多个分组用逗号分隔",
|
|||
|
|
in: "query",
|
|||
|
|
required: false,
|
|||
|
|
schema: new OA\Schema(type: "string"),
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "with_metadata",
|
|||
|
|
description: "是否包含配置项的完整元数据",
|
|||
|
|
in: "query",
|
|||
|
|
required: false,
|
|||
|
|
schema: new OA\Schema(type: "boolean", default: false),
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "key_by",
|
|||
|
|
description: "按指定字段作为键名('code' 或 'id')",
|
|||
|
|
in: "query",
|
|||
|
|
required: false,
|
|||
|
|
schema: new OA\Schema(type: "string", enum: ["code", "id"]),
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "sort_groups",
|
|||
|
|
description: "是否对分组进行排序",
|
|||
|
|
in: "query",
|
|||
|
|
required: false,
|
|||
|
|
schema: new OA\Schema(type: "boolean", default: false),
|
|||
|
|
)]
|
|||
|
|
#[OA\Parameter(
|
|||
|
|
name: "sort_configs",
|
|||
|
|
description: "是否对配置项进行排序",
|
|||
|
|
in: "query",
|
|||
|
|
required: false,
|
|||
|
|
schema: new OA\Schema(type: "boolean", default: false),
|
|||
|
|
)]
|
|||
|
|
#[SimpleResponse(schema: [], example: '{"site": {"site_name": "网站名称"}, "oss": {"accessKeyId": "xxx"}}')]
|
|||
|
|
#[AllowAnonymous(requireToken: false, requirePermission: false, description: '公共接口')]
|
|||
|
|
public function getAllGrouped(Request $request): \support\Response
|
|||
|
|
{
|
|||
|
|
try {
|
|||
|
|
$options = [
|
|||
|
|
'enabled_only' => $request->input('enabled_only', true),
|
|||
|
|
'with_metadata' => $request->input('with_metadata', false),
|
|||
|
|
'key_by' => $request->input('key_by', null),
|
|||
|
|
'sort_groups' => $request->input('sort_groups', false),
|
|||
|
|
'sort_configs' => $request->input('sort_configs', false),
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// 处理分组过滤参数
|
|||
|
|
$groupFilter = $request->input('group_filter', '');
|
|||
|
|
if (!empty($groupFilter)) {
|
|||
|
|
$options['group_filter'] = explode(',', $groupFilter);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$result = $this->service->getAllGrouped($options);
|
|||
|
|
return Json::success('操作成功', $result);
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
return Json::fail($e->getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|