# 一、Schema范式设计

## 个性化推荐模块

- 表设计
```
1._User表
objectId: String (默认)
createdAt: Date (默认)
userId:String
password:String
realname:String
age: Number
gender: String
email:String
bio:String（个人简介）
avatar:String
imagery：String（用户画像）

2.Film表
objectId: String (默认)
createdAt: Date (默认)
title: String(剧名)
genre: String（题材）
grade: String（评分）
desc: String（描述）

3.FilmRecommendation
objectId: String (默认)
createdAt: Date (默认)
user: Pointer
recommendedFilms: Array<Pointer>
```

## AI陪聊助手模块

- 表设计
```
1.FilmRole表
objectId: String (默认)
createdAt: Date (默认)
name: String
nickname: String
title: String
avater: String
description: String
traits: String

2.FilmPartner表
objectId: String (默认)
createdAt: Date (默认)
name: String
age: Number
avater: String
desc: String

3.FilmChat表
objectId: String (默认)
createdAt: Date (默认)
user: Pointer
filmrole: Pointer
filmpartner: Pointer
title: String
dialogue: String
```

## 社区模块

- 表设计
```
1.FilmPost表
objectId: String (默认)
createdAt: Date (默认)
author: Pointer
title: String
label:String（话题）
content: String
likesCount: Number
commentCount：Number
status: String （状态，默认为通过）

2.FilmComment表
objectId: String (默认)
createdAt: Date (默认)
post: Pointer
user: Pointer
content: String
status: String

3.FilmPostRating表
objectId: String (默认)
createdAt: Date (默认)
user: Pointer
post: Pointer
ratingValue: Number
comment: String (可选)
```


# 类图

```plantuml
@startuml

class User {
    +objectId: String
    +createdAt: Date
    +userId: String
    +password: String
    +realname: String
    +age: Number
    +gender: String
    +email: String
    +bio: String
    +avatar: String
    +imagery: String
}

class Film {
    +objectId: String
    +createdAt: Date
    +title: String
    +genre: String
    +grade: String
    +desc: String
}

class FilmRecommendation {
    +objectId: String
    +createdAt: Date
    +user: Pointer
    +recommendedFilms: Array
}

class FilmRole {
    +objectId: String
    +createdAt: Date
    +name: String
    +nickname: String
    +title: String
    +avatar: String
    +description: String
    +traits: String
}

class FilmPartner {
    +objectId: String
    +createdAt: Date
    +name: String
    +age: Number
    +avatar: String
    +desc: String
}

class FilmChat {
    +objectId: String
    +createdAt: Date
    +user: Pointer
    +filmrole: Pointer
    +filmpartner: Pointer
    +title: String
    +dialogue: String
}

class FilmPost {
    +objectId: String
    +createdAt: Date
    +author: Pointer
    +title: String
    +label: String
    +content: String
    +likesCount: Number
    +commentCount: Number
    +status: String
}

class FilmComment {
    +objectId: String
    +createdAt: Date
    +post: Pointer
    +user: Pointer
    +content: String
    +status: String
}

class FilmPostRating {
    +objectId: String
    +createdAt: Date
    +user: Pointer
    +post: Pointer
    +ratingValue: Number
    +comment: String
}

User "1" --> "*" FilmRecommendation : has
Film "1" --> "*" FilmRecommendation : recommended in
User "1" --> "*" FilmChat : initiates
FilmRole "1" --> "*" FilmChat : participates in
FilmPartner "1" --> "*" FilmChat : participates in
User "1" --> "*" FilmPost : creates
FilmPost "1" --> "*" FilmComment : has
User "1" --> "*" FilmComment : comments on
User "1" --> "*" FilmPostRating : rates
FilmPost "1" --> "*" FilmPostRating : has

@enduml
```


# 个性化推荐模块
- AI陪聊搭子通过分析与用户的聊天记录和用户画像，智能生成影视剧推荐列表，并显示。

