feat: 项目初始化及当前全部内容提交

This commit is contained in:
2025-07-15 17:37:50 +08:00
parent ec817067f1
commit e78f192d34
622 changed files with 75174 additions and 383 deletions
@@ -0,0 +1,717 @@
# 情绪博物馆完整功能需求与数据库设计
**文档版本**: 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 监控和分析
- 崩溃报告收集
- 用户行为分析
- 性能监控
- 错误日志收集
---
*本文档将根据开发进度持续更新和完善*