# FutureMail API 接口文档详细说明

## 项目概述

FutureMail 是一个未来邮件系统，允许用户创建定时发送的邮件，支持多种触发条件（时间、位置、事件），并提供时光胶囊可视化功能。

## 基础信息

- **API 基础地址**: `http://localhost:5003/api/v1`
- **认证方式**: JWT Bearer Token
- **数据格式**: JSON
- **字符编码**: UTF-8

## 认证说明

所有需要认证的接口都需要在请求头中添加：
```
Authorization: Bearer <your_jwt_token>
```

## 1. 用户认证模块

### 1.1 用户注册

**接口地址**: `POST /api/v1/auth/register`

**请求参数**:
```json
{
  "username": "string",    // 用户名，必填
  "email": "string",       // 邮箱，必填
  "password": "string",    // 密码，必填
  "avatar": "string"       // 头像URL，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "userId": "string",
    "username": "string",
    "email": "string",
    "avatar": "string",
    "token": "string",
    "refreshToken": "string"
  }
}
```

### 1.2 用户登录

**接口地址**: `POST /api/v1/auth/login`

**请求参数**:
```json
{
  "email": "string",       // 邮箱，必填
  "password": "string"     // 密码，必填
}
```

**响应示例**: 同注册接口

### 1.3 刷新令牌

**接口地址**: `POST /api/v1/auth/refresh`

**请求参数**:
```json
{
  "refreshToken": "string" // 刷新令牌，必填
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "token": "string",
    "refreshToken": "string"
  }
}
```

### 1.4 用户登出

**接口地址**: `POST /api/v1/auth/logout`

**请求头**: 需要包含有效的JWT令牌

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": null
}
```

## 2. 邮件管理模块

### 2.1 创建未来邮件

**接口地址**: `POST /api/v1/mails/create` (兼容前端格式)

**请求参数**:
```json
{
  "title": "string",                    // 邮件标题，必填
  "content": "string",                  // 邮件内容，必填
  "recipientType": "SELF",              // 收件人类型，必填，可选值: SELF(自己), SPECIFIC(指定), PUBLIC(公开)
  "recipientEmail": "string",           // 指定收件人邮箱，当recipientType为SPECIFIC时必填
  "sendTime": "2026-10-16T08:03:58.479Z", // 发送时间，必填，ISO时间格式
  "triggerType": "TIME",                // 触发类型，必填，可选值: TIME(时间), LOCATION(位置), EVENT(事件)
  "triggerCondition": {                 // 触发条件，可选
    "location": {
      "latitude": "number",             // 纬度
      "longitude": "number",            // 经度
      "city": "string"                  // 城市
    },
    "event": {
      "keywords": ["string"],           // 关键词列表
      "type": "string"                  // 事件类型
    }
  },
  "attachments": [                      // 附件列表，可选
    {
      "type": "IMAGE",                  // 附件类型，可选值: IMAGE, VOICE, VIDEO
      "url": "string",                  // 附件URL
      "thumbnail": "string"             // 缩略图URL
    }
  ],
  "isEncrypted": false,                 // 是否加密，可选
  "capsuleStyle": "default"             // 胶囊样式，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "mailId": "string",
    "capsuleId": "string",
    "status": "DRAFT",                  // 状态: DRAFT(草稿), PENDING(待投递), DELIVERING(投递中), DELIVERED(已投递)
    "createdAt": "string"
  }
}
```

### 2.2 获取邮件列表

**接口地址**: `GET /api/v1/mails`

**查询参数**:
- `type`: 邮件类型，可选值: INBOX(收件箱), SENT(已发送), DRAFT(草稿)
- `status`: 状态筛选，可选值: PENDING, DELIVERING, DELIVERED
- `page`: 页码，从1开始
- `size`: 每页数量

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "list": [
      {
        "mailId": "string",
        "title": "string",
        "sender": {
          "userId": "string",
          "username": "string",
          "avatar": "string"
        },
        "recipient": {
          "userId": "string",
          "username": "string",
          "avatar": "string"
        },
        "sendTime": "string",
        "deliveryTime": "string",
        "status": "string",
        "hasAttachments": true,
        "isEncrypted": false,
        "capsuleStyle": "string",
        "countdown": 86400              // 倒计时秒数（仅status=PENDING时返回）
      }
    ],
    "total": 100,
    "page": 1,
    "size": 20
  }
}
```