## 时序图
- 业务逻辑描述
  - 数据分析：AI分析用户的聊天记录，以了解用户的兴趣和偏好。
  - AI同时获取用户的画像信息（例如年龄、性别、兴趣等）。
  - 推荐生成：基于分析结果，AI直接生成影视剧推荐列表。
  - 展示推荐：系统将生成的推荐列表展示给用户。

    ```plantuml
    @startuml
    actor User
    participant "AI陪聊助手" as ChatBot
    participant "用户画像数据库" as UserProfileDB
    participant "聊天记录数据库" as ChatHistoryDB
    participant "推荐系统" as RecommendationSystem

    ChatBot -> ChatHistoryDB: 获取聊天记录
    ChatBot -> UserProfileDB: 获取用户画像
    ChatBot -> ChatHistoryDB: 分析聊天记录
    ChatBot -> RecommendationSystem: 生成推荐列表
    RecommendationSystem -> ChatBot: 返回推荐列表
    ChatBot -> User: 显示推荐列表

    @enduml
    ```

## 状态图
- 状态逻辑描述

    ```
    初始状态：用户未进行点击。
    分析数据：当用户点击生成推荐时，系统分析用户的聊天记录和用户画像。
    状态转移到“分析中”。
    生成推荐：系统根据分析结果生成影视剧推荐列表。
    状态转移到“推荐生成中”。
    展示推荐：推荐生成后，系统将推荐列表展示给用户。
    状态转移到“推荐展示中”。
    结束状态：用户查看推荐后，状态回到“初始状态”。
    ```
    ```plantuml
    @startuml
    [*] --> 初始状态

    初始状态 --> 分析中 : 用户点击生成推荐
    分析中 --> 推荐生成中 : 分析完成
    推荐生成中 --> 推荐展示中 : 生成推荐列表
    推荐展示中 --> 初始状态 : 用户查看推荐

    @enduml
    ```

## 活动图
- 活动逻辑描述

    ```
    开始：用户与 AI 陪聊助手开始互动。
    获取聊天记录：系统获取用户的聊天信息。
    获取用户画像：系统获取用户的画像信息。
    分析数据：系统分析聊天记录和用户画像，以了解用户偏好。
    生成推荐：系统基于分析结果生成影视剧推荐列表。
    展示推荐：系统将生成的推荐列表展示给用户。
    结束：用户查看推荐后，活动结束。
    ```
    
    ```plantuml
    @startuml
    start
    :开始推荐;
    :获取用户的聊天信息;
    :获取用户画像信息;
    :分析聊天记录和用户画像;
    :生成影视剧推荐列表;
    :展示推荐列表给用户;
    stop
    @enduml
    ```

# AI陪聊助手模块
- 用户选择AI陪聊搭子，它可以根据影视剧的剧情与用户进行流畅、自然的对话交流，为用户提供个性化的影视剧解读，并保存数据。
- 用户可以选择不同角色的智能体互动，塑造不同角色的智能体与用户聊天，并保存数据。

## 时序图

- AI追剧搭子 业务逻辑描述
  - 用户启动对话：用户通过应用程序启动AI陪聊助手，进入AI追剧搭子的陪聊模块。
  - 对话初始化：AI追剧搭子根据设定的背景，生成初始对话内容并发送给用户。
  - 用户输入：用户输入自己的问题或评论，AI追剧搭子接收并解析用户的输入。
  - 对话生成：AI追剧搭子根据用户的输入和影视剧剧情，生成适当的回复，并考虑剧情相关性。
  - 回复发送：AI追剧搭子将生成的回复发送给用户，继续维持对话。
  - 循环对话：用户和AI追剧搭子之间的对话可以持续进行，直到用户选择结束对话。
  - 对话结束：用户选择结束对话，AI追剧搭子记录对话信息，并提供总结或推荐其他角色/影视剧。

    ```plantuml
    @startuml
    actor User
    participant "AI追剧搭子" as AI

    User -> AI : 启动陪聊模块
    AI -> AI : 加载背景信息
    AI -> User : 生成初始对话内容

    User -> AI : 输入问题/评论
    AI -> AI : 解析用户输入
    AI -> AI : 生成AI追剧搭子回复
    AI -> User : 发送AI追剧搭子回复

    User -> AI : 输入问题/评论
    AI -> AI : 解析用户输入
    AI -> AI : 生成AI追剧搭子回复
    AI -> User : 发送AI追剧搭子回复

    User -> AI : 结束对话
    AI -> AI : 记录对话信息
    AI -> User : 提供总结/推荐

    @enduml
    ```

