# 用户中心服务API设计文档

## 1. 概述

本文档详细描述了用户中心服务(user-center-service)提供的API接口，包括用户管理、角色权限、地址管理、积分管理、等级管理、消息通知、反馈等核心功能。

## 2. 基础信息

- 基础路径: `/api/v1/users`
- 版本: v1
- 通信协议: HTTP/HTTPS
- 数据格式: JSON
- 状态码: 遵循HTTP状态码规范

## 3. 全局Headers

| Header名称 | 是否必填 | 描述 |
|------------|----------|------|
| Authorization | 是 | Bearer Token认证信息 |
| Content-Type | 是 | application/json |

## 4. 全局响应格式

### 4.1 成功响应
```json
{
  "code": 0,
  "message": "success",
  "data": {}
}
```

### 4.2 错误响应
```json
{
  "code": 40001,
  "message": "错误描述",
  "data": null
}
```

## 5. 用户管理接口

### 5.1 用户注册

**接口地址**: `POST /register`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| username | string | 是 | 用户名 |
| email | string | 是 | 邮箱 |
| password | string | 是 | 密码 |
| phone | string | 否 | 手机号 |
| nickname | string | 否 | 昵称 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 用户ID |
| username | string | 用户名 |
| email | string | 邮箱 |
| phone | string | 手机号 |
| nickname | string | 昵称 |
| avatar_url | string | 头像URL |
| gender | integer | 性别 |
| birthday | string | 生日 |
| real_name | string | 真实姓名 |
| status | integer | 状态 |
| created_at | string | 创建时间 |

**示例请求**:
```json
{
  "username": "testuser",
  "email": "test@example.com",
  "password": "password123",
  "phone": "13800138000",
  "nickname": "测试用户"
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1001,
    "username": "testuser",
    "email": "test@example.com",
    "phone": "13800138000",
    "nickname": "测试用户",
    "avatar_url": null,
    "gender": 0,
    "birthday": null,
    "real_name": null,
    "status": 1,
    "created_at": "2024-01-15T10:30:00Z"
  }
}
```

### 5.2 用户登录

**接口地址**: `POST /login`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| username | string | 是 | 用户名或邮箱 |
| password | string | 是 | 密码 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| user | object | 用户信息 |
| token | string | 访问令牌 |
| refresh_token | string | 刷新令牌 |

**示例请求**:
```json
{
  "username": "testuser",
  "password": "password123"
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "user": {
      "id": 1001,
      "username": "testuser",
      "email": "test@example.com",
      "phone": "13800138000",
      "nickname": "测试用户",
      "avatar_url": null,
      "gender": 0,
      "birthday": null,
      "real_name": null,
      "status": 1,
      "last_login_at": "2024-01-15T10:30:00Z",
      "created_at": "2024-01-15T10:30:00Z"
    },
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}
```

### 5.3 获取当前用户信息

**接口地址**: `GET /me`

