Files

2.4 KiB

Execution Status

Completed Tasks

Task 1: Bootstrap Dependency Injection

  • Status: COMPLETED AND VERIFIED
  • Verification:
    • LSP diagnostics: CLEAN
    • Build: SUCCESS
    • Changes verified in files:
      • internal/handler/admin/iot_card.go - Added gatewayClient field and updated constructor
      • internal/handler/admin/device.go - Added gatewayClient field and updated constructor
      • internal/bootstrap/handlers.go - Updated handler instantiation to pass deps.GatewayClient
  • Commit: 修改 Bootstrap 注入 Gateway Client 依赖到 IotCardHandler 和 DeviceHandler
  • Session: ses_3e2531368ffes11sTWCVuBm9XX

Next Wave (Wave 2 - PARALLEL)

Task 2: IotCardHandler - Add 6 Gateway Methods

Blocked By: Task 1 (unblocked) Blocks: Task 4 Can Run In Parallel: YES (with Task 3)

Methods to add:

  • GetGatewayStatus (GET /:iccid/gateway-status)
  • GetGatewayFlow (GET /:iccid/gateway-flow)
  • GetGatewayRealname (GET /:iccid/gateway-realname)
  • GetRealnameLink (GET /:iccid/realname-link)
  • StopCard (POST /:iccid/stop)
  • StartCard (POST /:iccid/start)

Task 3: DeviceHandler - Add 7 Gateway Methods

Blocked By: Task 1 (unblocked) Blocks: Task 5 Can Run In Parallel: YES (with Task 2)

Methods to add:

  • GetGatewayInfo (GET /by-imei/:imei/gateway-info)
  • GetGatewaySlots (GET /by-imei/:imei/gateway-slots)
  • SetSpeedLimit (PUT /by-imei/:imei/speed-limit)
  • SetWiFi (PUT /by-imei/:imei/wifi)
  • SwitchCard (POST /by-imei/:imei/switch-card)
  • RebootDevice (POST /by-imei/:imei/reboot)
  • ResetDevice (POST /by-imei/:imei/reset)

Implementation Notes

Handler Method Pattern

func (h *IotCardHandler) GetGatewayStatus(c *fiber.Ctx) error {
    iccid := c.Params("iccid")
    if iccid == "" {
        return errors.New(errors.CodeInvalidParam, "ICCID不能为空")
    }

    // 1. Validate permission: Query DB to confirm ownership
    card, err := h.service.GetByICCID(c.UserContext(), iccid)
    if err != nil {
        return errors.New(errors.CodeNotFound, "卡不存在或无权限访问")
    }

    // 2. Call Gateway
    resp, err := h.gatewayClient.QueryCardStatus(c.UserContext(), &gateway.CardStatusReq{
        CardNo: iccid,
    })
    if err != nil {
        return err
    }

    return response.Success(c, resp)
}

Gateway Param Conversion

  • ICCID (path param) = CardNo (Gateway param)
  • IMEI (path param) = DeviceID (Gateway param)