# Learnings - add-gateway-admin-api

## Plan Overview
- **Goal**: Expose 13 Gateway third-party capabilities as admin management APIs
- **Deliverables**: 6 IoT card endpoints + 7 device endpoints
- **Effort**: Medium
- **Parallel Execution**: YES - 2 waves

## Execution Strategy
```
Wave 1: Task 1 (Bootstrap dependency injection)
Wave 2: Task 2 + Task 3 (Parallel - Card handlers + Device handlers)  
Wave 3: Task 4 + Task 5 (Parallel - Register routes)
Wave 4: Task 6 (Integration tests)
```

## Critical Dependencies
- Task 1 BLOCKS Task 2, 3
- Task 2 BLOCKS Task 4
- Task 3 BLOCKS Task 5
- Task 4, 5 BLOCK Task 6

## Key Files
- `internal/bootstrap/handlers.go` - Dependency injection for handlers
- `internal/handler/admin/iot_card.go` - Card handler (6 new methods)
- `internal/handler/admin/device.go` - Device handler (7 new methods)
- `internal/routes/iot_card.go` - Card routes registration
- `internal/routes/device.go` - Device routes registration
- `internal/gateway/flow_card.go` - Gateway card methods
- `internal/gateway/device.go` - Gateway device methods
- `tests/integration/iot_card_gateway_test.go` - Card integration tests
- `tests/integration/device_gateway_test.go` - Device integration tests

## API Design Principles
1. Simple passthrough - no additional business logic
2. Permission validation: Query DB to confirm ownership before calling Gateway
3. Error handling: Use `errors.New(errors.CodeNotFound, "卡不存在或无权限访问")`
4. Tags: Use `["IoT卡管理"]` for cards, `["设备管理"]` for devices

## Route Patterns
**Card routes** (base: `/api/admin/iot-cards`):
- GET `/:iccid/gateway-status`
- GET `/:iccid/gateway-flow`
- GET `/:iccid/gateway-realname`
- GET `/:iccid/realname-link`
- POST `/:iccid/stop`
- POST `/:iccid/start`

**Device routes** (base: `/api/admin/devices`):
- GET `/by-imei/:imei/gateway-info`
- GET `/by-imei/:imei/gateway-slots`
- PUT `/by-imei/:imei/speed-limit`
- PUT `/by-imei/:imei/wifi`
- POST `/by-imei/:imei/switch-card`
- POST `/by-imei/:imei/reboot`
- POST `/by-imei/:imei/reset`

## Verification Commands
```bash
# Build check
go build ./cmd/api

# OpenAPI docs generation
go run cmd/gendocs/main.go

# Integration tests
source .env.local && go test -v ./tests/integration/... -run TestGateway
```

## Important Notes
- Do NOT modify Gateway Client itself
- Do NOT add extra business logic (simple passthrough only)
- Do NOT add async task processing
- Do NOT add caching layer
- All handlers must validate permissions first before calling Gateway
