# 通讯模块

# 项目结构
- chat 对话页面
- session 历史会话
- contact-list 通讯录列表


# 对话模块
- 功能简介：两个用户互相发消息，接收消息，查看消息历史记录

## 数据范式
- _User 用户表
    - objectId
    - username 用户名
    - mobile 手机号
    - nickname 昵称
- Contact 通讯好友的表
    - from Pointer<_User>
    - to Pointer<_User>
- Message 消息表
    - sendUser Pointer<_User>
    - receiveUser Pointer<_User>
    - contentJson 消息对象 符合各类消息格式
    - isRead Boolean 消息已读
    - isCancel Boolean 消息撤回

思考：图片链接和图片消息的区别，和表达方式？
图片链接，本质上是文本消息（基于字符串）
图片消息，本质上是结构化消息 {type:"image",imgUrl:"https://file-cloud.fmode.cn/E4KpGvTEto/20230822/3mkf41033623275.png"}

### 消息内容规范（参考GPT多模态响应）
- 参考文档：https://ai.fmode.cn/chat/share/nxZMG3CZrd

普通文本消息：

{
      "role": "user",
      "content": "Here is the text: 'The quick brown fox jumps over the lazy dog.'"
}

 图片消息
{
    "role": "user",
    "content": {
    "type": "image",
    "data": {
        "url": "https://example.com/image.jpg",
        "alt_text": "A quick brown fox jumping over a lazy dog."
    }
    }
}

音频消息

{
    "role": "user",
    "content": {
    "type": "audio",
    "data": {
        "url": "https://example.com/audio.mp3",
        "alt_text": "An audio clip of a quick brown fox jumping over a lazy dog."
    }
    }
}

### 业务逻辑

#### 发送消息
- 进入会话页面
    - 无记录：输入用户昵称添加好友，再进行对话
    - 有记录：点击历史会话进入
- 向微服务创建一个Message，sendUser为自身，receiveUser为联系人

#### 接收消息
- 查询，receiveUser为自身，sendUser为会话窗口联系人的所有Message

#### 会话列表
- 查询，receiveUser为自身，所有Message，并每个receiver只显示最新一条
