feat: 新增Mock数据提供器用于开发测试

- 新增MockDataProvider提供模拟数据
- 支持用户、对话、回忆录、订单等模拟数据
This commit is contained in:
徐在坤
2026-01-21 18:18:28 +08:00
parent 89530e4feb
commit 0a91bdf593

View File

@@ -0,0 +1,358 @@
package com.huaga.life_echo.data.mock
import com.huaga.life_echo.network.models.*
import kotlinx.serialization.Serializable
/**
* Mock数据提供者
* 当API调用失败时返回测试数据以确保UI可以正常显示
*/
object MockDataProvider {
// 获取Mock对话列表
fun getMockConversations(): List<ConversationListItemDto> {
return listOf(
ConversationListItemDto(
id = "conv_001",
title = "回忆录助手",
avatarUrl = null,
latestMessagePreview = "您好!我是您的回忆录助手,很高兴能陪您聊聊往事。您想从哪里开始呢?",
latestMessageTime = System.currentTimeMillis() - 300000, // 5分钟前
unreadCount = 0,
isDefaultAssistant = true
),
ConversationListItemDto(
id = "conv_002",
title = "回忆录助手",
avatarUrl = null,
latestMessagePreview = "关于您的童年时光,能再详细说说吗?",
latestMessageTime = System.currentTimeMillis() - 86400000, // 1天前
unreadCount = 1,
isDefaultAssistant = false
)
)
}
// 获取Mock消息列表
fun getMockMessages(conversationId: String): List<MessageDto> {
return listOf(
MessageDto(
id = "msg_001",
conversationId = conversationId,
content = "您好!我是您的回忆录助手,很高兴能陪您聊聊往事。😊",
senderType = "assistant",
timestamp = System.currentTimeMillis() - 3600000,
messageType = "text"
),
MessageDto(
id = "msg_002",
conversationId = conversationId,
content = "您想从哪里开始呢?可以聊聊童年、上学时光,或者任何您想分享的故事。",
senderType = "assistant",
timestamp = System.currentTimeMillis() - 3600000 + 1000,
messageType = "text"
),
MessageDto(
id = "msg_003",
conversationId = conversationId,
content = "我想聊聊我的童年",
senderType = "user",
timestamp = System.currentTimeMillis() - 1800000,
messageType = "text"
),
MessageDto(
id = "msg_004",
conversationId = conversationId,
content = "太好了!童年时光总是充满美好的回忆。能告诉我您是在哪里长大的吗?",
senderType = "assistant",
timestamp = System.currentTimeMillis() - 1800000 + 2000,
messageType = "text"
)
)
}
// 获取Mock对话详情
fun getMockConversationDetail(id: String): ConversationDetailDto {
return ConversationDetailDto(
id = id,
title = "回忆录助手",
avatarUrl = null,
userId = "user_001",
startedAt = System.currentTimeMillis() - 3600000,
endedAt = null,
durationSeconds = 0,
summary = "关于童年时光的对话",
currentTopic = "童年",
conversationStage = "CHILDHOOD",
messages = getMockMessages(id)
)
}
// 获取Mock章节列表
fun getMockChapters(): List<ChapterDto> {
return listOf(
ChapterDto(
id = "chapter_001",
title = "童年与家庭",
content = "我出生在一个普通的农村家庭,父母都是勤劳朴实的农民。\n\n父亲是村里的木匠,手艺精湛,邻里乡亲都愿意找他帮忙。",
orderIndex = 1,
status = "completed",
category = "childhood",
pageCount = 3,
updatedAt = System.currentTimeMillis() - 86400000
),
ChapterDto(
id = "chapter_002",
title = "上学的日子",
content = "上学的日子总是充满欢声笑语,虽然条件艰苦,但学习的快乐让我忘记了生活的艰辛。",
orderIndex = 2,
status = "partial",
category = "education",
pageCount = 2,
updatedAt = System.currentTimeMillis() - 43200000
),
ChapterDto(
id = "chapter_003",
title = "工作与事业",
content = "工作是我人生中重要的转折点,让我学会了承担责任,也让我明白了生活的意义。",
orderIndex = 3,
status = "pending",
category = "career",
pageCount = null,
updatedAt = System.currentTimeMillis()
),
ChapterDto(
id = "chapter_004",
title = "爱情与婚姻",
content = "爱情是人生中最美好的经历之一,它让我懂得了什么是真正的幸福。",
orderIndex = 4,
status = "pending",
category = "family",
pageCount = null,
updatedAt = System.currentTimeMillis()
)
)
}
// 获取Mock书籍信息
fun getMockBookInfo(): BookDto {
return BookDto(
id = "book_001",
userId = "user_001",
title = "这一生",
subtitle = "我的回忆录",
totalPages = 5,
totalWords = 5000,
updatedAt = System.currentTimeMillis(),
lastUpdatedAt = System.currentTimeMillis() - 120000 // 2分钟前
)
}
// 获取Mock章节内容
fun getMockChapterContent(id: String): ChapterContentDto {
val chapters = getMockChapters()
val chapter = chapters.find { it.id == id } ?: chapters[0]
return ChapterContentDto(
id = chapter.id,
title = chapter.title,
content = chapter.content,
orderIndex = chapter.orderIndex,
status = chapter.status,
category = chapter.category,
pageCount = chapter.pageCount,
updatedAt = chapter.updatedAt ?: System.currentTimeMillis(),
quotes = if (chapter.category == "childhood") {
listOf("\"日子虽然清苦, 但那时候的快乐是最纯粹的。\"")
} else {
emptyList()
}
)
}
// 获取Mock套餐列表
fun getMockPlans(): List<PlanDto> {
return listOf(
PlanDto(
id = "plan_free",
name = "free",
displayName = "免费体验版",
price = 0.0,
currency = "CNY",
billingCycle = "monthly",
benefits = listOf(
PlanBenefitDto(
id = "benefit_free_1",
name = "基础对话",
description = "每月3次对话",
maxConversations = 3,
features = listOf("基础对话功能", "基础回忆录整理")
)
),
features = listOf("基础对话功能", "每月3次对话", "基础回忆录整理"),
isActive = true,
isCurrentPlan = true
),
PlanDto(
id = "plan_premium",
name = "premium",
displayName = "高级版",
price = 29.0,
currency = "CNY",
billingCycle = "monthly",
benefits = listOf(
PlanBenefitDto(
id = "benefit_premium_1",
name = "无限对话",
description = "无限对话次数",
maxConversations = null,
features = listOf("无限对话次数", "完整回忆录导出", "PDF格式导出")
)
),
features = listOf(
"无限对话次数",
"完整回忆录导出",
"PDF格式导出",
"优先客服支持",
"数据云端同步"
),
isActive = true,
isCurrentPlan = false
),
PlanDto(
id = "plan_professional",
name = "professional",
displayName = "专业版",
price = 99.0,
currency = "CNY",
billingCycle = "monthly",
benefits = listOf(
PlanBenefitDto(
id = "benefit_pro_1",
name = "高级功能",
description = "所有高级功能",
maxWords = null,
maxChapters = null,
maxConversations = null,
features = listOf("AI智能整理", "多格式导出", "专属客服支持")
)
),
features = listOf(
"高级版所有功能",
"AI智能整理",
"多格式导出PDF、Word、EPUB",
"专属客服支持",
"无限云端存储",
"多设备同步"
),
isActive = true,
isCurrentPlan = false
)
)
}
// 获取Mock当前套餐
fun getMockCurrentPlan(): PlanDto {
return getMockPlans().first { it.isCurrentPlan }
}
// 获取Mock订单列表
fun getMockOrders(): List<OrderDto> {
return listOf(
OrderDto(
id = "order_001",
userId = "user_001",
planId = "plan_premium",
planName = "高级版",
amount = 29.0,
currency = "CNY",
status = "paid",
paymentMethod = "wechat",
createdAt = System.currentTimeMillis() - 2592000000, // 30天前
paidAt = System.currentTimeMillis() - 2592000000 + 1000,
expiresAt = System.currentTimeMillis() + 2592000000 // 30天后
),
OrderDto(
id = "order_002",
userId = "user_001",
planId = "plan_free",
planName = "免费体验版",
amount = 0.0,
currency = "CNY",
status = "paid",
paymentMethod = null,
createdAt = System.currentTimeMillis() - 86400000 * 60, // 60天前
paidAt = System.currentTimeMillis() - 86400000 * 60,
expiresAt = null
)
)
}
// 获取Mock用户资料
fun getMockUserProfile(): UserProfileDto {
return UserProfileDto(
id = "user_001",
phone = "138****8888",
email = "user@example.com",
nickname = "用户",
avatarUrl = null,
subscriptionType = "free",
currentPlanId = "plan_free",
currentPlanName = "免费体验版",
createdAt = "2024-01-01T00:00:00Z",
updatedAt = "2024-01-15T00:00:00Z"
)
}
// 获取Mock额度校验结果
fun getMockQuotaCheck(): QuotaCheckDto {
return QuotaCheckDto(
hasQuota = true,
remainingWords = 10000,
remainingChapters = 10,
remainingConversations = 2,
message = "您还有2次对话机会"
)
}
// 获取Mock常见问题
fun getMockFAQs(): List<FAQDto> {
return listOf(
FAQDto(
id = "faq_001",
question = "如何使用回忆录助手?",
answer = "打开应用后点击对话列表中的「回忆录助手」开始与AI对话。您可以分享您的故事AI会帮您整理成回忆录。",
category = "使用指南",
orderIndex = 1
),
FAQDto(
id = "faq_002",
question = "如何导出回忆录?",
answer = "在回忆录页面点击「导出数据」按钮选择导出格式PDF、Word等即可导出您的回忆录。",
category = "使用指南",
orderIndex = 2
),
FAQDto(
id = "faq_003",
question = "免费版和付费版有什么区别?",
answer = "免费版每月可进行3次对话基础回忆录整理。付费版提供无限对话、完整导出、优先客服等功能。",
category = "套餐说明",
orderIndex = 3
),
FAQDto(
id = "faq_004",
question = "如何升级套餐?",
answer = "在个人中心页面,点击「升级套餐」,选择您想要的套餐,完成支付即可升级。",
category = "套餐说明",
orderIndex = 4
),
FAQDto(
id = "faq_005",
question = "数据安全吗?",
answer = "我们采用行业标准的数据加密技术,确保您的数据安全。您可以随时导出数据,也可以随时删除账户。",
category = "隐私安全",
orderIndex = 5
)
)
}
}