本文引用的文件
本文件面向AI有声书生成平台的“用户基本信息”模型,围绕User模型进行系统化说明,重点覆盖以下方面:
与用户基本信息模型直接相关的代码分布在如下位置:
数据访问层:Prisma 客户端连接与查询
graph TB
subgraph "前端"
FE_Store["用户状态存储<br/>user.ts"]
end
subgraph "后端"
BE_Router["认证路由<br/>auth.controller.ts"]
BE_Service["认证服务<br/>auth.service.ts"]
BE_Models["数据访问层<br/>models/index.ts"]
end
subgraph "数据库"
DB_Schema["Prisma Schema<br/>schema.prisma"]
end
FE_Store --> BE_Router
BE_Router --> BE_Service
BE_Service --> BE_Models
BE_Models --> DB_Schema
图表来源
章节来源
本节聚焦User模型的核心字段,逐项说明其数据类型、约束、默认值与业务含义,并解释为何某些字段允许为空。
id 主键自增
phone 手机号(唯一索引)
openid 第三方登录标识(唯一索引)
nickname 昵称(默认值)
avatar 头像URL(默认值)
memberLevel 会员等级(默认值)
memberExpireAt 会员到期时间(可空)
dailyUsage 每日用量(默认值)
lastUsageDate 最后使用日期(默认值)
usedAudioMinutes 已用音频时长(默认值)
subscriptionResetDate 订阅重置日期(可空)
createdAt/updatedAt 时间戳(默认值)
索引与外键
章节来源
用户基本信息在系统中的流转路径如下:
前端Store保存令牌与用户信息,后续请求携带令牌访问受保护资源
sequenceDiagram
participant Client as "客户端"
participant Router as "认证路由<br/>auth.controller.ts"
participant Service as "认证服务<br/>auth.service.ts"
participant DB as "数据库<br/>schema.prisma"
Client->>Router : "POST /auth/login"
Router->>Service : "loginWithPhone(phone, code)"
Service->>DB : "查询手机号是否存在"
DB-->>Service : "返回用户或空"
Service->>DB : "不存在则创建用户含默认昵称/头像等"
Service-->>Router : "返回token与用户信息"
Router-->>Client : "登录成功响应"
图表来源
章节来源
生成JWT令牌返回给前端
sequenceDiagram
participant FE as "前端<br/>user.ts"
participant API as "后端路由<br/>auth.controller.ts"
participant SVC as "后端服务<br/>auth.service.ts"
participant PRISMA as "Prisma<br/>schema.prisma"
FE->>API : "POST /auth/send-code"
FE->>API : "POST /auth/login"
API->>SVC : "loginWithPhone(phone, code)"
SVC->>PRISMA : "findUnique(phone)"
alt "用户不存在"
SVC->>PRISMA : "create(user with defaults)"
end
SVC-->>API : "token + user"
API-->>FE : "登录成功"
图表来源
章节来源
更新用户信息
支持更新昵称与头像;后端仅对传入的字段进行更新,避免覆盖其他字段
sequenceDiagram
participant FE as "前端<br/>user.ts"
participant API as "后端路由<br/>auth.controller.ts"
participant SVC as "后端服务<br/>auth.service.ts"
participant PRISMA as "Prisma<br/>schema.prisma"
FE->>API : "GET /auth/user-info"
API->>SVC : "getUserInfo(userId)"
SVC->>PRISMA : "findUnique(id)"
SVC-->>API : "用户信息"
API-->>FE : "返回信息"
FE->>API : "PUT /auth/user-info {nickname, avatar}"
API->>PRISMA : "update(id, {nickname?, avatar?})"
API-->>FE : "更新成功"
图表来源
章节来源
章节来源
章节来源
后端依赖
数据访问层封装Prisma客户端连接与生命周期管理
graph LR
FE["前端 Store<br/>user.ts"] --> API["后端路由<br/>auth.controller.ts"]
API --> SVC["后端服务<br/>auth.service.ts"]
SVC --> PRISMA["Prisma 客户端<br/>models/index.ts"]
PRISMA --> SCHEMA["Schema 定义<br/>schema.prisma"]
图表来源
章节来源
章节来源
User模型以简洁明确的字段与合理的默认值设计,支撑起平台的多渠道登录与基础用户管理能力。通过唯一索引保障登录入口的一致性,通过可空字段与默认值兼顾灵活性与易用性。结合前端Store与后端服务层的清晰职责划分,形成了稳定可靠的用户信息流转链路。后续可在现有基础上扩展第三方登录与手机号绑定接口,进一步完善用户身份体系。