Skip to content

Commit

Permalink
refactor: added socket layer.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryzeon committed May 30, 2024
1 parent 8089dd9 commit 8c238ca
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,12 @@
import me.ryzeon.chatserver.chat.domain.model.queries.GetAllChatMessageByGroupId;
import me.ryzeon.chatserver.chat.domain.services.ChatMessageCommandService;
import me.ryzeon.chatserver.chat.domain.services.ChatMessageQueryService;
import me.ryzeon.chatserver.chat.interfaces.rest.resources.ChatMessageResource;
import me.ryzeon.chatserver.chat.interfaces.rest.resources.CreateChatMessageResource;
import me.ryzeon.chatserver.chat.interfaces.rest.transform.ChatMessageResourceFromEntityAssembler;
import me.ryzeon.chatserver.chat.interfaces.rest.transform.CreateChatMessageCommandFromResourceAssembler;
import me.ryzeon.chatserver.chat.interfaces.shared.resources.ChatMessageResource;
import me.ryzeon.chatserver.chat.interfaces.shared.transform.ChatMessageResourceFromEntityAssembler;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.http.ResponseEntity;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
Expand Down Expand Up @@ -43,11 +39,4 @@ public ResponseEntity<Page<ChatMessageResource>> getChatMessagesByGroupId(
return ResponseEntity.ok(chatMessageResources);
}

@MessageMapping
public void createChatMessage(@Payload CreateChatMessageResource resource) {
var createChatMessageCommand = CreateChatMessageCommandFromResourceAssembler.toCommandFromResource(resource);
var chatMessage = chatMessagesCommandService.handle(createChatMessageCommand).orElseThrow(() -> new RuntimeException("Chat message not created"));
var chatMessageResource = ChatMessageResourceFromEntityAssembler.toResourceFromEntity(chatMessage);
simpMessagingTemplate.convertAndSend("/topic/chat-group." + chatMessage.getGroupId(), chatMessageResource);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,7 @@ public UserResource createUser(CreateUserResource resource) {
.orElse(null);
}

@MessageMapping("/user.leaveFromGroup")
@SendTo("/user/topic")
public void leaveUserFromGroup(Long userId, Long chatGroupId) {
var leaveUserGroupCommand = new LeaveUserGroupCommand(userId, chatGroupId);
userCommandService.handle(leaveUserGroupCommand);
}

@MessageMapping("/user.joinToGroup")
@SendTo("/user/topic")
public void joinUserToGroup(Long userId, Long chatGroupId) {
var joinUserGroupCommand = new JoinUserGroupCommand(userId, chatGroupId);
userCommandService.handle(joinUserGroupCommand);
}

@GetMapping("/users")
public ResponseEntity<List<User>> findAllUsersByGroup(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package me.ryzeon.chatserver.chat.interfaces.rest.resources;
package me.ryzeon.chatserver.chat.interfaces.shared.resources;

public record ChatMessageResource(
Long id,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package me.ryzeon.chatserver.chat.interfaces.rest.transform;
package me.ryzeon.chatserver.chat.interfaces.shared.transform;

import lombok.experimental.UtilityClass;
import me.ryzeon.chatserver.chat.domain.model.aggregates.ChatMessage;
import me.ryzeon.chatserver.chat.interfaces.rest.resources.ChatMessageResource;
import me.ryzeon.chatserver.chat.interfaces.shared.resources.ChatMessageResource;

@UtilityClass
public class ChatMessageResourceFromEntityAssembler {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package me.ryzeon.chatserver.chat.interfaces.socket;

import lombok.AllArgsConstructor;
import me.ryzeon.chatserver.chat.domain.services.ChatMessageCommandService;
import me.ryzeon.chatserver.chat.domain.services.ChatMessageQueryService;
import me.ryzeon.chatserver.chat.interfaces.socket.resources.CreateChatMessageResource;
import me.ryzeon.chatserver.chat.interfaces.shared.transform.ChatMessageResourceFromEntityAssembler;
import me.ryzeon.chatserver.chat.interfaces.socket.transform.CreateChatMessageCommandFromResourceAssembler;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/chat-messages")
@AllArgsConstructor
public class ChatMessageSocket {

private final ChatMessageCommandService chatMessagesCommandService;
private final ChatMessageQueryService chatMessagesQueryService;
private final SimpMessagingTemplate simpMessagingTemplate;

@MessageMapping
public void createChatMessage(@Payload CreateChatMessageResource resource) {
var createChatMessageCommand = CreateChatMessageCommandFromResourceAssembler.toCommandFromResource(resource);
var chatMessage = chatMessagesCommandService.handle(createChatMessageCommand).orElseThrow(() -> new RuntimeException("Chat message not created"));
var chatMessageResource = ChatMessageResourceFromEntityAssembler.toResourceFromEntity(chatMessage);
simpMessagingTemplate.convertAndSend("/topic/chat-group." + chatMessage.getGroupId(), chatMessageResource);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package me.ryzeon.chatserver.chat.interfaces.socket;

import lombok.AllArgsConstructor;
import me.ryzeon.chatserver.chat.domain.model.commands.JoinUserGroupCommand;
import me.ryzeon.chatserver.chat.domain.model.commands.LeaveUserGroupCommand;
import me.ryzeon.chatserver.chat.domain.services.UserCommandService;
import me.ryzeon.chatserver.chat.domain.services.UserQueryService;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

@Controller
@AllArgsConstructor
public class UserSocket {

private final UserCommandService userCommandService;
private final UserQueryService userQueryService;

@MessageMapping("/user.leaveFromGroup")
@SendTo("/user/topic")

public void leaveUserFromGroup(Long userId, Long chatGroupId) {
var leaveUserGroupCommand = new LeaveUserGroupCommand(userId, chatGroupId);
userCommandService.handle(leaveUserGroupCommand);
}

@MessageMapping("/user.joinToGroup")
@SendTo("/user/topic")
public void joinUserToGroup(Long userId, Long chatGroupId) {
var joinUserGroupCommand = new JoinUserGroupCommand(userId, chatGroupId);
userCommandService.handle(joinUserGroupCommand);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package me.ryzeon.chatserver.chat.interfaces.rest.resources;
package me.ryzeon.chatserver.chat.interfaces.socket.resources;

public record CreateChatMessageResource(
String sender,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package me.ryzeon.chatserver.chat.interfaces.rest.transform;
package me.ryzeon.chatserver.chat.interfaces.socket.transform;

import lombok.experimental.UtilityClass;
import me.ryzeon.chatserver.chat.domain.model.commands.CreateChatMessageCommand;
import me.ryzeon.chatserver.chat.interfaces.rest.resources.CreateChatMessageResource;
import me.ryzeon.chatserver.chat.interfaces.socket.resources.CreateChatMessageResource;

@UtilityClass
public class CreateChatMessageCommandFromResourceAssembler {
Expand Down

0 comments on commit 8c238ca

Please sign in to comment.