## 统一响应格式与错误码

- **DDS-Section**: 11.1 统一响应格式 + 14.4 错误处理策略
- **DDS-Lines**: L1352-L1369, L1787-L1816

### Extract

#### 统一响应结构

```go
// 普通响应
type Response struct {
    Code    int         `json:"code"`    // 0=成功, 非0=错误码
    Message string      `json:"message"` // 成功/错误说明
    Data    interface{} `json:"data"`    // 业务数据
}

// 分页响应
type PageResponse struct {
    Code    int         `json:"code"`
    Message string      `json:"message"`
    Data    interface{} `json:"data"`
    Total   int64       `json:"total"`
    Page    int         `json:"page"`
    Size    int         `json:"size"`
}
```

#### 错误码定义

| 错误码 | 常量名 | 说明 |
|--------|--------|------|
| 0 | `ErrCodeSuccess` | 成功 |
| 40000 | `ErrCodeBadRequest` | 通用参数错误 |
| 40001 | `ErrCodeFileParseError` | 文件解析失败 |
| 40002 | `ErrCodeUnknownPlatform` | 未识别的平台来源 |
| 40003 | `ErrCodeDuplicateFile` | 重复上传文件 |
| 40004 | `ErrCodeRuleInvalid` | 规则定义无效 |
| 40005 | `ErrCodeExportFailed` | 导出/推送失败 |
| 50000 | `ErrCodeInternal` | 服务器内部错误 |

#### 全局错误处理中间件

```go
func ErrorHandler() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Next()
        if len(c.Errors) > 0 {
            err := c.Errors.Last()
            c.JSON(http.StatusOK, Response{
                Code:    mapErrorCode(err),
                Message: err.Error(),
            })
        }
    }
}
```