- 角色互动 业务逻辑描述
  - 用户启动对话：用户通过应用程序启动AI陪聊助手，进入陪聊模块。
  - 角色选择：用户选择希望与之互动的角色，AI助手根据选择加载该角色的背景和剧情信息。
  - 对话初始化：AI助手根据所选角色的特点和剧情背景，生成初始对话内容并发送给用户。
  - 用户输入：用户输入自己的问题或评论，AI助手接收并解析用户的输入。
  - 对话生成：AI助手根据用户的输入和影视剧剧情，生成适当的回复，并考虑剧情相关性。
  - 回复发送：AI助手将生成的回复发送给用户，继续维持对话。
  - 循环对话：用户和AI助手之间的对话可以持续进行，直到用户选择结束对话。
  - 对话结束：用户选择结束对话，AI助手记录对话信息。

    ```plantuml
    @startuml
    actor User
    participant "角色" as AI

    User -> AI : 启动陪聊模块

    User -> AI : 选择角色互动功能
    AI -> User : 显示角色选择

    User -> AI : 选择角色
    AI -> AI : 加载角色信息
    AI -> User : 生成初始对话内容

    User -> AI : 输入问题/评论
    AI -> AI : 解析用户输入
    AI -> AI : 生成角色回复
    AI -> User : 发送角色回复

    User -> AI : 输入问题/评论
    AI -> AI : 解析用户输入
    AI -> AI : 生成角色回复
    AI -> User : 发送角色回复

    User -> AI : 结束对话
    AI -> AI : 记录对话信息

    @enduml
    ```

## 状态图

- 状态逻辑描述
  - AI助手陪聊模块可以分为以下几个主要状态：
    ``` 
    初始状态：用户未启动陪聊模块。
    选择影视剧状态：用户启动陪聊模块后，进入AI陪聊助手选择界面。
    选择AI追剧搭子：用户选择一个追剧搭子。
    选择角色状态（可选）：用户选择影视剧后，可以选择希望与之互动的角色。
    对话进行中状态：用户进行选择后，进入与角色或AI追剧搭子的对话状态。
    结束对话状态：用户选择结束对话，AI助手记录相关信息并提供总结。
    ```
  
  - 状态之间的转换逻辑如下：
    ```
    从初始状态到选择角色状态：用户选择角色。
    从选择影视剧状态到对话进行中状态：用户选择不选择角色，直接进入对话。
    从选择角色状态到对话进行中状态：用户选择角色。
    从对话进行中状态到对话进行中状态：用户输入问题或评论，AI助手生成回复。
    从对话进行中状态到结束对话状态：用户选择结束对话。
    从结束对话状态到初始状态：对话结束后，用户返回初始状态。
    ```

    ```plantuml
    @startuml
    [*] --> 初始状态

    初始状态 --> 选择角色状态 : 角色对话
    初始状态 --> 选择AI追剧搭子状态 : 搭子陪聊
    选择AI追剧搭子状态 --> 对话进行中状态 : 选择搭子
    选择角色状态 --> 对话进行中状态 : 选择角色

    对话进行中状态 --> 对话进行中状态 : 输入问题/评论
    对话进行中状态 --> 结束对话状态 : 结束对话
    结束对话状态 --> [*] : 返回初始状态

    @enduml
    ```

## 活动图
- 活动逻辑描述

    ```
    开始：用户进入 AI 陪聊助手模块。
    选择AI陪聊搭子：用户选择一个AI陪聊搭子或角色。
    开始对话：系统根据用户选择的角色启动对话。
    流畅交流：AI 陪聊助手根据影视剧的剧情与用户进行自然的对话交流。
    提供个性化解读：系统为用户提供个性化的影视剧解读。
    保存数据：系统在对话过程中记录用户的选择和对话内容。
    结束对话：用户选择结束对话，系统保存最终的数据记录。
    结束：流程结束。
    ```
    
    ```plantuml
    @startuml
    start
    :用户进入AI陪聊助手模块;
    :选择AI陪聊搭子或角色;
    :开始对话;
    :AI助手根据剧情进行自然对话;
    :提供个性化的影视剧解读;
    :保存对话数据;
    :用户选择结束对话;
    :保存最终的数据记录;
    stop
    @enduml
    ```