**请求参数**: 无

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 用户ID |
| username | string | 用户名 |
| email | string | 邮箱 |
| phone | string | 手机号 |
| nickname | string | 昵称 |
| avatar_url | string | 头像URL |
| gender | integer | 性别 |
| birthday | string | 生日 |
| real_name | string | 真实姓名 |
| id_card_number | string | 身份证号 |
| status | integer | 状态 |
| last_login_at | string | 最后登录时间 |
| created_at | string | 创建时间 |
| updated_at | string | 更新时间 |
| roles | array | 用户角色列表 |
| permissions | array | 用户权限列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1001,
    "username": "testuser",
    "email": "test@example.com",
    "phone": "13800138000",
    "nickname": "测试用户",
    "avatar_url": null,
    "gender": 0,
    "birthday": null,
    "real_name": null,
    "id_card_number": null,
    "status": 1,
    "last_login_at": "2024-01-15T10:30:00Z",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z",
    "roles": [
      {
        "id": 1,
        "name": "普通用户",
        "description": "普通注册用户"
      }
    ],
    "permissions": [
      {
        "id": 101,
        "name": "查看个人信息",
        "code": "user:profile:view",
        "description": "查看个人基本信息"
      }
    ]
  }
}
```

### 5.4 更新用户信息

**接口地址**: `PUT /me`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| nickname | string | 否 | 昵称 |
| avatar_url | string | 否 | 头像URL |
| gender | integer | 否 | 性别(0-未知,1-男,2-女) |
| birthday | string | 否 | 生日(YYYY-MM-DD) |
| real_name | string | 否 | 真实姓名 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 用户ID |
| username | string | 用户名 |
| email | string | 邮箱 |
| phone | string | 手机号 |
| nickname | string | 昵称 |
| avatar_url | string | 头像URL |
| gender | integer | 性别 |
| birthday | string | 生日 |
| real_name | string | 真实姓名 |
| updated_at | string | 更新时间 |

**示例请求**:
```json
{
  "nickname": "新昵称",
  "gender": 1,
  "birthday": "1990-01-01",
  "real_name": "张三"
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1001,
    "username": "testuser",
    "email": "test@example.com",
    "phone": "13800138000",
    "nickname": "新昵称",
    "avatar_url": null,
    "gender": 1,
    "birthday": "1990-01-01",
    "real_name": "张三",
    "updated_at": "2024-01-15T11:00:00Z"
  }
}
```

### 5.5 修改密码

**接口地址**: `PUT /me/password`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| old_password | string | 是 | 旧密码 |
| new_password | string | 是 | 新密码 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| message | string | 操作结果信息 |

**示例请求**:
```json
{
  "old_password": "password123",
  "new_password": "newpassword456"
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "密码修改成功"
  }
}
```

### 5.6 获取用户列表(管理员)

**接口地址**: `GET /`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| username | string | 否 | 用户名筛选 |
| email | string | 否 | 邮箱筛选 |
| status | integer | 否 | 状态筛选 |
| page | integer | 否 | 页码，默认1 |
| size | integer | 否 | 每页数量，默认10 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| total | integer | 总记录数 |
| page | integer | 当前页码 |
| size | integer | 每页数量 |
| items | array | 用户列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "total": 1,
    "page": 1,
    "size": 10,
    "items": [
      {
        "id": 1001,
        "username": "testuser",
        "email": "test@example.com",
        "phone": "13800138000",
        "nickname": "测试用户",
        "avatar_url": null,
        "gender": 0,
        "birthday": null,
        "real_name": null,
        "status": 1,
        "last_login_at": "2024-01-15T10:30:00Z",
        "created_at": "2024-01-15T10:30:00Z"
      }
    ]
  }
}
```

### 5.7 获取用户详情(管理员)

