Skip to content

Commit 5eae4d8

Browse files
committed
Feat: chat entity ์„ค๊ณ„
1 parent 77c7c53 commit 5eae4d8

File tree

7 files changed

+92
-20
lines changed

7 files changed

+92
-20
lines changed

โ€Žbuild.gradle.ktsโ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ dependencies {
5555

5656
//Swagger
5757
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0")
58+
59+
//Web Socket
5860
implementation("org.java-websocket:Java-WebSocket:1.5.2")
61+
implementation ("org.springframework:spring-messaging")
5962

6063
// JWT
6164
implementation("io.jsonwebtoken:jjwt-api:0.12.6")
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package cmf.commitField.domain.chat.chatMessage.controller;
2+
3+
import cmf.commitField.domain.chat.chatMessage.entity.ChatMessage;
4+
import cmf.commitField.domain.chat.chatMessage.repository.ChatMessageRepository;
5+
import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
6+
import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
7+
import cmf.commitField.domain.user.entity.CustomOAuth2User;
8+
import cmf.commitField.domain.user.entity.User;
9+
import cmf.commitField.domain.user.repository.UserRepository;
10+
import lombok.RequiredArgsConstructor;
11+
import org.springframework.messaging.handler.annotation.MessageMapping;
12+
import org.springframework.messaging.simp.SimpMessagingTemplate;
13+
import org.springframework.security.core.Authentication;
14+
import org.springframework.security.core.context.SecurityContextHolder;
15+
import org.springframework.stereotype.Controller;
16+
17+
import java.util.Optional;
18+
19+
@Controller
20+
@RequiredArgsConstructor
21+
public class ChatController {
22+
23+
private final ChatMessageRepository chatMessageRepository;
24+
private final ChatRoomRepository chatRoomRepository;
25+
private final UserRepository userRepository;
26+
private final SimpMessagingTemplate messagingTemplate; // ํŠน์ • ์ฑ„๋„๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•จ
27+
28+
@MessageMapping("/chat.sendMessage")
29+
public void sendMessage(ChatMessage chatMessage) {
30+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
31+
32+
if (authentication != null && authentication.isAuthenticated() &&
33+
authentication.getPrincipal() instanceof CustomOAuth2User) {
34+
35+
CustomOAuth2User oauth2User = (CustomOAuth2User) authentication.getPrincipal();
36+
Optional<User> userOptional = userRepository.findByUsername(oauth2User.getName());
37+
38+
if (userOptional.isPresent()) {
39+
User user = userOptional.get();
40+
Optional<ChatRoom> chatRoomOptional = chatRoomRepository.findById(chatMessage.getChatRoom().getId());
41+
42+
if (chatRoomOptional.isPresent()) {
43+
ChatRoom chatRoom = chatRoomOptional.get();
44+
chatMessage.setUser(user);
45+
chatMessage.setChatRoom(chatRoom);
46+
47+
ChatMessage savedMessage = chatMessageRepository.save(chatMessage);
48+
49+
// ์ฑ„ํŒ…๋ฐฉ ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „์†ก
50+
messagingTemplate.convertAndSend("/sub/chat/room/" + chatRoom.getId(), savedMessage);
51+
}
52+
}
53+
}
54+
}
55+
}

โ€Žsrc/main/java/cmf/commitField/domain/chat/chatMessage/entity/ChatMessage.javaโ€Ž

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,20 @@
77
import jakarta.persistence.FetchType;
88
import jakarta.persistence.JoinColumn;
99
import jakarta.persistence.ManyToOne;
10-
import lombok.AllArgsConstructor;
11-
import lombok.Getter;
12-
import lombok.NoArgsConstructor;
10+
import lombok.*;
1311
import lombok.experimental.SuperBuilder;
1412

15-
import java.time.LocalDateTime;
16-
1713
@Entity
1814
@SuperBuilder
1915
@Getter
20-
@NoArgsConstructor
21-
@AllArgsConstructor
16+
@Setter
17+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
18+
@AllArgsConstructor(access = AccessLevel.PROTECTED)
2219
public class ChatMessage extends BaseEntity {
2320

2421
private String message;
2522

26-
private LocalDateTime sendTime;
23+
// private LocalDateTime sendTime;
2724

2825
@ManyToOne(fetch = FetchType.LAZY)
2926
@JoinColumn(name = "user_id")
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package cmf.commitField.domain.chat.chatMessage.repository;
2+
3+
import cmf.commitField.domain.chat.chatMessage.entity.ChatMessage;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface ChatMessageRepository extends JpaRepository<ChatMessage, Long> {
9+
}

โ€Žsrc/main/java/cmf/commitField/domain/chat/chatRoom/entity/ChatRoom.javaโ€Ž

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
import cmf.commitField.domain.user.entity.User;
66
import cmf.commitField.global.jpa.BaseEntity;
77
import jakarta.persistence.*;
8-
import lombok.AllArgsConstructor;
9-
import lombok.Getter;
10-
import lombok.NoArgsConstructor;
8+
import lombok.*;
119
import lombok.experimental.SuperBuilder;
1210

1311
import java.time.LocalDateTime;
@@ -16,11 +14,13 @@
1614
@Entity
1715
@SuperBuilder
1816
@Getter
19-
@NoArgsConstructor
20-
@AllArgsConstructor
17+
@Setter
18+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
19+
@AllArgsConstructor(access = AccessLevel.PROTECTED)
2120
public class ChatRoom extends BaseEntity {
2221

2322
private String title;
23+
private String tier;
2424

2525
private LocalDateTime deletedAt;
2626

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package cmf.commitField.domain.chat.chatRoom.repository;
2+
3+
import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
9+
}

โ€Žsrc/main/java/cmf/commitField/domain/chat/userChatRoom/entity/UserChatRoom.javaโ€Ž

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,22 @@
77
import jakarta.persistence.FetchType;
88
import jakarta.persistence.JoinColumn;
99
import jakarta.persistence.ManyToOne;
10-
import lombok.AllArgsConstructor;
11-
import lombok.Getter;
12-
import lombok.NoArgsConstructor;
10+
import lombok.*;
1311
import lombok.experimental.SuperBuilder;
1412

1513
@Entity
1614
@Getter
15+
@Setter
1716
@SuperBuilder
18-
@NoArgsConstructor
19-
@AllArgsConstructor
17+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
18+
@AllArgsConstructor(access = AccessLevel.PROTECTED)
2019
public class UserChatRoom extends BaseEntity {
2120

2221
@ManyToOne(fetch = FetchType.LAZY)
23-
@JoinColumn(name = "user_id")
22+
@JoinColumn(name = "user_id",nullable = false)
2423
private User user;
2524

2625
@ManyToOne(fetch = FetchType.LAZY)
27-
@JoinColumn(name = "chat_room_id")
26+
@JoinColumn(name = "chat_room_id",nullable = false)
2827
private ChatRoom chatRoom;
2928
}

0 commit comments

Comments
ย (0)