### 2.3 获取邮件详情

**接口地址**: `GET /api/v1/mails/{mailId}`

**路径参数**:
- `mailId`: 邮件ID

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "mailId": "string",
    "title": "string",
    "content": "string",
    "sender": {
      "userId": "string",
      "username": "string",
      "avatar": "string",
      "email": "string"
    },
    "recipient": {
      "userId": "string",
      "username": "string",
      "avatar": "string",
      "email": "string"
    },
    "sendTime": "string",
    "createdAt": "string",
    "deliveryTime": "string",
    "status": "string",
    "triggerType": "string",
    "triggerCondition": {},
    "attachments": [
      {
        "id": "string",
        "type": "string",
        "url": "string",
        "thumbnail": "string",
        "size": 1024
      }
    ],
    "isEncrypted": false,
    "capsuleStyle": "string",
    "canEdit": false,                   // 是否可编辑（仅草稿状态）
    "canRevoke": true                   // 是否可撤销（仅待投递状态）
  }
}
```

### 2.4 更新邮件（投递前）

**接口地址**: `PUT /api/v1/mails/{mailId}`

**路径参数**:
- `mailId`: 邮件ID

**请求参数**: 同创建邮件，但所有字段可选

**响应示例**: 同创建邮件

### 2.5 撤销发送

**接口地址**: `POST /api/v1/mails/{mailId}/revoke`

**路径参数**:
- `mailId`: 邮件ID

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "mailId": "string",
    "status": "REVOKED"
  }
}
```

## 3. 时光胶囊模块

### 3.1 获取时光胶囊视图

**接口地址**: `GET /api/v1/capsules`

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "capsules": [
      {
        "capsuleId": "string",
        "mailId": "string",
        "title": "string",
        "sendTime": "string",
        "deliveryTime": "string",
        "progress": 0.5,                 // 0-1 的进度
        "position": {
          "x": 0.5,                      // 0-1 相对位置
          "y": 0.5,
          "z": 0.5
        },
        "style": "string",
        "glowIntensity": 0.8             // 发光强度
      }
    ],
    "scene": "SPACE",                    // 场景类型: SPACE, OCEAN
    "background": "string"               // 背景配置
  }
}
```

### 3.2 更新胶囊样式

**接口地址**: `PUT /api/v1/capsules/{capsuleId}/style`

**路径参数**:
- `capsuleId`: 胶囊ID

**请求参数**:
```json
{
  "style": "string",                    // 胶囊样式
  "glowIntensity": 0.8                  // 发光强度
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "capsuleId": "string",
    "style": "string",
    "glowIntensity": 0.8
  }
}
```

## 4. AI助手模块

### 4.1 AI写作辅助

**接口地址**: `POST /api/v1/ai/writing-assistant`

**请求参数**:
```json
{
  "prompt": "string",                   // 用户输入，必填
  "type": "OUTLINE",                    // 辅助类型，必填，可选值: OUTLINE(大纲), DRAFT(草稿), COMPLETE(完整)
  "tone": "FORMAL",                     // 语气，必填，可选值: FORMAL(正式), CASUAL(随意), EMOTIONAL(情感), INSPIRATIONAL(励志)
  "length": "MEDIUM",                   // 长度，必填，可选值: SHORT(短), MEDIUM(中), LONG(长)
  "context": "string"                   // 上下文信息，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "content": "string",
    "suggestions": ["string"],
    "estimatedTime": 5                  // 预计写作时间（分钟）
  }
}
```

### 4.2 情感分析

**接口地址**: `POST /api/v1/ai/sentiment-analysis`

**请求参数**:
```json
{
  "content": "string"                   // 待分析内容，必填
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "sentiment": "POSITIVE",            // 情感倾向: POSITIVE(积极), NEUTRAL(中性), NEGATIVE(消极), MIXED(混合)
    "confidence": 0.85,                 // 0-1 置信度
    "emotions": [
      {
        "type": "HAPPY",                // 情感类型: HAPPY, SAD, HOPEFUL, NOSTALGIC, EXCITED
        "score": 0.7                    // 情感分数
      }
    ],
    "keywords": ["string"],
    "summary": "string"
  }
}
```

### 4.3 未来预测

**接口地址**: `POST /api/v1/ai/future-prediction`

**请求参数**:
```json
{
  "content": "string",                  // 邮件内容，必填
  "deliveryTime": "string",             // 投递时间，必填
  "context": "string"                   // 上下文信息，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "prediction": "string",             // 预测结果
    "confidence": 0.75,                 // 0-1 置信度
    "factors": ["string"],              // 影响因素
    "suggestions": ["string"]           // 建议
  }
}
```

## 5. 个人空间模块

### 5.1 获取时间线

**接口地址**: `GET /api/v1/timeline`

**查询参数**:
- `startDate`: 开始日期，可选
- `endDate`: 结束日期，可选
- `type`: 类型，可选值: ALL(全部), SENT(已发送), RECEIVED(已接收)

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "timeline": [
      {
        "date": "2025-10-16",
        "events": [
          {
            "type": "SENT",             // 事件类型: SENT, RECEIVED
            "mailId": "string",
            "title": "string",
            "time": "08:00:00",
            "withUser": {
              "userId": "string",
              "username": "string",
              "avatar": "string"
            },
            "emotion": "string"
          }
        ]
      }
    ]
  }
}
```

