You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

237 lines
5.7 KiB

// Package handler 管理后台Handler实现
package handler
import (
"context"
"fmt"
"market-data-service/api"
"market-data-service/internal/service"
)
// AdminHandlerImpl 管理后台Handler实现
type AdminHandlerImpl struct {
configService service.ConfigService
adapterService service.AdapterService
testService service.TestService
}
// NewAdminHandlerImpl 创建管理后台Handler
func NewAdminHandlerImpl(
configService service.ConfigService,
adapterService service.AdapterService,
testService service.TestService,
) *AdminHandlerImpl {
return &AdminHandlerImpl{
configService: configService,
adapterService: adapterService,
testService: testService,
}
}
// Ensure interfaces are implemented
var _ api.ConfigHandler = (*AdminHandlerImpl)(nil)
var _ api.AdapterHandler = (*AdminHandlerImpl)(nil)
var _ api.TestHandler = (*AdminHandlerImpl)(nil)
// ============================================
// 配置管理接口实现
// ============================================
// GetConfigList 获取配置列表
func (h *AdminHandlerImpl) GetConfigList(ctx context.Context, req *api.ConfigListRequest) (*api.Response, error) {
data, err := h.configService.GetConfigList(ctx, req)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// UpdateConfig 更新配置
func (h *AdminHandlerImpl) UpdateConfig(ctx context.Context, req *api.ConfigUpdateRequest) (*api.Response, error) {
data, err := h.configService.UpdateConfig(ctx, req)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// ReloadConfig 热加载配置
func (h *AdminHandlerImpl) ReloadConfig(ctx context.Context, req *api.ReloadRequest) (*api.Response, error) {
data, err := h.configService.ReloadConfig(ctx, req)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// GetSystemStatus 获取系统状态
func (h *AdminHandlerImpl) GetSystemStatus(ctx context.Context) (*api.Response, error) {
data, err := h.configService.GetSystemStatus(ctx)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// ============================================
// 适配器管理接口实现
// ============================================
// GetAdapterList 获取适配器列表
func (h *AdminHandlerImpl) GetAdapterList(ctx context.Context) (*api.Response, error) {
data, err := h.adapterService.GetAdapterList(ctx)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// ToggleAdapter 启用/禁用适配器
func (h *AdminHandlerImpl) ToggleAdapter(ctx context.Context, req *api.AdapterToggleRequest) (*api.Response, error) {
if err := h.adapterService.ToggleAdapter(ctx, req); err != nil {
return &api.Response{
Code: 500,
Message: err.Error(),
}, nil
}
return &api.Response{
Code: 0,
Message: "success",
}, nil
}
// UpdateAdapterConfig 更新适配器配置
func (h *AdminHandlerImpl) UpdateAdapterConfig(ctx context.Context, req *api.AdapterConfigUpdateRequest) (*api.Response, error) {
if err := h.adapterService.UpdateAdapterConfig(ctx, req); err != nil {
return &api.Response{
Code: 500,
Message: err.Error(),
}, nil
}
return &api.Response{
Code: 0,
Message: "success",
}, nil
}
// ============================================
// 测试管理接口实现
// ============================================
// GetAPITestList 获取API测试列表
func (h *AdminHandlerImpl) GetAPITestList(ctx context.Context) (*api.Response, error) {
data, err := h.testService.GetAPITestList(ctx)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// RunAPITest 执行API测试
func (h *AdminHandlerImpl) RunAPITest(ctx context.Context, req *api.APITestRequest) (*api.Response, error) {
// 获取基础URL
baseURL := "http://localhost:8080"
if cfg := h.configService.GetCurrentConfig(); cfg != nil && cfg.Server.Port != 0 {
baseURL = fmt.Sprintf("http://localhost:%d", cfg.Server.Port)
}
data, err := h.testService.RunAPITest(ctx, baseURL, req)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// GetWSTestList 获取WebSocket测试列表
func (h *AdminHandlerImpl) GetWSTestList(ctx context.Context) (*api.Response, error) {
data, err := h.testService.GetWSTestList(ctx)
if err != nil {
return nil, err
}
// 设置WebSocket URL
wsURL := "ws://localhost:8080/v1/stream"
if cfg := h.configService.GetCurrentConfig(); cfg != nil && cfg.Server.Port != 0 {
wsURL = "ws://localhost:" + string(rune(cfg.Server.Port)) + "/v1/stream"
}
data.WSURL = wsURL
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// RunWSTest 执行WebSocket测试
func (h *AdminHandlerImpl) RunWSTest(ctx context.Context, req *api.WSTestRequest) (*api.Response, error) {
// 获取WebSocket URL
wsURL := "ws://localhost:8080/v1/stream"
if cfg := h.configService.GetCurrentConfig(); cfg != nil && cfg.Server.Port != 0 {
wsURL = fmt.Sprintf("ws://localhost:%d/v1/stream", cfg.Server.Port)
}
data, err := h.testService.RunWSTest(ctx, wsURL, req)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}
// GetTestHistory 获取测试历史
func (h *AdminHandlerImpl) GetTestHistory(ctx context.Context, req *api.TestHistoryRequest) (*api.Response, error) {
data, err := h.testService.GetTestHistory(ctx, req)
if err != nil {
return nil, err
}
return &api.Response{
Code: 0,
Message: "success",
Data: data,
}, nil
}