Files
cunkebao_v3/Moncter/app/controller/DataSourceController.php
2026-01-05 10:16:20 +08:00

174 lines
4.8 KiB
PHP

<?php
namespace app\controller;
use app\repository\DataSourceRepository;
use app\service\DataSourceService;
use app\utils\ApiResponseHelper;
use support\Request;
use support\Response;
/**
* 数据源管理控制器
*/
class DataSourceController
{
/**
* 获取数据源服务实例
*/
private function getService(): DataSourceService
{
return new DataSourceService(new DataSourceRepository());
}
/**
* 获取数据源列表
*
* GET /api/data-sources
*/
public function list(Request $request): Response
{
try {
$service = $this->getService();
$filters = [
'type' => $request->get('type'),
'status' => $request->get('status'),
'name' => $request->get('name'),
'page' => $request->get('page', 1),
'page_size' => $request->get('page_size', 20),
];
$result = $service->getDataSourceList($filters);
return ApiResponseHelper::success([
'data_sources' => $result['list'],
'total' => $result['total'],
'page' => (int)$filters['page'],
'page_size' => (int)$filters['page_size'],
], '查询成功');
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
/**
* 获取数据源详情
*
* GET /api/data-sources/{data_source_id}
*/
public function detail(Request $request, string $data_source_id): Response
{
try {
$service = $this->getService();
$dataSource = $service->getDataSourceDetail($data_source_id);
if (!$dataSource) {
return ApiResponseHelper::error('数据源不存在', 404);
}
return ApiResponseHelper::success($dataSource, '查询成功');
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
/**
* 创建数据源
*
* POST /api/data-sources
*/
public function create(Request $request): Response
{
try {
$data = $request->post();
$service = $this->getService();
$dataSource = $service->createDataSource($data);
// 不返回密码
$result = $dataSource->toArray();
unset($result['password']);
return ApiResponseHelper::success($result, '创建成功');
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
/**
* 更新数据源
*
* PUT /api/data-sources/{data_source_id}
*/
public function update(Request $request, string $data_source_id): Response
{
try {
$data = $request->post();
$service = $this->getService();
$result = $service->updateDataSource($data_source_id, $data);
if ($result) {
return ApiResponseHelper::success(null, '更新成功');
} else {
return ApiResponseHelper::error('更新失败', 500);
}
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
/**
* 删除数据源
*
* DELETE /api/data-sources/{data_source_id}
*/
public function delete(Request $request, string $data_source_id): Response
{
try {
$service = $this->getService();
$result = $service->deleteDataSource($data_source_id);
if ($result) {
return ApiResponseHelper::success(null, '删除成功');
} else {
return ApiResponseHelper::error('删除失败', 500);
}
} catch (\Throwable $e) {
return ApiResponseHelper::exception($e);
}
}
/**
* 测试数据源连接
*
* POST /api/data-sources/test-connection
*/
public function testConnection(Request $request): Response
{
try {
$data = $request->post();
// 验证必填字段
$requiredFields = ['type', 'host', 'port', 'database'];
foreach ($requiredFields as $field) {
if (empty($data[$field])) {
return ApiResponseHelper::error("缺少必填字段: {$field}", 400);
}
}
$service = $this->getService();
$connected = $service->testConnection($data);
if ($connected) {
return ApiResponseHelper::success(['connected' => true], '连接成功');
} else {
return ApiResponseHelper::error('连接失败,请检查配置', 400);
}
} catch (\Throwable $e) {
return ApiResponseHelper::error('连接测试失败: ' . $e->getMessage(), 400);
}
}
}