From 018f4dc901f1d70e1c1ba72eada0d6ef0f2ce066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=9C=A8=E5=9D=A4?= Date: Wed, 21 Jan 2026 18:17:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E5=B1=82=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增MessageRepository用于消息数据管理 - 新增PaymentRepository用于支付和订单管理 - 新增ProfileRepository用于用户资料管理 - 优化ConversationRepository实现 --- .../data/repository/ConversationRepository.kt | 32 +++++++++++++- .../data/repository/MessageRepository.kt | 42 +++++++++++++++++++ .../data/repository/PaymentRepository.kt | 34 +++++++++++++++ .../data/repository/ProfileRepository.kt | 21 ++++++++++ 4 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 app-android/app/src/main/java/com/huaga/life_echo/data/repository/MessageRepository.kt create mode 100644 app-android/app/src/main/java/com/huaga/life_echo/data/repository/PaymentRepository.kt create mode 100644 app-android/app/src/main/java/com/huaga/life_echo/data/repository/ProfileRepository.kt diff --git a/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ConversationRepository.kt b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ConversationRepository.kt index 8d47dc9..a1542cb 100644 --- a/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ConversationRepository.kt +++ b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ConversationRepository.kt @@ -1,11 +1,14 @@ package com.huaga.life_echo.data.repository import com.huaga.life_echo.data.database.* +import com.huaga.life_echo.network.ApiService +import com.huaga.life_echo.network.models.ConversationListItemDto import kotlinx.coroutines.flow.Flow class ConversationRepository( private val conversationDao: ConversationDao, - private val segmentDao: ConversationSegmentDao + private val segmentDao: ConversationSegmentDao, + private val apiService: ApiService ) { fun getAllConversations(): Flow> { return conversationDao.getAllConversations() @@ -34,5 +37,32 @@ class ConversationRepository( suspend fun insertSegments(segments: List) { segmentDao.insertSegments(segments) } + + /** + * 从API同步对话列表 + */ + suspend fun syncConversations() { + val result = apiService.getConversationList() + result.getOrNull()?.let { conversations -> + // 将DTO转换为Entity并保存到数据库 + conversations.forEach { dto -> + val conversation = Conversation( + id = dto.id, + userId = "", // 需要从TokenManager获取 + startedAt = dto.latestMessageTime, + endedAt = null, + durationSeconds = 0, + summary = dto.latestMessagePreview, + currentTopic = null, + conversationStage = null, + avatarUrl = dto.avatarUrl, + title = dto.title, + latestMessagePreview = dto.latestMessagePreview, + latestMessageTime = dto.latestMessageTime + ) + conversationDao.insertConversation(conversation) + } + } + } } diff --git a/app-android/app/src/main/java/com/huaga/life_echo/data/repository/MessageRepository.kt b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/MessageRepository.kt new file mode 100644 index 0000000..28c5818 --- /dev/null +++ b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/MessageRepository.kt @@ -0,0 +1,42 @@ +package com.huaga.life_echo.data.repository + +import com.huaga.life_echo.data.database.Message +import com.huaga.life_echo.data.database.MessageDao +import com.huaga.life_echo.network.ApiService +import com.huaga.life_echo.network.models.MessageDto +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +class MessageRepository( + private val messageDao: MessageDao, + private val apiService: ApiService +) { + fun getMessagesByConversationId(conversationId: String): Flow> { + return messageDao.getMessagesByConversationId(conversationId) + } + + suspend fun syncMessages(conversationId: String) { + val result = apiService.getMessages(conversationId) + result.getOrNull()?.let { messages -> + val dbMessages = messages.map { dto -> + Message( + id = dto.id, + conversationId = dto.conversationId, + content = dto.content, + senderType = dto.senderType, + timestamp = dto.timestamp, + messageType = dto.messageType + ) + } + messageDao.insertMessages(dbMessages) + } + } + + suspend fun insertMessage(message: Message) { + messageDao.insertMessage(message) + } + + suspend fun insertMessages(messages: List) { + messageDao.insertMessages(messages) + } +} diff --git a/app-android/app/src/main/java/com/huaga/life_echo/data/repository/PaymentRepository.kt b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/PaymentRepository.kt new file mode 100644 index 0000000..00664bf --- /dev/null +++ b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/PaymentRepository.kt @@ -0,0 +1,34 @@ +package com.huaga.life_echo.data.repository + +import com.huaga.life_echo.network.ApiService +import com.huaga.life_echo.network.models.OrderDto +import com.huaga.life_echo.network.models.PlanDto +import com.huaga.life_echo.network.models.QuotaCheckDto + +class PaymentRepository( + private val apiService: ApiService +) { + suspend fun getPlans(): Result> { + return apiService.getPlans() + } + + suspend fun getCurrentPlan(): Result { + return apiService.getCurrentPlan() + } + + suspend fun checkQuota(): Result { + return apiService.checkQuota() + } + + suspend fun createOrder(planId: String): Result { + return apiService.createOrder(planId) + } + + suspend fun getOrders(): Result> { + return apiService.getOrders() + } + + suspend fun getOrderById(orderId: String): Result { + return apiService.getOrderById(orderId) + } +} diff --git a/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ProfileRepository.kt b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ProfileRepository.kt new file mode 100644 index 0000000..e5b1f97 --- /dev/null +++ b/app-android/app/src/main/java/com/huaga/life_echo/data/repository/ProfileRepository.kt @@ -0,0 +1,21 @@ +package com.huaga.life_echo.data.repository + +import com.huaga.life_echo.network.ApiService +import com.huaga.life_echo.network.models.FAQDto +import com.huaga.life_echo.network.models.UserProfileDto + +class ProfileRepository( + private val apiService: ApiService +) { + suspend fun getUserProfile(): Result { + return apiService.getUserProfile() + } + + suspend fun getFAQs(): Result> { + return apiService.getFAQs() + } + + suspend fun submitFeedback(content: String, contact: String?): Result { + return apiService.submitFeedback(content, contact) + } +}