本文档引用的文件
本文件为AI有声书生成平台的用户数据模型详细文档。重点解释User模型的字段定义、数据类型和约束条件,包括手机号、OpenID、昵称、头像等基本信息字段;详细说明会员等级、过期时间、使用统计等会员相关字段的作用和业务含义;解释用户偏好设置模型UserPreference的配置项,包括播放速度、音质、主题、默认音色等个性化设置;并提供用户数据的CRUD操作示例,包括用户注册、登录验证、信息更新等常见场景的实现方法。
用户数据模型主要分布在以下位置:
数据库连接:server/src/models/index.ts
graph TB
subgraph "前端应用"
UI[用户界面]
Store[Pinia用户状态]
end
subgraph "后端服务"
AuthCtrl[认证控制器]
AuthSvc[认证服务]
PrefCtrl[偏好控制器]
PrefSvc[偏好服务]
DB[(MySQL数据库)]
end
UI --> Store
Store --> AuthCtrl
Store --> PrefCtrl
AuthCtrl --> AuthSvc
PrefCtrl --> PrefSvc
AuthSvc --> DB
PrefSvc --> DB
图表来源
章节来源
User模型是用户数据的核心实体,包含以下关键字段:
章节来源
UserPreference模型用于存储用户的个性化偏好设置:
章节来源
用户数据模型采用分层架构设计,确保数据的一致性和完整性:
classDiagram
class User {
+int id
+string phone
+string openid
+string nickname
+string avatar
+int memberLevel
+datetime memberExpireAt
+int dailyUsage
+string lastUsageDate
+int usedAudioMinutes
+datetime subscriptionResetDate
+datetime createdAt
+datetime updatedAt
}
class UserPreference {
+int id
+int userId
+float playSpeed
+string quality
+string theme
+string defaultVoiceId
+int defaultVolume
+boolean autoPlayNext
+boolean wifiOnlyDownload
+datetime createdAt
+datetime updatedAt
}
class AuthController {
+sendCode()
+login()
+getUserInfo()
+updateUserInfo()
}
class PreferenceController {
+getPreferences()
+updatePreferences()
}
class AuthService {
+generateSmsCode()
+verifySmsCode()
+generateToken()
+loginWithPhone()
+getUserInfo()
}
class PreferenceService {
+getPreferences()
+updatePreferences()
}
UserPreference --> User : "belongsTo"
AuthController --> AuthService : "uses"
PreferenceController --> PreferenceService : "uses"
AuthService --> User : "manages"
PreferenceService --> UserPreference : "manages"
图表来源
用户认证流程涉及手机号登录和验证码验证机制:
sequenceDiagram
participant Client as 客户端
participant AuthCtrl as 认证控制器
participant AuthSvc as 认证服务
participant DB as 数据库
Client->>AuthCtrl : POST /auth/login (phone, code)
AuthCtrl->>AuthSvc : loginWithPhone(phone, code)
AuthSvc->>DB : 查询用户 (phone)
DB-->>AuthSvc : 用户信息或null
alt 用户不存在
AuthSvc->>DB : 创建新用户
DB-->>AuthSvc : 新用户ID
end
AuthSvc->>AuthSvc : 生成JWT Token
AuthSvc-->>AuthCtrl : 返回token和用户信息
AuthCtrl-->>Client : 登录成功响应
图表来源
登录验证包含以下步骤:
章节来源
用户偏好设置采用upsert策略,确保每个用户都有对应的偏好配置:
flowchart TD
Start([获取用户偏好]) --> CheckUser["检查用户ID"]
CheckUser --> FindPref["查询现有偏好设置"]
FindPref --> Exists{"存在偏好设置?"}
Exists --> |是| ReturnExisting["返回现有设置"]
Exists --> |否| UpsertDefault["upsert默认设置"]
UpsertDefault --> CreateDefault["创建默认偏好设置"]
CreateDefault --> ReturnCreated["返回新建设置"]
ReturnExisting --> End([结束])
ReturnCreated --> End
图表来源
当用户首次访问时,系统会自动创建默认偏好设置:
章节来源
前端使用Pinia进行用户状态管理,提供完整的用户生命周期控制:
stateDiagram-v2
[*] --> 未登录
未登录 --> 发送验证码 : sendCode()
发送验证码 --> 等待验证码 : 等待用户输入
等待验证码 --> 已登录 : login()
已登录 --> 获取用户信息 : fetchUserInfo()
已登录 --> 获取会员状态 : fetchMemberStatus()
已登录 --> 更新用户信息 : updateUserInfo()
已登录 --> 登出 : logout()
登出 --> 未登录 : 清除状态
获取用户信息 --> 已登录 : 更新本地状态
获取会员状态 --> 已登录 : 更新会员信息
更新用户信息 --> 已登录 : 保存到本地存储
图表来源
章节来源
用户数据模型的依赖关系体现了清晰的分层设计:
graph LR
subgraph "数据层"
Schema[schema.prisma]
Prisma[Prisma Client]
end
subgraph "服务层"
AuthSvc[AuthService]
PrefSvc[PreferenceService]
Models[Models Index]
end
subgraph "控制器层"
AuthCtrl[AuthController]
PrefCtrl[PreferenceController]
end
subgraph "类型定义"
Types[Index Types]
end
subgraph "前端状态"
UserStore[User Store]
end
Schema --> Prisma
Prisma --> AuthSvc
Prisma --> PrefSvc
AuthCtrl --> AuthSvc
PrefCtrl --> PrefSvc
AuthSvc --> Models
PrefSvc --> Models
AuthCtrl --> Types
PrefCtrl --> Types
UserStore --> AuthCtrl
UserStore --> PrefCtrl
图表来源
数据库连接通过Prisma Client统一管理,确保连接池的有效利用和错误处理:
章节来源
User模型建立了关键字段的索引以提升查询性能:
前端采用本地存储缓存用户状态:
症状:手机号登录时报错 原因:
解决方法:
症状:用户偏好设置无法加载 原因:
解决方法:
症状:用户状态不同步 原因:
解决方法:
章节来源
AI有声书生成平台的用户数据模型设计合理,具有以下特点:
该模型为平台的用户管理提供了坚实的数据基础,支持从基础用户注册到高级个性化设置的完整功能需求。通过清晰的分层架构和完善的错误处理机制,确保了系统的稳定性和可维护性。