# 社区模块
- 系统显示热门话题讨论区：系统展示当前热门的讨论话题和帖子，用户可以选择感兴趣的内容进行发帖，点赞，评论。
- 用户选择发布帖子/评论：用户选择在讨论区发布自己的观点、经验或问题，对自己感兴趣的帖子进行评论，表达自己的看法。
- 用户输入帖子/评论内容：用户在输入框中撰写帖子/评论内容，表达自己的想法。
- 用户提交帖子/评论：用户点击提交按钮，发送帖/评论子到系统。
- 系统记录用户的发帖/评论记录：在个人中心页面提供点赞记录查询功能，方便用户查看自己的发帖/评论行为。
- 系统更新社区的发帖/评论内容：在讨论区中显示新的帖子/评论。
- 用户选择点赞帖子：用户对感兴趣的帖子或评论进行点赞
- 系统更新点赞数并记录该用户的点赞记录：系统更新相应帖子或评论的点赞数量，在并保存用户点赞的行为，在个人中心页面提供点赞记录查询功能，方便用户查看自己的点赞行为。


## 时序图

- 业务逻辑描述
  - 用户进入社区模块：用户通过应用程序进入社区模块。
  - 用户选择发布帖子/评论：用户选择在讨论区发布自己的观点、经验或问题，或对自己感兴趣的帖子进行评论，表达自己的看法。
  - 用户输入帖子/评论内容：用户在输入框中撰写帖子或评论内容，表达自己的想法。
  - 用户提交帖子/评论：用户点击提交按钮，发送帖子或评论到系统。
  - 系统将数据保存到数据库。
  - 系统显示用户用户帖子/评论。
  - 结束：流程结束。

    ```plantuml
    @startuml
    actor User
    participant "社区模块" as CommunityModule
    participant "数据库" as Database

    User -> CommunityModule: 进入社区模块
    User -> CommunityModule: 选择发布帖子/评论
    User -> CommunityModule: 输入帖子/评论内容
    User -> CommunityModule: 提交帖子/评论
    CommunityModule -> Database: 保存帖子/评论数据
    Database -> CommunityModule: 确认保存
    CommunityModule -> User: 显示用户帖子/评论
    User -> CommunityModule: 结束

    @enduml
    ```

## 状态图

- 状态逻辑描述
    ```
    初始状态：用户未进入社区模块。
    社区模块状态：用户进入社区模块。
    选择发布状态：用户选择发布帖子或评论。
    输入内容状态：用户在输入框中撰写帖子或评论内容。
    提交状态：用户点击提交按钮，发送帖子或评论到系统。
    数据保存状态：系统将数据保存到数据库。
    显示状态：系统显示用户的帖子或评论。
    结束状态：用户查看帖子或评论，流程结束。
    ```

    ```plantuml
    @startuml
    [*] --> 初始状态

    初始状态 --> 社区模块状态 : 用户进入社区模块
    社区模块状态 --> 选择发布状态 : 用户选择发布帖子/评论
    选择发布状态 --> 输入内容状态 : 用户输入帖子/评论内容
    输入内容状态 --> 提交状态 : 用户提交帖子/评论
    提交状态 --> 数据保存状态 : 系统将数据保存到数据库
    数据保存状态 --> 显示状态 : 系统显示用户帖子/评论
    显示状态 --> 结束状态 : 用户查看帖子/评论
    结束状态 --> 初始状态 : 流程结束

    @enduml
    ```

## 活动图
- 活动逻辑描述

    ```
    开始：用户进入社区模块。
    选择发布帖子/评论：用户选择在讨论区发布自己的观点、经验或问题，或对感兴趣的帖子进行评论。
    输入内容：用户在输入框中撰写帖子或评论内容。
    提交内容：用户点击提交按钮，发送帖子或评论到系统。
    保存数据：系统将数据保存到数据库。
    显示内容：系统显示用户的帖子或评论。
    结束：流程结束。
    ```
    
    ```plantuml
    @startuml
    start
    :用户进入社区模块;
    :选择发布帖子/评论;
    :用户输入帖子/评论内容;
    :用户提交帖子/评论;
    :系统将数据保存到数据库;
    :系统显示用户的帖子/评论;
    stop
    @enduml
    ```