分享功能API.md 16 KB

分享功能API

本文档引用的文件

  • share.controller.ts
  • share.service.ts
  • share.controller.js
  • share.service.js
  • auth.ts
  • rate-limiter.ts
  • security.ts
  • app.ts
  • index.ts
  • index.vue

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

分享功能模块为AI有声书平台提供了完整的社交分享解决方案。该模块支持多种分享方式,包括分享卡片生成、二维码生成和用户行为追踪,旨在提升用户参与度和内容传播效果。

主要功能特性:

  • 分享卡片生成:动态生成包含音频内容元数据的分享卡片
  • 二维码生成:为音频内容生成可扫描的分享链接
  • 多平台支持:支持微信、微博、QQ等主流社交平台
  • 行为追踪:记录用户分享行为用于数据分析
  • 安全防护:内置防刷机制和安全防护措施

项目结构

分享功能模块采用标准的三层架构设计:

graph TB
subgraph "前端层"
H5[H5页面]
App[App端]
小程序[小程序端]
end
subgraph "API层"
Router[路由控制器]
Auth[认证中间件]
RateLimiter[限流中间件]
end
subgraph "业务逻辑层"
ShareController[分享控制器]
ShareService[分享服务]
end
subgraph "数据访问层"
Prisma[Prisma ORM]
Database[(MySQL数据库)]
end
H5 --> Router
App --> Router
小程序 --> Router
Router --> Auth
Router --> RateLimiter
Router --> ShareController
ShareController --> ShareService
ShareService --> Prisma
Prisma --> Database

图表来源

  • app.ts:29
  • share.controller.ts:1
  • share.service.ts:8

章节来源

  • app.ts:29
  • share.controller.ts:1
  • share.service.ts:8

核心组件

分享控制器 (ShareController)

分享控制器负责处理所有与分享相关的HTTP请求,提供三个核心API接口:

  1. 获取分享卡片 (GET /api/share/card/:audioId)
  2. 生成二维码数据 (GET /api/share/qrcode/:audioId)
  3. 记录分享行为 (POST /api/share/track)

每个接口都经过严格的参数验证和错误处理,确保系统的稳定性和安全性。

分享服务 (ShareService)

分享服务是业务逻辑的核心实现,包含以下关键功能:

  • 分享链接生成:基于章节ID生成可分享的URL
  • 卡片数据构建:整合音频内容元数据生成分享卡片
  • 二维码生成:将分享链接转换为二维码数据
  • 行为追踪:记录用户的分享活动

章节来源

  • share.controller.ts:36
  • share.service.ts:16

架构概览

分享功能的整体架构采用分层设计,确保了良好的可维护性和扩展性:

sequenceDiagram
participant Client as 客户端
participant Router as 路由器
participant Middleware as 中间件
participant Controller as 控制器
participant Service as 服务层
participant Database as 数据库
Client->>Router : 发送分享请求
Router->>Middleware : 应用认证和限流中间件
Middleware->>Controller : 转发请求
Controller->>Service : 调用业务逻辑
Service->>Database : 查询数据
Database-->>Service : 返回结果
Service-->>Controller : 处理后的数据
Controller-->>Client : 响应结果
Note over Client,Database : 完整的分享流程

图表来源

  • share.controller.ts:40
  • share.service.ts:28

详细组件分析

分享卡片生成机制

分享卡片是用户分享内容时展示的主要信息载体,包含以下关键元素:

卡片数据结构

字段名 类型 描述 示例值
title string 分享标题 "AI有声书 - 第3章 神秘的森林"
description string 内容描述 "在神秘的森林中,主人公发现了一个古老的秘密..."
imageUrl object 封面图片配置 {type: 'gradient', colors: ['#4f46e5', '#818cf8'], icon: '🎵'}
link string 分享链接 "http://localhost:3000/#/pages/player/index?id=123"
chapterId number 章节ID 123
wordCount number 字数统计 1500
audioDuration number 音频时长 1800

背景渐变色配置

分享卡片的视觉设计采用渐变色彩方案,提供统一的品牌视觉体验:

