# 会员管理

> 模块标识：member  |  接口数量：7

## 1. 获取有效会员列表
**方法**：	GET

**路径**：				/api/members/valid-list

**功能说明**：
获取所有状态为有效（status=1）的会员套餐列表，用于下拉选择。无需分页，返回简化的字段信息。

### 请求参数
```json
{}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "操作成功",
    "data": [
      {
        "id": "xxx",
        "_id": "xxx",
        "code": "MEM0001",
        "name": "会员套餐1",
        "description": "套餐描述"
      },
      {
        "id": "yyy",
        "_id": "yyy",
        "code": "MEM0002",
        "name": "会员套餐2",
        "description": "套餐描述"
      }
    ],
    "timestamp": "2025-01-21T10:00:00.000Z"
  },
  "failure": {
    "code": "4000",
    "message": "获取失败",
    "data": null
  }
}
```

### 注意事项
- 该接口仅返回状态为有效（status=1）的会员套餐
- 返回结果按创建时间升序排序
- 需要 members 的 read 权限
- 适用于下拉选择等场景，无需分页


## 2. 获取会员列表
**方法**：	GET

**路径**：				/api/members

**功能说明**：
分页获取会员套餐列表

### 请求参数
```json
{
  "query": [
    {
      "name": "pageNum",
      "type": "number",
      "required": false,
      "description": "页码，默认1"
    },
    {
      "name": "pageSize",
      "type": "number",
      "required": false,
      "description": "每页数量，默认10"
    },
    {
      "name": "name",
      "type": "string",
      "required": false,
      "description": "套餐名称关键词"
    },
    {
      "name": "memberTypeId",
      "type": "string",
      "required": false,
      "description": "会员类型ID（会员类型管理记录的_id）"
    }
  ]
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "获取成功",
    "data": {
      "list": [
        {
          "id": 1,
          "code": "MEM0001",
          "name": "会员套餐名称",
          "memberTypeId": "xxx",
          "price": "99.99",
          "validityDays": 30,
          "description": "套餐描述",
          "status": 1
        }
      ],
      "total": 100,
      "pageNum": 1,
      "pageSize": 10
    }
  }
}
```


## 3. 获取会员详情
**方法**：	GET

**路径**：				/api/members/{id}

**功能说明**：
根据会员套餐ID获取会员套餐详细信息

### 请求参数
```json
{
  "path": [
    {
      "name": "id",
      "type": "string",
      "required": true,
      "description": "会员套餐ID"
    }
  ]
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "获取成功",
    "data": {
      "id": 1,
      "code": "MEM0001",
      "name": "会员套餐名称",
      "memberTypeId": "xxx",
      "price": "99.99",
      "validityDays": 30,
      "description": "套餐描述",
      "status": 1
    }
  },
  "failure": {
    "code": "4040",
    "message": "会员套餐不存在",
    "data": null
  }
}
```


## 4. 创建会员
**方法**：	POST

**路径**：				/api/members

**功能说明**：
创建新的会员套餐

### 请求参数
```json
{
  "body": {
    "name": "string｜必填，套餐名称",
    "memberTypeId": "string｜可选，会员类型ID（会员类型管理记录的_id），如果提供会校验会员类型是否存在",
    "price": "string｜可选，价格（两位小数，如：99.99）",
    "validityDays": "number｜可选，有效期天数（最小值为1）",
    "description": "string｜可选，套餐描述",
    "status": "number｜可选，状态：1-有效，0-无效，默认0"
  }
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "创建会员成功",
    "data": {
      "id": 1,
      "code": "MEM0001",
      "name": "会员套餐名称",
      "memberTypeId": "xxx",
      "price": "99.99",
      "validityDays": 30,
      "description": "套餐描述",
      "status": 0
    }
  },
  "failure": {
    "code": "4000",
    "message": "关联的会员类型不存在",
    "data": null
  }
}
```

### 注意事项
- 如果提供了memberTypeId，会校验会员类型是否存在，不存在返回错误：关联的会员类型不存在


## 5. 更新会员
**方法**：	PUT

**路径**：				/api/members/{id}

**功能说明**：
更新指定会员套餐的信息

### 请求参数
```json
{
  "body": {
    "name": "string｜必填，套餐名称",
    "memberTypeId": "string｜可选，会员类型ID（会员类型管理记录的_id），如果提供会校验会员类型是否存在",
    "price": "string｜可选，价格（两位小数，如：99.99）",
    "validityDays": "number｜可选，有效期天数（最小值为1）",
    "description": "string｜可选，套餐描述",
    "status": "number｜可选，状态：1-有效，0-无效，默认0"
  },
  "path": [
    {
      "name": "id",
      "type": "string",
      "required": true,
      "description": "会员套餐ID"
    }
  ]
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "更新会员成功",
    "data": {
      "id": 1,
      "code": "MEM0001",
      "name": "会员套餐名称",
      "memberTypeId": "xxx",
      "price": "99.99",
      "validityDays": 30,
      "description": "套餐描述",
      "status": 1
    }
  },
  "failure": {
    "code": "4000",
    "message": "关联的会员类型不存在",
    "data": null
  }
}
```

### 注意事项
- 如果提供了memberTypeId，会校验会员类型是否存在，不存在返回错误：关联的会员类型不存在
- 有效状态（status=1）的会员套餐不允许修改，会返回错误：有效状态的会员套餐不允许修改


## 6. 删除会员
**方法**：	DELETE

**路径**：				/api/members/{id}

**功能说明**：
删除指定的会员套餐

### 请求参数
```json
{
  "path": [
    {
      "name": "id",
      "type": "string",
      "required": true,
      "description": "会员套餐ID"
    }
  ]
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "删除会员成功",
    "data": {
      "result": true
    }
  },
  "failure": {
    "code": "4000",
    "message": "删除会员失败",
    "data": null
  }
}
```

### 注意事项
- 有效状态（status=1）的会员套餐不允许删除，会返回错误：有效状态的会员套餐不允许删除


## 7. 切换会员套餐状态
**方法**：	PUT

**路径**：				/api/members/{id}/status

**功能说明**：
切换会员套餐的启用/禁用状态

### 请求参数
```json
{
  "body": {
    "status": "number｜必填，状态：1-有效，0-无效"
  },
  "path": [
    {
      "name": "id",
      "type": "string",
      "required": true,
      "description": "会员套餐ID"
    }
  ]
}
```

### 响应示例
```json
{
  "success": {
    "code": "0000",
    "message": "状态更新成功",
    "data": {
      "id": 1,
      "code": "MEM0001",
      "name": "会员套餐名称",
      "memberTypeId": "xxx",
      "price": "99.99",
      "validityDays": 30,
      "description": "套餐描述",
      "status": 1,
      "updateTime": "2025-01-01T10:00:00.000Z"
    }
  },
  "failure": {
    "code": "4040",
    "message": "会员套餐不存在",
    "data": null
  }
}
```

### 注意事项
- 该接口用于切换会员套餐的启用/禁用状态
- 只有通过状态切换接口才能修改有效状态的会员套餐

