Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions domain/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
dependencies {
compileOnly("org.springframework:spring-tx")
compileOnly("org.springframework:spring-context")
compileOnly("org.springframework.boot:spring-boot-starter-websocket")

testImplementation(project(":storage"))
testImplementation(project(path = ":storage", configuration = "testArtifacts"))
Expand Down
21 changes: 11 additions & 10 deletions domain/src/main/kotlin/gloddy/groupChat/GroupChat.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import gloddy.groupChat.vo.GroupChatMessageImage
import gloddy.groupChat.vo.MessageType
import gloddy.util.UUIDGenerator
import java.time.LocalDateTime
import java.time.LocalDateTime.*
import java.util.UUID
import java.time.LocalDateTime.now
import java.util.*

data class GroupChat(
val hostId: Long,
Expand Down Expand Up @@ -51,6 +51,7 @@ data class GroupChat(
this.events.add(
GroupChatMessageEvent(
userId = userId,
chatId = this.id,
eventType = GroupChatMessageEventType.CREATE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = groupChatMessage.createdAt
Expand All @@ -76,6 +77,7 @@ data class GroupChat(
this.events.add(
GroupChatMessageEvent(
userId = userId,
chatId = this.id,
eventType = GroupChatMessageEventType.CREATE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = groupChatMessage.createdAt
Expand All @@ -86,14 +88,13 @@ data class GroupChat(

fun deleteUserMessage(userId: Long, groupChatMessage: GroupChatMessage): GroupChatMessageDeleteResult {
val deletedGroupChatMessage = groupChatMessage.delete(userId)
this.events.add(
GroupChatMessageEvent(
userId = userId,
eventType = GroupChatMessageEventType.DELETE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = deletedGroupChatMessage.deletedAt!!
)
)
this.events.add(GroupChatMessageEvent(
userId = userId,
chatId = this.id,
eventType = GroupChatMessageEventType.DELETE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = deletedGroupChatMessage.deletedAt!!
))
return GroupChatMessageDeleteResult(
groupChat = this,
groupChatMessage = deletedGroupChatMessage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import java.util.UUID

data class GroupChatMessageEvent(
val userId: Long,
val chatId: UUID,
val eventType: GroupChatMessageEventType,
val groupChatMessageId: UUID,
val eventDateTime: LocalDateTime
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package gloddy.groupChat.service

import gloddy.groupChat.event.GroupChatMessageEvent
import gloddy.groupChat.repository.GroupChatCommandRepository
import org.springframework.messaging.simp.SimpMessageSendingOperations

class GroupChatMessageCommander(
private val simpMessageSendingOperations: SimpMessageSendingOperations,
private val groupChatCommandRepository: GroupChatCommandRepository
) {

fun broadcastMessage(groupChatMessageEvent: GroupChatMessageEvent) {
val foundMessage = groupChatCommandRepository.findGroupChatMessageById(groupChatMessageEvent.groupChatMessageId)
simpMessageSendingOperations.convertAndSend("sub/channel/" + groupChatMessageEvent.chatId, foundMessage)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ class GroupChatCreateMessageTest : GroupChatServiceTest() {
it.contains(
GroupChatMessageEvent(
userId = groupChatMessage.userId,
chatId = groupChat.id,
eventType = GroupChatMessageEventType.CREATE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = groupChatMessage.createdAt
Expand Down Expand Up @@ -104,6 +105,7 @@ class GroupChatCreateMessageTest : GroupChatServiceTest() {
it.contains(
GroupChatMessageEvent(
userId = groupChatMessage.userId,
chatId = groupChat.id,
eventType = GroupChatMessageEventType.CREATE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = groupChatMessage.createdAt
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class GroupChatDeleteMessageTest : GroupChatServiceTest() {
it.contains(
GroupChatMessageEvent(
userId = groupChatMessage.userId,
chatId = groupChat.id,
eventType = GroupChatMessageEventType.DELETE,
groupChatMessageId = groupChatMessage.id,
eventDateTime = groupChatMessage.deletedAt!!
Expand Down
43 changes: 26 additions & 17 deletions in-message/src/main/kotlin/gloddy/hanlder/InPayloadHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,37 @@ package gloddy.hanlder
import gloddy.groupChat.dto.command.GroupChatCreateCommand
import gloddy.groupChat.dto.command.GroupChatJoinCommand
import gloddy.groupChat.service.GroupChatCommander
import gloddy.groupChat.service.GroupChatMessageCommander
import gloddy.hanlder.mapper.toDomainEvent
import gloddy.internal.apply.ApplyRepository
import gloddy.internal.group.GroupRepository
import gloddy.payload.apply.ApplyPayload
import gloddy.payload.apply.ApplyPayloadType
import gloddy.payload.chatMessage.GroupChatMessagePayload
import gloddy.payload.group.GroupPayload
import gloddy.payload.group.GroupPayloadType
import org.springframework.stereotype.Component

@Component
class InPayloadHandler(
private val applyRepository: ApplyRepository,
private val groupRepository: GroupRepository,
private val groupChatCommander: GroupChatCommander,
private val applyRepository: ApplyRepository,
private val groupRepository: GroupRepository,
private val groupChatMessageCommander: GroupChatMessageCommander,
private val groupChatCommander: GroupChatCommander,
) {

fun handle(payload: GroupPayload) {
when (payload.eventType) {
GroupPayloadType.CREATE_GROUP -> {
groupRepository.findById(payload.groupId)
.let {
groupChatCommander.createGroupChat(
GroupChatCreateCommand(
userId = it.captainId,
groupId = payload.groupId
.let {
groupChatCommander.createGroupChat(
GroupChatCreateCommand(
userId = it.captainId,
groupId = payload.groupId
)
)
)
}
}
}
}
}
Expand All @@ -38,17 +42,22 @@ class InPayloadHandler(
when (payload.eventType) {
ApplyPayloadType.APPLY_APPROVE -> {
applyRepository.findById(payload.applyId)
.let {
groupChatCommander.join(
GroupChatJoinCommand(
groupId = it.groupId,
userId = it.applyUserId
.let {
groupChatCommander.join(
GroupChatJoinCommand(
groupId = it.groupId,
userId = it.applyUserId
)
)
)
}
}
}

else -> return
}
}

fun handle(payload: GroupChatMessagePayload){
val groupChatMessageEvent = payload.toDomainEvent()
groupChatMessageCommander.broadcastMessage(groupChatMessageEvent)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package gloddy.hanlder.mapper

import gloddy.groupChat.event.GroupChatMessageEvent
import gloddy.groupChat.event.GroupChatMessageEventType
import gloddy.payload.chatMessage.GroupChatMessagePayload
import gloddy.payload.chatMessage.GroupChatMessagePayloadType

fun GroupChatMessagePayload.toDomainEvent() : GroupChatMessageEvent =
GroupChatMessageEvent(
userId = this.userId,
chatId = this.chatId,
eventType = this.eventType.toDomainEventType(),
groupChatMessageId = this.groupChatMessageId,
eventDateTime = this.eventDateTime
)

private fun GroupChatMessagePayloadType.toDomainEventType() : GroupChatMessageEventType =
when(this){
GroupChatMessagePayloadType.CREATE -> GroupChatMessageEventType.CREATE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package gloddy.payload.chatMessage

import gloddy.groupChat.event.GroupChatMessageEventType
import gloddy.payload.apply.ApplyPayloadType
import java.time.LocalDateTime
import java.util.*

data class GroupChatMessagePayload(
val userId: Long,
val chatId: UUID,
val eventType: GroupChatMessagePayloadType,
val groupChatMessageId: UUID,
val eventDateTime: LocalDateTime
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package gloddy.payload.chatMessage

enum class GroupChatMessagePayloadType {
CREATE
}
8 changes: 7 additions & 1 deletion in-message/src/main/kotlin/gloddy/sqs/listner/SqsHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import org.springframework.stereotype.Component

@Component
class SqsHandler(
private val inPayloadHandler: InPayloadHandler,
private val inPayloadHandler: InPayloadHandler,
) {

@SqsListener(value = ["\${sqs.queue.group}"])
Expand All @@ -21,4 +21,10 @@ class SqsHandler(
val applyPayload = MessageParser.parseApplyEvent(message)
inPayloadHandler.handle(applyPayload)
}

@SqsListener(value = ["\${sqs.queue.message-create}"])
fun handleChatMessageEvent(message: String) {
val groupChatMessagePayload = MessageParser.parseChatMessageEvent(message)
inPayloadHandler.handle(groupChatMessagePayload)
}
}
6 changes: 6 additions & 0 deletions in-message/src/main/kotlin/gloddy/sqs/util/MessageParser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package gloddy.sqs.util
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import gloddy.payload.apply.ApplyPayload
import gloddy.payload.chatMessage.GroupChatMessagePayload
import gloddy.payload.group.GroupPayload

class MessageParser {
Expand All @@ -20,6 +21,11 @@ class MessageParser {
return objectMapper.readValue(payload, GroupPayload::class.java)
}

fun parseChatMessageEvent(message: String): GroupChatMessagePayload {
val payload = parsePayloadFromMessage(message)
return objectMapper.readValue(payload, GroupChatMessagePayload::class.java)
}


private fun parsePayloadFromMessage(message: String): String {
val outerMessage: Map<String, Any> = objectMapper.readValue(message, Map::class.java) as Map<String, Any>
Expand Down