**接口地址**: `GET /{id}`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 用户ID |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 用户ID |
| username | string | 用户名 |
| email | string | 邮箱 |
| phone | string | 手机号 |
| nickname | string | 昵称 |
| avatar_url | string | 头像URL |
| gender | integer | 性别 |
| birthday | string | 生日 |
| real_name | string | 真实姓名 |
| id_card_number | string | 身份证号 |
| status | integer | 状态 |
| last_login_at | string | 最后登录时间 |
| created_at | string | 创建时间 |
| updated_at | string | 更新时间 |
| roles | array | 用户角色列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1001,
    "username": "testuser",
    "email": "test@example.com",
    "phone": "13800138000",
    "nickname": "测试用户",
    "avatar_url": null,
    "gender": 0,
    "birthday": null,
    "real_name": null,
    "id_card_number": null,
    "status": 1,
    "last_login_at": "2024-01-15T10:30:00Z",
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z",
    "roles": [
      {
        "id": 1,
        "name": "普通用户",
        "description": "普通注册用户"
      }
    ]
  }
}
```

### 5.8 更新用户状态(管理员)

**接口地址**: `PUT /{id}/status`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 用户ID |
| status | integer | 是 | 状态(1-正常,2-禁用) |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 用户ID |
| status | integer | 状态 |
| updated_at | string | 更新时间 |

**示例请求**:
```json
{
  "status": 2
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1001,
    "status": 2,
    "updated_at": "2024-01-15T11:00:00Z"
  }
}
```

## 6. 地址管理接口

### 6.1 创建收货地址

**接口地址**: `POST /me/addresses`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| name | string | 是 | 收货人姓名 |
| phone | string | 是 | 收货人电话 |
| province | string | 是 | 省份 |
| city | string | 是 | 城市 |
| district | string | 是 | 区/县 |
| detail_address | string | 是 | 详细地址 |
| is_default | boolean | 否 | 是否默认地址，默认false |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 地址ID |
| user_id | integer | 用户ID |
| name | string | 收货人姓名 |
| phone | string | 收货人电话 |
| province | string | 省份 |
| city | string | 城市 |
| district | string | 区/县 |
| detail_address | string | 详细地址 |
| is_default | boolean | 是否默认地址 |
| status | integer | 状态 |
| created_at | string | 创建时间 |

**示例请求**:
```json
{
  "name": "张三",
  "phone": "13800138000",
  "province": "北京市",
  "city": "北京市",
  "district": "朝阳区",
  "detail_address": "某某街道某某号",
  "is_default": true
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 2001,
    "user_id": 1001,
    "name": "张三",
    "phone": "13800138000",
    "province": "北京市",
    "city": "北京市",
    "district": "朝阳区",
    "detail_address": "某某街道某某号",
    "is_default": true,
    "status": 1,
    "created_at": "2024-01-15T10:30:00Z"
  }
}
```

### 6.2 获取收货地址列表

**接口地址**: `GET /me/addresses`

**请求参数**: 无

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| items | array | 地址列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "items": [
      {
        "id": 2001,
        "user_id": 1001,
        "name": "张三",
        "phone": "13800138000",
        "province": "北京市",
        "city": "北京市",
        "district": "朝阳区",
        "detail_address": "某某街道某某号",
        "is_default": true,
        "status": 1,
        "created_at": "2024-01-15T10:30:00Z",
        "updated_at": "2024-01-15T10:30:00Z"
      }
    ]
  }
}
```

### 6.3 获取收货地址详情

**接口地址**: `GET /me/addresses/{id}`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 地址ID |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 地址ID |
| user_id | integer | 用户ID |
| name | string | 收货人姓名 |
| phone | string | 收货人电话 |
| province | string | 省份 |
| city | string | 城市 |
| district | string | 区/县 |
| detail_address | string | 详细地址 |
| is_default | boolean | 是否默认地址 |
| status | integer | 状态 |
| created_at | string | 创建时间 |
| updated_at | string | 更新时间 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 2001,
    "user_id": 1001,
    "name": "张三",
    "phone": "13800138000",
    "province": "北京市",
    "city": "北京市",
    "district": "朝阳区",
    "detail_address": "某某街道某某号",
    "is_default": true,
    "status": 1,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}
```

### 6.4 更新收货地址

**接口地址**: `PUT /me/addresses/{id}`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 地址ID |
| name | string | 否 | 收货人姓名 |
| phone | string | 否 | 收货人电话 |
| province | string | 否 | 省份 |
| city | string | 否 | 城市 |
| district | string | 否 | 区/县 |
| detail_address | string | 否 | 详细地址 |
| is_default | boolean | 否 | 是否默认地址 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 地址ID |
| user_id | integer | 用户ID |
| name | string | 收货人姓名 |
| phone | string | 收货人电话 |
| province | string | 省份 |
| city | string | 城市 |
| district | string | 区/县 |
| detail_address | string | 详细地址 |
| is_default | boolean | 是否默认地址 |
| status | integer | 状态 |
| updated_at | string | 更新时间 |

**示例请求**:
```json
{
  "name": "李四",
  "phone": "13900139000",
  "province": "上海市",
  "city": "上海市",
  "district": "浦东新区",
  "detail_address": "某某路某某号",
  "is_default": true
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 2001,
    "user_id": 1001,
    "name": "李四",
    "phone": "13900139000",
    "province": "上海市",
    "city": "上海市",
    "district": "浦东新区",
    "detail_address": "某某路某某号",
    "is_default": true,
    "status": 1,
    "updated_at": "2024-01-15T11:00:00Z"
  }
}
```

### 6.5 删除收货地址

**接口地址**: `DELETE /me/addresses/{id}`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 地址ID |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| message | string | 删除结果信息 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "地址删除成功"
  }
}
```

