# 分享功能API **本文档引用的文件** - [share.controller.ts](file://server/src/modules/share/share.controller.ts) - [share.service.ts](file://server/src/modules/share/share.service.ts) - [share.controller.js](file://deploy-package/server/modules/share/share.controller.js) - [share.service.js](file://deploy-package/server/modules/share/share.service.js) - [auth.ts](file://server/src/middleware/auth.ts) - [rate-limiter.ts](file://server/src/middleware/rate-limiter.ts) - [security.ts](file://server/src/middleware/security.ts) - [app.ts](file://server/src/app.ts) - [index.ts](file://server/src/models/index.ts) - [index.vue](file://my-uniapp-vue3/src/pages/player/index.vue) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) ## 简介 分享功能模块为AI有声书平台提供了完整的社交分享解决方案。该模块支持多种分享方式,包括分享卡片生成、二维码生成和用户行为追踪,旨在提升用户参与度和内容传播效果。 主要功能特性: - **分享卡片生成**:动态生成包含音频内容元数据的分享卡片 - **二维码生成**:为音频内容生成可扫描的分享链接 - **多平台支持**:支持微信、微博、QQ等主流社交平台 - **行为追踪**:记录用户分享行为用于数据分析 - **安全防护**:内置防刷机制和安全防护措施 ## 项目结构 分享功能模块采用标准的三层架构设计: ```mermaid 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](file://server/src/app.ts#L29) - [share.controller.ts:1](file://server/src/modules/share/share.controller.ts#L1) - [share.service.ts:8](file://server/src/modules/share/share.service.ts#L8) **章节来源** - [app.ts:29](file://server/src/app.ts#L29) - [share.controller.ts:1](file://server/src/modules/share/share.controller.ts#L1) - [share.service.ts:8](file://server/src/modules/share/share.service.ts#L8) ## 核心组件 ### 分享控制器 (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](file://server/src/modules/share/share.controller.ts#L36) - [share.service.ts:16](file://server/src/modules/share/share.service.ts#L16) ## 架构概览 分享功能的整体架构采用分层设计,确保了良好的可维护性和扩展性: ```mermaid 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](file://server/src/modules/share/share.controller.ts#L40) - [share.service.ts:28](file://server/src/modules/share/share.service.ts#L28) ## 详细组件分析 ### 分享卡片生成机制 分享卡片是用户分享内容时展示的主要信息载体,包含以下关键元素: #### 卡片数据结构 | 字段名 | 类型 | 描述 | 示例值 | |--------|------|------|--------| | 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` | #### 背景渐变色配置 分享卡片的视觉设计采用渐变色彩方案,提供统一的品牌视觉体验: ```mermaid 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](file://server/src/modules/share/share.service.ts#L64) #### 描述内容生成规则 描述内容的生成遵循以下优先级规则: 1. **优先使用章节摘要**:如果章节有摘要,直接使用 2. **内容截取**:如果内容超过100字符,截取前100字符并添加省略号 3. **原始内容**:使用章节的原始内容 4. **默认文本**:使用"AI有声书精彩内容" **章节来源** - [share.service.ts:34](file://server/src/modules/share/share.service.ts#L34) ### 二维码生成功能 二维码生成功能为用户提供便捷的分享方式,支持多种扫描设备: #### 二维码数据格式 | 属性 | 类型 | 描述 | 示例 | |------|------|------|------| | text | string | 二维码包含的文本数据 | `"http://localhost:3000/#/pages/player/index?id=123"` | | format | string | 二维码格式 | `"text"` | | size | number | 图像尺寸 | `200` | #### 生成流程 ```mermaid flowchart TD Start([开始生成]) --> Validate["验证章节ID"] Validate --> Valid{"ID有效?"} Valid --> |否| Error["返回错误"] Valid --> |是| GetLink["获取分享链接"] GetLink --> CreateQR["创建二维码数据"] CreateQR --> Return["返回结果"] Error --> End([结束]) Return --> End ``` **图表来源** - [share.service.ts:77](file://server/src/modules/share/share.service.ts#L77) **章节来源** - [share.controller.ts:58](file://server/src/modules/share/share.controller.ts#L58) - [share.service.ts:73](file://server/src/modules/share/share.service.ts#L73) ### 用户行为追踪系统 分享行为追踪系统记录用户的所有分享活动,为后续的数据分析和奖励机制提供支持。 #### 追踪数据结构 | 字段名 | 类型 | 描述 | 示例值 | |--------|------|------|--------| | userId | string | 用户ID | `"user_001"` | | audioId | string | 音频ID | `"audio_123"` | | platform | string | 分享平台 | `"wechat"` | | timestamp | number | 分享时间戳 | `1640995200000` | | userAgent | string | 用户代理信息 | `"Mozilla/5.0..."` | #### 追踪流程 ```mermaid 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](file://server/src/modules/share/share.controller.ts#L86) - [share.service.ts:84](file://server/src/modules/share/share.service.ts#L84) **章节来源** - [share.controller.ts:82](file://server/src/modules/share/share.controller.ts#L82) - [share.service.ts:81](file://server/src/modules/share/share.service.ts#L81) ### 社交平台分享参数 不同社交平台有不同的分享参数要求和链接格式: #### 微信分享参数 | 参数名 | 类型 | 必需 | 描述 | 示例值 | |--------|------|------|------|--------| | 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 | 实时 | #### 数据存储结构 ```mermaid 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](file://server/src/modules/share/share.service.ts#L84) ## 依赖关系分析 分享功能模块的依赖关系清晰明确,遵循单一职责原则: ```mermaid 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](file://server/src/modules/share/share.controller.ts#L2) - [share.service.ts:1](file://server/src/modules/share/share.service.ts#L1) ### 安全性和防刷机制 分享功能实现了多层次的安全防护和防刷机制: #### 认证机制 系统支持可选的认证机制,开发环境下默认跳过认证: ```mermaid 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](file://server/src/middleware/auth.ts#L7) #### 防刷机制 系统采用灵活的限流策略,防止恶意刷量: | 限流类型 | 配置参数 | 说明 | |----------|----------|------| | 全局限流 | 100次/分钟 | 防止整体系统过载 | | 登录限流 | 5次/分钟 | 防止暴力破解 | | 验证码限流 | 1次/分钟 | 防止短信轰炸 | | TTS生成限流 | 20次/分钟 | 根据用户等级调整 | | 文件上传限流 | 10次/分钟 | 防止大量文件上传 | **章节来源** - [auth.ts:1](file://server/src/middleware/auth.ts#L1) - [rate-limiter.ts:77](file://server/src/middleware/rate-limiter.ts#L77) ## 性能考虑 分享功能在设计时充分考虑了性能优化: ### 数据库优化 - **索引优化**:为常用查询字段建立索引 - **连接池管理**:使用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](file://server/src/modules/share/share.controller.ts#L28) - [share.service.ts:34](file://server/src/modules/share/share.service.ts#L34) ## 结论 分享功能模块为AI有声书平台提供了完整、安全、高效的社交分享解决方案。通过精心设计的架构和完善的防护机制,该模块能够满足各种复杂的业务需求。 ### 主要优势 1. **架构清晰**:采用分层设计,职责分离明确 2. **安全可靠**:多重认证和防护机制保障系统安全 3. **性能优秀**:优化的数据库查询和缓存策略 4. **扩展性强**:模块化设计便于功能扩展和维护 ### 未来改进方向 1. **奖励机制完善**:实现更精细的用户激励系统 2. **数据分析增强**:提供更丰富的统计分析功能 3. **多语言支持**:扩展国际化支持 4. **性能监控**:增加实时性能监控和告警机制 该分享功能模块为平台的增长和用户参与度提升奠定了坚实的基础,是AI有声书生态系统中不可或缺的重要组成部分。