Skip to content

Commit

Permalink
#34/feat/채팅전송기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
jun673012 committed Oct 3, 2024
1 parent a518f12 commit bc48644
Show file tree
Hide file tree
Showing 13 changed files with 59 additions and 38 deletions.
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ repositories {
mavenCentral()
}

tasks.withType(JavaCompile).configureEach {
options.compilerArgs << '-parameters'
}


dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.chat.liveon.auth.controller;

import com.chat.liveon.auth.dto.LoginRequest;
import com.chat.liveon.auth.dto.RegisterRequest;
import com.chat.liveon.auth.dto.request.LoginRequest;
import com.chat.liveon.auth.dto.request.RegisterRequest;
import com.chat.liveon.auth.dto.response.LoginResponse;
import com.chat.liveon.auth.service.AuthService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand Down Expand Up @@ -37,11 +38,11 @@ public ResponseEntity<String> register(@RequestBody RegisterRequest authRequest)

@PostMapping("/login")
@Operation(summary = "로그인", description = "로그인 요청")
public ResponseEntity<String> login(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
public LoginResponse login(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
log.info("[로그인 요청] 아이디: {}", loginRequest.personId());
authService.login(loginRequest, request, response);
LoginResponse loginResponse = authService.login(loginRequest, request, response);
log.info("[로그인 성공] 아이디: {}", loginRequest.personId());
return ResponseEntity.ok("로그인 성공");
return loginResponse;
}

@PostMapping("/logout")
Expand Down
7 changes: 0 additions & 7 deletions src/main/java/com/chat/liveon/auth/dto/LoginRequest.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.chat.liveon.auth.dto.request;

public record LoginRequest(String personId, String personPassword) {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.chat.liveon.auth.dto;
package com.chat.liveon.auth.dto.request;

public record RegisterRequest(String personId, String personName, String personPassword, String profilePicture) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.chat.liveon.auth.dto.response;

public record LoginResponse(
String personId
) {}
9 changes: 5 additions & 4 deletions src/main/java/com/chat/liveon/auth/service/AuthService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.chat.liveon.auth.service;

import com.chat.liveon.auth.dto.LoginRequest;
import com.chat.liveon.auth.dto.RegisterRequest;
import com.chat.liveon.auth.dto.request.LoginRequest;
import com.chat.liveon.auth.dto.request.RegisterRequest;
import com.chat.liveon.auth.dto.response.LoginResponse;
import com.chat.liveon.auth.entity.Person;
import com.chat.liveon.auth.entity.Role;
import com.chat.liveon.auth.exception.AuthenticationFailureException;
Expand All @@ -17,7 +18,6 @@
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;

@Slf4j
@Service
public class AuthService {
private final PasswordEncoder passwordEncoder;
Expand All @@ -39,7 +39,7 @@ public void register(RegisterRequest authRequest) {
}

@Transactional
public void login(LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
public LoginResponse login(LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) {
boolean isAuthenticated = authenticate(loginRequest.personId(), loginRequest.personPassword());
if (!isAuthenticated) {
throw new AuthenticationFailureException("로그인에 실패했습니다.");
Expand All @@ -55,6 +55,7 @@ public void login(LoginRequest loginRequest, HttpServletRequest request, HttpSer

response.addCookie(sessionCookie);
response.setStatus(HttpServletResponse.SC_OK);
return new LoginResponse(loginRequest.personId());
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.chat.liveon.chat.controller;

import com.chat.liveon.chat.dto.request.ChatMessageRequest;
import com.chat.liveon.chat.dto.response.ChatMessageResponse;
import com.chat.liveon.chat.service.ChatMessageService;
import lombok.RequiredArgsConstructor;
import org.springframework.messaging.handler.annotation.DestinationVariable;
Expand All @@ -17,9 +18,9 @@ public class ChatMessageController {
private final ChatMessageService chatMessageService;

@MessageMapping("/chat/{roomId}")
@SendTo("/topic/public/{roomId}")
public ChatMessageRequest sendMessage(@DestinationVariable Long roomId, ChatMessageRequest message) {
return chatMessageService.sendMessage(roomId, message);
@SendTo("/topic/chatroom/{roomId}")
public ChatMessageResponse sendMessage(@DestinationVariable("roomId") String roomId, ChatMessageRequest message) {
Long roomIdLong = Long.parseLong(roomId);
return chatMessageService.sendMessage(roomIdLong, message);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import java.time.LocalDateTime;

public record ChatMessageRequest(
Long messageId,
Long chatRoomId,
String senderName,
String personId,
String message,
LocalDateTime timestamp
) {}
) {}
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
package com.chat.liveon.chat.dto.response;

public class ChatMessageResponse {
}
import java.time.LocalDateTime;

public record ChatMessageResponse(
Long chatRoomId,
String personId,
String message,
LocalDateTime timestamp
) {}

1 change: 1 addition & 0 deletions src/main/java/com/chat/liveon/chat/entity/ChatRoom.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class ChatRoom {
@Column(name = "chat_room_id")
private Long id;

@Column(nullable = false)
private String chatRoomName;

@ManyToOne(fetch = FetchType.LAZY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@

import com.chat.liveon.chat.entity.ChatRoom;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.lang.NonNull;

import java.util.Optional;

public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
}
@NonNull
Optional<ChatRoom> findById(Long roomId);
}
20 changes: 10 additions & 10 deletions src/main/java/com/chat/liveon/chat/service/ChatMessageService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.chat.liveon.auth.entity.Person;
import com.chat.liveon.auth.repository.PersonRepository;
import com.chat.liveon.chat.dto.request.ChatMessageRequest;
import com.chat.liveon.chat.dto.response.ChatMessageResponse;
import com.chat.liveon.chat.entity.ChatMessage;
import com.chat.liveon.chat.entity.ChatRoom;
import com.chat.liveon.chat.repository.ChatMessageRepository;
Expand All @@ -22,12 +23,11 @@ public class ChatMessageService {
private final PersonRepository personRepository;

@Transactional
public ChatMessageRequest sendMessage(Long roomId, ChatMessageRequest messageRequest) {
public ChatMessageResponse sendMessage(Long roomId, ChatMessageRequest messageRequest) {
ChatRoom chatRoom = chatRoomRepository.findById(roomId)
.orElseThrow(() -> new RuntimeException("ChatRoom not found"));

Person sender = personRepository.findByPersonId(messageRequest.senderName())
.orElseThrow(() -> new RuntimeException("Sender not found"));
.orElseThrow(() -> new RuntimeException("채팅방이 없음: " + roomId));
Person sender = personRepository.findByPersonId(messageRequest.personId())
.orElseThrow(() -> new RuntimeException("사용자가 없음: " + messageRequest.personId()));

ChatMessage chatMessage = ChatMessage.builder()
.chatRoom(chatRoom)
Expand All @@ -37,15 +37,15 @@ public ChatMessageRequest sendMessage(Long roomId, ChatMessageRequest messageReq

chatMessage = chatMessageRepository.save(chatMessage);

log.info("[메시지 전송 성공] 채팅방: {}, 사용자: {}, 메시지: {}", roomId, sender.getPersonName(), messageRequest.message());
log.info("[메시지 전송 성공] 채팅방: {}, 사용자: {}, 메시지: {}, 시간: {}", roomId, sender.getPersonId(), messageRequest.message(), chatMessage.getSendDate());

return new ChatMessageRequest(
chatMessage.getId(),
return new ChatMessageResponse(
chatMessage.getChatRoom().getId(),
sender.getPersonName(),
sender.getPersonId(),
chatMessage.getMessage(),
chatMessage.getSendDate()
);

}


}

0 comments on commit bc48644

Please sign in to comment.