# 用户偏好与交互

## 相关源文件

- [UserController.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/UserController.java)
- [UserServiceImpl.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/UserServiceImpl.java)
- [UserAiAvatarAddRequest.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/useraiavatar/UserAiAvatarAddRequest.java)
- [UserAiAvatarUpdateRequest.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/useraiavatar/UserAiAvatarUpdateRequest.java)

## 目的与范围

本文档详细说明了SmartClass后端中管理用户偏好和内容交互的系统。它涵盖了如何维护用户个人资料信息、用户如何与内容（特别是AI虚拟形象）互动，以及这些偏好如何影响用户体验。有关用户认证方法的信息，请参阅[认证与授权](https://deepwiki.com/Ubanillx/smartclass-backend/4.1-authentication-and-authorization)。

## 用户个人资料管理

用户可以通过专用API端点更新其个人资料信息。此功能允许用户通过修改个人信息来定制他们的体验。

### 用户个人资料更新流程

```
Database
UserService
UserController
Client
Database
UserService
UserController
Client
POST /user/update/my (UserUpdateMyRequest)
getLoginUser(request)
查询当前用户
返回用户数据
updateById(user)
更新用户记录
确认更新
返回结果
返回成功/失败
```

来源：[UserController.java 350-363](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/UserController.java#L350-L363)

### 用户个人资料数据结构

系统维护用户个人资料信息，可通过用户更新端点进行更新。这包括：

- 用户名
- 用户头像
- 用户简介
- 联系信息（电话号码等）
- 用户特定设置

更新操作仅限于当前登录用户更新自己的信息，并通过会话验证强制执行。

来源：[UserController.java 350-363](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/UserController.java#L350-L363) [UserServiceImpl.java 320-328](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/UserServiceImpl.java#L320-L328)

## 用户-AI虚拟形象交互

在SmartClass系统中，用户交互的一个关键组成部分是用户与AI虚拟形象的关系。用户可以通过以下几种方式与AI虚拟形象互动：

- 将虚拟形象标记为收藏夹
- 对虚拟形象进行评分（1-5分）
- 提供关于虚拟形象的反馈
- 自定义虚拟形象设置

### 用户-AI虚拟形象关系模型

```
interacts with

accessed by

User

Long

id

String

userAccount

String

userName

String

userAvatar

String

userProfile

UserAiAvatar

Long

id

Long

userId

Long

aiAvatarId

Integer

isFavorite

BigDecimal

userRating

String

userFeedback

String

customSettings

AiAvatar

Long

id

String

avatarName

String

description

String

avatarImage
```

来源：[UserAiAvatarAddRequest.java 1-45](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/useraiavatar/UserAiAvatarAddRequest.java#L1-L45) [UserAiAvatarUpdateRequest.java 1-40](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/useraiavatar/UserAiAvatarUpdateRequest.java#L1-L40)

## 偏好和交互机制

系统允许用户以多种方式表达偏好并与AI虚拟形象互动：

| 交互类型 | 实现 | 目的 |
| --- | --- | --- |
| 收藏夹 | isFavorite标志（0或1） | 允许用户将特定AI虚拟形象标记为收藏夹以便快速访问 |
| 评分 | userRating（1-5分） | 收集用户对虚拟形象质量和性能的反馈 |
| 文本反馈 | userFeedback字段 | 存储用户关于虚拟形象的详细评论 |
| 自定义设置 | customSettings（JSON） | 存储用户特定的虚拟形象交互配置 |

来源：[UserAiAvatarUpdateRequest.java 14-37](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/useraiavatar/UserAiAvatarUpdateRequest.java#L14-L37)

## 基于会话的偏好管理

SmartClass系统使用基于会话的身份验证来维护用户状态和跨交互的偏好。用户偏好存储在数据库中，并通过当前用户的会话访问。

```
UserService.getLoginUser()

是

否

客户端请求

提取会话

用户是否已登录？

获取用户偏好

返回未登录错误

应用偏好到响应

返回个性化内容
```

来源：[UserServiceImpl.java 250-265](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/UserServiceImpl.java#L250-L265)

## 用户偏好访问控制

系统对用户偏好管理实施基于角色的访问控制：

- 普通用户只能查看和修改自己的偏好
- 管理员可以查看和修改所有用户偏好

这是通过getLoginUser方法实现的，该方法验证会话信息，并通过isAdmin方法检查管理员权限。

```
是

否

是

否

用户请求查看/编辑偏好

偏好的拥有者？

允许操作

是管理员？

返回无权限错误
```

来源：[UserController.java 265-282](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/UserController.java#L265-L282) [UserServiceImpl.java 292-303](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/UserServiceImpl.java#L292-L303)

## 用户数据传输对象

系统使用专门的视图对象（VOs）在层之间传输用户数据，同时维护数据安全。这些对象包括：

- LoginUserVO：包含当前登录用户的信息
- UserVO：包含一般用户信息，去除了敏感字段

这种方法确保了敏感用户信息（如密码）不会暴露在API响应中。

```
UserVO/LoginUserVO

id

userAccount

userName

userAvatar

userRole

User Entity

id

userAccount

userPassword

userName

userAvatar

userRole

User Entity

UserVO

LoginUserVO
```

来源：[UserServiceImpl.java 320-346](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/UserServiceImpl.java#L320-L346)

## 实现注意事项

### 用户偏好更新端点

用于更新用户偏好的API端点在UserController类中实现：

```
POST /user/update/my
```

此端点接受一个包含要更新字段的UserUpdateMyRequest对象。它验证用户是否已登录，仅更新当前用户的信息，并返回成功或错误响应。

来源：[UserController.java 350-363](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/UserController.java#L350-L363)

## 安全考虑

系统为用户偏好管理实施了几种安全措施：

- 会话验证以确保用户只能修改自己的信息
- 对管理功能实施基于角色的访问控制
- 通过DTO对象进行数据清理以防止敏感信息暴露

来源：[UserServiceImpl.java 250-265](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/UserServiceImpl.java#L250-L265) [UserController.java 265-282](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/UserController.java#L265-L282)