Skip to content

Commit 4c71866

Browse files
committed
feat(messaging): add ChatMessaging service layer
All 6 messaging RPCs — GetMessage, GetMessages, GetMessagesByIds, SendMessage, AdvancePointer, NotifyIsTyping — Api, Service, Repository, and Controller. Introduces ClientMessageId domain model, SendMessageError, GetMessageError, GetMessagesError, AdvancePointerError, and NotifyIsTypingError sealed classes, and Hilt wiring. Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 38f2f59 commit 4c71866

9 files changed

Lines changed: 38 additions & 38 deletions

File tree

services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ChatMessagingController.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ import com.flipcash.services.models.chat.ClientMessageId
77
import com.flipcash.services.models.chat.MessageContent
88
import com.flipcash.services.models.chat.PointerType
99
import com.flipcash.services.models.chat.TypingState
10-
import com.flipcash.services.repository.MessagingRepository
10+
import com.flipcash.services.repository.ChatMessagingRepository
1111
import com.flipcash.services.user.UserManager
1212
import javax.inject.Inject
1313
import javax.inject.Singleton
1414

1515
@Singleton
16-
class MessagingController @Inject constructor(
17-
private val repository: MessagingRepository,
16+
class ChatMessagingController @Inject constructor(
17+
private val repository: ChatMessagingRepository,
1818
private val userManager: UserManager,
1919
) {
2020
private fun requireOwner() = userManager.accountCluster?.authority?.keyPair

services/flipcash/src/main/kotlin/com/flipcash/services/inject/FlipcashModule.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import com.flipcash.services.internal.network.services.AccountService
1414
import com.flipcash.services.internal.network.services.ActivityFeedService
1515
import com.flipcash.services.internal.network.services.ChatService
1616
import com.flipcash.services.internal.network.services.EventStreamingService
17-
import com.flipcash.services.internal.network.services.MessagingService
17+
import com.flipcash.services.internal.network.services.ChatMessagingService
1818
import com.flipcash.services.internal.network.services.EmailVerificationService
1919
import com.flipcash.services.internal.network.services.ContactListService
2020
import com.flipcash.services.internal.network.services.ModerationService
@@ -29,7 +29,7 @@ import com.flipcash.services.internal.repositories.InternalAccountRepository
2929
import com.flipcash.services.internal.repositories.InternalActivityFeedRepository
3030
import com.flipcash.services.internal.repositories.InternalChatRepository
3131
import com.flipcash.services.internal.repositories.InternalEventStreamingRepository
32-
import com.flipcash.services.internal.repositories.InternalMessagingRepository
32+
import com.flipcash.services.internal.repositories.InternalChatMessagingRepository
3333
import com.flipcash.services.internal.repositories.InternalContactListRepository
3434
import com.flipcash.services.internal.repositories.InternalContactVerificationRepository
3535
import com.flipcash.services.internal.repositories.InternalModerationRepository
@@ -43,7 +43,7 @@ import com.flipcash.services.repository.AccountRepository
4343
import com.flipcash.services.repository.ActivityFeedRepository
4444
import com.flipcash.services.repository.ChatRepository
4545
import com.flipcash.services.repository.EventStreamingRepository
46-
import com.flipcash.services.repository.MessagingRepository
46+
import com.flipcash.services.repository.ChatMessagingRepository
4747
import com.flipcash.services.repository.ContactListRepository
4848
import com.flipcash.services.repository.ContactVerificationRepository
4949
import com.flipcash.services.repository.ModerationRepository
@@ -136,9 +136,9 @@ internal object FlipcashModule {
136136
): EventStreamingRepository = InternalEventStreamingRepository(service)
137137

138138
@Provides
139-
internal fun providesFlipcashMessagingRepository(
140-
service: MessagingService,
141-
): MessagingRepository = InternalMessagingRepository(service)
139+
internal fun providesChatMessagingRepository(
140+
service: ChatMessagingService,
141+
): ChatMessagingRepository = InternalChatMessagingRepository(service)
142142

143143
@Provides
144144
internal fun providesContactListRepository(

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import javax.inject.Inject
2828
import javax.inject.Singleton
2929

3030
@Singleton
31-
internal class MessagingApi @Inject constructor(
31+
internal class ChatMessagingApi @Inject constructor(
3232
@FlipcashManagedChannel
3333
managedChannel: ManagedChannel,
3434
) : GrpcApi(managedChannel) {

services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package com.flipcash.services.internal.network.services
22

33
import com.codeinc.flipcash.gen.messaging.v1.MessagingService as RpcMessagingService
44
import com.codeinc.flipcash.gen.messaging.v1.Model as MessagingModel
5-
import com.flipcash.services.internal.network.api.MessagingApi
5+
import com.flipcash.services.internal.network.api.ChatMessagingApi
66
import com.flipcash.services.models.AdvancePointerError
7-
import com.flipcash.services.models.FlipcashSendMessageError
7+
import com.flipcash.services.models.SendMessageError
88
import com.flipcash.services.models.GetMessageError
99
import com.flipcash.services.models.GetMessagesError
1010
import com.flipcash.services.models.NotifyIsTypingError
@@ -19,8 +19,8 @@ import com.getcode.opencode.internal.network.extensions.foldWithSuppression
1919
import com.getcode.opencode.utils.toValidationOrElse
2020
import javax.inject.Inject
2121

22-
internal class MessagingService @Inject constructor(
23-
private val api: MessagingApi,
22+
internal class ChatMessagingService @Inject constructor(
23+
private val api: ChatMessagingApi,
2424
) {
2525
suspend fun getMessage(
2626
owner: KeyPair,
@@ -105,13 +105,13 @@ internal class MessagingService @Inject constructor(
105105
onSuccess = { response ->
106106
when (response.result) {
107107
RpcMessagingService.SendMessageResponse.Result.OK -> Result.success(response.message)
108-
RpcMessagingService.SendMessageResponse.Result.DENIED -> Result.failure(FlipcashSendMessageError.Denied())
109-
RpcMessagingService.SendMessageResponse.Result.UNRECOGNIZED -> Result.failure(FlipcashSendMessageError.Unrecognized())
110-
else -> Result.failure(FlipcashSendMessageError.Other())
108+
RpcMessagingService.SendMessageResponse.Result.DENIED -> Result.failure(SendMessageError.Denied())
109+
RpcMessagingService.SendMessageResponse.Result.UNRECOGNIZED -> Result.failure(SendMessageError.Unrecognized())
110+
else -> Result.failure(SendMessageError.Other())
111111
}
112112
},
113113
onFailure = { cause ->
114-
Result.failure(cause.toValidationOrElse { FlipcashSendMessageError.Other(cause = it) })
114+
Result.failure(cause.toValidationOrElse { SendMessageError.Other(cause = it) })
115115
}
116116
)
117117
}

services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package com.flipcash.services.internal.repositories
22

33
import com.flipcash.services.internal.network.extensions.toChatMessage
4-
import com.flipcash.services.internal.network.services.MessagingService
4+
import com.flipcash.services.internal.network.services.ChatMessagingService
55
import com.flipcash.services.models.QueryOptions
66
import com.flipcash.services.models.chat.ChatId
77
import com.flipcash.services.models.chat.ChatMessage
88
import com.flipcash.services.models.chat.ClientMessageId
99
import com.flipcash.services.models.chat.MessageContent
1010
import com.flipcash.services.models.chat.PointerType
1111
import com.flipcash.services.models.chat.TypingState
12-
import com.flipcash.services.repository.MessagingRepository
12+
import com.flipcash.services.repository.ChatMessagingRepository
1313
import com.getcode.ed25519.Ed25519.KeyPair
1414
import com.getcode.utils.ErrorUtils
1515

16-
internal class InternalMessagingRepository(
17-
private val service: MessagingService,
18-
) : MessagingRepository {
16+
internal class InternalChatMessagingRepository(
17+
private val service: ChatMessagingService,
18+
) : ChatMessagingRepository {
1919

2020
override suspend fun getMessage(
2121
owner: KeyPair,

services/flipcash/src/main/kotlin/com/flipcash/services/models/Errors.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,13 +343,13 @@ sealed class GetMessagesError(
343343
data class Other(override val cause: Throwable? = null) : GetMessagesError(message = cause?.message, cause = cause), NotifiableError
344344
}
345345

346-
sealed class FlipcashSendMessageError(
346+
sealed class SendMessageError(
347347
override val message: String? = null,
348348
override val cause: Throwable? = null
349349
): CodeServerError(message, cause) {
350-
class Denied : FlipcashSendMessageError("Denied")
351-
class Unrecognized : FlipcashSendMessageError("Unrecognized"), NotifiableError
352-
data class Other(override val cause: Throwable? = null) : FlipcashSendMessageError(message = cause?.message, cause = cause), NotifiableError
350+
class Denied : SendMessageError("Denied")
351+
class Unrecognized : SendMessageError("Unrecognized"), NotifiableError
352+
data class Other(override val cause: Throwable? = null) : SendMessageError(message = cause?.message, cause = cause), NotifiableError
353353
}
354354

355355
sealed class AdvancePointerError(

services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.flipcash.services.models.chat.PointerType
99
import com.flipcash.services.models.chat.TypingState
1010
import com.getcode.ed25519.Ed25519.KeyPair
1111

12-
interface MessagingRepository {
12+
interface ChatMessagingRepository {
1313
suspend fun getMessage(
1414
owner: KeyPair,
1515
chatId: ChatId,

services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.flipcash.services.models.chat.ClientMessageId
77
import com.flipcash.services.models.chat.MessageContent
88
import com.flipcash.services.models.chat.PointerType
99
import com.flipcash.services.models.chat.TypingState
10-
import com.flipcash.services.repository.MessagingRepository
10+
import com.flipcash.services.repository.ChatMessagingRepository
1111
import com.flipcash.services.user.UserManager
1212
import com.getcode.ed25519.Ed25519
1313
import com.getcode.opencode.model.accounts.AccountCluster
@@ -23,11 +23,11 @@ import kotlin.test.assertTrue
2323
import kotlin.time.Instant
2424

2525
@OptIn(ExperimentalCoroutinesApi::class)
26-
class MessagingControllerTest {
26+
class ChatMessagingControllerTest {
2727

28-
private val repository = FakeMessagingRepository()
28+
private val repository = FakeChatMessagingRepository()
2929
private val userManager = mockk<UserManager>(relaxed = true)
30-
private val controller = MessagingController(repository, userManager)
30+
private val controller = ChatMessagingController(repository, userManager)
3131

3232
private val testChatId = ChatId(ByteArray(32) { 0x01 })
3333

@@ -187,7 +187,7 @@ class MessagingControllerTest {
187187

188188
// region Fakes
189189

190-
private class FakeMessagingRepository : MessagingRepository {
190+
private class FakeChatMessagingRepository : ChatMessagingRepository {
191191
var getMessageResult: Result<ChatMessage> = Result.failure(RuntimeException("not configured"))
192192
var getMessagesResult: Result<List<ChatMessage>> = Result.failure(RuntimeException("not configured"))
193193
var getMessagesByIdsResult: Result<List<ChatMessage>> = Result.failure(RuntimeException("not configured"))

services/flipcash/src/test/kotlin/com/flipcash/services/models/ErrorsTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,13 @@ class ErrorsTest {
147147
assertIs<CodeServerError>(GetMessagesError.Other())
148148
}
149149

150-
// -- FlipcashSendMessageError --
150+
// -- SendMessageError --
151151

152152
@Test
153-
fun `FlipcashSendMessageError subtypes are CodeServerError`() {
154-
assertIs<CodeServerError>(FlipcashSendMessageError.Denied())
155-
assertIs<CodeServerError>(FlipcashSendMessageError.Unrecognized())
156-
assertIs<CodeServerError>(FlipcashSendMessageError.Other())
153+
fun `SendMessageError subtypes are CodeServerError`() {
154+
assertIs<CodeServerError>(SendMessageError.Denied())
155+
assertIs<CodeServerError>(SendMessageError.Unrecognized())
156+
assertIs<CodeServerError>(SendMessageError.Other())
157157
}
158158

159159
// -- AdvancePointerError --

0 commit comments

Comments
 (0)