3.0 KiB
3.0 KiB
1. DTO 定义
- 1.1 在
internal/model/dto/新增设备开放接口请求/响应 DTO:AgentOpenAPIDeviceQueryRequest(含device_no字段)、AgentOpenAPIDeviceSwitchCardRequest(含device_no、iccid字段)、AgentOpenAPIDeviceOperationRequest(含device_no字段,用于 reboot/reset)、AgentOpenAPIDeviceTrafficResponse(结构与AgentOpenAPICardTrafficResponse一致,card_no换成device_no)
2. Service 层
- 2.1 在
agent_open_api.Service结构体中新增deviceService *device.Service字段,更新New()构造函数签名,在internal/bootstrap/services.go的agentOpenAPISvc.New(...)调用处传入s.Device - 2.2 在
agent_open_apiservice 中新增私有方法resolveOpenAPIDevice(ctx, deviceNo):调用deviceService.GetDeviceByIdentifier,校验device.ShopID IN SubordinateShopIDs,不存在或无权限统一返回CodeForbidden - 2.3 实现
GetDeviceTraffic(ctx, req):调用resolveOpenAPIDevice获取设备,通过packageUsageStore.ListByCarrier(ctx, "device", device.ID, &activeStatus)和ListByCarrier(ctx, "device", device.ID, &pendingStatus)查询套餐,复用loadUsagePackageContext和buildTrafficItem,组装AgentOpenAPIDeviceTrafficResponse - 2.4 实现
SwitchDeviceCard(ctx, req):调用resolveOpenAPIDevice校验权限,再调用deviceService.GatewaySwitchCard(ctx, req.DeviceNo, &dto.SwitchCardRequest{ICCID: req.ICCID}) - 2.5 实现
RebootDevice(ctx, req):调用resolveOpenAPIDevice校验权限,再调用deviceService.GatewayRebootDevice(ctx, req.DeviceNo) - 2.6 实现
ResetDevice(ctx, req):调用resolveOpenAPIDevice校验权限,再调用deviceService.GatewayResetDevice(ctx, req.DeviceNo)
3. Handler 层
- 3.1 在
internal/handler/openapi/handler.go新增GetDeviceTrafficHandler 方法(GET,QueryParser 解析AgentOpenAPIDeviceQueryRequest) - 3.2 新增
SwitchDeviceCardHandler 方法(POST,BodyParser 解析AgentOpenAPIDeviceSwitchCardRequest) - 3.3 新增
RebootDeviceHandler 方法(POST,BodyParser 解析AgentOpenAPIDeviceOperationRequest) - 3.4 新增
ResetDeviceHandler 方法(POST,BodyParser 解析AgentOpenAPIDeviceOperationRequest)
4. 路由注册
- 4.1 在
internal/routes/open.go的RegisterOpenAPIRoutes中注册 4 条新路由:GET /devices/traffic、POST /devices/switch-card、POST /devices/reboot、POST /devices/reset,补充 Summary、Description(含 authDescription)、Input/Output、Tags、Auth、SecurityScheme
5. 文档生成器更新
- 5.1 在
cmd/api/docs.go和cmd/gendocs/main.go的bootstrap.Handlers{}初始化中,将AgentOpenAPI字段更新为openapiHandler.NewHandler(nil, nil)(或对应的空值初始化),确保新增的 4 个 Handler 方法被文档生成器扫描到
6. 编译验证
- 6.1 运行
go build ./...确认无编译错误