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

19 KiB
Raw Blame History

情绪博物馆完整功能需求与数据库设计

文档版本: v2.0
创建时间: 2025-07-12
项目状态: 基础框架已完成,功能完善中
开发框架: SwiftUI + iOS 18.5


📋 目录


1. 项目现状分析

已完成功能

  • 基础TabView导航框架(记录、治愈、探索、个人)
  • 主题系统(深色模式支持)
  • 加载状态和骨架屏系统
  • 动画过渡效果
  • RecordView聊天化改造
  • AI对话基础框架
  • 情绪日历基础版
  • 完整的数据模型定义(DataModels.swift
  • 模拟数据管理系统(MockDataManager.swift
  • 导航管理系统(NavigationManager.swift
  • 主题管理系统(ThemeManager

待完善功能

  • 完整的AI对话系统
  • 治愈页面(成长课题系统)
  • 探索页面(地图+社区)
  • 个人页面(用户信息+成就)
  • 页面间跳转逻辑
  • 所有弹窗页面的关闭按钮
  • 真实数据存储(Core Data集成)
  • AI服务集成
  • 地图服务集成
  • 语音识别功能

2. 完整功能需求清单

2.1 记录页面(RecordView

核心功能

  1. 智能对话系统

    • 基础聊天界面
    • 语音转文字功能
    • 多模态输入(文字、语音、图片)
    • AI情绪分析和智能回复
    • 全屏对话模式
    • 对话历史记录
  2. 情绪日历

    • 单行日历视图
    • 日历展开/收起功能
    • 日期情绪状态标记
    • 情绪回顾和趋势查看
    • 情绪数据可视化
  3. 对话记录管理

    • 聊天记录入口页面(ChatHistoryView
    • 对话内容自动保存
    • 智能分类和标签
    • 搜索和筛选功能
    • 对话摘要生成
  4. 设置功能

    • 主题切换基础功能
    • 完整设置页面(SettingsView
    • 音效设置
    • 隐私设置
    • 关于页面

2.2 治愈页面(GrowthView

核心功能

  1. 个人成长档案

    • 成长概览卡片
    • 五维雷达图(自我感知、情绪韧性、行动力、共情力、生活热度)
    • 成长轨迹可视化
    • 个性化成长建议
  2. 成长课题系统

    • 课题数据模型
    • 课题分类标签界面
    • 课题详情页面(TopicDetailView
    • 课题互动页面(TopicInteractionView
    • 进度追踪和等级系统
    • 课题解锁机制
  3. 互动内容

    • AI对话互动(TopicChatView
    • 知识文章阅读(TopicArticleView
    • 练习活动(TopicExerciseView
    • 反思日记(TopicReflectionView
    • 冥想练习
    • 小测验
  4. 奖励系统

    • 奖励数据模型
    • 积分系统
    • 徽章和称号
    • 皮肤和道具
    • 成就展示

2.3 探索页面(ExploreView

核心功能

  1. 智能地图系统

    • 地图SDK集成(高德地图)
    • 地点标记和分类
    • AI推荐地点
    • 个人收藏地点
    • 地点详情页面(LocationDetailView
  2. 社区分享系统

    • 社区动态页面(CommunityFeedView
    • 图文分享功能
    • 点赞、评论、转发
    • 内容审核机制
    • 添加地点页面(AddLocationView
  3. 位置服务

    • 地理位置获取
    • 周边推荐
    • 导航服务
    • 隐私保护
  4. 视图切换

    • 地图模式/社区模式切换
    • 筛选和排序功能
    • 搜索功能

2.4 个人页面(InsightView/UniverseView

核心功能

  1. 用户信息管理

    • 用户资料页面(UserProfileView
    • 基础信息编辑
    • 头像上传
    • 会员中心
  2. 数据统计展示

    • 本周数据统计
    • 累计成就展示
    • 趋势分析图表
    • 社交数据统计
  3. 成就系统

    • 成就数据模型
    • 成就页面(AchievementsView
    • 成就分类展示
    • 进度追踪
  4. 快捷功能

    • 邀请好友
    • 数据导出
    • 反馈建议
    • 帮助中心

3. 数据库设计

3.1 核心实体关系图

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 需要完善的部分

数据持久化

// 建议集成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服务集成

// 真实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 {
        // 实现情绪分析
    }
}

地图服务集成

// 高德地图集成
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实体

@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实体

@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 数据迁移策略

版本控制

class CoreDataMigrationManager {
    static func performMigration() {
        // 检查数据模型版本
        // 执行必要的数据迁移
        // 更新数据结构
    }

    static func migrateFromV1ToV2() {
        // 具体的迁移逻辑
    }
}

6.3 数据同步方案

本地优先策略

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 数据传输格式

标准响应格式

{
  "success": true,
  "data": {},
  "message": "操作成功",
  "timestamp": "2025-07-12T10:30:00Z",
  "requestId": "uuid"
}

错误响应格式

{
  "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 权限管理

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流程

# 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 监控和分析

  • 崩溃报告收集
  • 用户行为分析
  • 性能监控
  • 错误日志收集

本文档将根据开发进度持续更新和完善