## 7. 积分管理接口

### 7.1 获取用户积分余额

**接口地址**: `GET /me/points/balance`

**请求参数**: 无

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| user_id | integer | 用户ID |
| points | integer | 积分余额 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "user_id": 1001,
    "points": 1500
  }
}
```

### 7.2 获取积分记录列表

**接口地址**: `GET /me/points/records`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| page | integer | 否 | 页码，默认1 |
| size | integer | 否 | 每页数量，默认10 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| total | integer | 总记录数 |
| page | integer | 当前页码 |
| size | integer | 每页数量 |
| items | array | 积分记录列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "total": 2,
    "page": 1,
    "size": 10,
    "items": [
      {
        "id": 3001,
        "user_id": 1001,
        "change_type": 1,
        "points": 100,
        "balance": 1500,
        "description": "签到奖励",
        "related_id": null,
        "created_at": "2024-01-15T10:00:00Z"
      },
      {
        "id": 3002,
        "user_id": 1001,
        "change_type": 2,
        "points": 50,
        "balance": 1400,
        "description": "兑换优惠券",
        "related_id": 4001,
        "created_at": "2024-01-14T15:30:00Z"
      }
    ]
  }
}
```

## 8. 等级管理接口

### 8.1 获取用户当前等级

**接口地址**: `GET /me/level`

**请求参数**: 无

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| user_id | integer | 用户ID |
| level | integer | 等级 |
| level_name | string | 等级名称 |
| min_points | integer | 所需最低积分 |
| discount_rate | number | 折扣率 |
| current_points | integer | 当前积分 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "user_id": 1001,
    "level": 3,
    "level_name": "银卡会员",
    "min_points": 1000,
    "discount_rate": 0.95,
    "current_points": 1500
  }
}
```

### 8.2 获取等级列表

**接口地址**: `GET /levels`

**请求参数**: 无

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| items | array | 等级列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "items": [
      {
        "id": 1,
        "level": 1,
        "name": "普通会员",
        "min_points": 0,
        "discount_rate": 1.00,
        "description": "注册即成为普通会员"
      },
      {
        "id": 2,
        "level": 2,
        "name": "铜卡会员",
        "min_points": 500,
        "discount_rate": 0.98,
        "description": "积分达到500即可升级"
      },
      {
        "id": 3,
        "level": 3,
        "name": "银卡会员",
        "min_points": 1000,
        "discount_rate": 0.95,
        "description": "积分达到1000即可升级"
      }
    ]
  }
}
```

## 9. 消息通知接口

### 9.1 获取消息列表

**接口地址**: `GET /me/messages`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| message_type | integer | 否 | 消息类型筛选(1-系统消息,2-通知,3-营销) |
| is_read | boolean | 否 | 是否已读筛选 |
| page | integer | 否 | 页码，默认1 |
| size | integer | 否 | 每页数量，默认10 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| total | integer | 总记录数 |
| page | integer | 当前页码 |
| size | integer | 每页数量 |
| items | array | 消息列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "total": 1,
    "page": 1,
    "size": 10,
    "items": [
      {
        "id": 4001,
        "user_id": 1001,
        "title": "系统维护通知",
        "content": "系统将于今晚00:00-02:00进行维护，请提前做好准备。",
        "message_type": 1,
        "is_read": false,
        "created_at": "2024-01-15T09:00:00Z"
      }
    ]
  }
}
```

### 9.2 标记消息为已读

**接口地址**: `PUT /me/messages/{id}/read`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 消息ID |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 消息ID |
| is_read | boolean | 是否已读 |
| read_at | string | 阅读时间 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 4001,
    "is_read": true,
    "read_at": "2024-01-15T10:30:00Z"
  }
}
```

### 9.3 删除消息