### 5.2 获取统计数据

**接口地址**: `GET /api/v1/statistics`

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "totalSent": 50,                    // 总发送数
    "totalReceived": 30,                // 总接收数
    "timeTravelDuration": 365,          // 总时间旅行时长（天）
    "mostFrequentRecipient": "string",  // 最常联系的收件人
    "mostCommonYear": 2025,             // 最常见的投递年份
    "keywordCloud": [                   // 关键词云
      {
        "word": "string",
        "count": 10,
        "size": 1.0
      }
    ],
    "monthlyStats": [                   // 月度统计
      {
        "month": "2025-10",
        "sent": 5,
        "received": 3
      }
    ]
  }
}
```

### 5.3 获取用户信息

**接口地址**: `GET /api/v1/user/profile`

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "userId": "string",
    "username": "string",
    "email": "string",
    "avatar": "string",
    "nickname": "string",
    "preferredBackground": "string",    // 偏好背景
    "preferredScene": "string",         // 偏好场景
    "createdAt": "string",
    "lastLoginAt": "string"
  }
}
```

### 5.4 更新用户信息

**接口地址**: `PUT /api/v1/user/profile`

**请求参数**:
```json
{
  "nickname": "string",                 // 昵称，可选
  "avatar": "string",                   // 头像URL，可选
  "preferredBackground": "string",      // 偏好背景，可选
  "preferredScene": "string"            // 偏好场景，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "userId": "string",
    "username": "string",
    "email": "string",
    "nickname": "string",
    "avatar": "string",
    "preferredBackground": "string",
    "preferredScene": "string",
    "updatedAt": "string"
  }
}
```

## 6. 文件上传模块

### 6.1 上传附件

**接口地址**: `POST /api/v1/upload/attachment`

**请求类型**: `multipart/form-data`

**请求参数**:
- `file`: 文件，必填
- `type`: 文件类型，必填，可选值: IMAGE, VOICE, VIDEO

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "fileId": "string",
    "fileName": "string",
    "fileSize": 1024,
    "fileType": "string",
    "url": "string",
    "thumbnailUrl": "string"
  }
}
```

### 6.2 上传头像

**接口地址**: `POST /api/v1/upload/avatar`

**请求类型**: `multipart/form-data`

**请求参数**:
- `file`: 图片文件，必填

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "avatarUrl": "string"
  }
}
```

## 7. 推送通知模块

### 7.1 注册设备

