Files
happy-life-star/情绪博物馆完整功能需求与数据库设计.md
T

718 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 情绪博物馆完整功能需求与数据库设计
**文档版本**: v2.0
**创建时间**: 2025-07-12
**项目状态**: 基础框架已完成,功能完善中
**开发框架**: SwiftUI + iOS 18.5
---
## 📋 目录
- [1. 项目现状分析](#1-项目现状分析)
- [2. 完整功能需求清单](#2-完整功能需求清单)
- [3. 数据库设计](#3-数据库设计)
- [4. 技术架构建议](#4-技术架构建议)
- [5. 实施优先级](#5-实施优先级)
---
## 1. 项目现状分析
### ✅ 已完成功能
- [x] 基础TabView导航框架(记录、治愈、探索、个人)
- [x] 主题系统(深色模式支持)
- [x] 加载状态和骨架屏系统
- [x] 动画过渡效果
- [x] RecordView聊天化改造
- [x] AI对话基础框架
- [x] 情绪日历基础版
- [x] 完整的数据模型定义(DataModels.swift
- [x] 模拟数据管理系统(MockDataManager.swift
- [x] 导航管理系统(NavigationManager.swift
- [x] 主题管理系统(ThemeManager
### ❌ 待完善功能
- [ ] 完整的AI对话系统
- [ ] 治愈页面(成长课题系统)
- [ ] 探索页面(地图+社区)
- [ ] 个人页面(用户信息+成就)
- [ ] 页面间跳转逻辑
- [ ] 所有弹窗页面的关闭按钮
- [ ] 真实数据存储(Core Data集成)
- [ ] AI服务集成
- [ ] 地图服务集成
- [ ] 语音识别功能
---
## 2. 完整功能需求清单
### 2.1 记录页面(RecordView
#### 核心功能
1. **智能对话系统**
- [x] 基础聊天界面
- [ ] 语音转文字功能
- [ ] 多模态输入(文字、语音、图片)
- [ ] AI情绪分析和智能回复
- [ ] 全屏对话模式
- [ ] 对话历史记录
2. **情绪日历**
- [x] 单行日历视图
- [ ] 日历展开/收起功能
- [ ] 日期情绪状态标记
- [ ] 情绪回顾和趋势查看
- [ ] 情绪数据可视化
3. **对话记录管理**
- [ ] 聊天记录入口页面(ChatHistoryView
- [ ] 对话内容自动保存
- [ ] 智能分类和标签
- [ ] 搜索和筛选功能
- [ ] 对话摘要生成
4. **设置功能**
- [x] 主题切换基础功能
- [ ] 完整设置页面(SettingsView
- [ ] 音效设置
- [ ] 隐私设置
- [ ] 关于页面
### 2.2 治愈页面(GrowthView
#### 核心功能
1. **个人成长档案**
- [ ] 成长概览卡片
- [ ] 五维雷达图(自我感知、情绪韧性、行动力、共情力、生活热度)
- [ ] 成长轨迹可视化
- [ ] 个性化成长建议
2. **成长课题系统**
- [x] 课题数据模型
- [ ] 课题分类标签界面
- [ ] 课题详情页面(TopicDetailView
- [ ] 课题互动页面(TopicInteractionView
- [ ] 进度追踪和等级系统
- [ ] 课题解锁机制
3. **互动内容**
- [ ] AI对话互动(TopicChatView
- [ ] 知识文章阅读(TopicArticleView
- [ ] 练习活动(TopicExerciseView
- [ ] 反思日记(TopicReflectionView
- [ ] 冥想练习
- [ ] 小测验
4. **奖励系统**
- [x] 奖励数据模型
- [ ] 积分系统
- [ ] 徽章和称号
- [ ] 皮肤和道具
- [ ] 成就展示
### 2.3 探索页面(ExploreView
#### 核心功能
1. **智能地图系统**
- [ ] 地图SDK集成(高德地图)
- [ ] 地点标记和分类
- [ ] AI推荐地点
- [ ] 个人收藏地点
- [ ] 地点详情页面(LocationDetailView
2. **社区分享系统**
- [ ] 社区动态页面(CommunityFeedView
- [ ] 图文分享功能
- [ ] 点赞、评论、转发
- [ ] 内容审核机制
- [ ] 添加地点页面(AddLocationView
3. **位置服务**
- [ ] 地理位置获取
- [ ] 周边推荐
- [ ] 导航服务
- [ ] 隐私保护
4. **视图切换**
- [ ] 地图模式/社区模式切换
- [ ] 筛选和排序功能
- [ ] 搜索功能
### 2.4 个人页面(InsightView/UniverseView
#### 核心功能
1. **用户信息管理**
- [ ] 用户资料页面(UserProfileView
- [ ] 基础信息编辑
- [ ] 头像上传
- [ ] 会员中心
2. **数据统计展示**
- [ ] 本周数据统计
- [ ] 累计成就展示
- [ ] 趋势分析图表
- [ ] 社交数据统计
3. **成就系统**
- [x] 成就数据模型
- [ ] 成就页面(AchievementsView
- [ ] 成就分类展示
- [ ] 进度追踪
4. **快捷功能**
- [ ] 邀请好友
- [ ] 数据导出
- [ ] 反馈建议
- [ ] 帮助中心
---
## 3. 数据库设计
### 3.1 核心实体关系图
```mermaid
erDiagram
User ||--o{ Conversation : has
User ||--o{ EmotionRecord : records
User ||--o{ GrowthTopic : participates
User ||--o{ Achievement : earns
User ||--o{ LocationPin : creates
User ||--o{ CommunityPost : posts
Conversation ||--o{ Message : contains
Conversation ||--o| EmotionAnalysis : analyzed_by
GrowthTopic ||--o{ TopicInteraction : has
GrowthTopic ||--o{ Reward : offers
GrowthTopic ||--o| TopicContent : contains
LocationPin ||--o{ CommunityPost : located_at
CommunityPost ||--o{ Comment : has
TopicContent ||--o{ Article : includes
TopicContent ||--o{ ActionSuggestion : includes
```
### 3.2 主要数据表结构
#### 用户表 (User)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| username | String | 用户名 | UNIQUE, NOT NULL |
| email | String | 邮箱 | UNIQUE, NOT NULL |
| avatar | String? | 头像URL | NULLABLE |
| profile | UserProfile | 用户档案 | NOT NULL |
| createdAt | Date | 创建时间 | NOT NULL |
| lastActiveAt | Date | 最后活跃时间 | NOT NULL |
#### 对话表 (Conversation)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| userId | UUID | 用户ID | FOREIGN KEY |
| title | String | 对话标题 | NOT NULL |
| startTime | Date | 开始时间 | NOT NULL |
| endTime | Date? | 结束时间 | NULLABLE |
| summary | String? | 对话摘要 | NULLABLE |
| tags | [String] | 标签数组 | NOT NULL |
#### 消息表 (Message)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| conversationId | UUID | 对话ID | FOREIGN KEY |
| content | String | 消息内容 | NOT NULL |
| type | MessageType | 消息类型 | NOT NULL |
| sender | MessageSender | 发送者 | NOT NULL |
| timestamp | Date | 时间戳 | NOT NULL |
| emotionScore | Float? | 情绪分数 | NULLABLE |
| isRead | Bool | 是否已读 | NOT NULL |
#### 情绪记录表 (EmotionRecord)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| userId | UUID | 用户ID | FOREIGN KEY |
| date | Date | 记录日期 | NOT NULL |
| emotionType | EmotionType | 情绪类型 | NOT NULL |
| intensity | Float | 情绪强度 | NOT NULL |
| context | String | 情绪背景 | NOT NULL |
| triggers | [String] | 触发因素 | NOT NULL |
| location | String? | 地点 | NULLABLE |
| weather | String? | 天气 | NULLABLE |
| notes | String? | 备注 | NULLABLE |
#### 成长课题表 (GrowthTopic)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| title | String | 课题标题 | NOT NULL |
| description | String | 课题描述 | NOT NULL |
| category | TopicCategory | 课题分类 | NOT NULL |
| difficulty | Difficulty | 难度等级 | NOT NULL |
| progress | Float | 完成进度 | NOT NULL |
| level | Int | 当前等级 | NOT NULL |
| totalLevels | Int | 总等级数 | NOT NULL |
| isUnlocked | Bool | 是否解锁 | NOT NULL |
| completedAt | Date? | 完成时间 | NULLABLE |
| estimatedDuration | TimeInterval | 预估时长 | NOT NULL |
| prerequisites | [UUID] | 前置课题 | NOT NULL |
#### 地点标记表 (LocationPin)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| coordinate | Coordinate | 坐标 | NOT NULL |
| title | String | 地点名称 | NOT NULL |
| description | String | 地点描述 | NOT NULL |
| type | LocationType | 地点类型 | NOT NULL |
| emotionTags | [EmotionType] | 情绪标签 | NOT NULL |
| photos | [String] | 图片URLs | NOT NULL |
| createdBy | UUID? | 创建者ID | NULLABLE |
| createdAt | Date | 创建时间 | NOT NULL |
| likes | Int | 点赞数 | NOT NULL |
| visits | Int | 访问数 | NOT NULL |
| address | String? | 详细地址 | NULLABLE |
| category | LocationCategory | 地点分类 | NOT NULL |
| isBookmarked | Bool | 是否收藏 | NOT NULL |
#### 社区帖子表 (CommunityPost)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| userId | UUID | 用户ID | FOREIGN KEY |
| locationId | UUID? | 地点ID | NULLABLE |
| content | String | 帖子内容 | NOT NULL |
| photos | [String] | 图片URLs | NOT NULL |
| tags | [String] | 标签 | NOT NULL |
| likes | Int | 点赞数 | NOT NULL |
| createdAt | Date | 创建时间 | NOT NULL |
| isPrivate | Bool | 是否私密 | NOT NULL |
| viewCount | Int | 浏览数 | NOT NULL |
| type | PostType | 帖子类型 | NOT NULL |
| authorName | String | 作者名称 | NOT NULL |
#### 成就表 (Achievement)
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | UUID | 主键 | PRIMARY KEY |
| title | String | 成就标题 | NOT NULL |
| description | String | 成就描述 | NOT NULL |
| category | AchievementCategory | 成就分类 | NOT NULL |
| icon | String | 图标名称 | NOT NULL |
| rarity | RewardRarity | 稀有度 | NOT NULL |
| requirement | AchievementRequirement | 解锁条件 | NOT NULL |
| progress | Int | 当前进度 | NOT NULL |
| targetValue | Int | 目标值 | NOT NULL |
| unlockedAt | Date? | 解锁时间 | NULLABLE |
| isHidden | Bool | 是否隐藏 | NOT NULL |
### 3.3 索引设计
#### 主要索引
- User表:username, email, lastActiveAt
- Conversation表:userId, startTime
- Message表:conversationId, timestamp
- EmotionRecord表:userId, date, emotionType
- GrowthTopic表:category, difficulty, isUnlocked
- LocationPin表:coordinate, type, category, createdAt
- CommunityPost表:userId, locationId, createdAt, type
- Achievement表:category, rarity, unlockedAt
#### 复合索引
- EmotionRecord(userId, date)
- Message(conversationId, timestamp)
- CommunityPost(userId, createdAt)
- LocationPin(type, category)
---
## 4. 技术架构建议
### 4.1 当前架构优势
- ✅ 清晰的MVVM架构
- ✅ 完整的数据模型定义
- ✅ 良好的状态管理(ObservableObject
- ✅ 模块化的服务层设计
- ✅ 主题系统支持
### 4.2 需要完善的部分
#### 数据持久化
```swift
// Core Data
class CoreDataManager: ObservableObject {
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "EmotionMuseum")
container.loadPersistentStores { _, error in
if let error = error {
fatalError("Core Data error: \(error)")
}
}
return container
}()
var context: NSManagedObjectContext {
persistentContainer.viewContext
}
func save() {
if context.hasChanges {
try? context.save()
}
}
}
```
#### AI服务集成
```swift
// AI
class OpenAIService: AIServiceProtocol {
private let apiKey: String
private let session = URLSession.shared
func sendMessage(_ message: String) async throws -> AIResponse {
// GPT-4 API
}
func analyzeEmotion(_ text: String) async throws -> EmotionAnalysis {
//
}
}
```
#### 地图服务集成
```swift
//
import AMapFoundationKit
import AMapLocationKit
class LocationService: ObservableObject {
private let locationManager = AMapLocationManager()
func getCurrentLocation() async throws -> CLLocationCoordinate2D {
//
}
func searchNearbyPlaces(coordinate: CLLocationCoordinate2D) async throws -> [LocationPin] {
//
}
}
```
### 4.3 性能优化建议
1. **图片加载优化**
- 集成Kingfisher进行图片缓存
- 实现图片懒加载
2. **数据分页**
- 对话记录分页加载
- 社区帖子分页显示
3. **内存管理**
- 及时释放不需要的数据
- 使用weak引用避免循环引用
---
## 5. 实施优先级
### Phase 1: 核心功能完善 (2-3周)
- [ ] 完善RecordView的所有子页面
- [ ] 实现AI对话系统
- [ ] 完善情绪日历功能
- [ ] 集成Core Data
### Phase 2: 成长系统开发 (2-3周)
- [ ] 实现GrowthView完整功能
- [ ] 开发课题系统
- [ ] 实现五维雷达图
- [ ] 完善奖励系统
### Phase 3: 地图和社区 (3-4周)
- [ ] 集成地图SDK
- [ ] 实现ExploreView功能
- [ ] 开发社区分享系统
- [ ] 实现位置服务
### Phase 4: 个人中心和优化 (1-2周)
- [ ] 完善InsightView功能
- [ ] 实现成就系统
- [ ] 性能优化
- [ ] 用户体验改进
---
## 6. 详细数据库实现方案
### 6.1 Core Data实体定义
#### User实体
```swift
@objc(UserEntity)
public class UserEntity: NSManagedObject {
@NSManaged public var id: UUID
@NSManaged public var username: String
@NSManaged public var email: String
@NSManaged public var avatar: String?
@NSManaged public var nickname: String
@NSManaged public var birthDate: Date?
@NSManaged public var location: String?
@NSManaged public var bio: String?
@NSManaged public var memberLevel: String
@NSManaged public var totalDays: Int32
@NSManaged public var createdAt: Date
@NSManaged public var lastActiveAt: Date
//
@NSManaged public var selfAwareness: Float
@NSManaged public var emotionalResilience: Float
@NSManaged public var actionPower: Float
@NSManaged public var empathy: Float
@NSManaged public var lifeEnthusiasm: Float
//
@NSManaged public var conversations: NSSet?
@NSManaged public var emotionRecords: NSSet?
@NSManaged public var growthTopics: NSSet?
@NSManaged public var achievements: NSSet?
@NSManaged public var locationPins: NSSet?
@NSManaged public var communityPosts: NSSet?
}
```
#### Conversation实体
```swift
@objc(ConversationEntity)
public class ConversationEntity: NSManagedObject {
@NSManaged public var id: UUID
@NSManaged public var title: String
@NSManaged public var startTime: Date
@NSManaged public var endTime: Date?
@NSManaged public var summary: String?
@NSManaged public var tags: String // JSON
//
@NSManaged public var primaryEmotion: String?
@NSManaged public var emotionIntensity: Float
@NSManaged public var emotionTrend: String?
@NSManaged public var keywords: String? // JSON
@NSManaged public var aiInsights: String?
//
@NSManaged public var user: UserEntity?
@NSManaged public var messages: NSSet?
}
```
### 6.2 数据迁移策略
#### 版本控制
```swift
class CoreDataMigrationManager {
static func performMigration() {
//
//
//
}
static func migrateFromV1ToV2() {
//
}
}
```
### 6.3 数据同步方案
#### 本地优先策略
```swift
class DataSyncManager: ObservableObject {
@Published var syncStatus: SyncStatus = .idle
func syncToCloud() async {
//
}
func syncFromCloud() async {
//
}
func resolveConflicts() {
//
}
}
enum SyncStatus {
case idle
case syncing
case success
case failed(Error)
}
```
---
## 7. API设计规范
### 7.1 RESTful API端点
#### 用户相关
```
GET /api/v1/users/profile # 获取用户资料
PUT /api/v1/users/profile # 更新用户资料
POST /api/v1/users/avatar # 上传头像
```
#### 对话相关
```
GET /api/v1/conversations # 获取对话列表
POST /api/v1/conversations # 创建新对话
GET /api/v1/conversations/{id} # 获取对话详情
POST /api/v1/conversations/{id}/messages # 发送消息
```
#### AI服务
```
POST /api/v1/ai/chat # AI对话
POST /api/v1/ai/emotion-analysis # 情绪分析
POST /api/v1/ai/recommendations # 获取推荐
```
#### 成长课题
```
GET /api/v1/growth/topics # 获取课题列表
GET /api/v1/growth/topics/{id} # 获取课题详情
POST /api/v1/growth/interactions # 记录互动
PUT /api/v1/growth/progress # 更新进度
```
#### 地图和社区
```
GET /api/v1/locations # 获取地点列表
POST /api/v1/locations # 创建地点
GET /api/v1/posts # 获取帖子列表
POST /api/v1/posts # 发布帖子
POST /api/v1/posts/{id}/like # 点赞帖子
POST /api/v1/posts/{id}/comments # 评论帖子
```
### 7.2 数据传输格式
#### 标准响应格式
```json
{
"success": true,
"data": {},
"message": "操作成功",
"timestamp": "2025-07-12T10:30:00Z",
"requestId": "uuid"
}
```
#### 错误响应格式
```json
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "输入数据验证失败",
"details": {}
},
"timestamp": "2025-07-12T10:30:00Z",
"requestId": "uuid"
}
```
---
## 8. 安全和隐私设计
### 8.1 数据加密
- 敏感数据本地加密存储
- 网络传输使用HTTPS
- API密钥安全管理
### 8.2 隐私保护
- 用户数据匿名化处理
- 位置信息脱敏
- 可选的数据分享设置
### 8.3 权限管理
```swift
enum PermissionType {
case location
case microphone
case camera
case notifications
}
class PermissionManager {
func requestPermission(_ type: PermissionType) async -> Bool {
//
}
func checkPermissionStatus(_ type: PermissionType) -> PermissionStatus {
//
}
}
```
---
## 9. 测试策略
### 9.1 单元测试
- 数据模型测试
- 业务逻辑测试
- 工具类测试
### 9.2 集成测试
- API集成测试
- 数据库操作测试
- 第三方服务集成测试
### 9.3 UI测试
- 页面导航测试
- 用户交互测试
- 响应式布局测试
### 9.4 性能测试
- 内存使用测试
- 网络请求性能测试
- 数据库查询性能测试
---
## 10. 部署和运维
### 10.1 CI/CD流程
```yaml
# GitHub Actions示例
name: iOS Build and Test
on: [push, pull_request]
jobs:
test:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Build and Test
run: |
xcodebuild test -scheme EmotionMuseum -destination 'platform=iOS Simulator,name=iPhone 14'
```
### 10.2 监控和分析
- 崩溃报告收集
- 用户行为分析
- 性能监控
- 错误日志收集
---
*本文档将根据开发进度持续更新和完善*