**接口地址**: `DELETE /me/messages/{id}`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 消息ID |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| message | string | 删除结果信息 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "message": "消息删除成功"
  }
}
```

## 10. 反馈接口

### 10.1 提交反馈

**接口地址**: `POST /me/feedbacks`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| title | string | 是 | 反馈标题 |
| content | string | 是 | 反馈内容 |
| contact_info | string | 否 | 联系方式 |
| category | string | 否 | 反馈分类 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 反馈ID |
| user_id | integer | 用户ID |
| title | string | 反馈标题 |
| content | string | 反馈内容 |
| contact_info | string | 联系方式 |
| category | string | 反馈分类 |
| status | integer | 状态 |
| created_at | string | 创建时间 |

**示例请求**:
```json
{
  "title": "功能建议",
  "content": "建议增加夜间模式功能",
  "contact_info": "test@example.com",
  "category": "功能建议"
}
```

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 5001,
    "user_id": 1001,
    "title": "功能建议",
    "content": "建议增加夜间模式功能",
    "contact_info": "test@example.com",
    "category": "功能建议",
    "status": 1,
    "created_at": "2024-01-15T10:30:00Z"
  }
}
```

### 10.2 获取反馈列表

**接口地址**: `GET /me/feedbacks`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| status | integer | 否 | 状态筛选(1-待处理,2-处理中,3-已解决,4-已关闭) |
| page | integer | 否 | 页码，默认1 |
| size | integer | 否 | 每页数量，默认10 |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| total | integer | 总记录数 |
| page | integer | 当前页码 |
| size | integer | 每页数量 |
| items | array | 反馈列表 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "total": 1,
    "page": 1,
    "size": 10,
    "items": [
      {
        "id": 5001,
        "user_id": 1001,
        "title": "功能建议",
        "content": "建议增加夜间模式功能",
        "contact_info": "test@example.com",
        "category": "功能建议",
        "status": 1,
        "reply_content": null,
        "replied_at": null,
        "created_at": "2024-01-15T10:30:00Z"
      }
    ]
  }
}
```

### 10.3 获取反馈详情

**接口地址**: `GET /me/feedbacks/{id}`

**请求参数**:

| 参数名 | 类型 | 必填 | 描述 |
|--------|------|------|------|
| id | integer | 是 | 反馈ID |

**响应数据**:

| 字段名 | 类型 | 描述 |
|--------|------|------|
| id | integer | 反馈ID |
| user_id | integer | 用户ID |
| title | string | 反馈标题 |
| content | string | 反馈内容 |
| contact_info | string | 联系方式 |
| category | string | 反馈分类 |
| status | integer | 状态 |
| reply_content | string | 回复内容 |
| replied_at | string | 回复时间 |
| created_at | string | 创建时间 |
| updated_at | string | 更新时间 |

**示例响应**:
```json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 5001,
    "user_id": 1001,
    "title": "功能建议",
    "content": "建议增加夜间模式功能",
    "contact_info": "test@example.com",
    "category": "功能建议",
    "status": 1,
    "reply_content": null,
    "replied_at": null,
    "created_at": "2024-01-15T10:30:00Z",
    "updated_at": "2024-01-15T10:30:00Z"
  }
}
```

## 11. 错误码定义

| 错误码 | 错误信息 | 描述 |
|--------|----------|------|
| 0 | success | 请求成功 |
| 40001 | 参数错误 | 请求参数不合法 |
| 40002 | 用户名已存在 | 用户名已被其他用户使用 |
| 40003 | 邮箱已存在 | 邮箱已被其他用户使用 |
| 40004 | 用户不存在 | 指定的用户不存在 |
| 40005 | 密码错误 | 用户名或密码错误 |
| 40006 | 用户状态异常 | 用户状态不允许此操作 |
| 40007 | 地址不存在 | 指定的地址不存在 |
| 40008 | 积分不足 | 用户积分不足以完成操作 |
| 40009 | 等级条件不满足 | 用户不满足升级条件 |
| 40010 | 消息不存在 | 指定的消息不存在 |
| 40011 | 反馈不存在 | 指定的反馈不存在 |
| 40012 | 反馈状态不允许此操作 | 当前反馈状态不允许执行该操作 |
| 50001 | 权限不足 | 用户权限不足，无法访问该资源 |
| 50002 | 认证失败 | 用户认证失败 |
| 99999 | 系统错误 | 服务器内部错误 |