**接口地址**: `POST /api/v1/notification/device`

**请求参数**:
```json
{
  "deviceId": "string",                 // 设备ID，必填
  "platform": "string",                // 平台，必填，可选值: IOS, ANDROID, WEB
  "token": "string",                    // 推送令牌，必填
  "isEnabled": true                     // 是否启用通知，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "deviceId": "string",
    "isRegistered": true
  }
}
```

### 7.2 获取通知设置

**接口地址**: `GET /api/v1/notification/settings`

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "emailNotification": true,          // 邮件通知
    "pushNotification": true,           // 推送通知
    "deliveryReminder": true,           // 投递提醒
    "receivedNotification": true        // 接收通知
  }
}
```

### 7.3 更新通知设置

**接口地址**: `PUT /api/v1/notification/settings`

**请求参数**:
```json
{
  "emailNotification": true,            // 邮件通知，可选
  "pushNotification": true,             // 推送通知，可选
  "deliveryReminder": true,             // 投递提醒，可选
  "receivedNotification": true          // 接收通知，可选
}
```

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "emailNotification": true,
    "pushNotification": true,
    "deliveryReminder": true,
    "receivedNotification": true,
    "updatedAt": "string"
  }
}
```

## 8. 系统管理模块

### 8.1 获取用户订阅信息

**接口地址**: `GET /api/v1/user/subscription`

**响应示例**:
```json
{
  "code": 200,
  "message": "success",
  "data": {
    "plan": "FREE",                     // 订阅计划: FREE, PREMIUM
    "remainingMails": 10,               // 剩余邮件数量
    "maxAttachmentSize": 10485760,      // 最大附件大小（字节）
    "features": {
      "advancedTriggers": false,        // 高级触发器
      "customCapsules": false,          // 自定义胶囊
      "aiAssistant": true               // AI助手
    },
    "expireDate": "string"              // 到期日期
  }
}
```

## 错误响应格式

所有错误响应都遵循统一格式：

```json
{
  "code": 400,                          // 错误代码
  "message": "error message",           // 错误消息
  "errors": {                           // 详细错误信息（可选）
    "field": "error description"
  }
}
```

### 常见错误代码

- `400`: 请求参数错误
- `401`: 未授权（令牌无效或过期）
- `403`: 禁止访问（权限不足）
- `404`: 资源不存在
- `409`: 资源冲突（如邮箱已存在）
- `429`: 请求频率限制
- `500`: 服务器内部错误

## 使用示例

### 完整的邮件创建流程

1. **用户登录**
```bash
curl -X POST "http://localhost:5003/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123"
  }'
```

2. **创建未来邮件**
```bash
curl -X POST "http://localhost:5003/api/v1/mails/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your_jwt_token>" \
  -d '{
    "title": "给未来的一封信",
    "content": "亲爱的未来的我，...",
    "recipientType": "SELF",
    "sendTime": "2026-10-16T08:03:58.479Z",
    "triggerType": "TIME",
    "triggerCondition": {},
    "attachments": [],
    "isEncrypted": false,
    "capsuleStyle": "default"
  }'
```

3. **获取邮件列表**
```bash
curl -X GET "http://localhost:5003/api/v1/mails?type=SENT&page=1&size=10" \
  -H "Authorization: Bearer <your_jwt_token>"
```

## 注意事项

1. 所有时间字段均使用ISO 8601格式（如：`2025-10-16T08:03:58.479Z`）
2. 文件上传大小限制为100MB
3. JWT令牌有效期为24小时
4. 刷新令牌有效期为7天
5. 免费用户每月可创建10封未来邮件
6. 高级触发器（位置、事件）仅限高级用户使用

## 版本历史

- **v1.0.0**: 初始版本，包含基本邮件功能
- **v1.1.0**: 添加AI助手功能
- **v1.2.0**: 添加时光胶囊可视化
- **v1.3.0**: 添加高级触发条件

## 联系方式

如有问题或建议，请联系：
- 邮箱：support@futuremail.com
- 文档：https://docs.futuremail.com
- GitHub：https://github.com/futuremail/api