I have an API interface document template and some SQL DDL statements. Please generate the API interface document based on the template and the SQL DDL statements. The template like:

# API 文档

## 概述

- **Base URL**: `https://api.example.com/v1`
- **认证方式**: Bearer Token
- **数据格式**: JSON

## 状态码

### 1. 成功状态码

| HTTP 状态码 | 说明     |
|----------|--------|
| `200`    | 查询成功   |
| `201`    | 创建成功   |
| `202`    | 接受异步任务 |
| `204`    | 删除成功   |

### 2. 错误状态码

| HTTP 状态码 | 说明      |
|----------|---------|
| `400`    | 请求错误    |
| `401`    | 未授权     |
| `403`    | 禁止访问    |
| `404`    | 未找到     |
| `500`    | 服务器内部错误 |

---

## 通用响应体

| 字段名     | 类型       | 说明   |
|---------|----------|------|
| `data`  | JSON 字符串 | 数据   |
| `msg`   | 字符串      | 错误信息 |
| `total` | 字符串      | 总数   |

---

## 资源列表

- [**安全管理**: `/auth`](#1-安全管理接口)
- [**用户管理**: `/users`](#2-用户管理接口)

---

## 接口详情

### 1. 安全管理接口

#### 1.1 用户登录

  <details>
<<summary><code>POST</code> <code><b>/auth/login</b></code> <code>(获取访问令牌)</code></summary>

#### 请求

- **请求头**:
    - `Content-Type: application/json`
  
- **请求体**:

  ```json
  
    "name": "John Doe",
    "password": "password123"
  
  ```

#### 成功响应

- **HTTP 状态码**: `200 OK`
- **响应体**:

  ```json
  
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "Bearer",
    "expires_in": 3600,
    "refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
    "scope": "read write"
  
  ```

#### 失败响应

- **HTTP 状态码**: `500 Internal Server Error`
- **响应体**:

  ```json
  
  "msg": "Invalid username or password"
  
  ```

#### 示例请求

```javascript
curl -X POST "https://api.example.com/v1/auth/login" -H "Content-Type: application/json" -d "\"username\": \"your-username\", \"password\": \"your-password\""
> ```

</details>

#### 1.2 用户登出

<details>
<summary><code>POST</code> <code><b>/auth/logout</b></code> <code>(用户登出)</code></summary>

#### 请求

- **请求头**:
    - `Authorization: Bearer <token>`

#### 成功响应

- **HTTP 状态码**: `200 OK`

#### 失败响应

- **HTTP 状态码**: `500 Internal Server Error`
- **响应体**:

  ```json
  
  "msg": "reason"
  
  ```

#### 示例请求

```javascript
curl - X
POST
"https://api.example.com/v1/auth/logout" - H
"Authorization: Bearer <token>"
> ```

#### 示例响应

**HTTP 状态码**: `200 Ok`

</details>

---

### 2. 用户管理接口

#### 2.1 获取用户列表

  <details>
<summary><code>GET</code> <code><b>/users</b></code> <code>(获取所有用户的列表)</code></summary>

#### 请求

- **请求头**:
    - `Authorization: Bearer <token>`
- **查询参数**:

  | 参数     | 必选 | 类型  | 说明            |
         |:-------|:---|:----|---------------|
  | limit  | 否  | int | 每页返回的数量，默认 10 |
  | offset | 否  | int | 分页偏移量，默认 0    |

#### 成功响应

- **HTTP 状态码**: `200 OK`
- **响应体**:

  ```json
  
  "data": [
      
        "id": 1,
        "name": "John Doe",
        "email": "john@example.com"
      
    ],
    "total": 100
  
  ```

#### 失败响应

- **HTTP 状态码**: `401 Unauthorized`
- **响应体**:

  ```json
  
  "msg": "未授权，请登录"
  
  ```

#### 示例请求

```javascript
curl - X
GET
"https://api.example.com/v1/users?limit=10&offset=0" \
     -H
"Authorization: Bearer <token>"
> ```

</details>

#### 2.2 创建用户

  <details>
<summary><code>POST</code> <code><b>/users</b></code> <code>(创建一个新用户)</code></summary>

#### 请求

- **请求头**:
    - `Authorization: Bearer <token>`
    - `Content-Type: application/json`
- **请求体**:

  ```json
  
    "name": "John Doe",
    "email": "john@example.com",
    "password": "password123"
  
  ```

#### 成功响应

- **HTTP 状态码**: `201 Created`
- 响应体

```json
  
  "data": 
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
  

  ```

#### 失败响应

- **HTTP 状态码**: `400 Bad Request`
- **响应体**:

  ```json
  
  "msg": "邮箱格式不正确"
  
  ```

#### 示例请求

```javascript
curl - X
POST
"https://api.example.com/v1/users" - H
"Authorization: Bearer <token>" - H
"Content-Type: application/json" - d
"\"name\": \"John Doe\", \"email\": \"john@example.com\", \"password\": \"password123\""
> ```

</details>

#### 2.3 获取单个用户

  <details>
<summary><code>GET</code> <code><b>/users/id</b></code> <code>(获取指定用户的详细信息)</code></summary>

#### 请求

- **请求头**:
    - `Authorization: Bearer <token>`
- **路径参数**:

| 参数 | 必选 | 类型  | 说明   |
     |:---|:---|:----|------|
| id | 是  | int | 用户ID |

#### 成功响应

- **HTTP 状态码**: `200 Ok`
- 响应体

```json
  
  "data": 
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
  

  ```

#### 失败响应

- **HTTP 状态码**: `404 Not Found`
- **响应体**:

  ```json
  
  "msg": "用户不存在"
  
  ```

#### 示例请求

```javascript
curl - X
GET
"https://api.example.com/v1/users/123" - H
"Authorization: Bearer <token>"
> ```

</details>

#### 2.4 更新用户

  <details>
<summary><code>PUT</code> <code><b>/users/id</b></code> <code>(更新指定用户的信息)</code></summary>

#### 请求

- **请求头**:
    - `Authorization: Bearer <token>`
    - `Content-Type: application/json`
- **路径参数**:
  | 参数 | 必选 | 类型 | 说明 |
  | :---|:---|:----|------|
  | id | 是 | int | 用户ID |
- **请求体**:

```json
  
  "name": "Jane Doe",
  "email": "jane@example.com"

  ```

#### 成功响应

- **HTTP 状态码**: `200 Ok`
- 响应体

```json
 
  "data": 
    "id": 1,
    "name": "Jane Doe",
    "email": "jane@example.com"
  

  ```

#### 失败响应

- **HTTP 状态码**: `400 Bad Request`
- **响应体**:

  ```json
  
  "msg": "邮箱格式不正确"
  
  ```

#### 示例请求

```javascript
curl - X
PUT
"https://api.example.com/v1/users/123" - H
"Authorization: Bearer <token>" - H
"Content-Type: application/json" - d
"\"name\": \"Jane Doe\", \"email\": \"jane@example.com\""
> ```

</details>

#### 2.5 删除用户

  <details>
<summary><code>DELETE</code> <code><b>/users/id</b></code> <code>(删除指定用户)</code></summary>

#### 请求

- **请求头**:
    - `Authorization: Bearer <token>`
- **路径参数**:
  | 参数 | 必选 | 类型 | 说明 |
  | :---|:---|:----|------|
  | id | 是 | int | 用户ID |

#### 成功响应

- **HTTP 状态码**: `204 No Content`

  ```

#### 失败响应

- **HTTP 状态码**: `404 Not Found`
- **响应体**:

  ```json
  
  "msg": "用户不存在"
  
  ```

#### 示例请求

```javascript
curl - X
DELETE
"https://api.example.com/v1/users/123" - H
"Authorization: Bearer <token>"
```

</details>
---
The SQL DDL statements are: 

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    description TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);. Please generate the API interface document based on the template and the SQL DDL statements.