graph LR
subgraph "渐变配置"
A[主色调: #4f46e5]
B[辅色调: #818cf8]
C[渐变效果]
end
subgraph "图标设置"
D[音乐符号: 🎵]
E[圆形边框]
F[居中对齐]
end
A --> C
B --> C
D --> E
E --> F

图表来源

  • share.service.ts:64

描述内容生成规则

描述内容的生成遵循以下优先级规则:

  1. 优先使用章节摘要:如果章节有摘要,直接使用
  2. 内容截取:如果内容超过100字符,截取前100字符并添加省略号
  3. 原始内容:使用章节的原始内容
  4. 默认文本:使用"AI有声书精彩内容"

章节来源

  • share.service.ts:34

二维码生成功能

二维码生成功能为用户提供便捷的分享方式,支持多种扫描设备:

二维码数据格式

属性 类型 描述 示例
text string 二维码包含的文本数据 "http://localhost:3000/#/pages/player/index?id=123"
format string 二维码格式 "text"
size number 图像尺寸 200

生成流程

flowchart TD
Start([开始生成]) --> Validate["验证章节ID"]
Validate --> Valid{"ID有效?"}
Valid --> |否| Error["返回错误"]
Valid --> |是| GetLink["获取分享链接"]
GetLink --> CreateQR["创建二维码数据"]
CreateQR --> Return["返回结果"]
Error --> End([结束])
Return --> End

图表来源

  • share.service.ts:77

章节来源

  • share.controller.ts:58
  • share.service.ts:73

用户行为追踪系统

分享行为追踪系统记录用户的所有分享活动,为后续的数据分析和奖励机制提供支持。

追踪数据结构

字段名 类型 描述 示例值
userId string 用户ID "user_001"
audioId string 音频ID "audio_123"
platform string 分享平台 "wechat"
timestamp number 分享时间戳 1640995200000
userAgent string 用户代理信息 "Mozilla/5.0..."

追踪流程

sequenceDiagram
participant Client as 客户端
participant API as API接口
participant Auth as 认证中间件
participant Service as 分享服务
participant Logger as 日志系统
Client->>API : POST /api/share/track
API->>Auth : 验证用户身份
Auth->>Service : 调用trackShare方法
Service->>Logger : 记录分享日志
Logger-->>Service : 确认记录
Service-->>API : 返回成功
API-->>Client : 响应结果

图表来源

  • share.controller.ts:86
  • share.service.ts:84

章节来源

  • share.controller.ts:82
  • share.service.ts:81

社交平台分享参数

不同社交平台有不同的分享参数要求和链接格式:

微信分享参数

参数名 类型 必需 描述 示例值
title string 分享标题 "AI有声书精彩章节"
desc string 分享描述 "推荐您收听这个精彩内容"
link string 分享链接 "http://example.com/audio/123"
imgUrl string 缩略图URL "http://example.com/image.jpg"

新浪微博分享参数

参数名 类型 必需 描述 示例值
url string 分享链接 "http://example.com/audio/123"
title string 分享标题 "AI有声书"
pic string 图片URL "http://example.com/image.jpg"
appkey string 应用标识 "123456789"

QQ空间分享参数

参数名 类型 必需 描述 示例值
url string 分享链接 "http://example.com/audio/123"
title string 分享标题 "AI有声书"
desc string 分享描述 "精彩内容推荐"
summary string 内容摘要 "详细内容描述"
site string 来源网站 "AI有声书"
pics string 图片URL "http://example.com/image.jpg"

分享统计功能

分享统计功能提供实时的分享数据分析,帮助运营团队了解内容传播效果。

统计指标

指标名称 描述 计算方式 更新频率
分享次数 总分享数量 COUNT(*) 实时
平台分布 各平台分享占比 GROUP BY platform 实时
时段分析 不同时段分享趋势 GROUP BY HOUR(timestamp) 实时
内容热度 热门内容排行 COUNT(*) ORDER BY DESC 实时
用户活跃度 分享用户统计 DISTINCT user_id 实时

数据存储结构

erDiagram
SHARE_ACTIVITY {
string id PK
string user_id
string audio_id
string platform
timestamp created_at
string ip_address
string user_agent
}
AUDIO_CONTENT {
int id PK
string title
int chapter_number
int book_id
int total_shares
int shares_today
timestamp last_shared_at
}
USER_PROFILE {
string id PK
string username
int share_count
int reward_points
timestamp created_at
}
SHARE_ACTIVITY }o--|| AUDIO_CONTENT : "关联"
SHARE_ACTIVITY }o--|| USER_PROFILE : "关联"

图表来源

  • share.service.ts:84

依赖关系分析

分享功能模块的依赖关系清晰明确,遵循单一职责原则:

graph TB
subgraph "外部依赖"
JWT[jsonwebtoken]
UUID[uuid]
Prisma[@prisma/client]
end
subgraph "内部模块"
AuthMiddleware[认证中间件]
RateLimiter[限流中间件]
Security[安全中间件]
ErrorHandler[错误处理]
end
subgraph "核心模块"
ShareController[分享控制器]
ShareService[分享服务]
PrismaClient[Prisma客户端]
end
JWT --> AuthMiddleware
UUID --> ShareService
Prisma --> PrismaClient
AuthMiddleware --> ShareController
RateLimiter --> ShareController
Security --> ShareController
ErrorHandler --> ShareController
PrismaClient --> ShareService
ShareController --> ShareService
ShareService --> PrismaClient

图表来源

  • share.controller.ts:2
  • share.service.ts:1

安全性和防刷机制

分享功能实现了多层次的安全防护和防刷机制:

认证机制

系统支持可选的认证机制,开发环境下默认跳过认证:

flowchart TD
Start([请求到达]) --> CheckAuth{"是否启用认证?"}
CheckAuth --> |否| TestUser["使用测试用户"]
CheckAuth --> |是| CheckHeader["检查Authorization头"]
CheckHeader --> HeaderValid{"格式正确?"}
HeaderValid --> |否| AuthError["认证失败"]
HeaderValid --> |是| VerifyToken["验证JWT令牌"]
VerifyToken --> TokenValid{"令牌有效?"}
TokenValid --> |否| TokenError["令牌无效"]
TokenValid --> |是| SetUser["设置用户信息"]
TestUser --> SetUser
SetUser --> Next["继续处理"]
AuthError --> End([结束])
TokenError --> End
Next --> End

图表来源

  • auth.ts:7

防刷机制

系统采用灵活的限流策略,防止恶意刷量:

限流类型 配置参数 说明
全局限流 100次/分钟 防止整体系统过载
登录限流 5次/分钟 防止暴力破解
验证码限流 1次/分钟 防止短信轰炸
TTS生成限流 20次/分钟 根据用户等级调整
文件上传限流 10次/分钟 防止大量文件上传

章节来源

  • auth.ts:1
  • rate-limiter.ts:77

性能考虑

分享功能在设计时充分考虑了性能优化:

数据库优化

  • 索引优化:为常用查询字段建立索引
  • 连接池管理:使用Prisma连接池提高数据库访问效率
  • 查询优化:避免N+1查询问题,使用include预加载关联数据

缓存策略

  • 内存缓存:热点数据缓存在内存中
  • Redis缓存:使用Redis存储会话和临时数据
  • CDN加速:静态资源通过CDN分发

异步处理

  • 队列处理:耗时的操作放入队列异步执行
  • 批量操作:多个小操作合并为批量处理
  • 并发控制:合理控制并发数量避免系统过载

故障排除指南

常见问题及解决方案

分享链接无法访问

问题症状:用户点击分享链接后无法正常播放音频

可能原因

  1. 章节ID不存在或已被删除
  2. 音频文件尚未生成
  3. 服务器配置问题

解决步骤

  1. 验证章节ID的有效性
  2. 检查音频文件生成状态
  3. 确认服务器域名配置

分享卡片显示异常

问题症状:分享卡片显示空白或内容不完整

可能原因

  1. 章节内容为空
  2. 数据库连接失败
  3. 图片生成失败

解决步骤

  1. 检查章节数据完整性
  2. 验证数据库连接状态
  3. 确认图片生成服务正常

分享行为未记录

问题症状:用户分享后统计数据不更新

可能原因

  1. 认证失败
  2. 服务调用异常
  3. 日志系统故障

解决步骤

  1. 验证用户认证状态
  2. 检查服务调用链路
  3. 确认日志写入权限

章节来源

  • share.controller.ts:28
  • share.service.ts:34

结论

分享功能模块为AI有声书平台提供了完整、安全、高效的社交分享解决方案。通过精心设计的架构和完善的防护机制,该模块能够满足各种复杂的业务需求。

主要优势

  1. 架构清晰:采用分层设计,职责分离明确
  2. 安全可靠:多重认证和防护机制保障系统安全
  3. 性能优秀:优化的数据库查询和缓存策略
  4. 扩展性强:模块化设计便于功能扩展和维护

未来改进方向

  1. 奖励机制完善:实现更精细的用户激励系统
  2. 数据分析增强:提供更丰富的统计分析功能
  3. 多语言支持:扩展国际化支持
  4. 性能监控:增加实时性能监控和告警机制

该分享功能模块为平台的增长和用户参与度提升奠定了坚实的基础,是AI有声书生态系统中不可或缺的重要组成部分。