From a35ac648c973cbe8e747f9f1b1407e776a853dc7 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Thu, 4 Aug 2022 17:38:17 +0900 Subject: [PATCH 01/35] please --- .../domain/entity/PostEntity.java | 2 +- .../service/mypage/MyPageService.java | 4 +- .../service/mypage/MyPageServiceTest.java | 43 ------------------- 3 files changed, 3 insertions(+), 46 deletions(-) delete mode 100644 src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 718266a..bc5713e 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -14,7 +14,7 @@ @NoArgsConstructor @Builder @Entity -@Getter +@Data @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. @EqualsAndHashCode(callSuper = true) // 부모클래스의 equalsAndHashCode 불러오는 어노테이션. public class PostEntity extends BaseTimeEntity { diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index b8fa4cc..474ce2c 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -29,8 +29,8 @@ public class MyPageService { //Post CRUD를 postService에서 관리하고, 내가 쓴 글 조회하는 getPosts는 마이페이지에서 하는 게 낫지 않나 - public List getPosts(int userId){ - List postEntityList = userRepository.findByUserId(userId).get().getPostEntities(); + public List getPosts(String email){ + List postEntityList = userRepository.findByEmail(email).get().getPostEntities(); List postDtoList = postEntityList.stream() .map(PostEntity::toDto) .collect(Collectors.toList()); diff --git a/src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java b/src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java deleted file mode 100644 index 61fe7b2..0000000 --- a/src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.example.nanuer_server.service.mypage; - -import com.example.nanuer_server.config.BaseException; -import com.example.nanuer_server.domain.repository.UserRepository; -import com.example.nanuer_server.dto.Post.PostDto; -import com.example.nanuer_server.dto.User.UserInfoDto; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@SpringBootTest -class MyPageServiceTest { - @Autowired - private MyPageService myPageService; - - @Autowired - private UserRepository userRepository; - - - @Test - void getPosts(){ - List postDtoList = myPageService.getPosts(3); - postDtoList.forEach(System.out::println); - } - - /* - @Test - void updateUserTest(){ - UserInfoDto beforeUserInfoDto = userRepository.findByEmail("dongwoo0307@naver.com").get().toDto(); - UserInfoDto updatedUserInfoDto = beforeUserInfoDto; - try { - UserInfoDto userInfoDto = myPageService.updateUser(updatedUserInfoDto,"dongwoo0307@naver.com" ); - System.out.println(userInfoDto.toString()); - } catch (BaseException exception){ - System.out.println(exception.getMessage()); - } - } -*/ -} \ No newline at end of file From ad743aa99b4fc43444f45ed875d212e34a5b6af4 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Thu, 4 Aug 2022 17:43:04 +0900 Subject: [PATCH 02/35] message_commit --- .../nanuer_server/controller/mypage/MyPageController.java | 7 +++++++ .../nanuer_server/service/mypage/MyPageService.java | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java index fd0f59e..9b3e5d7 100644 --- a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java +++ b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java @@ -18,6 +18,13 @@ public class MyPageController { private final MyPageService myPageService; + + @GetMapping("/my-posts") + public BaseResponse> getMyPosts(@RequestParam String email){ + List postDtoList = myPageService.getMyPosts(email); + return new BaseResponse<>(postDtoList); + } + @GetMapping("/heart-posts") public BaseResponse> getHeartPosts(@RequestParam String email){ List postDtoList = myPageService.getHeartPosts(email); diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index 474ce2c..52dc0a8 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -29,7 +29,7 @@ public class MyPageService { //Post CRUD를 postService에서 관리하고, 내가 쓴 글 조회하는 getPosts는 마이페이지에서 하는 게 낫지 않나 - public List getPosts(String email){ + public List getMyPosts(String email){ List postEntityList = userRepository.findByEmail(email).get().getPostEntities(); List postDtoList = postEntityList.stream() .map(PostEntity::toDto) From d1d0ead3cbb0f2729f3c1d038999d8bda815fbf2 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Thu, 4 Aug 2022 18:09:51 +0900 Subject: [PATCH 03/35] chating add --- build.gradle | 5 + .../config/Chat/StompWebSocketConfig.java | 30 +++++ .../config/Chat/WebSocketConfig.java | 25 +++++ .../config/User/SecurityConfig.java | 2 +- .../controller/Chat/RoomController.java | 49 ++++++++ .../controller/Chat/StompChatController.java | 28 +++++ .../domain/entity/CategoryEntity.java | 2 + .../domain/entity/PostEntity.java | 2 +- .../repository/Chat/ChatRoomRepository.java | 37 ++++++ .../dto/Chat/ChatMessageDto.java | 12 ++ .../nanuer_server/dto/Chat/ChatRoomDto.java | 29 +++++ src/main/resources/templates/chat.html | 106 ++++++++++++++++++ src/main/resources/templates/room.html | 87 ++++++++++++++ src/main/resources/templates/rooms.html | 42 +++++++ 14 files changed, 454 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java create mode 100644 src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java create mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java create mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java create mode 100644 src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java create mode 100644 src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java create mode 100644 src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java create mode 100644 src/main/resources/templates/chat.html create mode 100644 src/main/resources/templates/room.html create mode 100644 src/main/resources/templates/rooms.html diff --git a/build.gradle b/build.gradle index cfc1101..7f356fe 100644 --- a/build.gradle +++ b/build.gradle @@ -40,6 +40,11 @@ dependencies { implementation 'io.jsonwebtoken:jjwt:0.9.1' + + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + implementation 'org.springframework.boot:spring-boot-starter-websocket' + implementation group: 'org.webjars', name: 'stomp-websocket', version: '2.3.3-1' + } tasks.named('test') { diff --git a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java new file mode 100644 index 0000000..ba2b4b0 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java @@ -0,0 +1,30 @@ +package com.example.nanuer_server.config.Chat; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +@EnableWebSocketMessageBroker +@Configuration +public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { + + //endpoint를 /stomp로 하고, allowedOrigins를 "*"로 하면 페이지에서 + //Get /info 404 Error가 발생한다. 그래서 아래와 같이 2개의 계층으로 분리하고 + //origins를 개발 도메인으로 변경하니 잘 동작하였다. + //이유는 왜 그런지 아직 찾지 못함 + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/stomp/chat") + .setAllowedOrigins("http://localhost:8080") + .withSockJS(); + } + + /*어플리케이션 내부에서 사용할 path를 지정할 수 있음*/ + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + registry.setApplicationDestinationPrefixes("/pub"); + registry.enableSimpleBroker("/sub"); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java new file mode 100644 index 0000000..c882dd1 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -0,0 +1,25 @@ +package com.example.nanuer_server.config.Chat; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + + registry.addEndpoint("/example").withSockJS(); + } + + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + + config.setApplicationDestinationPrefixes("/test"); + config.enableSimpleBroker("/topic", "/queue"); + } +} diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index c83ba43..7e648d1 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -52,7 +52,7 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() - .antMatchers( "/", "/user/**", "/css/**", "/api/mypage/**", "/exception/**", "/favicon.ico", "/post/**").permitAll() + .antMatchers( "/", "/user/**", "/css/**", "/api/mypage/**", "/exception/**", "/favicon.ico", "/post/**", "/chat/**", "/ws/**").permitAll() .anyRequest().authenticated(); //JwtFilter 추가 diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java new file mode 100644 index 0000000..2625087 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java @@ -0,0 +1,49 @@ +package com.example.nanuer_server.controller.Chat; + +import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +@Controller +@RequiredArgsConstructor +@RestController(value = "/chat") +@Log4j2 +public class RoomController { + + private final ChatRoomRepository repository; + + //채팅방 목록 조회 + @GetMapping(value = "/rooms") + public ModelAndView rooms() { + + log.info("# All Chat Rooms"); + ModelAndView mv = new ModelAndView("rooms"); + + mv.addObject("list", repository.findAllRooms()); + + return mv; + } + + //채팅방 개설 + @PostMapping(value = "/room") + public String create(@RequestParam String name, RedirectAttributes rttr){ + + log.info("# Create Chat Room , name: " + name); + rttr.addFlashAttribute("roomName", repository.createChatRoomDTO(name)); + return "redirect:/rooms"; + } + + //채팅방 조회 + @GetMapping("/room") + public void getRoom(String roomId, Model model){ + + log.info("# get Chat Room, roomID : " + roomId); + + model.addAttribute("room", repository.findRoomById(roomId)); + } +} diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java new file mode 100644 index 0000000..1233b6e --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java @@ -0,0 +1,28 @@ +package com.example.nanuer_server.controller.Chat; + +import com.example.nanuer_server.dto.Chat.ChatMessageDto; +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Controller; + +@Controller +@RequiredArgsConstructor +public class StompChatController { + + private final SimpMessagingTemplate template; //특정 Broker로 메세지를 전달 + + //Client가 SEND할 수 있는 경로 + //stompConfig에서 설정한 applicationDestinationPrefixes와 @MessageMapping 경로가 병합됨 + //"/pub/chat/enter" + @MessageMapping(value = "/chat/enter") + public void enter(ChatMessageDto message){ + message.setMessage(message.getWriter() + "님이 채팅방에 참여하였습니다."); + template.convertAndSend("/sub/chat/room/" + message.getRoomId(), message); + } + + @MessageMapping(value = "/chat/message") + public void message(ChatMessageDto message){ + template.convertAndSend("/sub/chat/room/" + message.getRoomId(), message); + } +} diff --git a/src/main/java/com/example/nanuer_server/domain/entity/CategoryEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/CategoryEntity.java index 4dc3612..e19c092 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/CategoryEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/CategoryEntity.java @@ -11,6 +11,8 @@ @NoArgsConstructor @Builder @Data +@ToString +@EqualsAndHashCode @Entity public class CategoryEntity { diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 00410eb..c268823 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -38,7 +38,7 @@ public class PostEntity extends BaseTimeEntity { @Enumerated(EnumType.STRING) private Progress progress; - @JsonProperty("delivery_cost") + @JsonProperty("cost_info") private String costInfo; private String menu; diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java new file mode 100644 index 0000000..d53e62f --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -0,0 +1,37 @@ +package com.example.nanuer_server.domain.repository.Chat; + +import com.example.nanuer_server.dto.Chat.ChatRoomDto; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.*; + +@Repository +public class ChatRoomRepository { + + private Map chatRoomDTOMap; + + @PostConstruct + private void init(){ + chatRoomDTOMap = new LinkedHashMap<>(); + } + + public List findAllRooms(){ + //채팅방 생성 순서 최근 순으로 반환 + List result = new ArrayList<>(chatRoomDTOMap.values()); + Collections.reverse(result); + + return result; + } + + public ChatRoomDto findRoomById(String id){ + return chatRoomDTOMap.get(id); + } + + public ChatRoomDto createChatRoomDTO(String name){ + ChatRoomDto room = ChatRoomDto.create(name); + chatRoomDTOMap.put(room.getRoomId(), room); + + return room; + } +} diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java new file mode 100644 index 0000000..d7e36b6 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java @@ -0,0 +1,12 @@ +package com.example.nanuer_server.dto.Chat; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ChatMessageDto { + private String roomId; + private String writer; + private String message; +} diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java new file mode 100644 index 0000000..770628e --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java @@ -0,0 +1,29 @@ +package com.example.nanuer_server.dto.Chat; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.socket.WebSocketSession; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +@Getter +@Setter +public class ChatRoomDto { + + private String roomId; + private String name; + private Set sessions = new HashSet<>(); + + //WebSocketSession은 Spring에서 Websocket Connection이 맺어진 세션 + + public static ChatRoomDto create(String name){ + ChatRoomDto room = new ChatRoomDto(); + + room.roomId = UUID.randomUUID().toString(); + room.name = name; + return room; + } +} + diff --git a/src/main/resources/templates/chat.html b/src/main/resources/templates/chat.html new file mode 100644 index 0000000..65d7e9c --- /dev/null +++ b/src/main/resources/templates/chat.html @@ -0,0 +1,106 @@ + + + + + + +
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/room.html b/src/main/resources/templates/room.html new file mode 100644 index 0000000..61b99b7 --- /dev/null +++ b/src/main/resources/templates/room.html @@ -0,0 +1,87 @@ + + + + + + +
+
+

[[${room.name}]]

+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ + + + + +
+
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/rooms.html b/src/main/resources/templates/rooms.html new file mode 100644 index 0000000..2a761fc --- /dev/null +++ b/src/main/resources/templates/rooms.html @@ -0,0 +1,42 @@ + + + + + +
+ +
+
+ + +
+
+
+ + + + \ No newline at end of file From 307ba41e9fba5419c48889a8b66bcd2d5e2647bc Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Thu, 4 Aug 2022 18:15:11 +0900 Subject: [PATCH 04/35] =?UTF-8?q?=C3=A3chat=20files=20add?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/mypage/MyPageController.java | 6 +++ .../service/mypage/MyPageService.java | 4 +- .../service/mypage/MyPageServiceTest.java | 43 ------------------- 3 files changed, 8 insertions(+), 45 deletions(-) delete mode 100644 src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java diff --git a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java index fd0f59e..1324e0a 100644 --- a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java +++ b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java @@ -18,6 +18,12 @@ public class MyPageController { private final MyPageService myPageService; + @GetMapping("/my-posts") + public BaseResponse> getMyPosts(@RequestParam String email){ + List postDtoList = myPageService.getMyPosts(email); + return new BaseResponse<>(postDtoList); + } + @GetMapping("/heart-posts") public BaseResponse> getHeartPosts(@RequestParam String email){ List postDtoList = myPageService.getHeartPosts(email); diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index b8fa4cc..52dc0a8 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -29,8 +29,8 @@ public class MyPageService { //Post CRUD를 postService에서 관리하고, 내가 쓴 글 조회하는 getPosts는 마이페이지에서 하는 게 낫지 않나 - public List getPosts(int userId){ - List postEntityList = userRepository.findByUserId(userId).get().getPostEntities(); + public List getMyPosts(String email){ + List postEntityList = userRepository.findByEmail(email).get().getPostEntities(); List postDtoList = postEntityList.stream() .map(PostEntity::toDto) .collect(Collectors.toList()); diff --git a/src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java b/src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java deleted file mode 100644 index 61fe7b2..0000000 --- a/src/test/java/com/example/nanuer_server/service/mypage/MyPageServiceTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.example.nanuer_server.service.mypage; - -import com.example.nanuer_server.config.BaseException; -import com.example.nanuer_server.domain.repository.UserRepository; -import com.example.nanuer_server.dto.Post.PostDto; -import com.example.nanuer_server.dto.User.UserInfoDto; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.List; - -import static org.junit.jupiter.api.Assertions.*; - -@SpringBootTest -class MyPageServiceTest { - @Autowired - private MyPageService myPageService; - - @Autowired - private UserRepository userRepository; - - - @Test - void getPosts(){ - List postDtoList = myPageService.getPosts(3); - postDtoList.forEach(System.out::println); - } - - /* - @Test - void updateUserTest(){ - UserInfoDto beforeUserInfoDto = userRepository.findByEmail("dongwoo0307@naver.com").get().toDto(); - UserInfoDto updatedUserInfoDto = beforeUserInfoDto; - try { - UserInfoDto userInfoDto = myPageService.updateUser(updatedUserInfoDto,"dongwoo0307@naver.com" ); - System.out.println(userInfoDto.toString()); - } catch (BaseException exception){ - System.out.println(exception.getMessage()); - } - } -*/ -} \ No newline at end of file From 3e4c819857c3438e35713a3ed387a908144bf4cf Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Fri, 5 Aug 2022 22:11:36 +0900 Subject: [PATCH 05/35] refactoring addHeart and deleteHeart --- .../config/BaseResponseStatus.java | 1 + .../config/User/SecurityConfig.java | 2 +- .../controller/heart/HeartController.java | 40 +++++++++++++++ .../controller/mypage/MyPageController.java | 2 +- .../domain/entity/HeartEntity.java | 3 +- .../domain/entity/PostEntity.java | 3 +- .../domain/entity/UserEntity.java | 35 +++++++------ .../nanuer_server/dto/User/UserInfoDto.java | 5 +- .../service/heart/HeartService.java | 51 +++++++++++++++++++ .../service/mypage/MyPageService.java | 3 +- 10 files changed, 119 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/controller/heart/HeartController.java create mode 100644 src/main/java/com/example/nanuer_server/service/heart/HeartService.java diff --git a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java index e06b467..3fcfc31 100644 --- a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java +++ b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java @@ -31,6 +31,7 @@ public enum BaseResponseStatus { POST_USERS_EXISTS_EMAIL(false,2017,"중복된 아이디입니다."), POST_POST_INVALID_TITLE(false, 2018, "게시물의 제목을 확인해주세요."), POST_POST_INVALID_CONTENT(false, 2019, "게시물의 내용을 확인해주세요."), + POST_POST_EMPTY_POST(false,2020, "존재하지 않는 게시물입니다."), // [POST] /users POST_USERS_EMPTY_ID(false, 2015, "아이디를 입력해주세요."), diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index 7e648d1..b466855 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -52,7 +52,7 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() - .antMatchers( "/", "/user/**", "/css/**", "/api/mypage/**", "/exception/**", "/favicon.ico", "/post/**", "/chat/**", "/ws/**").permitAll() + .antMatchers( "/","/heart/**", "/user/**", "/css/**", "/mypage/**", "/exception/**", "/favicon.ico", "/post/**", "/chat/**", "/ws/**").permitAll() .anyRequest().authenticated(); //JwtFilter 추가 diff --git a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java new file mode 100644 index 0000000..8ed2336 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java @@ -0,0 +1,40 @@ +package com.example.nanuer_server.controller.heart; + +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.dto.heart.HeartDto; +import com.example.nanuer_server.service.heart.HeartService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +@Slf4j +@RestController +@RequestMapping("/heart") +@RequiredArgsConstructor +public class HeartController { + private final HeartService heartService; + + // 내가 찜한 게시물 조회는 마이페이지 서비스에서 구현함. + + @PostMapping("/add") + public BaseResponse addHeart(@RequestBody HeartDto addheartDto){ + try { + HeartDto addedHeartDto = heartService.addHeart(addheartDto); + return new BaseResponse<>(addedHeartDto); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + + @DeleteMapping("/delete/{heart_id}") + public BaseResponse deleteHeart(@PathVariable(name = "heart_id") int heartId){ + try { + heartService.deleteHeart(heartId); + String message = "찜이 해제되었습니다."; + return new BaseResponse<>(message); + } catch (BaseException exception){ + return new BaseResponse<>(exception.getStatus()); + } + } +} diff --git a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java index 1324e0a..76b635a 100644 --- a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java +++ b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java @@ -31,7 +31,7 @@ public BaseResponse> getHeartPosts(@RequestParam String email){ } @PatchMapping("/update-user") - public BaseResponse patchUpdatedUser(@RequestBody UserInfoDto userInfoDto,@RequestParam String email){ + public BaseResponse updatedUser(@RequestBody UserInfoDto userInfoDto,@RequestParam String email){ try { var updatedUser = myPageService.updateUser(userInfoDto, email); return new BaseResponse<>(updatedUser); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/HeartEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/HeartEntity.java index 3294ab3..9116894 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/HeartEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/HeartEntity.java @@ -10,7 +10,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -//@Data +@Data @Entity @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. @EqualsAndHashCode(callSuper = true) // 부모클래스의 equalsAndHashCode 불러오는 어노테이션. @@ -30,6 +30,7 @@ public class HeartEntity extends BaseTimeEntity { @ToString.Exclude private PostEntity postEntity; + public HeartDto toDto(){ HeartDto heartDto = HeartDto.builder() .heartId(heartId) diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 718266a..69cfb07 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -14,7 +14,7 @@ @NoArgsConstructor @Builder @Entity -@Getter +@Data @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. @EqualsAndHashCode(callSuper = true) // 부모클래스의 equalsAndHashCode 불러오는 어노테이션. public class PostEntity extends BaseTimeEntity { @@ -104,7 +104,6 @@ public PostDto toDto(){ .categoryDto(categoryEntity.toDto()) .build(); return postDto; - } } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java index 31d306e..f44c1c8 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java @@ -8,6 +8,7 @@ import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; +import javax.annotation.Nullable; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @@ -70,24 +71,6 @@ public class UserEntity extends BaseTimeEntity { @Enumerated(EnumType.STRING) private UserRole role; - /* - public static UserEntity createUser(UserDto userDto) { - UserEntity userEntity = new UserEntity(); - userEntity.setId(userEntity.getId()); - userEntity.setName(userEntity.getName()); - userEntity.setNickName(userEntity.getNickName()); - userEntity.setEmail(userEntity.getEmail()); - userEntity.setPhone(userEntity.getPhone()); - userEntity.setBirth(userEntity.getBirth()); - userEntity.setProfileImg(userEntity.getProfileImg()); - userEntity.setUserStatus(userEntity.getUserStatus()); - userEntity.setUserScore(userEntity.getUserScore()); - userEntity.setArea(userEntity.getArea()); - //String password = passwordEncoder.encode(memberDto.getPassword()); - //userEntity.setPassword(passwordEncoder.encode(memberDto.getPassword())); - return userEntity; - }*/ - public void status(String status){ this.userStatus = status; @@ -103,6 +86,7 @@ public UserInfoDto toDto(){ .profileImg(profileImg) .university(university) .userStatus(userStatus) + .userScore(userScore) .role(role) .build(); return userInfoDto; @@ -115,5 +99,20 @@ public boolean isPresent(){ return false; } + public void update(UserInfoDto userInfoDto){ + this.password = userInfoDto.getPassword(); + this.name = userInfoDto.getName(); + this.email = userInfoDto.getEmail(); + this.nickName = userInfoDto.getNickName(); + this.phone = userInfoDto.getPhone(); + this.birth = userInfoDto.getBirth(); + this.profileImg = userInfoDto.getProfileImg(); + this.university = userInfoDto.getUniversity(); + this.userStatus = userInfoDto.getUserStatus(); + this.userScore = userInfoDto.getUserScore(); + this.role = userInfoDto.getRole(); + this.postEntities = userInfoDto.toEntity().getPostEntities(); + } + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java b/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java index 393d21f..6683edd 100644 --- a/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java +++ b/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java @@ -8,6 +8,9 @@ import lombok.Data; import lombok.NoArgsConstructor; +import javax.annotation.Nullable; +import javax.persistence.Column; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -28,7 +31,7 @@ public class UserInfoDto { private int userScore; private UserRole role; - private List postDtoList; + private List postDtoList = new ArrayList<>(); public UserEntity toEntity() { UserEntity userEntity = UserEntity.builder() diff --git a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java new file mode 100644 index 0000000..21caf57 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java @@ -0,0 +1,51 @@ +package com.example.nanuer_server.service.heart; + +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.config.BaseResponseStatus; +import com.example.nanuer_server.domain.entity.HeartEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.repository.HeartRepository; +import com.example.nanuer_server.domain.repository.PostRepository; +import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.dto.heart.HeartDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +// 게시물이 삭제되면 heart도 같이 삭제 +@Service +@Transactional +@RequiredArgsConstructor +public class HeartService { + private final HeartRepository heartRepository; + + private final PostRepository postRepository; + + private final UserRepository userRepository; + + // + public HeartDto addHeart(HeartDto heartDto) throws BaseException { + + HeartEntity heartEntity = heartDto.toEntity(); + + if(heartEntity.getPostEntity().getPostStatus() == 0){ + throw new BaseException(BaseResponseStatus.POST_POST_EMPTY_POST); + } + PostEntity heartPostEntity = heartEntity.getPostEntity(); + heartPostEntity.setHeartCount(heartPostEntity.getHeartCount()+1); + heartRepository.save(heartEntity); + return heartEntity.toDto(); + } + + public void deleteHeart(int heartId) throws BaseException { + HeartEntity heartEntity = heartRepository.findById(heartId).get(); + if(heartEntity.getPostEntity().getPostStatus()==0){ + throw new BaseException(BaseResponseStatus.POST_POST_EMPTY_POST); + } + PostEntity postEntity = heartEntity.getPostEntity(); + postEntity.setHeartCount(postEntity.getHeartCount()-1); + heartRepository.delete(heartEntity); + } + +} diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index 52dc0a8..8c23184 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -28,7 +28,6 @@ public class MyPageService { private final HeartRepository heartRepository; - //Post CRUD를 postService에서 관리하고, 내가 쓴 글 조회하는 getPosts는 마이페이지에서 하는 게 낫지 않나 public List getMyPosts(String email){ List postEntityList = userRepository.findByEmail(email).get().getPostEntities(); List postDtoList = postEntityList.stream() @@ -37,7 +36,7 @@ public List getMyPosts(String email){ return postDtoList; } - // like를 어떤 식으로...? 찜한 게시물을 보여주는 건데 그러면 게시물에 + // 마이페이지에서 회원이 찜한 게시물들을 볼 수 있는 메서드 public List getHeartPosts(String email){ List heartDtoList = heartRepository .findAll(userRepository.findByEmail(email).get().getUserId()) From 47f39eed419381bc4a0446f2c8b7ad78fd7c617f Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Fri, 5 Aug 2022 22:43:09 +0900 Subject: [PATCH 06/35] Completed refactoring addHeart --- .../controller/heart/HeartController.java | 3 +- .../domain/entity/UserEntity.java | 16 ---------- .../domain/repository/UserRepository.java | 2 +- .../nanuer_server/dto/heart/AddHeartDto.java | 30 +++++++++++++++++++ .../nanuer_server/service/PostService.java | 2 +- .../service/heart/HeartService.java | 11 +++++-- 6 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java diff --git a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java index 8ed2336..bd94c81 100644 --- a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java +++ b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java @@ -2,6 +2,7 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.dto.heart.AddHeartDto; import com.example.nanuer_server.dto.heart.HeartDto; import com.example.nanuer_server.service.heart.HeartService; import lombok.RequiredArgsConstructor; @@ -18,7 +19,7 @@ public class HeartController { // 내가 찜한 게시물 조회는 마이페이지 서비스에서 구현함. @PostMapping("/add") - public BaseResponse addHeart(@RequestBody HeartDto addheartDto){ + public BaseResponse addHeart(@RequestBody AddHeartDto addheartDto){ try { HeartDto addedHeartDto = heartService.addHeart(addheartDto); return new BaseResponse<>(addedHeartDto); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java index f44c1c8..dad7a50 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java @@ -99,20 +99,4 @@ public boolean isPresent(){ return false; } - public void update(UserInfoDto userInfoDto){ - this.password = userInfoDto.getPassword(); - this.name = userInfoDto.getName(); - this.email = userInfoDto.getEmail(); - this.nickName = userInfoDto.getNickName(); - this.phone = userInfoDto.getPhone(); - this.birth = userInfoDto.getBirth(); - this.profileImg = userInfoDto.getProfileImg(); - this.university = userInfoDto.getUniversity(); - this.userStatus = userInfoDto.getUserStatus(); - this.userScore = userInfoDto.getUserScore(); - this.role = userInfoDto.getRole(); - this.postEntities = userInfoDto.toEntity().getPostEntities(); - } - - } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java index f6e8af0..14c7372 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java @@ -8,7 +8,7 @@ import java.util.Optional; -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { Optional findByUserId(int userId); Optional findByEmail(String email); Optional findByPhone(String phone); diff --git a/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java b/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java new file mode 100644 index 0000000..a3699a7 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java @@ -0,0 +1,30 @@ +package com.example.nanuer_server.dto.heart; + +import com.example.nanuer_server.domain.entity.HeartEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.dto.Post.PostDto; +import com.example.nanuer_server.dto.User.UserInfoDto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AddHeartDto { + private int userId; + private int postId; + private UserEntity userEntity; + private PostEntity postEntity; + + public HeartEntity toEntity(){ + HeartEntity heartEntity = HeartEntity.builder() + .userEntity(userEntity) + .postEntity(postEntity) + .build(); + return heartEntity; + } +} diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 1da722a..494ca4a 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -30,7 +30,7 @@ public List getPostList(int user_id, String query) throws Bas } public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { - UserEntity userEntity = userRepository.getReferenceById((long) createPostReqDto.getUserId()); + UserEntity userEntity = userRepository.getReferenceById(createPostReqDto.getUserId()); CategoryEntity categoryEntity = categoryRepository.getReferenceById(createPostReqDto.getCategoryId()); createPostReqDto.setUserEntity(userEntity); diff --git a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java index 21caf57..9117fc7 100644 --- a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java +++ b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java @@ -8,6 +8,7 @@ import com.example.nanuer_server.domain.repository.HeartRepository; import com.example.nanuer_server.domain.repository.PostRepository; import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.dto.heart.AddHeartDto; import com.example.nanuer_server.dto.heart.HeartDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -25,9 +26,15 @@ public class HeartService { private final UserRepository userRepository; // - public HeartDto addHeart(HeartDto heartDto) throws BaseException { + public HeartDto addHeart(AddHeartDto addheartDto) throws BaseException { - HeartEntity heartEntity = heartDto.toEntity(); + UserEntity userEntity = userRepository.getReferenceById(addheartDto.getUserId()); + PostEntity postEntity = postRepository.getReferenceById(addheartDto.getPostId()); + + addheartDto.setUserEntity(userEntity); + addheartDto.setPostEntity(postEntity); + + HeartEntity heartEntity = addheartDto.toEntity(); if(heartEntity.getPostEntity().getPostStatus() == 0){ throw new BaseException(BaseResponseStatus.POST_POST_EMPTY_POST); From 52d75ba5f2eaa757ef9d3e9a771fd1f540bedc22 Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Fri, 5 Aug 2022 22:58:35 +0900 Subject: [PATCH 07/35] Completed addHeart and deleteHeart --- .../example/nanuer_server/controller/heart/HeartController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java index bd94c81..c49ad33 100644 --- a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java +++ b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java @@ -18,6 +18,7 @@ public class HeartController { // 내가 찜한 게시물 조회는 마이페이지 서비스에서 구현함. + //AddHeartDto 요청할 때 "userId"와 "postId"만 json으로 넘기면 됨 @PostMapping("/add") public BaseResponse addHeart(@RequestBody AddHeartDto addheartDto){ try { From 23f1b4c47def3c86644a1fce5ce213ceb3436d09 Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Sat, 6 Aug 2022 16:33:05 +0900 Subject: [PATCH 08/35] =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=ED=95=A0=20=EB=95=8C=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=EB=8F=84=20?= =?UTF-8?q?=EA=B0=99=EC=9D=B4=20=EC=82=AD=EC=A0=9C=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/nanuer_server/domain/entity/PostEntity.java | 1 + .../example/nanuer_server/dto/Post/CreatePostReqDto.java | 4 ---- .../example/nanuer_server/service/User/UserService.java | 7 ++++++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 69cfb07..9dedcb9 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -4,6 +4,7 @@ import com.example.nanuer_server.domain.Progress; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.Post.UpdatePostReqDto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; diff --git a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java index 7d9a7d2..d46d420 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java @@ -15,22 +15,18 @@ public class CreatePostReqDto { private String title; private String content; - @JsonProperty("cost_info") private String costInfo; private String menu; private int total; - @JsonProperty("delivery_cost") private String deliveryCost; private String location; private String time; private UserEntity userEntity; private CategoryEntity categoryEntity; - @JsonProperty("user_id") private int userId; - @JsonProperty("category_id") private int categoryId; private Progress progress; diff --git a/src/main/java/com/example/nanuer_server/service/User/UserService.java b/src/main/java/com/example/nanuer_server/service/User/UserService.java index 7322201..7ab9a2e 100644 --- a/src/main/java/com/example/nanuer_server/service/User/UserService.java +++ b/src/main/java/com/example/nanuer_server/service/User/UserService.java @@ -2,7 +2,10 @@ import com.example.nanuer_server.config.BaseException; import static com.example.nanuer_server.config.BaseResponseStatus.*; + +import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.repository.PostRepository; import com.example.nanuer_server.domain.repository.UserRepository; import com.example.nanuer_server.dto.User.JoinUserDto; import com.example.nanuer_server.dto.User.LoginUserDto; @@ -16,6 +19,7 @@ import java.util.Objects; import java.util.Optional; +import java.util.stream.Collectors; @Slf4j @Transactional @@ -25,6 +29,7 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; + private final PostRepository postRepository; //회원가입 @@ -60,8 +65,8 @@ public void delete(String email) throws BaseException { if(!userEntity.isPresent()) { throw new BaseException(USERS_EMPTY_USER_EMAIL); } + userEntity.get().getPostEntities().forEach(postEntity -> postEntity.delete()); userRepository.delete(userEntity.get()); - } //비활성화, 활성화 From 718cb0cbbe83cb0a4fc6debf2a5c6c34de0f326e Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Sat, 6 Aug 2022 18:17:09 +0900 Subject: [PATCH 09/35] =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=EC=8B=9C=EC=97=90,=20=ED=95=B4=EB=8B=B9=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=EC=9D=98=20=ED=8F=AC=EC=8A=A4=ED=8A=B8=EB=93=A4=EA=B3=BC=20?= =?UTF-8?q?=ED=95=B4=EB=8B=B9=20=ED=8F=AC=EC=8A=A4=ED=8A=B8=EB=93=A4?= =?UTF-8?q?=EC=97=90=20=EA=B1=B8=EB=A0=A4=EC=9E=88=EB=8A=94=20=EC=B0=9C?= =?UTF-8?q?=EB=93=A4=20=EB=AA=A8=EB=91=90=20=EC=82=AD=EC=A0=9C,=20?= =?UTF-8?q?=ED=8F=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C?= =?UTF-8?q?=EC=97=90=20=ED=95=B4=EB=8B=B9=20=ED=8F=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=97=90=20=EA=B1=B8=EB=A0=A4=EC=9E=88=EB=8A=94=20=EC=B0=9C?= =?UTF-8?q?=EB=93=A4=20=EB=AA=A8=EB=91=90=20=EC=82=AD=EC=A0=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/nanuer_server/config/BaseResponseStatus.java | 1 + .../example/nanuer_server/domain/entity/PostEntity.java | 6 ++++++ .../nanuer_server/domain/repository/HeartRepository.java | 3 +++ .../nanuer_server/domain/repository/PostRepository.java | 2 ++ .../com/example/nanuer_server/service/PostService.java | 8 +++++++- .../example/nanuer_server/service/User/UserService.java | 7 +++++-- .../example/nanuer_server/service/heart/HeartService.java | 6 +++--- 7 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java index 3fcfc31..b803fce 100644 --- a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java +++ b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java @@ -24,6 +24,7 @@ public enum BaseResponseStatus { // users USERS_EMPTY_USER_EMAIL(false, 2010, "유저 이메일 값을 확인해주세요."), + USER_USER_EMPTY_USER(false, 2011, "존재하지 않는 유저입니다."), // [POST] /post POST_USERS_EMPTY_EMAIL(false, 2015, "아이디를 입력해주세요."), diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 9dedcb9..aa39d8b 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -7,6 +7,8 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; import javax.persistence.*; @@ -56,6 +58,10 @@ public class PostEntity extends BaseTimeEntity { @JsonProperty("post_status") private int postStatus; + // userEntity를 삭제하면, 해당 유저가 작성한 postStatus값이 0으로 바뀌게 하는데, 이때 post가 완전히 삭제된 것이 아니라, + // 이미 삭제된 userId값이 postEntity에 남아있게 되고, postEntity를 조회할 때, 해당 userId값을 가진 userEntity를 찾을 수 없다는 + // 에러가 발생한다. 이를 해결하기 위해 붙인 것이 @NotFound(action = NotFoundAction.IGNORE) + @NotFound(action = NotFoundAction.IGNORE) @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id") @ToString.Exclude diff --git a/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java index ba379f6..63a70fc 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java @@ -10,4 +10,7 @@ public interface HeartRepository extends JpaRepository { @Query("select l from HeartEntity l join fetch l.userEntity where l.userEntity.userId = :userId") List findAll(@Param("userId")int userId); + + @Query("select h from HeartEntity h join fetch h.postEntity where h.postEntity.postId = :postId") + List findByPostId(@Param("postId") int postId); } diff --git a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 76ee0d8..7f67347 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java @@ -11,4 +11,6 @@ public interface PostRepository extends JpaRepository { @Query(value = "select p from PostEntity p " + "join fetch p.userEntity where p.userEntity.userId = :user_id and p.postStatus = :post_status and (p.title like %:query% or p.content like %:query%)") List findAll(@Param("user_id") int user_id, @Param("post_status") int status, @Param("query") String query); + @Query("select p from PostEntity p where p.postId = :postId") + PostEntity findByPostId(@Param("postId") int postId); } diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 494ca4a..71f5904 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -2,10 +2,12 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.domain.entity.CategoryEntity; +import com.example.nanuer_server.domain.entity.HeartEntity; import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; import com.example.nanuer_server.domain.repository.*; import com.example.nanuer_server.dto.Post.*; +import com.example.nanuer_server.service.heart.HeartService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -19,6 +21,8 @@ public class PostService { private final PostRepository postRepository; private final UserRepository userRepository; private final CategoryRepository categoryRepository; + private final HeartRepository heartRepository; + private final HeartService heartService; public List getPostList(int user_id, String query) throws BaseException { List posts = new ArrayList<>(); @@ -63,8 +67,10 @@ public int updatePost(int post_id, UpdatePostReqDto updatePostReqDto) throws Bas public int deletePost(int post_id) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. post_id = " + post_id)); + for(HeartEntity heartEntity : heartRepository.findByPostId(postEntity.getPostId())){ + heartService.deleteHeart(heartEntity.getHeartId()); + } postEntity.delete(); - return post_id; } } diff --git a/src/main/java/com/example/nanuer_server/service/User/UserService.java b/src/main/java/com/example/nanuer_server/service/User/UserService.java index 7ab9a2e..14fa868 100644 --- a/src/main/java/com/example/nanuer_server/service/User/UserService.java +++ b/src/main/java/com/example/nanuer_server/service/User/UserService.java @@ -10,6 +10,7 @@ import com.example.nanuer_server.dto.User.JoinUserDto; import com.example.nanuer_server.dto.User.LoginUserDto; import com.example.nanuer_server.dto.User.UserInfoDto; +import com.example.nanuer_server.service.PostService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; @@ -29,7 +30,7 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; - private final PostRepository postRepository; + private final PostService postService; //회원가입 @@ -65,7 +66,9 @@ public void delete(String email) throws BaseException { if(!userEntity.isPresent()) { throw new BaseException(USERS_EMPTY_USER_EMAIL); } - userEntity.get().getPostEntities().forEach(postEntity -> postEntity.delete()); + for(PostEntity postEntity : userEntity.get().getPostEntities()){ + postService.deletePost(postEntity.getPostId()); + } userRepository.delete(userEntity.get()); } diff --git a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java index 9117fc7..ffef17e 100644 --- a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java +++ b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java @@ -27,6 +27,9 @@ public class HeartService { // public HeartDto addHeart(AddHeartDto addheartDto) throws BaseException { + if(postRepository.findByPostId(addheartDto.getPostId()).getPostStatus() ==0){ + throw new BaseException(BaseResponseStatus.USER_USER_EMPTY_USER); + } UserEntity userEntity = userRepository.getReferenceById(addheartDto.getUserId()); PostEntity postEntity = postRepository.getReferenceById(addheartDto.getPostId()); @@ -36,9 +39,6 @@ public HeartDto addHeart(AddHeartDto addheartDto) throws BaseException { HeartEntity heartEntity = addheartDto.toEntity(); - if(heartEntity.getPostEntity().getPostStatus() == 0){ - throw new BaseException(BaseResponseStatus.POST_POST_EMPTY_POST); - } PostEntity heartPostEntity = heartEntity.getPostEntity(); heartPostEntity.setHeartCount(heartPostEntity.getHeartCount()+1); heartRepository.save(heartEntity); From e87f93c1f02b0cc35fed8a12a6521ca7a04d59a4 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Sun, 7 Aug 2022 18:24:13 +0900 Subject: [PATCH 10/35] fix : get post list --- build.gradle | 6 +++ .../controller/User/MessageController.java | 34 ++++++++++++ .../domain/entity/UserEntity.java | 29 +++-------- .../domain/repository/PostRepository.java | 10 ++-- .../domain/repository/UserRepository.java | 2 +- .../nanuer_server/service/PostService.java | 4 +- .../service/User/MessageService.java | 52 +++++++++++++++++++ .../service/mypage/MyPageService.java | 2 +- 8 files changed, 110 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/controller/User/MessageController.java create mode 100644 src/main/java/com/example/nanuer_server/service/User/MessageService.java diff --git a/build.gradle b/build.gradle index cad1769..6c943f1 100644 --- a/build.gradle +++ b/build.gradle @@ -57,6 +57,12 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation group: 'org.webjars', name: 'stomp-websocket', version: '2.3.3-1' +//문자인증 + implementation group: 'net.nurigo', name: 'javaSDK', version: '2.2' + + //이메일 보내기 + implementation 'org.springframework.boot:spring-boot-starter-mail' + } tasks.named('test') { diff --git a/src/main/java/com/example/nanuer_server/controller/User/MessageController.java b/src/main/java/com/example/nanuer_server/controller/User/MessageController.java new file mode 100644 index 0000000..1d8e098 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/User/MessageController.java @@ -0,0 +1,34 @@ +package com.example.nanuer_server.controller.User; + +import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.service.User.MessageService; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.bind.annotation.*; + +import java.util.Random; + +@Log4j2 +@RequestMapping("/message") +@RequiredArgsConstructor +@RestController +public class MessageController { + + private final MessageService messageService; + + @GetMapping("/send") + public @ResponseBody + BaseResponse sendSMS(String phone) { + Random rand = new Random(); + String numStr = ""; + for(int i=0; i<5; i++) { + String ran = Integer.toString(rand.nextInt(10)); + numStr+=ran; + } + + System.out.println("수신자 번호 : " + phone); + System.out.println("인증번호 : " + numStr); + messageService.sendSMS(phone,numStr); + return new BaseResponse<>(numStr); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java index 31d306e..b90b1d9 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java @@ -13,7 +13,7 @@ import java.util.List; import java.util.stream.Collectors; -@Table(name="user") +@Table(name = "user") @AllArgsConstructor @NoArgsConstructor @Builder @@ -38,29 +38,31 @@ public class UserEntity extends BaseTimeEntity { @Column(nullable = false) private String password; - @Column(name= "nick_name" ,nullable = false) private String nickName; @Column(nullable = false) private String phone; - @Column(nullable = false) private String birth; @Column(name = "profile_img") private String profileImg; - @Column(nullable = false) private String university; @Column(nullable = false) private String userStatus; - @ColumnDefault("0") + @Column(name = "user_score") private int userScore; //@Column(s) not allowed on a @OneToOne property 발생 //@Column(name = "my_page_entity") + /* + @JoinColumn(name="my_page_id") + @OneToOne + @ToString.Exclude // 순환참조 방지 + private MyPageEntity myPageEntity;*/ //mapped 이름 수정 @JsonIgnore @@ -70,23 +72,6 @@ public class UserEntity extends BaseTimeEntity { @Enumerated(EnumType.STRING) private UserRole role; - /* - public static UserEntity createUser(UserDto userDto) { - UserEntity userEntity = new UserEntity(); - userEntity.setId(userEntity.getId()); - userEntity.setName(userEntity.getName()); - userEntity.setNickName(userEntity.getNickName()); - userEntity.setEmail(userEntity.getEmail()); - userEntity.setPhone(userEntity.getPhone()); - userEntity.setBirth(userEntity.getBirth()); - userEntity.setProfileImg(userEntity.getProfileImg()); - userEntity.setUserStatus(userEntity.getUserStatus()); - userEntity.setUserScore(userEntity.getUserScore()); - userEntity.setArea(userEntity.getArea()); - //String password = passwordEncoder.encode(memberDto.getPassword()); - //userEntity.setPassword(passwordEncoder.encode(memberDto.getPassword())); - return userEntity; - }*/ public void status(String status){ this.userStatus = status; diff --git a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 76ee0d8..4f57dd0 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java @@ -8,7 +8,11 @@ import java.util.List; public interface PostRepository extends JpaRepository { - @Query(value = "select p from PostEntity p " + - "join fetch p.userEntity where p.userEntity.userId = :user_id and p.postStatus = :post_status and (p.title like %:query% or p.content like %:query%)") - List findAll(@Param("user_id") int user_id, @Param("post_status") int status, @Param("query") String query); + @Query(value = "select p " + + "from PostEntity p " + + "left join UserEntity u on p.userEntity.userId = u.userId " + + "where u.university = (" + + "select u.university from u where u.userId = :user_id) " + + "and p.postStatus = 1 and (p.title like %:query% or p.content like %:query%)") + List findAll(@Param("user_id") int user_id, @Param("query") String query); } diff --git a/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java index f6e8af0..14c7372 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java @@ -8,7 +8,7 @@ import java.util.Optional; -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { Optional findByUserId(int userId); Optional findByEmail(String email); Optional findByPhone(String phone); diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 1da722a..4ec18b7 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -23,14 +23,14 @@ public class PostService { public List getPostList(int user_id, String query) throws BaseException { List posts = new ArrayList<>(); - List entities = postRepository.findAll(user_id, 1, query); + List entities = postRepository.findAll(user_id, query); for (PostEntity entity : entities) posts.add(new GetPostListResDto(entity)); return posts; } public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { - UserEntity userEntity = userRepository.getReferenceById((long) createPostReqDto.getUserId()); + UserEntity userEntity = userRepository.getReferenceById(createPostReqDto.getUserId()); CategoryEntity categoryEntity = categoryRepository.getReferenceById(createPostReqDto.getCategoryId()); createPostReqDto.setUserEntity(userEntity); diff --git a/src/main/java/com/example/nanuer_server/service/User/MessageService.java b/src/main/java/com/example/nanuer_server/service/User/MessageService.java new file mode 100644 index 0000000..7cb2408 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/User/MessageService.java @@ -0,0 +1,52 @@ +package com.example.nanuer_server.service.User; + + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import net.nurigo.java_sdk.api.Message; +import net.nurigo.java_sdk.exceptions.CoolsmsException; +import org.json.simple.JSONObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; + +@Slf4j +@Transactional +@Service +@RequiredArgsConstructor +public class MessageService { + + @Value("${coolsms.devHee.apikey}") + private String apiKey; + + @Value("${coolsms.devHee.apisecret}") + private String apiSecret; + + @Value("${coolsms.devHee.fromnumber}") + private String fromNumber; + + public void sendSMS(String phone, String cerNum) { + Message coolsms = new Message(apiKey, apiSecret); + + // 4 params(to, from, type, text) are mandatory. must be filled + HashMap params = new HashMap(); + params.put("to", phone); // 수신전화번호 + params.put("from", fromNumber); // 발신전화번호. 테스트시에는 발신,수신 둘다 본인 번호로 하면 됨 + params.put("type", "SMS"); + params.put("text", "나누어 휴대폰인증 테스트 메시지 : 인증번호는" + "["+cerNum+"]" + "입니다."); + params.put("app_version", "test app 1.2"); // application name and version + + try { + JSONObject obj = (JSONObject) coolsms.send(params); + System.out.println(obj.toString()); + } catch (CoolsmsException e) { + System.out.println(e.getMessage()); + System.out.println(e.getCode()); + } + + + } + +} diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index 52dc0a8..766d682 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -90,4 +90,4 @@ private UserEntity updateUserUsingUserInfoDto(UserEntity userEntity, UserInfoDto userEntity.setUserStatus(userInfoDto.getUserStatus()); userEntity.setUserScore(userInfoDto.getUserScore()); userEntity.setRole(userInfoDto.getRole()); - userEntity.setPostEntities(userInfoDto.toEntity().getPostEntities());*/ + userEntity.setPostEntities(userInfoDto.toEntity().getPostEntities());*/ \ No newline at end of file From 558e1aaee603ba6fed78e729721a1670bc0375f1 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Mon, 8 Aug 2022 18:43:28 +0900 Subject: [PATCH 11/35] feature : get all posts --- .../nanuer_server/controller/PostController.java | 11 +++++++++++ .../controller/User/MessageController.java | 2 +- .../example/nanuer_server/service/PostService.java | 4 ++++ .../nanuer_server/service/message/MessageService.java | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/nanuer_server/controller/PostController.java b/src/main/java/com/example/nanuer_server/controller/PostController.java index 39fa0e7..06432a2 100644 --- a/src/main/java/com/example/nanuer_server/controller/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/PostController.java @@ -2,9 +2,11 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.dto.Post.*; import com.example.nanuer_server.service.PostService; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.ser.Serializers; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +30,15 @@ public String testPostController() { return "success"; } + @GetMapping("/all") + public BaseResponse> getAllPosts() { + try { + return new BaseResponse<>(postService.getAllPosts()); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + /* 게시물 리스트 조회 */ @GetMapping("") @JsonIgnore diff --git a/src/main/java/com/example/nanuer_server/controller/User/MessageController.java b/src/main/java/com/example/nanuer_server/controller/User/MessageController.java index 1d8e098..c90c67a 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/MessageController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/MessageController.java @@ -18,7 +18,7 @@ public class MessageController { @GetMapping("/send") public @ResponseBody - BaseResponse sendSMS(String phone) { + BaseResponse sendSMS(@RequestParam String phone) { Random rand = new Random(); String numStr = ""; for(int i=0; i<5; i++) { diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 4ec18b7..89b938e 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -20,6 +20,10 @@ public class PostService { private final UserRepository userRepository; private final CategoryRepository categoryRepository; + public List getAllPosts() throws BaseException { + return postRepository.findAll(); + } + public List getPostList(int user_id, String query) throws BaseException { List posts = new ArrayList<>(); diff --git a/src/main/java/com/example/nanuer_server/service/message/MessageService.java b/src/main/java/com/example/nanuer_server/service/message/MessageService.java index 1e9279e..1e3f681 100644 --- a/src/main/java/com/example/nanuer_server/service/message/MessageService.java +++ b/src/main/java/com/example/nanuer_server/service/message/MessageService.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestParam; import java.util.HashMap; From e7981b94fa97eee32e5f6dd101026d80debbe4b4 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Mon, 8 Aug 2022 18:55:31 +0900 Subject: [PATCH 12/35] fix error from message --- .../controller/{ => Post}/PostController.java | 2 +- .../controller/User/MessageController.java | 34 ------------ .../controller/message/MessageController.java | 6 +-- .../service/User/MessageService.java | 52 ------------------- 4 files changed, 4 insertions(+), 90 deletions(-) rename src/main/java/com/example/nanuer_server/controller/{ => Post}/PostController.java (98%) delete mode 100644 src/main/java/com/example/nanuer_server/controller/User/MessageController.java delete mode 100644 src/main/java/com/example/nanuer_server/service/User/MessageService.java diff --git a/src/main/java/com/example/nanuer_server/controller/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java similarity index 98% rename from src/main/java/com/example/nanuer_server/controller/PostController.java rename to src/main/java/com/example/nanuer_server/controller/Post/PostController.java index 06432a2..b5b649a 100644 --- a/src/main/java/com/example/nanuer_server/controller/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -1,4 +1,4 @@ -package com.example.nanuer_server.controller; +package com.example.nanuer_server.controller.Post; import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; diff --git a/src/main/java/com/example/nanuer_server/controller/User/MessageController.java b/src/main/java/com/example/nanuer_server/controller/User/MessageController.java deleted file mode 100644 index c90c67a..0000000 --- a/src/main/java/com/example/nanuer_server/controller/User/MessageController.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.example.nanuer_server.controller.User; - -import com.example.nanuer_server.config.BaseResponse; -import com.example.nanuer_server.service.User.MessageService; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.springframework.web.bind.annotation.*; - -import java.util.Random; - -@Log4j2 -@RequestMapping("/message") -@RequiredArgsConstructor -@RestController -public class MessageController { - - private final MessageService messageService; - - @GetMapping("/send") - public @ResponseBody - BaseResponse sendSMS(@RequestParam String phone) { - Random rand = new Random(); - String numStr = ""; - for(int i=0; i<5; i++) { - String ran = Integer.toString(rand.nextInt(10)); - numStr+=ran; - } - - System.out.println("수신자 번호 : " + phone); - System.out.println("인증번호 : " + numStr); - messageService.sendSMS(phone,numStr); - return new BaseResponse<>(numStr); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/controller/message/MessageController.java b/src/main/java/com/example/nanuer_server/controller/message/MessageController.java index 6880120..b14119b 100644 --- a/src/main/java/com/example/nanuer_server/controller/message/MessageController.java +++ b/src/main/java/com/example/nanuer_server/controller/message/MessageController.java @@ -17,13 +17,13 @@ public class MessageController { private final MessageService messageService; @GetMapping("/send") - public @ResponseBody - BaseResponse sendSMS(String phone) { + @ResponseBody + public BaseResponse sendSMS(String phone) { Random rand = new Random(); String numStr = ""; for(int i=0; i<5; i++) { String ran = Integer.toString(rand.nextInt(10)); - numStr+=ran; + numStr += ran; } System.out.println("수신자 번호 : " + phone); diff --git a/src/main/java/com/example/nanuer_server/service/User/MessageService.java b/src/main/java/com/example/nanuer_server/service/User/MessageService.java deleted file mode 100644 index 7cb2408..0000000 --- a/src/main/java/com/example/nanuer_server/service/User/MessageService.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.example.nanuer_server.service.User; - - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import net.nurigo.java_sdk.api.Message; -import net.nurigo.java_sdk.exceptions.CoolsmsException; -import org.json.simple.JSONObject; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; - -@Slf4j -@Transactional -@Service -@RequiredArgsConstructor -public class MessageService { - - @Value("${coolsms.devHee.apikey}") - private String apiKey; - - @Value("${coolsms.devHee.apisecret}") - private String apiSecret; - - @Value("${coolsms.devHee.fromnumber}") - private String fromNumber; - - public void sendSMS(String phone, String cerNum) { - Message coolsms = new Message(apiKey, apiSecret); - - // 4 params(to, from, type, text) are mandatory. must be filled - HashMap params = new HashMap(); - params.put("to", phone); // 수신전화번호 - params.put("from", fromNumber); // 발신전화번호. 테스트시에는 발신,수신 둘다 본인 번호로 하면 됨 - params.put("type", "SMS"); - params.put("text", "나누어 휴대폰인증 테스트 메시지 : 인증번호는" + "["+cerNum+"]" + "입니다."); - params.put("app_version", "test app 1.2"); // application name and version - - try { - JSONObject obj = (JSONObject) coolsms.send(params); - System.out.println(obj.toString()); - } catch (CoolsmsException e) { - System.out.println(e.getMessage()); - System.out.println(e.getCode()); - } - - - } - -} From c19e6ba71d0f635365b112f401bc739f4b41a9f2 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Tue, 9 Aug 2022 16:22:09 +0900 Subject: [PATCH 13/35] fix : get post list(return style) --- build.gradle | 22 +++----- .../config/Chat/WebSocketConfig.java | 4 +- .../controller/Post/PostController.java | 16 ++++-- src/main/resources/static/app.js | 50 +++++++++++++++++++ src/main/resources/templates/chat.html | 1 + src/main/resources/templates/room.html | 1 + src/main/resources/templates/rooms.html | 1 + 7 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 src/main/resources/static/app.js diff --git a/build.gradle b/build.gradle index 6c943f1..a19d4bd 100644 --- a/build.gradle +++ b/build.gradle @@ -45,24 +45,14 @@ dependencies { //이메일 보내기 implementation 'org.springframework.boot:spring-boot-starter-mail' - -//문자인증 - implementation group: 'net.nurigo', name: 'javaSDK', version: '2.2' - - //이메일 보내기 - implementation 'org.springframework.boot:spring-boot-starter-mail' - - + // 채팅 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-websocket' - implementation group: 'org.webjars', name: 'stomp-websocket', version: '2.3.3-1' - -//문자인증 - implementation group: 'net.nurigo', name: 'javaSDK', version: '2.2' - - //이메일 보내기 - implementation 'org.springframework.boot:spring-boot-starter-mail' - + implementation 'org.webjars:webjars-locator-core' + implementation 'org.webjars:sockjs-client:1.0.2' + implementation 'org.webjars:stomp-websocket:2.3.3' + implementation 'org.webjars:bootstrap:3.3.7' + implementation 'org.webjars:jquery:3.1.1-1' } tasks.named('test') { diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index c882dd1..28df9dd 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -13,13 +13,13 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/example").withSockJS(); + registry.addEndpoint("/nanuer-chat").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry config) { - config.setApplicationDestinationPrefixes("/test"); + config.setApplicationDestinationPrefixes("/app"); config.enableSimpleBroker("/topic", "/queue"); } } diff --git a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java index b5b649a..291062b 100644 --- a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -12,7 +12,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.example.nanuer_server.config.BaseResponseStatus.*; @@ -31,9 +33,12 @@ public String testPostController() { } @GetMapping("/all") - public BaseResponse> getAllPosts() { + public BaseResponse>> getAllPosts() { try { - return new BaseResponse<>(postService.getAllPosts()); + Map> response = new HashMap>(); + response.put("postList", postService.getAllPosts()); + + return new BaseResponse<>(response); } catch (BaseException exception) { return new BaseResponse<>(exception.getStatus()); } @@ -42,10 +47,13 @@ public BaseResponse> getAllPosts() { /* 게시물 리스트 조회 */ @GetMapping("") @JsonIgnore - public BaseResponse> getPostList(@RequestParam int user_id, @RequestParam String query) { + public BaseResponse>> getPostList(@RequestParam int user_id, @RequestParam String query) { try { + Map> response = new HashMap>(); List posts = postService.getPostList(user_id, query); - return new BaseResponse<>(posts); + response.put("postList", posts); + + return new BaseResponse<>(response); } catch (BaseException exception) { return new BaseResponse<>(exception.getStatus()); } diff --git a/src/main/resources/static/app.js b/src/main/resources/static/app.js new file mode 100644 index 0000000..5ad2aaf --- /dev/null +++ b/src/main/resources/static/app.js @@ -0,0 +1,50 @@ +var stompClient = null; + +function setConnected(connected) { + $("#connect").prop("disabled", connected); + $("#disconnect").prop("disabled", !connected); + if (connected) { + $("#conversation").show(); + } + else { + $("#conversation").hide(); + } + $("#greetings").html(""); +} + +function connect() { + var socket = new SockJS('/nanuer-chat'); + stompClient = Stomp.over(socket); + stompClient.connect({}, function (frame) { + setConnected(true); + console.log('Connected: ' + frame); + stompClient.subscribe('/topic/greetings', function (greeting) { + showGreeting(JSON.parse(greeting.body).content); + }); + }); +} + +function disconnect() { + if (stompClient !== null) { + stompClient.disconnect(); + } + setConnected(false); + console.log("Disconnected"); +} + +function sendName() { + stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()})); +} + +function showGreeting(message) { + $("#greetings").append("" + message + ""); +} + +$(function () { + $("form").on('submit', function (e) { + e.preventDefault(); + }); + $( "#connect" ).click(function() { connect(); }); + $( "#disconnect" ).click(function() { disconnect(); }); + $( "#send" ).click(function() { sendName(); }); +}); \ No newline at end of file diff --git a/src/main/resources/templates/chat.html b/src/main/resources/templates/chat.html index 65d7e9c..3bce385 100644 --- a/src/main/resources/templates/chat.html +++ b/src/main/resources/templates/chat.html @@ -1,5 +1,6 @@ + diff --git a/src/main/resources/templates/room.html b/src/main/resources/templates/room.html index 61b99b7..911778d 100644 --- a/src/main/resources/templates/room.html +++ b/src/main/resources/templates/room.html @@ -1,5 +1,6 @@ + diff --git a/src/main/resources/templates/rooms.html b/src/main/resources/templates/rooms.html index 2a761fc..ee19a79 100644 --- a/src/main/resources/templates/rooms.html +++ b/src/main/resources/templates/rooms.html @@ -1,5 +1,6 @@ + From 37bfd4ba653c822e93bd2da6c8155c10ab6f04dc Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Fri, 12 Aug 2022 23:12:45 +0900 Subject: [PATCH 14/35] =?UTF-8?q?fix=20:=20=ED=95=99=EA=B5=90=EB=B3=84=20?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 6 +- .../NanuerServerApplication.java | 1 - .../config/Chat/StompWebSocketConfig.java | 30 ----- .../config/Chat/WebSocketConfig.java | 25 ---- .../config/User/SecurityConfig.java | 2 +- .../controller/Chat/RoomController.java | 49 -------- .../controller/Chat/StompChatController.java | 28 ----- .../controller/Post/PostController.java | 6 +- .../repository/Chat/ChatRoomRepository.java | 37 ------ .../domain/repository/PostRepository.java | 5 +- .../dto/Chat/ChatMessageDto.java | 12 -- .../nanuer_server/dto/Chat/ChatRoomDto.java | 29 ----- .../nanuer_server/service/PostService.java | 11 +- src/main/resources/static/app.js | 50 -------- src/main/resources/templates/chat.html | 107 ------------------ src/main/resources/templates/index.html | 10 -- src/main/resources/templates/room.html | 88 -------------- src/main/resources/templates/rooms.html | 43 ------- 18 files changed, 16 insertions(+), 523 deletions(-) delete mode 100644 src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java delete mode 100644 src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java delete mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java delete mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java delete mode 100644 src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java delete mode 100644 src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java delete mode 100644 src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java delete mode 100644 src/main/resources/static/app.js delete mode 100644 src/main/resources/templates/chat.html delete mode 100644 src/main/resources/templates/index.html delete mode 100644 src/main/resources/templates/room.html delete mode 100644 src/main/resources/templates/rooms.html diff --git a/build.gradle b/build.gradle index a19d4bd..211caf3 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' + runtimeOnly('org.springframework.boot:spring-boot-devtools') //db implementation 'org.springframework.boot:spring-boot-starter-jdbc' @@ -46,13 +47,16 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-mail' // 채팅 - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + //implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.webjars:webjars-locator-core' implementation 'org.webjars:sockjs-client:1.0.2' implementation 'org.webjars:stomp-websocket:2.3.3' implementation 'org.webjars:bootstrap:3.3.7' implementation 'org.webjars:jquery:3.1.1-1' + + // 머스테치 + implementation 'org.springframework.boot:spring-boot-starter-mustache' } tasks.named('test') { diff --git a/src/main/java/com/example/nanuer_server/NanuerServerApplication.java b/src/main/java/com/example/nanuer_server/NanuerServerApplication.java index 39519e2..0ea2c75 100644 --- a/src/main/java/com/example/nanuer_server/NanuerServerApplication.java +++ b/src/main/java/com/example/nanuer_server/NanuerServerApplication.java @@ -12,7 +12,6 @@ @SpringBootApplication public class NanuerServerApplication { - public static void main(String[] args) { SpringApplication.run(NanuerServerApplication.class, args); System.out.println("hello"); diff --git a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java deleted file mode 100644 index ba2b4b0..0000000 --- a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.nanuer_server.config.Chat; - -import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; - -@EnableWebSocketMessageBroker -@Configuration -public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { - - //endpoint를 /stomp로 하고, allowedOrigins를 "*"로 하면 페이지에서 - //Get /info 404 Error가 발생한다. 그래서 아래와 같이 2개의 계층으로 분리하고 - //origins를 개발 도메인으로 변경하니 잘 동작하였다. - //이유는 왜 그런지 아직 찾지 못함 - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/stomp/chat") - .setAllowedOrigins("http://localhost:8080") - .withSockJS(); - } - - /*어플리케이션 내부에서 사용할 path를 지정할 수 있음*/ - @Override - public void configureMessageBroker(MessageBrokerRegistry registry) { - registry.setApplicationDestinationPrefixes("/pub"); - registry.enableSimpleBroker("/sub"); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java deleted file mode 100644 index 28df9dd..0000000 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.example.nanuer_server.config.Chat; - -import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; - -@Configuration -@EnableWebSocketMessageBroker -public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { - - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - - registry.addEndpoint("/nanuer-chat").withSockJS(); - } - - @Override - public void configureMessageBroker(MessageBrokerRegistry config) { - - config.setApplicationDestinationPrefixes("/app"); - config.enableSimpleBroker("/topic", "/queue"); - } -} diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index 7e648d1..da195b0 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -52,7 +52,7 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() - .antMatchers( "/", "/user/**", "/css/**", "/api/mypage/**", "/exception/**", "/favicon.ico", "/post/**", "/chat/**", "/ws/**").permitAll() + .antMatchers( "/", "/user/**", "/css/**", "/api/mypage/**", "/exception/**", "/favicon.ico", "/post/**", "/chat/**", "/ws/**", "/stomp-chat/**").permitAll() .anyRequest().authenticated(); //JwtFilter 추가 diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java deleted file mode 100644 index 2625087..0000000 --- a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.example.nanuer_server.controller.Chat; - -import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -@Controller -@RequiredArgsConstructor -@RestController(value = "/chat") -@Log4j2 -public class RoomController { - - private final ChatRoomRepository repository; - - //채팅방 목록 조회 - @GetMapping(value = "/rooms") - public ModelAndView rooms() { - - log.info("# All Chat Rooms"); - ModelAndView mv = new ModelAndView("rooms"); - - mv.addObject("list", repository.findAllRooms()); - - return mv; - } - - //채팅방 개설 - @PostMapping(value = "/room") - public String create(@RequestParam String name, RedirectAttributes rttr){ - - log.info("# Create Chat Room , name: " + name); - rttr.addFlashAttribute("roomName", repository.createChatRoomDTO(name)); - return "redirect:/rooms"; - } - - //채팅방 조회 - @GetMapping("/room") - public void getRoom(String roomId, Model model){ - - log.info("# get Chat Room, roomID : " + roomId); - - model.addAttribute("room", repository.findRoomById(roomId)); - } -} diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java deleted file mode 100644 index 1233b6e..0000000 --- a/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.nanuer_server.controller.Chat; - -import com.example.nanuer_server.dto.Chat.ChatMessageDto; -import lombok.RequiredArgsConstructor; -import org.springframework.messaging.handler.annotation.MessageMapping; -import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.stereotype.Controller; - -@Controller -@RequiredArgsConstructor -public class StompChatController { - - private final SimpMessagingTemplate template; //특정 Broker로 메세지를 전달 - - //Client가 SEND할 수 있는 경로 - //stompConfig에서 설정한 applicationDestinationPrefixes와 @MessageMapping 경로가 병합됨 - //"/pub/chat/enter" - @MessageMapping(value = "/chat/enter") - public void enter(ChatMessageDto message){ - message.setMessage(message.getWriter() + "님이 채팅방에 참여하였습니다."); - template.convertAndSend("/sub/chat/room/" + message.getRoomId(), message); - } - - @MessageMapping(value = "/chat/message") - public void message(ChatMessageDto message){ - template.convertAndSend("/sub/chat/room/" + message.getRoomId(), message); - } -} diff --git a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java index 291062b..574a709 100644 --- a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -47,10 +47,10 @@ public BaseResponse>> getAllPosts() { /* 게시물 리스트 조회 */ @GetMapping("") @JsonIgnore - public BaseResponse>> getPostList(@RequestParam int user_id, @RequestParam String query) { + public BaseResponse>> getPostList(@RequestParam int user_id, @RequestParam String query) { try { - Map> response = new HashMap>(); - List posts = postService.getPostList(user_id, query); + Map> response = new HashMap>(); + List posts = postService.getPostList(user_id, query); response.put("postList", posts); return new BaseResponse<>(response); diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java deleted file mode 100644 index d53e62f..0000000 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.example.nanuer_server.domain.repository.Chat; - -import com.example.nanuer_server.dto.Chat.ChatRoomDto; -import org.springframework.stereotype.Repository; - -import javax.annotation.PostConstruct; -import java.util.*; - -@Repository -public class ChatRoomRepository { - - private Map chatRoomDTOMap; - - @PostConstruct - private void init(){ - chatRoomDTOMap = new LinkedHashMap<>(); - } - - public List findAllRooms(){ - //채팅방 생성 순서 최근 순으로 반환 - List result = new ArrayList<>(chatRoomDTOMap.values()); - Collections.reverse(result); - - return result; - } - - public ChatRoomDto findRoomById(String id){ - return chatRoomDTOMap.get(id); - } - - public ChatRoomDto createChatRoomDTO(String name){ - ChatRoomDto room = ChatRoomDto.create(name); - chatRoomDTOMap.put(room.getRoomId(), room); - - return room; - } -} diff --git a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 4f57dd0..81ea87c 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java @@ -13,6 +13,9 @@ public interface PostRepository extends JpaRepository { "left join UserEntity u on p.userEntity.userId = u.userId " + "where u.university = (" + "select u.university from u where u.userId = :user_id) " + - "and p.postStatus = 1 and (p.title like %:query% or p.content like %:query%)") + "and p.postStatus = 1 and (p.title like %:query% or p.content like %:query%) order by p.postId desc") List findAll(@Param("user_id") int user_id, @Param("query") String query); + + @Query(value = "select p from PostEntity p where p.postStatus = 1 order by p.postId desc") + List findAllOrderByPostIdDesc(); } diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java deleted file mode 100644 index d7e36b6..0000000 --- a/src/main/java/com/example/nanuer_server/dto/Chat/ChatMessageDto.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.example.nanuer_server.dto.Chat; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class ChatMessageDto { - private String roomId; - private String writer; - private String message; -} diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java deleted file mode 100644 index 770628e..0000000 --- a/src/main/java/com/example/nanuer_server/dto/Chat/ChatRoomDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.example.nanuer_server.dto.Chat; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.web.socket.WebSocketSession; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -@Getter -@Setter -public class ChatRoomDto { - - private String roomId; - private String name; - private Set sessions = new HashSet<>(); - - //WebSocketSession은 Spring에서 Websocket Connection이 맺어진 세션 - - public static ChatRoomDto create(String name){ - ChatRoomDto room = new ChatRoomDto(); - - room.roomId = UUID.randomUUID().toString(); - room.name = name; - return room; - } -} - diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 89b938e..c0aaee2 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -21,16 +21,11 @@ public class PostService { private final CategoryRepository categoryRepository; public List getAllPosts() throws BaseException { - return postRepository.findAll(); + return postRepository.findAllOrderByPostIdDesc(); } - public List getPostList(int user_id, String query) throws BaseException { - List posts = new ArrayList<>(); - - List entities = postRepository.findAll(user_id, query); - for (PostEntity entity : entities) posts.add(new GetPostListResDto(entity)); - - return posts; + public List getPostList(int user_id, String query) throws BaseException { + return postRepository.findAll(user_id, query); } public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { diff --git a/src/main/resources/static/app.js b/src/main/resources/static/app.js deleted file mode 100644 index 5ad2aaf..0000000 --- a/src/main/resources/static/app.js +++ /dev/null @@ -1,50 +0,0 @@ -var stompClient = null; - -function setConnected(connected) { - $("#connect").prop("disabled", connected); - $("#disconnect").prop("disabled", !connected); - if (connected) { - $("#conversation").show(); - } - else { - $("#conversation").hide(); - } - $("#greetings").html(""); -} - -function connect() { - var socket = new SockJS('/nanuer-chat'); - stompClient = Stomp.over(socket); - stompClient.connect({}, function (frame) { - setConnected(true); - console.log('Connected: ' + frame); - stompClient.subscribe('/topic/greetings', function (greeting) { - showGreeting(JSON.parse(greeting.body).content); - }); - }); -} - -function disconnect() { - if (stompClient !== null) { - stompClient.disconnect(); - } - setConnected(false); - console.log("Disconnected"); -} - -function sendName() { - stompClient.send("/app/hello", {}, JSON.stringify({'name': $("#name").val()})); -} - -function showGreeting(message) { - $("#greetings").append("" + message + ""); -} - -$(function () { - $("form").on('submit', function (e) { - e.preventDefault(); - }); - $( "#connect" ).click(function() { connect(); }); - $( "#disconnect" ).click(function() { disconnect(); }); - $( "#send" ).click(function() { sendName(); }); -}); \ No newline at end of file diff --git a/src/main/resources/templates/chat.html b/src/main/resources/templates/chat.html deleted file mode 100644 index 3bce385..0000000 --- a/src/main/resources/templates/chat.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - -
-
- -
-
-
-
-
- -
- -
-
-
-
-
- -
-
- - - \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html deleted file mode 100644 index 566549b..0000000 --- a/src/main/resources/templates/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/room.html b/src/main/resources/templates/room.html deleted file mode 100644 index 911778d..0000000 --- a/src/main/resources/templates/room.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - -
-
-

[[${room.name}]]

-
-
-
-
-
- -
- -
-
-
-
-
-
- - - - - -
-
- - - \ No newline at end of file diff --git a/src/main/resources/templates/rooms.html b/src/main/resources/templates/rooms.html deleted file mode 100644 index ee19a79..0000000 --- a/src/main/resources/templates/rooms.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - -
- -
-
- - -
-
-
- - - - \ No newline at end of file From 5bdafd7f86d695f430a3ec70da5465f10b4f92e9 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Sun, 14 Aug 2022 13:29:43 +0900 Subject: [PATCH 15/35] jwt --- .../controller/User/UserController.java | 23 +++++++++++++++ .../controller/mypage/MyPageController.java | 1 + .../domain/entity/UserEntity.java | 3 ++ .../service/User/UserService.java | 28 ++++++++++++++++++- 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/nanuer_server/controller/User/UserController.java b/src/main/java/com/example/nanuer_server/controller/User/UserController.java index 6405827..6bb002c 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/UserController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/UserController.java @@ -15,6 +15,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Optional; @@ -125,6 +128,26 @@ public BaseResponse GetUserEmail(@RequestParam String phone){ } } + @PatchMapping("/updatePw") + public BaseResponse ModifyPw(@RequestParam String phone, String password){ + try { + userService.ModifyPw(phone,password); + UserInfoDto userInfoDto = userService.GetUserByPhone(phone); + String result = "새 비밀번호 : " + userInfoDto.getPassword(); + return new BaseResponse<>(result); + } catch(BaseException exception){ + return new BaseResponse<>(exception.getStatus()); + } + } + + //jwt 토근 헤더에서 가져와 사용자 이메일 조회 + @ResponseBody + @GetMapping("/userInfo") + public BaseResponse getUserInfoByJwt(HttpServletRequest request) throws BaseException { + int userId = userService.GetHeaderAndGetUser(request); + return new BaseResponse<>(userId); + } + /* // 이메일 보내기 @Transactional diff --git a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java index 1324e0a..00348d4 100644 --- a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java +++ b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java @@ -4,6 +4,7 @@ import com.example.nanuer_server.config.BaseResponse; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.User.UserInfoDto; +import com.example.nanuer_server.service.User.UserService; import com.example.nanuer_server.service.mypage.MyPageService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java index 31d306e..3db9913 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java @@ -90,7 +90,10 @@ public static UserEntity createUser(UserDto userDto) { public void status(String status){ this.userStatus = status; + } + public void upDatePw(String password){ + this.password = password; } public UserInfoDto toDto(){ UserInfoDto userInfoDto = UserInfoDto.builder() diff --git a/src/main/java/com/example/nanuer_server/service/User/UserService.java b/src/main/java/com/example/nanuer_server/service/User/UserService.java index 7322201..c662b49 100644 --- a/src/main/java/com/example/nanuer_server/service/User/UserService.java +++ b/src/main/java/com/example/nanuer_server/service/User/UserService.java @@ -2,6 +2,8 @@ import com.example.nanuer_server.config.BaseException; import static com.example.nanuer_server.config.BaseResponseStatus.*; + +import com.example.nanuer_server.config.User.JwtTokenProvider; import com.example.nanuer_server.domain.entity.UserEntity; import com.example.nanuer_server.domain.repository.UserRepository; import com.example.nanuer_server.dto.User.JoinUserDto; @@ -14,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; import java.util.Objects; import java.util.Optional; @@ -25,6 +28,7 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; + private final JwtTokenProvider jwtTokenProvider; //회원가입 @@ -80,7 +84,7 @@ else if(Objects.equals(userEntity.get().getUserStatus(), "inactive")){ } } - //유저 정보 가져오기 + //email로 유저 정보 가져오기 public UserInfoDto GetUser(String email) throws BaseException { Optional userEntity = userRepository.findByEmail(email); UserInfoDto userInfoDto = userEntity.get().toDto(); @@ -99,4 +103,26 @@ public UserInfoDto GetUserByPhone(String phone) throws BaseException { return userInfoDto; } + //비밀번호 재설정 + // 재설정 페이지 전에 받은 폰번호로 회원 찾기 + public void ModifyPw(String phone, String password) throws BaseException { + Optional userEntity = userRepository.findByPhone(phone); + if(userEntity.isEmpty()) { + throw new BaseException(USERS_EMPTY_USER_EMAIL); + } + else{ + userEntity.get().upDatePw(" "); + userEntity.get().upDatePw(passwordEncoder.encode(password)); + } + + } + + public int GetHeaderAndGetUser(HttpServletRequest request) throws BaseException { + String token = request.getHeader("X-AUTH-TOKEN"); + String userEmail = jwtTokenProvider.getUserPk(token); + Optional userEntity = userRepository.findByEmail(userEmail); + int userId = userEntity.get().getUserId(); + return userId; + } + } From 1c90f450ca1622e0c07e28f549abe5f692e9748b Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Sun, 14 Aug 2022 17:02:38 +0900 Subject: [PATCH 16/35] ws-connect --- .../config/Chat/WebSocketConfig.java | 29 +++---- .../config/Chat/WebSocketHandler.java | 82 +++++++++++++++++++ .../config/User/SecurityConfig.java | 4 +- .../controller/Chat/RoomController.java | 30 ------- .../controller/PermitController.java | 55 +++++++++++++ .../controller/User/UserController.java | 35 +------- .../domain/entity/ChatMessageEntity.java | 35 ++++++++ .../domain/entity/ChatRoomEntity.java | 30 +++++++ .../domain/entity/MessageType.java | 5 ++ .../domain/entity/PostEntity.java | 8 +- .../repository/Chat/ChatRoomRepository.java | 35 +------- .../dto/Post/CreatePostReqDto.java | 1 - .../example/nanuer_server/utils/Utils.java | 19 +++++ 13 files changed, 256 insertions(+), 112 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java create mode 100644 src/main/java/com/example/nanuer_server/controller/PermitController.java create mode 100644 src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java create mode 100644 src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java create mode 100644 src/main/java/com/example/nanuer_server/domain/entity/MessageType.java create mode 100644 src/main/java/com/example/nanuer_server/utils/Utils.java diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index c882dd1..ecb95ec 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -1,25 +1,26 @@ package com.example.nanuer_server.config.Chat; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import com.example.nanuer_server.config.Chat.WebSocketHandler; +import org.springframework.web.socket.config.annotation.*; @Configuration -@EnableWebSocketMessageBroker -public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { +@EnableWebSocket +public class WebSocketConfig implements WebSocketConfigurer { - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - - registry.addEndpoint("/example").withSockJS(); - } + //@Autowired + //SocketHandler socketHandler; @Override - public void configureMessageBroker(MessageBrokerRegistry config) { - - config.setApplicationDestinationPrefixes("/test"); - config.enableSimpleBroker("/topic", "/queue"); + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(signalingSocektHandelr(), "/room") + .setAllowedOrigins("*"); + } + @Bean + public WebSocketHandler signalingSocektHandelr(){ + return new WebSocketHandler(); } } diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java new file mode 100644 index 0000000..b53429f --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java @@ -0,0 +1,82 @@ +package com.example.nanuer_server.config.Chat; + + +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.example.nanuer_server.utils.Utils; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Component +public class WebSocketHandler extends TextWebSocketHandler { + + private final Map sessions = new ConcurrentHashMap<>(); + //웹소켓 연결 시 + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + + var sessionId = session.getId(); + sessions.put(sessionId, session); + + ChatMessageEntity message = ChatMessageEntity.builder().sender(sessionId).receiver("all").build(); + message.newConnect(); + + sessions.values().forEach(s -> { + try { + if(!s.getId().equals(sessionId)) { + s.sendMessage(new TextMessage(Utils.getString(message))); + } + } + catch (Exception e) { + //TODO: throw + } + }); + } + + //양방향 데이터 통신 + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception { + + ChatMessageEntity message = Utils.getObject(textMessage.getPayload()); + message.setSender(session.getId()); + + WebSocketSession receiver = sessions.get(message.getReceiver()); + + if (receiver != null && receiver.isOpen()) { + + receiver.sendMessage(new TextMessage(Utils.getString(message))); + } + } + + //소켓 연결 종료 + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + + var sessionId = session.getId(); + + sessions.remove(sessionId); + + final ChatMessageEntity message = new ChatMessageEntity(); + message.closeConnect(); + message.setSender(sessionId); + + sessions.values().forEach(s -> { + try { + s.sendMessage(new TextMessage(Utils.getString(message))); + } catch (Exception e) { + //TODO: throw + } + }); + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { + //TODO: + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index b466855..d961832 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -52,7 +52,9 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() - .antMatchers( "/","/heart/**", "/user/**", "/css/**", "/mypage/**", "/exception/**", "/favicon.ico", "/post/**", "/chat/**", "/ws/**").permitAll() + .antMatchers("/user/**","/heart/**","/post/**","/mypage/**").hasAuthority("ROLE_USER") + .antMatchers( "/join","/login","/css/**", "/exception/**", "/favicon.ico", "/chat/**", "/ws/**","/room/**") + .permitAll() .anyRequest().authenticated(); //JwtFilter 추가 diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java index 2625087..a0d50f6 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java @@ -15,35 +15,5 @@ @Log4j2 public class RoomController { - private final ChatRoomRepository repository; - //채팅방 목록 조회 - @GetMapping(value = "/rooms") - public ModelAndView rooms() { - - log.info("# All Chat Rooms"); - ModelAndView mv = new ModelAndView("rooms"); - - mv.addObject("list", repository.findAllRooms()); - - return mv; - } - - //채팅방 개설 - @PostMapping(value = "/room") - public String create(@RequestParam String name, RedirectAttributes rttr){ - - log.info("# Create Chat Room , name: " + name); - rttr.addFlashAttribute("roomName", repository.createChatRoomDTO(name)); - return "redirect:/rooms"; - } - - //채팅방 조회 - @GetMapping("/room") - public void getRoom(String roomId, Model model){ - - log.info("# get Chat Room, roomID : " + roomId); - - model.addAttribute("room", repository.findRoomById(roomId)); - } } diff --git a/src/main/java/com/example/nanuer_server/controller/PermitController.java b/src/main/java/com/example/nanuer_server/controller/PermitController.java new file mode 100644 index 0000000..cb57ce5 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/PermitController.java @@ -0,0 +1,55 @@ +package com.example.nanuer_server.controller; + +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.config.User.JwtTokenProvider; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.entity.UserRole; +import com.example.nanuer_server.dto.User.JoinUserDto; +import com.example.nanuer_server.dto.User.LoginUserDto; +import com.example.nanuer_server.dto.User.UserInfoDto; +import com.example.nanuer_server.service.User.UserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.web.bind.annotation.*; + +@Log4j2 +@RequiredArgsConstructor +@RestController +public class PermitController { + + private final UserService userService; + private final JwtTokenProvider jwtTokenProvider; + + @ResponseBody + @PostMapping("/join") + public BaseResponse join(@RequestBody JoinUserDto joinUserDto) { + //BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + //UserEntity userEntity = UserEntity.createUser(userDto); + try { + UserEntity userEntity = userService.signup(joinUserDto); + return new BaseResponse<>(userEntity); + } catch (BaseException exception) { + return new BaseResponse<>((exception.getStatus())); + } + } + + //로그인 + + @PostMapping("/login") + @ResponseBody + public BaseResponse login(@RequestBody LoginUserDto loginUserDto) { + try { + + UserInfoDto userInfoDto = userService.login(loginUserDto); + String Email = userInfoDto.getEmail(); + UserRole role = userInfoDto.getRole(); + String result = jwtTokenProvider.createToken(Email, role); + return new BaseResponse<>(result); + } catch (BaseException exception) { + return new BaseResponse<>((exception.getStatus())); + } + } + + +} diff --git a/src/main/java/com/example/nanuer_server/controller/User/UserController.java b/src/main/java/com/example/nanuer_server/controller/User/UserController.java index 6bb002c..2013e19 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/UserController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/UserController.java @@ -12,7 +12,6 @@ import com.example.nanuer_server.dto.User.LoginUserDto; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -36,38 +35,6 @@ public String hello() { return "hello"; } - - @ResponseBody - @PostMapping("/join") - public BaseResponse join(@RequestBody JoinUserDto joinUserDto) { - //BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - //UserEntity userEntity = UserEntity.createUser(userDto); - try { - UserEntity userEntity = userService.signup(joinUserDto); - return new BaseResponse<>(userEntity); - } catch (BaseException exception) { - return new BaseResponse<>((exception.getStatus())); - } - } - - //로그인 - - @PostMapping("/login") - @ResponseBody - public BaseResponse login(@RequestBody LoginUserDto loginUserDto) { - try { - - UserInfoDto userInfoDto = userService.login(loginUserDto); - String Email = userInfoDto.getEmail(); - UserRole role = userInfoDto.getRole(); - String result = jwtTokenProvider.createToken(Email, role); - return new BaseResponse<>(result); - } catch (BaseException exception) { - return new BaseResponse<>((exception.getStatus())); - } - } - - //삭제 @DeleteMapping("") public BaseResponse delete(@RequestParam String email) { @@ -116,7 +83,7 @@ public BaseResponse GetUser(@RequestParam String email) { //아이디 찾기 @GetMapping("/getEmail") - public BaseResponse GetUserEmail(@RequestParam String phone){ + public BaseResponse GetUserEmail(HttpServletRequest request, @RequestParam String phone){ try{ UserInfoDto userInfoDto = userService.GetUserByPhone(phone); String result = userInfoDto.getEmail(); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java new file mode 100644 index 0000000..d858cdd --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -0,0 +1,35 @@ +package com.example.nanuer_server.domain.entity; + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +public class ChatMessageEntity { + + private String type; + private String sender; + private String receiver; + private Object data; + + //private String chatRoomId; + //private String writer; + //private String message; + //private MessageType type; + + public void setSender(String sender) {this.sender = sender;} + + public void newConnect(){ + this.type = "new"; + } + public void closeConnect(){ + this.type = "close"; + } + + +} diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java new file mode 100644 index 0000000..51c1e7c --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -0,0 +1,30 @@ +package com.example.nanuer_server.domain.entity; + + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Table(name="chat") +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +@DynamicUpdate +@DynamicInsert +@Entity +@ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. +public class ChatRoomEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int roomId; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "post_id") + @ToString.Exclude + private PostEntity postEntity; + +} diff --git a/src/main/java/com/example/nanuer_server/domain/entity/MessageType.java b/src/main/java/com/example/nanuer_server/domain/entity/MessageType.java new file mode 100644 index 0000000..4c7258d --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/entity/MessageType.java @@ -0,0 +1,5 @@ +package com.example.nanuer_server.domain.entity; + +public enum MessageType { + JOIN, CHAT +} diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index aa39d8b..8a81ab0 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -4,13 +4,13 @@ import com.example.nanuer_server.domain.Progress; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.Post.UpdatePostReqDto; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import org.hibernate.annotations.NotFound; import org.hibernate.annotations.NotFoundAction; import javax.persistence.*; +import java.util.List; @Table(name = "post") @AllArgsConstructor @@ -72,6 +72,12 @@ public class PostEntity extends BaseTimeEntity { @JoinColumn(name = "category_id") private CategoryEntity categoryEntity; + //채팅 ****** + @OneToMany(mappedBy = "postEntity") + @ToString.Exclude + private List chatRoomEntityList; + + public void update(UpdatePostReqDto updatePostReqDto) { this.title = updatePostReqDto.getTitle(); this.content = updatePostReqDto.getContent(); diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index d53e62f..8544f09 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -1,37 +1,10 @@ package com.example.nanuer_server.domain.repository.Chat; -import com.example.nanuer_server.dto.Chat.ChatRoomDto; -import org.springframework.stereotype.Repository; +import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import org.springframework.data.jpa.repository.JpaRepository; -import javax.annotation.PostConstruct; import java.util.*; -@Repository -public class ChatRoomRepository { - - private Map chatRoomDTOMap; - - @PostConstruct - private void init(){ - chatRoomDTOMap = new LinkedHashMap<>(); - } - - public List findAllRooms(){ - //채팅방 생성 순서 최근 순으로 반환 - List result = new ArrayList<>(chatRoomDTOMap.values()); - Collections.reverse(result); - - return result; - } - - public ChatRoomDto findRoomById(String id){ - return chatRoomDTOMap.get(id); - } - - public ChatRoomDto createChatRoomDTO(String name){ - ChatRoomDto room = ChatRoomDto.create(name); - chatRoomDTOMap.put(room.getRoomId(), room); - - return room; - } +public interface ChatRoomRepository extends JpaRepository { + Optional findByRoomId(int roomId); } diff --git a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java index d46d420..d5d254c 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java @@ -4,7 +4,6 @@ import com.example.nanuer_server.domain.entity.CategoryEntity; import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/nanuer_server/utils/Utils.java b/src/main/java/com/example/nanuer_server/utils/Utils.java new file mode 100644 index 0000000..44df5b2 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/utils/Utils.java @@ -0,0 +1,19 @@ +package com.example.nanuer_server.utils; + +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class Utils { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + private Utils() { + } + + public static ChatMessageEntity getObject(final String message) throws Exception { + return objectMapper.readValue(message, ChatMessageEntity.class); + } + + public static String getString(final ChatMessageEntity message) throws Exception { + return objectMapper.writeValueAsString(message); + } +} \ No newline at end of file From 4104fe9613146cfd7f07d6145c4b3d062b88648c Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Sun, 14 Aug 2022 18:45:43 +0900 Subject: [PATCH 17/35] =?UTF-8?q?refactoring=20Stomp=20message=20(Apic?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=84=B1?= =?UTF-8?q?=EA=B3=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NanuerServerApplication.java | 2 -- .../config/Chat/WebSocketConfig.java | 20 +++++++------- .../config/Chat/WebSocketHandler.java | 3 ++- .../controller/Chat/ChatController.java | 27 +++++++++++++++++++ .../domain/entity/ChatMessageEntity.java | 2 +- 5 files changed, 41 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java diff --git a/src/main/java/com/example/nanuer_server/NanuerServerApplication.java b/src/main/java/com/example/nanuer_server/NanuerServerApplication.java index 39519e2..202ed33 100644 --- a/src/main/java/com/example/nanuer_server/NanuerServerApplication.java +++ b/src/main/java/com/example/nanuer_server/NanuerServerApplication.java @@ -11,8 +11,6 @@ @EnableJpaAuditing @SpringBootApplication public class NanuerServerApplication { - - public static void main(String[] args) { SpringApplication.run(NanuerServerApplication.class, args); System.out.println("hello"); diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index ecb95ec..84b4709 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -4,23 +4,25 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import com.example.nanuer_server.config.Chat.WebSocketHandler; import org.springframework.web.socket.config.annotation.*; @Configuration -@EnableWebSocket -public class WebSocketConfig implements WebSocketConfigurer { +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { //@Autowired //SocketHandler socketHandler; @Override - public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { - registry.addHandler(signalingSocektHandelr(), "/room") - .setAllowedOrigins("*"); + public void configureMessageBroker(MessageBrokerRegistry registry) { + registry.enableSimpleBroker("/sub"); + registry.setApplicationDestinationPrefixes("/pub"); } - @Bean - public WebSocketHandler signalingSocektHandelr(){ - return new WebSocketHandler(); + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry + .addEndpoint("/ws") + .setAllowedOrigins("*"); } } diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java index b53429f..624ed4d 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java @@ -1,3 +1,4 @@ +/* package com.example.nanuer_server.config.Chat; @@ -79,4 +80,4 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus status) public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { //TODO: } -} \ No newline at end of file +}*/ diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java new file mode 100644 index 0000000..f3fc82b --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -0,0 +1,27 @@ +package com.example.nanuer_server.controller.Chat; + +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.stereotype.Controller; + +@Controller +@RequiredArgsConstructor +public class ChatController { + + private final SimpMessageSendingOperations simpMessageSendingOperations; + + /* + /sub/channel/12345 - 구독(channelId:12345) + /pub/hello - 메시지 발행 + */ + + @MessageMapping("/send") + public void message(ChatRoomEntity chatRoomEntity, ChatMessageEntity message) { + + + simpMessageSendingOperations.convertAndSend("/sub/channel/" + message.getChannelId(), message); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index d858cdd..5bdf9bc 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -14,7 +14,7 @@ public class ChatMessageEntity { private String type; private String sender; - private String receiver; + private String channelId; private Object data; //private String chatRoomId; From ff231f0ab53e3e1eef13ee6a9e0666531e2917b0 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Thu, 18 Aug 2022 12:27:41 +0900 Subject: [PATCH 18/35] chat_v1 --- build.gradle | 12 +-- .../config/Chat/StompHandler.java | 56 ++++++++++++ .../config/Chat/StompWebSocketConfig.java | 8 +- .../config/Chat/WebSocketConfig.java | 36 ++++++-- .../config/Chat/WebSocketHandler.java | 11 +-- .../config/User/JwtTokenProvider.java | 1 + .../config/User/SecurityConfig.java | 2 +- .../Chat/ChatMessageController.java | 73 +++++++++++++++ .../controller/Chat/RoomController.java | 4 - .../domain/entity/ChatMessageEntity.java | 20 ++-- .../domain/entity/ChatRoomEntity.java | 29 +++++- .../domain/entity/PostEntity.java | 2 + .../domain/entity/UserEntity.java | 4 + .../repository/Chat/ChatRoomRepository.java | 6 +- .../nanuer_server/dto/Post/ChatReqDto.java | 10 ++ .../nanuer_server/dto/Post/PostChatDto.java | 19 ++++ .../service/chat/ChatService.java | 91 +++++++++++++++++++ 17 files changed, 328 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java create mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java create mode 100644 src/main/java/com/example/nanuer_server/dto/Post/ChatReqDto.java create mode 100644 src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java create mode 100644 src/main/java/com/example/nanuer_server/service/chat/ChatService.java diff --git a/build.gradle b/build.gradle index cad1769..6997837 100644 --- a/build.gradle +++ b/build.gradle @@ -45,17 +45,11 @@ dependencies { //이메일 보내기 implementation 'org.springframework.boot:spring-boot-starter-mail' - -//문자인증 - implementation group: 'net.nurigo', name: 'javaSDK', version: '2.2' - - //이메일 보내기 - implementation 'org.springframework.boot:spring-boot-starter-mail' - - - implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' + //채팅 + //implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation group: 'org.webjars', name: 'stomp-websocket', version: '2.3.3-1' + //implementation 'it.ozimov:embedded-redis:0.7.2' } diff --git a/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java b/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java new file mode 100644 index 0000000..4852353 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java @@ -0,0 +1,56 @@ +package com.example.nanuer_server.config.Chat; + + +import com.example.nanuer_server.config.User.JwtTokenProvider; +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.service.chat.ChatService; +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.simp.stomp.StompCommand; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.messaging.support.ChannelInterceptor; +import org.springframework.stereotype.Component; + +import java.security.Principal; +import java.util.Objects; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class StompHandler implements ChannelInterceptor { + private final JwtTokenProvider jwtTokenProvider; + //private final ChatService chatService; + private final UserRepository userRepository; + + @Override + public Message preSend(Message message, MessageChannel channel) { + StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); + System.out.println("message:" + message); + System.out.println("헤더 : " + message.getHeaders()); + + if (StompCommand.CONNECT.equals(accessor.getCommand())) { + jwtTokenProvider.validateToken(Objects.requireNonNull(accessor.getFirstNativeHeader("X-AUTH-TOKEN"))); + System.out.println("토큰 : " + accessor.getNativeHeader("X-AUTH-TOKEN")); + //String token = Objects.requireNonNull(accessor.getFirstNativeHeader("X-AUTH-TOKEN")); + } else if (StompCommand.SUBSCRIBE == accessor.getCommand()) { // 채팅룸 구독요청 + // header정보에서 구독 destination정보를 얻고, roomId를 추출한다. + //String roomId = chatService.getRoomId(Optional.ofNullable((String) message.getHeaders().get("simpDestination")).orElse("InvalidRoomId")); + // 채팅방에 들어온 클라이언트 sessionId를 roomId와 맵핑해 놓는다.(나중에 특정 세션이 어떤 채팅방에 들어가 있는지 알기 위함) + //String sessionId = (String) message.getHeaders().get("simpSessionId"); + //System.out.println("세션 아이디 : " + sessionId); + //chatRoomRepository.setUserEnterInfo(sessionId, roomId); + // 채팅방의 인원수를 +1한다. + //chatRoomRepository.plusUserCount(roomId); + // 클라이언트 입장 메시지를 채팅방에 발송한다.(redis publish) + //String token = Objects.requireNonNull(accessor.getFirstNativeHeader("X-AUTH-TOKEN")); + //String name = userRepository.findByEmail(jwtTokenProvider.getUserPk(token)).get().getNickName(); + //String name = Optional.ofNullable((Principal) message.getHeaders().get("simpUser")).map(Principal::getName).orElse("UnknownUser"); + //chatService.sendChatMessage(ChatMessageEntity.builder().type(ChatMessageEntity.Type.ENTER).channelId(roomId).sender(name).build()); + //System.out.println("구독 정보 : " + name + roomId); + + } + return message; + } +} diff --git a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java index ba2b4b0..4b6cc5b 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java @@ -1,5 +1,6 @@ package com.example.nanuer_server.config.Chat; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; @@ -7,13 +8,12 @@ import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; @EnableWebSocketMessageBroker +@RequiredArgsConstructor @Configuration public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { - //endpoint를 /stomp로 하고, allowedOrigins를 "*"로 하면 페이지에서 - //Get /info 404 Error가 발생한다. 그래서 아래와 같이 2개의 계층으로 분리하고 - //origins를 개발 도메인으로 변경하니 잘 동작하였다. - //이유는 왜 그런지 아직 찾지 못함 + + @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/stomp/chat") diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index ecb95ec..9e5e628 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -1,26 +1,44 @@ package com.example.nanuer_server.config.Chat; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import com.example.nanuer_server.config.Chat.WebSocketHandler; +import org.springframework.messaging.simp.stomp.StompCommand; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.messaging.support.ChannelInterceptor; +import org.springframework.messaging.support.MessageHeaderAccessor; +import org.springframework.security.core.Authentication; import org.springframework.web.socket.config.annotation.*; @Configuration -@EnableWebSocket -public class WebSocketConfig implements WebSocketConfigurer { +@RequiredArgsConstructor +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { - //@Autowired - //SocketHandler socketHandler; + private final StompHandler stompHandler; @Override - public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { - registry.addHandler(signalingSocektHandelr(), "/room") + public void configureMessageBroker(MessageBrokerRegistry registry) { + registry.enableSimpleBroker("/sub"); + registry.setApplicationDestinationPrefixes("/pub"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry + .addEndpoint("/ws") .setAllowedOrigins("*"); } - @Bean - public WebSocketHandler signalingSocektHandelr(){ - return new WebSocketHandler(); + + @Override + public void configureClientInboundChannel(ChannelRegistration registration){ + registration.interceptors(stompHandler); } + } diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java index b53429f..7d44cf1 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java @@ -1,20 +1,15 @@ package com.example.nanuer_server.config.Chat; -import com.example.nanuer_server.domain.entity.ChatMessageEntity; -import com.example.nanuer_server.utils.Utils; -import org.springframework.stereotype.Component; -import org.springframework.web.socket.CloseStatus; -import org.springframework.web.socket.TextMessage; -import org.springframework.web.socket.WebSocketSession; + import org.springframework.web.socket.handler.TextWebSocketHandler; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -@Component public class WebSocketHandler extends TextWebSocketHandler { + /* private final Map sessions = new ConcurrentHashMap<>(); //웹소켓 연결 시 @@ -78,5 +73,5 @@ public void afterConnectionClosed(WebSocketSession session, CloseStatus status) @Override public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { //TODO: - } + }*/ } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/config/User/JwtTokenProvider.java b/src/main/java/com/example/nanuer_server/config/User/JwtTokenProvider.java index 387f582..8e1b662 100644 --- a/src/main/java/com/example/nanuer_server/config/User/JwtTokenProvider.java +++ b/src/main/java/com/example/nanuer_server/config/User/JwtTokenProvider.java @@ -68,6 +68,7 @@ public String getUserPk(String token) { return (String) Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject(); } + // Request의 Header에서 token 값을 가져옵니다. "Authorization" : "TOKEN값' public String resolveToken(HttpServletRequest request) { return request.getHeader("X-AUTH-TOKEN"); diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index d961832..0431365 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -53,7 +53,7 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() .antMatchers("/user/**","/heart/**","/post/**","/mypage/**").hasAuthority("ROLE_USER") - .antMatchers( "/join","/login","/css/**", "/exception/**", "/favicon.ico", "/chat/**", "/ws/**","/room/**") + .antMatchers( "/join","/login","/css/**", "/exception/**", "/favicon.ico", "/chat/**", "/ws/**","/room/**","/hello/**","/chat/join/**") .permitAll() .anyRequest().authenticated(); diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java new file mode 100644 index 0000000..766d80a --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java @@ -0,0 +1,73 @@ +package com.example.nanuer_server.controller.Chat; + +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.config.User.JwtTokenProvider; +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.service.User.UserService; +import com.example.nanuer_server.service.chat.ChatService; +import lombok.RequiredArgsConstructor; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.messaging.simp.stomp.StompHeaderAccessor; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.socket.WebSocketHttpHeaders; + +import javax.servlet.http.HttpServletRequest; +import java.util.Optional; + +@Controller +@RequiredArgsConstructor +public class ChatMessageController { + + private final SimpMessageSendingOperations simpMessageSendingOperations; + private final UserService userService; + private final ChatService chatService; + private final JwtTokenProvider jwtTokenProvider; + private final UserRepository userRepository; + /* + /sub/channel/12345 - 구독(channelId:12345) + /pub/send - 메시지 발행 + */ + /* + @MessageMapping("/join") //채팅방에서 입장 버튼 (채팅하기 버튼) + public String JoinChat() { + ChatRoomEntity room = ChatRoomEntity.create(); + //simpMessageSendingOperations.convertAndSend("/sub/channel/" + room.getRoomId() , "방에 입장하셨습니다"); + }*/ + + @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 + public void message(ChatMessageEntity message) { + // System.out.println("토큰 : " + token); + //String userEmail = jwtTokenProvider.getUserPk(token); + //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + //message.setSender(nickName); + chatService.sendChatMessage(message); + //simpMessageSendingOperations.convertAndSend("/sub/channel/" + message.getChannelId(), message); + } + /* + @MessageMapping("/join") + public void enter(HttpServletRequest request,ChatMessageEntity message) throws BaseException{ + message.setType(ChatMessageEntity.Type.ENTER); + int userId = userService.GetHeaderAndGetUser(request); + String nickName = userRepository.findByUserId(userId).get().getNickName(); + String roomId = chatService.createRoom(); + message.setChannelId(roomId); + message.setSender(nickName); + message.setData(message.getChannelId()+ "방에 " +message.getSender()+" 님이 입장하였습니다."); + simpMessageSendingOperations.convertAndSend("/sub/channel/"+message.getChannelId(),message); + }*/ + + @PostMapping("/chat/join") + @ResponseBody + public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { + ChatRoomEntity room = chatService.createRoom(request, postId); + return new BaseResponse<>(room.getRoomId()); + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java index a0d50f6..32f3644 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java @@ -1,13 +1,9 @@ package com.example.nanuer_server.controller.Chat; -import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller @RequiredArgsConstructor diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index d858cdd..999e5e8 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -10,26 +10,18 @@ @NoArgsConstructor @Builder @Data +@Setter public class ChatMessageEntity { - - private String type; + public enum Type { + ENTER, TALK, QUIT + } + private Type type; private String sender; - private String receiver; + private String channelId; private Object data; - //private String chatRoomId; - //private String writer; - //private String message; - //private MessageType type; - public void setSender(String sender) {this.sender = sender;} - public void newConnect(){ - this.type = "new"; - } - public void closeConnect(){ - this.type = "close"; - } } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java index 51c1e7c..728715c 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -2,12 +2,19 @@ import lombok.*; +import org.apache.catalina.User; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; import javax.persistence.*; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; -@Table(name="chat") +@Table(name="room") @AllArgsConstructor @NoArgsConstructor @Builder @@ -16,15 +23,29 @@ @DynamicInsert @Entity @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. -public class ChatRoomEntity { +public class ChatRoomEntity implements Serializable { + private static final long serialVersionUID = 6494678977089006639L; @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int roomId; + @Column(nullable = false,unique = true) + private String roomId; + + @NotFound(action = NotFoundAction.IGNORE) + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "user_id") + @ToString.Exclude + private UserEntity userEntity; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "post_id") @ToString.Exclude private PostEntity postEntity; + public static ChatRoomEntity create(){ + ChatRoomEntity room = new ChatRoomEntity(); + room.roomId = UUID.randomUUID().toString(); + return room; + } + + } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 8a81ab0..fcbe346 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -95,6 +95,8 @@ public void delete() { this.postStatus = 0; } + + public void increaseView() { this.view += 1; } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java index c9751c9..74fa241 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java @@ -71,6 +71,10 @@ public class UserEntity extends BaseTimeEntity { @Enumerated(EnumType.STRING) private UserRole role; + @JsonIgnore + @OneToMany(mappedBy = "userEntity") + private List chatRoom = new ArrayList<>(); + public void status(String status){ this.userStatus = status; } diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 8544f09..72b31e5 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -5,6 +5,6 @@ import java.util.*; -public interface ChatRoomRepository extends JpaRepository { - Optional findByRoomId(int roomId); -} +public interface ChatRoomRepository extends JpaRepository { + Optional findByRoomId(String roomId); +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/Post/ChatReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/ChatReqDto.java new file mode 100644 index 0000000..362b17c --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Post/ChatReqDto.java @@ -0,0 +1,10 @@ +package com.example.nanuer_server.dto.Post; + +import com.example.nanuer_server.domain.entity.ChatMessageEntity; + +public class ChatReqDto { + private ChatMessageEntity.Type type; + private String sender; + private String channelId; + private Object data; +} diff --git a/src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java b/src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java new file mode 100644 index 0000000..fc4b923 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java @@ -0,0 +1,19 @@ +package com.example.nanuer_server.dto.Post; + +import com.example.nanuer_server.domain.entity.HeartEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.dto.User.UserInfoDto; + +public class PostChatDto { + private Integer postId; + + private UserEntity userEntity; + + public HeartEntity toEntity(){ + HeartEntity heartEntity = HeartEntity.builder() + .userEntity(userEntity) + .build(); + return heartEntity; + } +} diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java new file mode 100644 index 0000000..231b93e --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -0,0 +1,91 @@ +package com.example.nanuer_server.service.chat; + + +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.config.User.JwtTokenProvider; +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; +import com.example.nanuer_server.domain.repository.PostRepository; +import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.service.User.UserService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Slf4j +@Transactional +@Service +@RequiredArgsConstructor +public class ChatService { + + private Map chatRooms; + private final ChatRoomRepository chatRoomRepository; + private final SimpMessageSendingOperations simpMessageSendingOperations; + private final JwtTokenProvider jwtTokenProvider; + private final UserService userService; + private final UserRepository userRepository; + private final PostRepository postRepository; + + @PostConstruct + //의존관게 주입완료되면 실행되는 코드 + private void init() { + chatRooms = new LinkedHashMap<>(); + } + + + //채팅방 생성 [1:1 채팅] (거래완료 전) + public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws BaseException { + int userId = userService.GetHeaderAndGetUser(request); + UserEntity userEntity = userRepository.findByUserId(userId).get(); + PostEntity postEntity = postRepository.findByPostId(postId); + ChatRoomEntity chatRoom = ChatRoomEntity.builder() + .roomId(UUID.randomUUID().toString()) + .postEntity(postEntity) + .userEntity(userEntity) + .build(); + chatRoomRepository.save(chatRoom); + return chatRoom; + } + + public String getRoomId(String destination) { + int lastIndex = destination.lastIndexOf('/'); + if (lastIndex != -1) + return destination.substring(lastIndex + 1); + else + return ""; + } + + + //채팅방에 메시지 발송 + + public void sendChatMessage(ChatMessageEntity chatMessage) { + //chatMessage.setUserCount(chatRoomRepository.getUserCount(chatMessage.getRoomId())); + if (ChatMessageEntity.Type.ENTER.equals(chatMessage.getType())) { + chatMessage.setData(chatMessage.getSender() + "님이 방에 입장했습니다."); + chatMessage.setSender("[알림]"); + + } else if (ChatMessageEntity.Type.QUIT.equals(chatMessage.getType())) { + chatMessage.setData(chatMessage.getSender() + "님이 방에서 나갔습니다."); + chatMessage.setSender("[알림]"); + } + + simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getChannelId(), chatMessage); + + + //redisTemplate.convertAndSend(channelTopic.getTopic(), chatMessage); + } + + + +} From 490cec259f2b48ddb3e72e6074c6f698d63ddc50 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Thu, 18 Aug 2022 15:02:55 +0900 Subject: [PATCH 19/35] chat_v0 --- build.gradle | 4 +- .../config/Chat/RedisConfig.java | 37 ++++++++ .../config/Chat/StompWebSocketConfig.java | 30 ------- .../Chat/ChatMessageController.java | 7 +- .../domain/entity/ChatMessageEntity.java | 7 +- .../domain/entity/ChatRoomEntity.java | 7 +- .../repository/Chat/ChatRoomRepository.java | 5 ++ .../service/chat/ChatService.java | 88 +++++++++++++++++-- .../service/chat/RedisPublisher.java | 18 ++++ .../service/chat/RedisSubscriber.java | 38 ++++++++ 10 files changed, 193 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/config/Chat/RedisConfig.java delete mode 100644 src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java create mode 100644 src/main/java/com/example/nanuer_server/service/chat/RedisPublisher.java create mode 100644 src/main/java/com/example/nanuer_server/service/chat/RedisSubscriber.java diff --git a/build.gradle b/build.gradle index 6997837..79eabee 100644 --- a/build.gradle +++ b/build.gradle @@ -46,10 +46,10 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-mail' //채팅 - //implementation 'org.springframework.boot:spring-boot-starter-data-redis' + implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation group: 'org.webjars', name: 'stomp-websocket', version: '2.3.3-1' - //implementation 'it.ozimov:embedded-redis:0.7.2' + implementation 'it.ozimov:embedded-redis:0.7.2' } diff --git a/src/main/java/com/example/nanuer_server/config/Chat/RedisConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/RedisConfig.java new file mode 100644 index 0000000..b8ca2be --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/RedisConfig.java @@ -0,0 +1,37 @@ +package com.example.nanuer_server.config.Chat; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@RequiredArgsConstructor +@Configuration +public class RedisConfig { + + /** + * redis pub/sub 메시지를 처리하는 listener 설정 + */ + @Bean + public RedisMessageListenerContainer redisMessageListener(RedisConnectionFactory connectionFactory) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(connectionFactory); + return container; + } + + /** + * 어플리케이션에서 사용할 redisTemplate 설정 + */ + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(connectionFactory); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(String.class)); + return redisTemplate; + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java deleted file mode 100644 index 4b6cc5b..0000000 --- a/src/main/java/com/example/nanuer_server/config/Chat/StompWebSocketConfig.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.example.nanuer_server.config.Chat; - -import lombok.RequiredArgsConstructor; -import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; - -@EnableWebSocketMessageBroker -@RequiredArgsConstructor -@Configuration -public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer { - - - - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/stomp/chat") - .setAllowedOrigins("http://localhost:8080") - .withSockJS(); - } - - /*어플리케이션 내부에서 사용할 path를 지정할 수 있음*/ - @Override - public void configureMessageBroker(MessageBrokerRegistry registry) { - registry.setApplicationDestinationPrefixes("/pub"); - registry.enableSimpleBroker("/sub"); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java index 766d80a..e1ac650 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatMessageController.java @@ -42,10 +42,11 @@ public String JoinChat() { }*/ @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 - public void message(ChatMessageEntity message) { + public void message(ChatMessageEntity message, @RequestHeader("X-AUTH-TOKEN") String token) { // System.out.println("토큰 : " + token); - //String userEmail = jwtTokenProvider.getUserPk(token); - //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + String userEmail = jwtTokenProvider.getUserPk(token); + String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + ChatRoomEntity chatRoom=chatService.findRoomById(message.getChannelId()); //message.setSender(nickName); chatService.sendChatMessage(message); //simpMessageSendingOperations.convertAndSend("/sub/channel/" + message.getChannelId(), message); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index 999e5e8..a8068e7 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -1,8 +1,7 @@ package com.example.nanuer_server.domain.entity; import lombok.*; -import org.hibernate.annotations.DynamicInsert; -import org.hibernate.annotations.DynamicUpdate; + import javax.persistence.*; @@ -21,7 +20,9 @@ public enum Type { private Object data; public void setSender(String sender) {this.sender = sender;} - + public void setData(String data){ + this.data=data; + } } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java index 728715c..b567588 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -41,9 +41,14 @@ public class ChatRoomEntity implements Serializable { @ToString.Exclude private PostEntity postEntity; - public static ChatRoomEntity create(){ + @ElementCollection + private List chatMessages = new ArrayList<>(); + + public static ChatRoomEntity create(UserEntity userEntity, PostEntity postEntity){ ChatRoomEntity room = new ChatRoomEntity(); room.roomId = UUID.randomUUID().toString(); + room.userEntity = userEntity; + room.postEntity = postEntity; return room; } diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 72b31e5..38574db 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -1,10 +1,15 @@ package com.example.nanuer_server.domain.repository.Chat; import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; import java.util.*; public interface ChatRoomRepository extends JpaRepository { Optional findByRoomId(String roomId); + List findByRoomByUser(UserEntity userEntity); + List findByRoomByPost(PostEntity PostEntity); + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index 231b93e..fd45aaa 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -13,8 +13,10 @@ import com.example.nanuer_server.service.User.UserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.messaging.simp.SimpMessageSendingOperations; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,20 +31,35 @@ @RequiredArgsConstructor public class ChatService { - private Map chatRooms; + // 채팅방(topic)에 발행되는 메시지를 처리할 Listner + private final RedisMessageListenerContainer redisMessageListener; + // 구독 처리 서비스 + private final RedisSubscriber redisSubscriber; + + private final RedisPublisher redisPublisher; + // Redis + private static final String CHAT_ROOMS = "CHAT_ROOM"; + public static final String ENTER_INFO = "ENTER_INFO"; // 채팅룸에 입장한 클라이언트의 sessionId와 채팅룸 id를 맵핑한 정보 저장 + private final RedisTemplate redisTemplate; + private HashOperations opsHashChatRoom; + // 채팅방의 대화 메시지를 발행하기 위한 redis topic 정보. 서버별로 채팅방에 매치되는 topic정보를 Map에 넣어 roomId로 찾을수 있도록 한다. + private Map topics; + private HashOperations hashOpsEnterInfo; + @PostConstruct + private void init() { + opsHashChatRoom = redisTemplate.opsForHash(); + hashOpsEnterInfo=redisTemplate.opsForHash(); + + topics = new HashMap<>(); + } private final ChatRoomRepository chatRoomRepository; + private Map chatRooms; private final SimpMessageSendingOperations simpMessageSendingOperations; private final JwtTokenProvider jwtTokenProvider; private final UserService userService; private final UserRepository userRepository; private final PostRepository postRepository; - @PostConstruct - //의존관게 주입완료되면 실행되는 코드 - private void init() { - chatRooms = new LinkedHashMap<>(); - } - //채팅방 생성 [1:1 채팅] (거래완료 전) public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws BaseException { @@ -58,6 +75,44 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws return chatRoom; } + public ChatRoomEntity findRoomById(String id) { + ChatRoomEntity chatRoom=(ChatRoomEntity)chatRoomRepository.findById(id).orElseThrow(); + return chatRoom; + } + public ChatRoomEntity createChatRoom(UserEntity customer, PostEntity store) { + //String name=customer.getName()+"와 "+store.getName(); + ChatRoomEntity chatRoom = ChatRoomEntity.create(customer,store); + opsHashChatRoom.put(CHAT_ROOMS, chatRoom.getRoomId(), chatRoom); + chatRoomRepository.save(chatRoom); + return chatRoom; + } + /** + * 채팅방 입장 : redis에 topic을 만들고 pub/sub 통신을 하기 위해 리스너를 설정한다. + */ + public void enterChatRoom(String roomId) { + ChannelTopic topic = topics.get(roomId); + if (topic == null) + topic = new ChannelTopic(roomId); + redisMessageListener.addMessageListener(redisSubscriber, topic); + topics.put(roomId, topic); + } + public ChannelTopic getTopic(String roomId) { + return topics.get(roomId); + } + //유저로 채팅방 찾기 + public List getUserEnterRooms(UserEntity userEntity){ + return chatRoomRepository.findByRoomByUser(userEntity); + } + //게시물로 채팅방 찾기 + public List getPostEnterRooms(PostEntity postEntity){ + return chatRoomRepository.findByRoomByPost(postEntity); + } + //채팅방 삭제 + public void deleteById(ChatRoomEntity chatRoom){ + chatRoomRepository.delete(chatRoom); + } + + //destination정보에서 roomId 추출 public String getRoomId(String destination) { int lastIndex = destination.lastIndexOf('/'); if (lastIndex != -1) @@ -66,8 +121,22 @@ public String getRoomId(String destination) { return ""; } + // 유저가 입장한 채팅방ID와 유저 세션ID 맵핑 정보 저장 + public void setUserEnterInfo(String sessionId, String roomId) { + hashOpsEnterInfo.put(ENTER_INFO, sessionId, roomId); + } + + // 유저 세션으로 입장해 있는 채팅방 ID 조회 + public String getUserEnterRoomId(String sessionId) { + return hashOpsEnterInfo.get(ENTER_INFO, sessionId); + } + + // 유저 세션정보와 맵핑된 채팅방ID 삭제 + public void removeUserEnterInfo(String sessionId) { + hashOpsEnterInfo.delete(ENTER_INFO, sessionId); + } - //채팅방에 메시지 발송 + //채팅방에 메시지 발송 public void sendChatMessage(ChatMessageEntity chatMessage) { //chatMessage.setUserCount(chatRoomRepository.getUserCount(chatMessage.getRoomId())); @@ -79,8 +148,9 @@ public void sendChatMessage(ChatMessageEntity chatMessage) { chatMessage.setData(chatMessage.getSender() + "님이 방에서 나갔습니다."); chatMessage.setSender("[알림]"); } + redisPublisher.publish(getTopic(chatMessage.getChannelId()), chatMessage); - simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getChannelId(), chatMessage); + //simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getChannelId(), chatMessage); //redisTemplate.convertAndSend(channelTopic.getTopic(), chatMessage); diff --git a/src/main/java/com/example/nanuer_server/service/chat/RedisPublisher.java b/src/main/java/com/example/nanuer_server/service/chat/RedisPublisher.java new file mode 100644 index 0000000..6e4394e --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/chat/RedisPublisher.java @@ -0,0 +1,18 @@ +package com.example.nanuer_server.service.chat; + +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class RedisPublisher { + + private final RedisTemplate redisTemplate; + + public void publish(ChannelTopic topic, ChatMessageEntity message) { + redisTemplate.convertAndSend(topic.getTopic(), message); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/chat/RedisSubscriber.java b/src/main/java/com/example/nanuer_server/service/chat/RedisSubscriber.java new file mode 100644 index 0000000..0cae846 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/chat/RedisSubscriber.java @@ -0,0 +1,38 @@ +package com.example.nanuer_server.service.chat; + + +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.stereotype.Service; + +@Slf4j +@RequiredArgsConstructor +@Service +public class RedisSubscriber implements MessageListener { + private final ObjectMapper objectMapper; + private final RedisTemplate redisTemplate; + private final SimpMessageSendingOperations messagingTemplate; + + /** + * Redis에서 메시지가 발행(publish)되면 대기하고 있던 onMessage가 해당 메시지를 받아 처리한다. + */ + @Override + public void onMessage(Message message, byte[] pattern) { + try { + // redis에서 발행된 데이터를 받아 deserialize + String publishMessage = (String) redisTemplate.getStringSerializer().deserialize(message.getBody()); + // ChatMessage 객채로 맵핑 + ChatMessageEntity roomMessage = objectMapper.readValue(publishMessage, ChatMessageEntity.class); + // Websocket 구독자에게 채팅 메시지 Send + messagingTemplate.convertAndSend("/sub/channel" + roomMessage.getChatRoomEntity().getRoomId(), roomMessage); + } catch (Exception e) { + log.error(e.getMessage()); + } + } +} \ No newline at end of file From a74ad6a6947cf3f79832e464ed6f118696e04952 Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Thu, 18 Aug 2022 15:02:59 +0900 Subject: [PATCH 20/35] =?UTF-8?q?refactoring=20=EC=B1=84=ED=8C=85=EB=B0=A9?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=20=EC=8D=A8=EC=84=9C=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=20=EC=9D=B8=EC=8B=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/Chat/WebSocketHandler.java | 83 ------------------- .../controller/Chat/ChatController.java | 32 ++++++- .../domain/entity/ChatMessageEntity.java | 20 ++--- .../domain/entity/ChatRoomEntity.java | 35 ++++++-- .../nanuer_server/dto/Post/PostChatDto.java | 30 +++++++ .../service/chat/ChatService.java | 57 +++++++++++++ 6 files changed, 152 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java create mode 100644 src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java create mode 100644 src/main/java/com/example/nanuer_server/service/chat/ChatService.java diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java deleted file mode 100644 index 624ed4d..0000000 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketHandler.java +++ /dev/null @@ -1,83 +0,0 @@ -/* -package com.example.nanuer_server.config.Chat; - - -import com.example.nanuer_server.domain.entity.ChatMessageEntity; -import com.example.nanuer_server.utils.Utils; -import org.springframework.stereotype.Component; -import org.springframework.web.socket.CloseStatus; -import org.springframework.web.socket.TextMessage; -import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.handler.TextWebSocketHandler; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -@Component -public class WebSocketHandler extends TextWebSocketHandler { - - private final Map sessions = new ConcurrentHashMap<>(); - //웹소켓 연결 시 - @Override - public void afterConnectionEstablished(WebSocketSession session) throws Exception { - - var sessionId = session.getId(); - sessions.put(sessionId, session); - - ChatMessageEntity message = ChatMessageEntity.builder().sender(sessionId).receiver("all").build(); - message.newConnect(); - - sessions.values().forEach(s -> { - try { - if(!s.getId().equals(sessionId)) { - s.sendMessage(new TextMessage(Utils.getString(message))); - } - } - catch (Exception e) { - //TODO: throw - } - }); - } - - //양방향 데이터 통신 - @Override - protected void handleTextMessage(WebSocketSession session, TextMessage textMessage) throws Exception { - - ChatMessageEntity message = Utils.getObject(textMessage.getPayload()); - message.setSender(session.getId()); - - WebSocketSession receiver = sessions.get(message.getReceiver()); - - if (receiver != null && receiver.isOpen()) { - - receiver.sendMessage(new TextMessage(Utils.getString(message))); - } - } - - //소켓 연결 종료 - @Override - public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { - - var sessionId = session.getId(); - - sessions.remove(sessionId); - - final ChatMessageEntity message = new ChatMessageEntity(); - message.closeConnect(); - message.setSender(sessionId); - - sessions.values().forEach(s -> { - try { - s.sendMessage(new TextMessage(Utils.getString(message))); - } catch (Exception e) { - //TODO: throw - } - }); - } - - @Override - public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { - //TODO: - } -}*/ diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index f3fc82b..49f960b 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -1,15 +1,29 @@ package com.example.nanuer_server.controller.Chat; +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.config.User.JwtTokenProvider; import com.example.nanuer_server.domain.entity.ChatMessageEntity; import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.service.chat.ChatService; import lombok.RequiredArgsConstructor; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.simp.SimpMessageSendingOperations; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; @Controller @RequiredArgsConstructor public class ChatController { + private final JwtTokenProvider jwtTokenProvider; + private final ChatService chatService; + private final UserRepository userRepository; private final SimpMessageSendingOperations simpMessageSendingOperations; @@ -18,10 +32,20 @@ public class ChatController { /pub/hello - 메시지 발행 */ - @MessageMapping("/send") - public void message(ChatRoomEntity chatRoomEntity, ChatMessageEntity message) { - + @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 + public void message(ChatMessageEntity message, @RequestHeader("X-AUTH-TOKEN") String token) { + // System.out.println("토큰 : " + token); + String userEmail = jwtTokenProvider.getUserPk(token); + String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + //message.setSender(nickName); + chatService.sendChatMessage(message); + //simpMessageSendingOperations.convertAndSend("/sub/channel/" + message.getChannelId(), message); + } - simpMessageSendingOperations.convertAndSend("/sub/channel/" + message.getChannelId(), message); + @PostMapping("/chat/join") + @ResponseBody + public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { + ChatRoomEntity room = chatService.createRoom(request, postId); + return new BaseResponse<>(room.getRoomId()); } } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index 5bdf9bc..85985c1 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -10,25 +10,19 @@ @NoArgsConstructor @Builder @Data +@Setter public class ChatMessageEntity { - - private String type; + public enum Type { + ENTER, TALK, QUIT + } + private Type type; private String sender; private String channelId; private Object data; - //private String chatRoomId; - //private String writer; - //private String message; - //private MessageType type; - public void setSender(String sender) {this.sender = sender;} - - public void newConnect(){ - this.type = "new"; - } - public void closeConnect(){ - this.type = "close"; + public void setData(String data){ + this.data=data; } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java index 51c1e7c..33b9dbd 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -2,12 +2,19 @@ import lombok.*; +import org.apache.catalina.User; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; import javax.persistence.*; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; -@Table(name="chat") +@Table(name="room") @AllArgsConstructor @NoArgsConstructor @Builder @@ -16,15 +23,33 @@ @DynamicInsert @Entity @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. -public class ChatRoomEntity { +public class ChatRoomEntity implements Serializable { + private static final long serialVersionUID = 6494678977089006639L; @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int roomId; + @Column(nullable = false,unique = true) + private String roomId; + + @NotFound(action = NotFoundAction.IGNORE) + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "user_id") + @ToString.Exclude + private UserEntity userEntity; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "post_id") @ToString.Exclude private PostEntity postEntity; -} + + + public static ChatRoomEntity create(UserEntity userEntity, PostEntity postEntity){ + ChatRoomEntity room = new ChatRoomEntity(); + room.roomId = UUID.randomUUID().toString(); + room.userEntity = userEntity; + room.postEntity = postEntity; + return room; + } + + +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java b/src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java new file mode 100644 index 0000000..d75b29e --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Post/PostChatDto.java @@ -0,0 +1,30 @@ +package com.example.nanuer_server.dto.Post; + +import com.example.nanuer_server.domain.entity.HeartEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.dto.User.UserInfoDto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PostChatDto { + private int postId; + private int userId; + + private UserEntity userEntity; + + public PostEntity toEntity(){ + PostEntity postEntity = PostEntity.builder() + .postId(postId) + .userEntity(userEntity) + .build(); + return postEntity; + } + +} diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java new file mode 100644 index 0000000..8fc265f --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -0,0 +1,57 @@ +package com.example.nanuer_server.service.chat; + +import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.domain.entity.ChatMessageEntity; +import com.example.nanuer_server.domain.entity.ChatRoomEntity; +import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; +import com.example.nanuer_server.domain.repository.PostRepository; +import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.dto.Post.PostChatDto; +import com.example.nanuer_server.dto.Post.PostDto; +import com.example.nanuer_server.service.User.UserService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.UUID; + +@Service +@Transactional +@RequiredArgsConstructor +public class ChatService { + + private final UserRepository userRepository; + private final PostRepository postRepository; + private final UserService userService; + private final ChatRoomRepository chatRoomRepository; + + public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws BaseException { + int userId = userService.GetHeaderAndGetUser(request); + UserEntity userEntity = userRepository.findByUserId(userId).get(); + PostEntity postEntity = postRepository.findByPostId(postId); + ChatRoomEntity chatRoom = ChatRoomEntity.builder() + .roomId(UUID.randomUUID().toString()) + .postEntity(postEntity) + .userEntity(userEntity) + .build(); + chatRoomRepository.save(chatRoom); + return chatRoom; + } + + public void sendChatMessage(ChatMessageEntity chatMessage) { + //chatMessage.setUserCount(chatRoomRepository.getUserCount(chatMessage.getRoomId())); + if (ChatMessageEntity.Type.ENTER.equals(chatMessage.getType())) { + chatMessage.setData(chatMessage.getSender() + "님이 방에 입장했습니다."); + chatMessage.setSender("[알림]"); + + } else if (ChatMessageEntity.Type.QUIT.equals(chatMessage.getType())) { + chatMessage.setData(chatMessage.getSender() + "님이 방에서 나갔습니다."); + chatMessage.setSender("[알림]"); + } + //simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getChannelId(), chatMessage); + //redisTemplate.convertAndSend(channelTopic.getTopic(), chatMessage); + } +} From 61330b1354aa253c7c5cc61ee1cc5ec65eebc479 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Thu, 18 Aug 2022 15:49:14 +0900 Subject: [PATCH 21/35] chat_v2 --- .../controller/PermitController.java | 28 ++++++++++++ .../controller/PostController.java | 13 ++++-- .../controller/User/UserController.java | 44 ++++++------------- .../controller/mypage/MyPageController.java | 17 +++++-- .../dto/Post/CreatePostReqDto.java | 2 + .../service/User/UserService.java | 8 ++++ 6 files changed, 76 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/PermitController.java b/src/main/java/com/example/nanuer_server/controller/PermitController.java index cb57ce5..4bdddef 100644 --- a/src/main/java/com/example/nanuer_server/controller/PermitController.java +++ b/src/main/java/com/example/nanuer_server/controller/PermitController.java @@ -13,6 +13,8 @@ import lombok.extern.log4j.Log4j2; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; + @Log4j2 @RequiredArgsConstructor @RestController @@ -51,5 +53,31 @@ public BaseResponse login(@RequestBody LoginUserDto loginUserDto) { } } + //아이디 찾기 + @GetMapping("/getEmail") + public BaseResponse GetUserEmail(HttpServletRequest request, @RequestParam String phone){ + try{ + UserInfoDto userInfoDto = userService.GetUserByPhone(phone); + String result = userInfoDto.getEmail(); + return new BaseResponse<>(result); + + } + catch (BaseException exception){ + return new BaseResponse<>((exception.getStatus())); + } + } + + @PatchMapping("/updatePw") + public BaseResponse ModifyPw(@RequestParam String phone, String password){ + try { + userService.ModifyPw(phone,password); + UserInfoDto userInfoDto = userService.GetUserByPhone(phone); + String result = "새 비밀번호 : " + userInfoDto.getPassword(); + return new BaseResponse<>(result); + } catch(BaseException exception){ + return new BaseResponse<>(exception.getStatus()); + } + } + } diff --git a/src/main/java/com/example/nanuer_server/controller/PostController.java b/src/main/java/com/example/nanuer_server/controller/PostController.java index 39fa0e7..c8670e0 100644 --- a/src/main/java/com/example/nanuer_server/controller/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/PostController.java @@ -4,12 +4,14 @@ import com.example.nanuer_server.config.BaseResponse; import com.example.nanuer_server.dto.Post.*; import com.example.nanuer_server.service.PostService; +import com.example.nanuer_server.service.User.UserService; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.List; import static com.example.nanuer_server.config.BaseResponseStatus.*; @@ -22,6 +24,7 @@ public class PostController { @Autowired private final PostService postService; + private final UserService userService; @GetMapping("/test") public String testPostController() { @@ -31,7 +34,9 @@ public String testPostController() { /* 게시물 리스트 조회 */ @GetMapping("") @JsonIgnore - public BaseResponse> getPostList(@RequestParam int user_id, @RequestParam String query) { + public BaseResponse> getPostList(HttpServletRequest request ,@RequestParam String query) throws BaseException { + + int user_id = userService.GetHeaderAndGetUser(request); try { List posts = postService.getPostList(user_id, query); return new BaseResponse<>(posts); @@ -42,7 +47,9 @@ public BaseResponse> getPostList(@RequestParam int user_ /* 게시물 등록 */ @PostMapping("") - public BaseResponse createPost(@RequestBody CreatePostReqDto createPostReqDto) { + public BaseResponse createPost(HttpServletRequest request, @RequestBody CreatePostReqDto createPostReqDto) throws BaseException { + int user_id = userService.GetHeaderAndGetUser(request); + createPostReqDto.setUserId(user_id); try { if(createPostReqDto.getTitle() == null || createPostReqDto.getTitle().length() > 200) { return new BaseResponse<>(POST_POST_INVALID_TITLE); @@ -60,7 +67,7 @@ public BaseResponse createPost(@RequestBody CreatePostReqDto createPostR /* 게시물 조회 */ @GetMapping("/{post_id}") - public BaseResponse getPost(@PathVariable int post_id) { + public BaseResponse getPost(@PathVariable int post_id) { try { GetPostResDto post = postService.getPost(post_id); return new BaseResponse<>(post); diff --git a/src/main/java/com/example/nanuer_server/controller/User/UserController.java b/src/main/java/com/example/nanuer_server/controller/User/UserController.java index 2013e19..59e591d 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/UserController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/UserController.java @@ -37,7 +37,9 @@ public String hello() { //삭제 @DeleteMapping("") - public BaseResponse delete(@RequestParam String email) { + public BaseResponse delete(HttpServletRequest request) { + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); try{ userService.delete(email); String result = email + " 해당 유저가 삭제되었습니다."; @@ -51,7 +53,9 @@ public BaseResponse delete(@RequestParam String email) { //유저 상태관리 @PatchMapping("/status") - public BaseResponse UserStatus(@RequestParam String email) { + public BaseResponse UserStatus(HttpServletRequest request) { + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); try{ userService.UserStatus(email); UserInfoDto userInfoDto = userService.GetUser(email); @@ -67,7 +71,9 @@ public BaseResponse UserStatus(@RequestParam String email) { //유저 정보 조회 @GetMapping("/info") - public BaseResponse GetUser(@RequestParam String email) { + public BaseResponse GetUser(HttpServletRequest request) { + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); try{ UserInfoDto userInfoDto = userService.GetUser(email); @@ -80,33 +86,6 @@ public BaseResponse GetUser(@RequestParam String email) { } } - - //아이디 찾기 - @GetMapping("/getEmail") - public BaseResponse GetUserEmail(HttpServletRequest request, @RequestParam String phone){ - try{ - UserInfoDto userInfoDto = userService.GetUserByPhone(phone); - String result = userInfoDto.getEmail(); - return new BaseResponse<>(result); - - } - catch (BaseException exception){ - return new BaseResponse<>((exception.getStatus())); - } - } - - @PatchMapping("/updatePw") - public BaseResponse ModifyPw(@RequestParam String phone, String password){ - try { - userService.ModifyPw(phone,password); - UserInfoDto userInfoDto = userService.GetUserByPhone(phone); - String result = "새 비밀번호 : " + userInfoDto.getPassword(); - return new BaseResponse<>(result); - } catch(BaseException exception){ - return new BaseResponse<>(exception.getStatus()); - } - } - //jwt 토근 헤더에서 가져와 사용자 이메일 조회 @ResponseBody @GetMapping("/userInfo") @@ -115,6 +94,11 @@ public BaseResponse getUserInfoByJwt(HttpServletRequest request) throws return new BaseResponse<>(userId); } + public BaseResponse getUserAuth(HttpServletRequest request) throws BaseException { + Boolean result = userService.UserAuth(request); + return new BaseResponse<>(result); + } + /* // 이메일 보내기 @Transactional diff --git a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java index a379424..21ce54f 100644 --- a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java +++ b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java @@ -2,6 +2,7 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.config.User.JwtTokenProvider; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.User.UserInfoDto; import com.example.nanuer_server.service.User.UserService; @@ -10,6 +11,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.List; @Slf4j @@ -18,21 +20,30 @@ @RequiredArgsConstructor public class MyPageController { private final MyPageService myPageService; + private final UserService userService; + private final JwtTokenProvider jwtTokenProvider; + @GetMapping("/my-posts") - public BaseResponse> getMyPosts(@RequestParam String email){ + public BaseResponse> getMyPosts(HttpServletRequest request){ + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); List postDtoList = myPageService.getMyPosts(email); return new BaseResponse<>(postDtoList); } @GetMapping("/heart-posts") - public BaseResponse> getHeartPosts(@RequestParam String email){ + public BaseResponse> getHeartPosts(HttpServletRequest request){ + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); List postDtoList = myPageService.getHeartPosts(email); return new BaseResponse<>(postDtoList); } @PatchMapping("/update-user") - public BaseResponse updatedUser(@RequestBody UserInfoDto userInfoDto,@RequestParam String email){ + public BaseResponse updatedUser(HttpServletRequest request,@RequestBody UserInfoDto userInfoDto){ + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); try { var updatedUser = myPageService.updateUser(userInfoDto, email); return new BaseResponse<>(updatedUser); diff --git a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java index d5d254c..eaf0797 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java @@ -6,8 +6,10 @@ import com.example.nanuer_server.domain.entity.UserEntity; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; @Getter +@Setter @NoArgsConstructor public class CreatePostReqDto { diff --git a/src/main/java/com/example/nanuer_server/service/User/UserService.java b/src/main/java/com/example/nanuer_server/service/User/UserService.java index 615981e..93b8940 100644 --- a/src/main/java/com/example/nanuer_server/service/User/UserService.java +++ b/src/main/java/com/example/nanuer_server/service/User/UserService.java @@ -132,4 +132,12 @@ public int GetHeaderAndGetUser(HttpServletRequest request) throws BaseException return userId; } + public Boolean UserAuth(HttpServletRequest request)throws BaseException{ + String token = request.getHeader("X-AUTH-TOKEN"); + if (jwtTokenProvider.getUserPk(token) != null){ + return true; + } + else return false; + } + } From 6bc1544c9382a351d95b41e3af308b21196146e2 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Thu, 18 Aug 2022 16:57:42 +0900 Subject: [PATCH 22/35] =?UTF-8?q?=EC=9D=BC=EB=8B=A8=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/nanuer_server/dto/Post/CreatePostReqDto.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java index 7d9a7d2..2101318 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java @@ -7,7 +7,9 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; +@Setter @Getter @NoArgsConstructor public class CreatePostReqDto { From b328ade11ef3dce5c93a957a5648d793a7e8cece Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Thu, 18 Aug 2022 23:26:07 +0900 Subject: [PATCH 23/35] chat_v3 --- .../config/Chat/WebSocketConfig.java | 4 +- .../config/User/SecurityConfig.java | 4 +- .../controller/Chat/ChatController.java | 29 ++++- .../controller/Chat/RoomController.java | 15 --- .../controller/Chat/StompChatController.java | 28 ----- .../controller/PostController.java | 3 +- .../controller/User/UserController.java | 2 + .../domain/entity/ChatMessageEntity.java | 2 +- .../domain/entity/ChatRoomEntity.java | 9 +- .../repository/Chat/ChatRoomRepository.java | 8 +- .../dto/Chat/GetChatUserDto.java | 13 +++ .../service/chat/ChatService.java | 11 +- src/main/resources/templates/chat.html | 106 ------------------ src/main/resources/templates/index.html | 10 -- src/main/resources/templates/room.html | 87 -------------- src/main/resources/templates/rooms.html | 42 ------- 16 files changed, 59 insertions(+), 314 deletions(-) delete mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java delete mode 100644 src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java create mode 100644 src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java delete mode 100644 src/main/resources/templates/chat.html delete mode 100644 src/main/resources/templates/index.html delete mode 100644 src/main/resources/templates/room.html delete mode 100644 src/main/resources/templates/rooms.html diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index 27ca2ff..7d2c8d7 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -27,9 +27,9 @@ public void registerStompEndpoints(StompEndpointRegistry registry) { .addEndpoint("/ws") .setAllowedOrigins("*"); } - +/* @Override public void configureClientInboundChannel(ChannelRegistration registration) { registration.interceptors(stompHandler); - } + }*/ } diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index 0431365..10a3f08 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -52,8 +52,8 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() - .antMatchers("/user/**","/heart/**","/post/**","/mypage/**").hasAuthority("ROLE_USER") - .antMatchers( "/join","/login","/css/**", "/exception/**", "/favicon.ico", "/chat/**", "/ws/**","/room/**","/hello/**","/chat/join/**") + .antMatchers("/user/**","/heart/**","/post/**","/mypage/**","/chat/**").hasAuthority("ROLE_USER") + .antMatchers( "/join","/login","/css/**", "/exception/**", "/favicon.ico", "/chat/**", "/ws/**","/room/**","/hello/**","/chat/join/**","/message/**") .permitAll() .anyRequest().authenticated(); diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index e27baa8..de1b2c8 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -6,7 +6,9 @@ import com.example.nanuer_server.domain.entity.ChatMessageEntity; import com.example.nanuer_server.domain.entity.ChatRoomEntity; import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.dto.Chat.GetChatUserDto; import com.example.nanuer_server.service.User.UserService; import com.example.nanuer_server.service.chat.ChatService; import lombok.RequiredArgsConstructor; @@ -21,8 +23,9 @@ import javax.servlet.http.HttpServletRequest; import java.util.Optional; -@Controller +@RestController @RequiredArgsConstructor +@RequestMapping("/chat") public class ChatController { private final SimpMessageSendingOperations simpMessageSendingOperations; @@ -30,22 +33,36 @@ public class ChatController { private final ChatService chatService; private final JwtTokenProvider jwtTokenProvider; private final UserRepository userRepository; + private final ChatRoomRepository chatRoomRepository; /* /sub/channel/12345 - 구독(channelId:12345) /pub/send - 메시지 발행 */ + //방번호(roomId), 유저Id(sender) + @GetMapping("/getInfo") + public BaseResponse GetChatUser(HttpServletRequest request, @RequestParam int post_id) throws BaseException { + int userId = userService.GetHeaderAndGetUser(request); + int roomId = chatRoomRepository.findByPostId(post_id).get().getRoomId(); + GetChatUserDto getChatUserDto = GetChatUserDto.builder() + .userId(userId) + .roomId(roomId) + .build(); + return new BaseResponse<>(getChatUserDto); + } @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 - public void message(ChatMessageEntity message, @RequestHeader("X-AUTH-TOKEN") String token) { - String userEmail = jwtTokenProvider.getUserPk(token); - String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + public void message(ChatMessageEntity message) { + //String userEmail = jwtTokenProvider.getUserPk(token); + //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); chatService.sendChatMessage(message); } - @PostMapping("/chat/join") //채팅방에서 입장 버튼 (채팅하기 버튼) + + @PostMapping("/join") //채팅방에서 입장 버튼 (채팅하기 버튼) @ResponseBody - public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { + public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { ChatRoomEntity room = chatService.createRoom(request, postId); return new BaseResponse<>(room.getRoomId()); } + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java b/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java deleted file mode 100644 index 32f3644..0000000 --- a/src/main/java/com/example/nanuer_server/controller/Chat/RoomController.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.nanuer_server.controller.Chat; - -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; - -@Controller -@RequiredArgsConstructor -@RestController(value = "/chat") -@Log4j2 -public class RoomController { - - -} diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java deleted file mode 100644 index 1233b6e..0000000 --- a/src/main/java/com/example/nanuer_server/controller/Chat/StompChatController.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.example.nanuer_server.controller.Chat; - -import com.example.nanuer_server.dto.Chat.ChatMessageDto; -import lombok.RequiredArgsConstructor; -import org.springframework.messaging.handler.annotation.MessageMapping; -import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.stereotype.Controller; - -@Controller -@RequiredArgsConstructor -public class StompChatController { - - private final SimpMessagingTemplate template; //특정 Broker로 메세지를 전달 - - //Client가 SEND할 수 있는 경로 - //stompConfig에서 설정한 applicationDestinationPrefixes와 @MessageMapping 경로가 병합됨 - //"/pub/chat/enter" - @MessageMapping(value = "/chat/enter") - public void enter(ChatMessageDto message){ - message.setMessage(message.getWriter() + "님이 채팅방에 참여하였습니다."); - template.convertAndSend("/sub/chat/room/" + message.getRoomId(), message); - } - - @MessageMapping(value = "/chat/message") - public void message(ChatMessageDto message){ - template.convertAndSend("/sub/chat/room/" + message.getRoomId(), message); - } -} diff --git a/src/main/java/com/example/nanuer_server/controller/PostController.java b/src/main/java/com/example/nanuer_server/controller/PostController.java index c8670e0..1960ba9 100644 --- a/src/main/java/com/example/nanuer_server/controller/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/PostController.java @@ -35,8 +35,7 @@ public String testPostController() { @GetMapping("") @JsonIgnore public BaseResponse> getPostList(HttpServletRequest request ,@RequestParam String query) throws BaseException { - - int user_id = userService.GetHeaderAndGetUser(request); + int user_id = userService.GetHeaderAndGetUser(request); try { List posts = postService.getPostList(user_id, query); return new BaseResponse<>(posts); diff --git a/src/main/java/com/example/nanuer_server/controller/User/UserController.java b/src/main/java/com/example/nanuer_server/controller/User/UserController.java index 59e591d..55e57cf 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/UserController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/UserController.java @@ -94,6 +94,8 @@ public BaseResponse getUserInfoByJwt(HttpServletRequest request) throws return new BaseResponse<>(userId); } + @ResponseBody + @GetMapping("/AuthTest") public BaseResponse getUserAuth(HttpServletRequest request) throws BaseException { Boolean result = userService.UserAuth(request); return new BaseResponse<>(result); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index a8068e7..a3e879b 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -16,7 +16,7 @@ public enum Type { } private Type type; private String sender; - private String channelId; + private int roomId; private Object data; public void setSender(String sender) {this.sender = sender;} diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java index d3c7a9c..7480e87 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -21,12 +21,12 @@ @DynamicInsert @Entity @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. -public class ChatRoomEntity implements Serializable { +public class ChatRoomEntity { - private static final long serialVersionUID = 6494678977089006639L; @Id - @Column(nullable = false,unique = true) - private String roomId; + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "room_id") + private int roomId; @NotFound(action = NotFoundAction.IGNORE) @ManyToOne(fetch = FetchType.EAGER) @@ -43,7 +43,6 @@ public class ChatRoomEntity implements Serializable { public static ChatRoomEntity create(UserEntity userEntity, PostEntity postEntity){ ChatRoomEntity room = new ChatRoomEntity(); - room.roomId = UUID.randomUUID().toString(); room.userEntity = userEntity; room.postEntity = postEntity; return room; diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 5423cea..2e88c09 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -4,10 +4,14 @@ import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.*; -public interface ChatRoomRepository extends JpaRepository { - Optional findByRoomId(String roomId); +public interface ChatRoomRepository extends JpaRepository { + + @Query("select h from ChatRoomEntity h join fetch h.postEntity where h.postEntity.postId = :postId") + Optional findByPostId(@Param("postId") int postId); } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java new file mode 100644 index 0000000..77e882e --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java @@ -0,0 +1,13 @@ +package com.example.nanuer_server.dto.Chat; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class GetChatUserDto { + + private int userId; + + private int roomId; +} diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index 74fb566..20ce15e 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -35,7 +35,7 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws UserEntity userEntity = userRepository.findByUserId(userId).get(); PostEntity postEntity = postRepository.findByPostId(postId); ChatRoomEntity chatRoom = ChatRoomEntity.builder() - .roomId(UUID.randomUUID().toString()) + //.roomId(UUID.randomUUID().toString()) .postEntity(postEntity) .userEntity(userEntity) .build(); @@ -44,15 +44,14 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws } public void sendChatMessage(ChatMessageEntity chatMessage) { - - if (ChatMessageEntity.Type.ENTER.equals(chatMessage.getType())) { + if (ChatMessageEntity.Type.ENTER.equals(chatMessage.getType())) { //입장하는 버튼 chatMessage.setData(chatMessage.getSender() + "님이 방에 입장했습니다."); chatMessage.setSender("[알림]"); - - } else if (ChatMessageEntity.Type.QUIT.equals(chatMessage.getType())) { + } + else if (ChatMessageEntity.Type.QUIT.equals(chatMessage.getType())) { //나가기 버튼 chatMessage.setData(chatMessage.getSender() + "님이 방에서 나갔습니다."); chatMessage.setSender("[알림]"); } - simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getChannelId(), chatMessage); + simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage); } } diff --git a/src/main/resources/templates/chat.html b/src/main/resources/templates/chat.html deleted file mode 100644 index 65d7e9c..0000000 --- a/src/main/resources/templates/chat.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -
-
- -
-
-
-
-
- -
- -
-
-
-
-
- -
-
- - - \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html deleted file mode 100644 index 566549b..0000000 --- a/src/main/resources/templates/index.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/room.html b/src/main/resources/templates/room.html deleted file mode 100644 index 61b99b7..0000000 --- a/src/main/resources/templates/room.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - -
-
-

[[${room.name}]]

-
-
-
-
-
- -
- -
-
-
-
-
-
- - - - - -
-
- - - \ No newline at end of file diff --git a/src/main/resources/templates/rooms.html b/src/main/resources/templates/rooms.html deleted file mode 100644 index 2a761fc..0000000 --- a/src/main/resources/templates/rooms.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - -
- -
-
- - -
-
-
- - - - \ No newline at end of file From 6a5cf6f0b49020c4fb99a00a989ad3c77dc39329 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Thu, 18 Aug 2022 23:29:11 +0900 Subject: [PATCH 24/35] merge aborting.. --- .../com/example/nanuer_server/config/Chat/WebSocketConfig.java | 3 ++- .../domain/repository/Chat/ChatRoomRepository.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index 27ca2ff..dfe2731 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -25,7 +25,8 @@ public void configureMessageBroker(MessageBrokerRegistry registry) { public void registerStompEndpoints(StompEndpointRegistry registry) { registry .addEndpoint("/ws") - .setAllowedOrigins("*"); + .setAllowedOrigins("*") + .withSockJS(); } @Override diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 5423cea..8e39726 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -4,10 +4,10 @@ import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.*; public interface ChatRoomRepository extends JpaRepository { Optional findByRoomId(String roomId); - } \ No newline at end of file From a6adee1ad2a6e52b4090a4f4677cd3facec239c0 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Fri, 19 Aug 2022 12:43:13 +0900 Subject: [PATCH 25/35] =?UTF-8?q?=EB=A7=88=EC=8A=A4=ED=84=B0=20pull=20?= =?UTF-8?q?=EC=A0=84=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PostController.java | 19 +++++++++++++------ .../domain/entity/ChatMessageEntity.java | 4 ++-- .../domain/repository/PostRepository.java | 16 ++++++++++++---- .../nanuer_server/service/PostService.java | 13 ++++++------- .../service/chat/ChatService.java | 8 -------- 5 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/PostController.java b/src/main/java/com/example/nanuer_server/controller/PostController.java index 1960ba9..b44b231 100644 --- a/src/main/java/com/example/nanuer_server/controller/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/PostController.java @@ -1,7 +1,8 @@ -package com.example.nanuer_server.controller; +package com.example.nanuer_server.controller.Post; import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.dto.Post.*; import com.example.nanuer_server.service.PostService; import com.example.nanuer_server.service.User.UserService; @@ -11,8 +12,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import java.util.List; +import java.util.Map; import static com.example.nanuer_server.config.BaseResponseStatus.*; @@ -34,11 +38,14 @@ public String testPostController() { /* 게시물 리스트 조회 */ @GetMapping("") @JsonIgnore - public BaseResponse> getPostList(HttpServletRequest request ,@RequestParam String query) throws BaseException { - int user_id = userService.GetHeaderAndGetUser(request); + public BaseResponse>> getPostList(HttpServletRequest request, @RequestParam String query) { try { - List posts = postService.getPostList(user_id, query); - return new BaseResponse<>(posts); + int user_id = userService.GetHeaderAndGetUser(request); + Map> response = new HashMap>(); + List posts = postService.getPostList(user_id, query); + response.put("postList", posts); + + return new BaseResponse<>(response); } catch (BaseException exception) { return new BaseResponse<>(exception.getStatus()); } @@ -98,4 +105,4 @@ public BaseResponse deletePost(@PathVariable int post_id) { } } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index a3e879b..00670dc 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -15,11 +15,11 @@ public enum Type { ENTER, TALK, QUIT } private Type type; - private String sender; + private int sender; private int roomId; private Object data; - public void setSender(String sender) {this.sender = sender;} + public void setSender(int sender) {this.sender = sender;} public void setData(String data){ this.data=data; } diff --git a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 7f67347..74e0d23 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java @@ -8,9 +8,17 @@ import java.util.List; public interface PostRepository extends JpaRepository { - @Query(value = "select p from PostEntity p " + - "join fetch p.userEntity where p.userEntity.userId = :user_id and p.postStatus = :post_status and (p.title like %:query% or p.content like %:query%)") - List findAll(@Param("user_id") int user_id, @Param("post_status") int status, @Param("query") String query); + @Query(value = "select p " + + "from PostEntity p " + + "left join UserEntity u on p.userEntity.userId = u.userId " + + "where u.university = (" + + "select u.university from u where u.userId = :user_id) " + + "and p.postStatus = 1 and (p.title like %:query% or p.content like %:query%) order by p.postId desc") + List findAll(@Param("user_id") int user_id, @Param("query") String query); + + @Query(value = "select p from PostEntity p where p.postStatus = 1 order by p.postId desc") + List findAllOrderByPostIdDesc(); + @Query("select p from PostEntity p where p.postId = :postId") PostEntity findByPostId(@Param("postId") int postId); -} +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 71f5904..4af8a32 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -24,13 +24,12 @@ public class PostService { private final HeartRepository heartRepository; private final HeartService heartService; - public List getPostList(int user_id, String query) throws BaseException { - List posts = new ArrayList<>(); - - List entities = postRepository.findAll(user_id, 1, query); - for (PostEntity entity : entities) posts.add(new GetPostListResDto(entity)); + public List getAllPosts() throws BaseException { + return postRepository.findAllOrderByPostIdDesc(); + } - return posts; + public List getPostList(int user_id, String query) throws BaseException { + return postRepository.findAll(user_id, query); } public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { @@ -73,4 +72,4 @@ public int deletePost(int post_id) throws BaseException { postEntity.delete(); return post_id; } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index 20ce15e..b7bc361 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -44,14 +44,6 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws } public void sendChatMessage(ChatMessageEntity chatMessage) { - if (ChatMessageEntity.Type.ENTER.equals(chatMessage.getType())) { //입장하는 버튼 - chatMessage.setData(chatMessage.getSender() + "님이 방에 입장했습니다."); - chatMessage.setSender("[알림]"); - } - else if (ChatMessageEntity.Type.QUIT.equals(chatMessage.getType())) { //나가기 버튼 - chatMessage.setData(chatMessage.getSender() + "님이 방에서 나갔습니다."); - chatMessage.setSender("[알림]"); - } simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage); } } From 95debde3d7153a3cf90752f534ed3ca8bd7dbe8e Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Fri, 19 Aug 2022 17:10:21 +0900 Subject: [PATCH 26/35] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EB=AC=BC=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=8B=9C=20=EC=B1=84=ED=8C=85=EB=B0=A9=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/Chat/ChatController.java | 15 ++++++++++----- .../controller/Post/PostController.java | 13 ++++++++++++- .../domain/entity/ChatRoomEntity.java | 10 +++++++++- .../nanuer_server/domain/entity/PostEntity.java | 6 ++++-- .../repository/Chat/ChatRoomRepository.java | 5 +++-- .../nanuer_server/dto/Chat/GetChatUserDto.java | 2 +- .../nanuer_server/service/PostService.java | 8 ++++---- .../nanuer_server/service/chat/ChatService.java | 12 ++++-------- 8 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index de1b2c8..01bce69 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -34,34 +34,39 @@ public class ChatController { private final JwtTokenProvider jwtTokenProvider; private final UserRepository userRepository; private final ChatRoomRepository chatRoomRepository; + /* /sub/channel/12345 - 구독(channelId:12345) /pub/send - 메시지 발행 */ + //방번호(roomId), 유저Id(sender) @GetMapping("/getInfo") public BaseResponse GetChatUser(HttpServletRequest request, @RequestParam int post_id) throws BaseException { int userId = userService.GetHeaderAndGetUser(request); - int roomId = chatRoomRepository.findByPostId(post_id).get().getRoomId(); + int roomNumber = chatRoomRepository.findAllByPostId(post_id).get(0).getRoomNumber(); + ChatRoomEntity room = chatService.createRoom(request, post_id); GetChatUserDto getChatUserDto = GetChatUserDto.builder() .userId(userId) - .roomId(roomId) + .roomNumber(roomNumber) .build(); return new BaseResponse<>(getChatUserDto); } @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 - public void message(ChatMessageEntity message) { + public ChatMessageEntity message(ChatMessageEntity message) { //String userEmail = jwtTokenProvider.getUserPk(token); //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); chatService.sendChatMessage(message); + return message; } - @PostMapping("/join") //채팅방에서 입장 버튼 (채팅하기 버튼) + @PostMapping("/join") //채팅방에서 입장 버튼 (채팅하기 버튼) [게시물 작성자 말고 채팅 참여자만 보이는] @ResponseBody public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { + ChatRoomEntity room = chatService.createRoom(request, postId); - return new BaseResponse<>(room.getRoomId()); + return new BaseResponse<>(room.getRoomNumber()); } diff --git a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java index b44b231..a103ca6 100644 --- a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -2,7 +2,11 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.domain.entity.ChatRoomEntity; import com.example.nanuer_server.domain.entity.PostEntity; +import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; +import com.example.nanuer_server.domain.repository.PostRepository; +import com.example.nanuer_server.domain.repository.UserRepository; import com.example.nanuer_server.dto.Post.*; import com.example.nanuer_server.service.PostService; import com.example.nanuer_server.service.User.UserService; @@ -29,6 +33,9 @@ public class PostController { @Autowired private final PostService postService; private final UserService userService; + private final ChatRoomRepository chatRoomRepository; + private final UserRepository userRepository; + private final PostRepository postRepository; @GetMapping("/test") public String testPostController() { @@ -63,8 +70,12 @@ public BaseResponse createPost(HttpServletRequest request, @RequestBody if(createPostReqDto.getContent() == null || createPostReqDto.getContent().length() > 1000) { return new BaseResponse<>(POST_POST_INVALID_CONTENT); } + int post_id = postService.createPost(createPostReqDto); + String result = "post_id = " + post_id + " 게시물 등록 성공"; + //채팅 생성 추가 + ChatRoomEntity chatRoomEntity = ChatRoomEntity.create(true,userRepository.findByUserId(user_id).get(), postRepository.findByPostId(post_id)); + chatRoomRepository.save(chatRoomEntity); - String result = "post_id = " + postService.createPost(createPostReqDto) + " 게시물 등록 성공"; return new BaseResponse<>(result); } catch (BaseException exception) { return new BaseResponse<>(exception.getStatus()); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java index 7480e87..69dffea 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -1,6 +1,7 @@ package com.example.nanuer_server.domain.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.*; import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; @@ -28,6 +29,10 @@ public class ChatRoomEntity { @Column(name = "room_id") private int roomId; + private int roomNumber; + + private Boolean isWriter; + @NotFound(action = NotFoundAction.IGNORE) @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id") @@ -36,15 +41,18 @@ public class ChatRoomEntity { @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "post_id") + @JsonIgnore @ToString.Exclude private PostEntity postEntity; - public static ChatRoomEntity create(UserEntity userEntity, PostEntity postEntity){ + public static ChatRoomEntity create(Boolean isWriter,UserEntity userEntity, PostEntity postEntity){ ChatRoomEntity room = new ChatRoomEntity(); room.userEntity = userEntity; room.postEntity = postEntity; + room.roomNumber = postEntity.getPostId(); + room.isWriter = isWriter; return room; } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index fcbe346..2de09e8 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -4,6 +4,7 @@ import com.example.nanuer_server.domain.Progress; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.Post.UpdatePostReqDto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import org.hibernate.annotations.NotFound; @@ -62,6 +63,7 @@ public class PostEntity extends BaseTimeEntity { // 이미 삭제된 userId값이 postEntity에 남아있게 되고, postEntity를 조회할 때, 해당 userId값을 가진 userEntity를 찾을 수 없다는 // 에러가 발생한다. 이를 해결하기 위해 붙인 것이 @NotFound(action = NotFoundAction.IGNORE) @NotFound(action = NotFoundAction.IGNORE) + @JsonIgnore @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id") @ToString.Exclude @@ -74,6 +76,7 @@ public class PostEntity extends BaseTimeEntity { //채팅 ****** @OneToMany(mappedBy = "postEntity") + @JsonIgnore @ToString.Exclude private List chatRoomEntityList; @@ -96,12 +99,11 @@ public void delete() { } - public void increaseView() { this.view += 1; } - public PostDto toDto(){ + public PostDto toDto() { PostDto postDto = PostDto.builder() .postId(postId) .title(title) diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 2e88c09..13246d5 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -1,8 +1,6 @@ package com.example.nanuer_server.domain.repository.Chat; import com.example.nanuer_server.domain.entity.ChatRoomEntity; -import com.example.nanuer_server.domain.entity.PostEntity; -import com.example.nanuer_server.domain.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -14,4 +12,7 @@ public interface ChatRoomRepository extends JpaRepository findByPostId(@Param("postId") int postId); + @Query("select h from ChatRoomEntity h join fetch h.postEntity where h.postEntity.postId = :postId") + List findAllByPostId(@Param("postId") int postId); + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java index 77e882e..bc5288d 100644 --- a/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java @@ -9,5 +9,5 @@ public class GetChatUserDto { private int userId; - private int roomId; + private int roomNumber; } diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index 4af8a32..ad06274 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -1,10 +1,7 @@ package com.example.nanuer_server.service; import com.example.nanuer_server.config.BaseException; -import com.example.nanuer_server.domain.entity.CategoryEntity; -import com.example.nanuer_server.domain.entity.HeartEntity; -import com.example.nanuer_server.domain.entity.PostEntity; -import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.entity.*; import com.example.nanuer_server.domain.repository.*; import com.example.nanuer_server.dto.Post.*; import com.example.nanuer_server.service.heart.HeartService; @@ -40,8 +37,11 @@ public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { createPostReqDto.setCategoryEntity(categoryEntity); return postRepository.save(createPostReqDto.toEntity()).getPostId(); + } + + @Transactional public GetPostResDto getPost(int post_id) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index b7bc361..6a11cd1 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -34,16 +34,12 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws int userId = userService.GetHeaderAndGetUser(request); UserEntity userEntity = userRepository.findByUserId(userId).get(); PostEntity postEntity = postRepository.findByPostId(postId); - ChatRoomEntity chatRoom = ChatRoomEntity.builder() - //.roomId(UUID.randomUUID().toString()) - .postEntity(postEntity) - .userEntity(userEntity) - .build(); - chatRoomRepository.save(chatRoom); - return chatRoom; + ChatRoomEntity chatRoomEntity = ChatRoomEntity.create(false,userEntity, postEntity); + chatRoomRepository.save(chatRoomEntity); + return chatRoomEntity; } public void sendChatMessage(ChatMessageEntity chatMessage) { - simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage); + simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage.getData()); } } From dfba4f7915d9c396635d30e0c5302e8af336a294 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Sun, 21 Aug 2022 20:14:29 +0900 Subject: [PATCH 27/35] =?UTF-8?q?fix=20:=20=ED=95=99=EA=B5=90=EB=B3=84=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20userEntity=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/nanuer_server/controller/Chat/ChatController.java | 1 + .../nanuer_server/domain/entity/ChatMessageEntity.java | 2 +- .../com/example/nanuer_server/domain/entity/PostEntity.java | 2 +- .../com/example/nanuer_server/service/chat/ChatService.java | 4 ++++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index 01bce69..c591df2 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -57,6 +57,7 @@ public BaseResponse GetChatUser(HttpServletRequest request, @Req public ChatMessageEntity message(ChatMessageEntity message) { //String userEmail = jwtTokenProvider.getUserPk(token); //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + System.out.println("ChatController : message() => " + message.getData()); chatService.sendChatMessage(message); return message; } diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index 00670dc..50d6bb1 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -17,7 +17,7 @@ public enum Type { private Type type; private int sender; private int roomId; - private Object data; + private String data; public void setSender(int sender) {this.sender = sender;} public void setData(String data){ diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 2de09e8..6493d38 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -63,7 +63,7 @@ public class PostEntity extends BaseTimeEntity { // 이미 삭제된 userId값이 postEntity에 남아있게 되고, postEntity를 조회할 때, 해당 userId값을 가진 userEntity를 찾을 수 없다는 // 에러가 발생한다. 이를 해결하기 위해 붙인 것이 @NotFound(action = NotFoundAction.IGNORE) @NotFound(action = NotFoundAction.IGNORE) - @JsonIgnore + //@JsonIgnore @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id") @ToString.Exclude diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index 6a11cd1..fdb0d3a 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -40,6 +40,10 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws } public void sendChatMessage(ChatMessageEntity chatMessage) { + System.out.println("ChatService : sendChatMessage() => " + chatMessage.getData()); simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage.getData()); + + System.out.println("ChatService : sendChatMessage() after converAndsend => " + chatMessage.getData()); + } } From 7e8c246f4d41adb4f6d9041818dbfb143459672f Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Mon, 22 Aug 2022 00:17:58 +0900 Subject: [PATCH 28/35] =?UTF-8?q?0821=20=EC=98=A4=EB=A5=98=EC=88=98?= =?UTF-8?q?=EC=A0=95,=20return=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/User/SecurityConfig.java | 2 +- .../controller/Chat/ChatController.java | 22 ++++++-- .../controller/PermitController.java | 2 +- .../controller/User/UserController.java | 5 +- .../domain/entity/ChatMessageEntity.java | 2 +- .../repository/Chat/ChatRoomRepository.java | 4 ++ .../dto/Chat/GetChatUserDto.java | 6 +++ .../dto/User/GetUserInfoRes.java | 50 +++++++++++++++++++ .../nanuer_server/dto/User/UserInfoDto.java | 6 +-- .../nanuer_server/service/PostService.java | 2 + .../service/User/UserService.java | 19 +++++++ .../service/chat/ChatService.java | 2 +- .../service/mypage/MyPageService.java | 2 +- 13 files changed, 111 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/example/nanuer_server/dto/User/GetUserInfoRes.java diff --git a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java index 10a3f08..5cb656c 100644 --- a/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java +++ b/src/main/java/com/example/nanuer_server/config/User/SecurityConfig.java @@ -53,7 +53,7 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() .antMatchers("/user/**","/heart/**","/post/**","/mypage/**","/chat/**").hasAuthority("ROLE_USER") - .antMatchers( "/join","/login","/css/**", "/exception/**", "/favicon.ico", "/chat/**", "/ws/**","/room/**","/hello/**","/chat/join/**","/message/**") + .antMatchers( "/join","/login","/css/**", "/getEmail","/updatePw", "/chat/**", "/ws/**","/room/**","/hello/**","/chat/join/**","/message/**") .permitAll() .anyRequest().authenticated(); diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index 01bce69..c4bbbde 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -44,11 +44,14 @@ public class ChatController { @GetMapping("/getInfo") public BaseResponse GetChatUser(HttpServletRequest request, @RequestParam int post_id) throws BaseException { int userId = userService.GetHeaderAndGetUser(request); + UserEntity userEntity = userRepository.findByUserId(userId).get(); int roomNumber = chatRoomRepository.findAllByPostId(post_id).get(0).getRoomNumber(); ChatRoomEntity room = chatService.createRoom(request, post_id); GetChatUserDto getChatUserDto = GetChatUserDto.builder() .userId(userId) .roomNumber(roomNumber) + .nickName(userEntity.getNickName()) + .profileImg(userEntity.getProfileImg()) .build(); return new BaseResponse<>(getChatUserDto); } @@ -61,13 +64,26 @@ public ChatMessageEntity message(ChatMessageEntity message) { return message; } - @PostMapping("/join") //채팅방에서 입장 버튼 (채팅하기 버튼) [게시물 작성자 말고 채팅 참여자만 보이는] + //jwt 읽어서 isWriter(글작성자인지, 아닌지) return + /* + @GetMapping("/isWriter") + public BaseResponse IsWriter(){ + + Boolean result = ; + return new BaseResponse<>(result) + } +*/ + + /* + @PostMapping("/join") @ResponseBody public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { ChatRoomEntity room = chatService.createRoom(request, postId); return new BaseResponse<>(room.getRoomNumber()); - } - + }*/ + + + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/controller/PermitController.java b/src/main/java/com/example/nanuer_server/controller/PermitController.java index 4bdddef..f7c9964 100644 --- a/src/main/java/com/example/nanuer_server/controller/PermitController.java +++ b/src/main/java/com/example/nanuer_server/controller/PermitController.java @@ -38,8 +38,8 @@ public BaseResponse join(@RequestBody JoinUserDto joinUserDto) { //로그인 - @PostMapping("/login") @ResponseBody + @PostMapping("/login") public BaseResponse login(@RequestBody LoginUserDto loginUserDto) { try { diff --git a/src/main/java/com/example/nanuer_server/controller/User/UserController.java b/src/main/java/com/example/nanuer_server/controller/User/UserController.java index 55e57cf..a4fed32 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/UserController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/UserController.java @@ -4,6 +4,7 @@ import com.example.nanuer_server.config.BaseResponse; import com.example.nanuer_server.domain.entity.UserEntity; import com.example.nanuer_server.domain.entity.UserRole; +import com.example.nanuer_server.dto.User.GetUserInfoRes; import com.example.nanuer_server.dto.User.JoinUserDto; import com.example.nanuer_server.dto.User.UserInfoDto; @@ -71,11 +72,11 @@ public BaseResponse UserStatus(HttpServletRequest request) { //유저 정보 조회 @GetMapping("/info") - public BaseResponse GetUser(HttpServletRequest request) { + public BaseResponse GetUser(HttpServletRequest request) { String token = request.getHeader("X-AUTH-TOKEN"); String email = jwtTokenProvider.getUserPk(token); try{ - UserInfoDto userInfoDto = userService.GetUser(email); + GetUserInfoRes userInfoDto = userService.GetUser2(email); return new BaseResponse<>(userInfoDto); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index 00670dc..50d6bb1 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -17,7 +17,7 @@ public enum Type { private Type type; private int sender; private int roomId; - private Object data; + private String data; public void setSender(int sender) {this.sender = sender;} public void setData(String data){ diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 13246d5..a53a2d2 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -15,4 +15,8 @@ public interface ChatRoomRepository extends JpaRepository findAllByPostId(@Param("postId") int postId); + /* + @Query("select user_id from room where (is_writer=1) and (room_number=?)") + List findIsWriterByPostId(@Param("postId") int postId); +*/ } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java index bc5288d..9297909 100644 --- a/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java @@ -9,5 +9,11 @@ public class GetChatUserDto { private int userId; + private String nickName; + + private String profileImg; + private int roomNumber; + + } diff --git a/src/main/java/com/example/nanuer_server/dto/User/GetUserInfoRes.java b/src/main/java/com/example/nanuer_server/dto/User/GetUserInfoRes.java new file mode 100644 index 0000000..8739bac --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/User/GetUserInfoRes.java @@ -0,0 +1,50 @@ +package com.example.nanuer_server.dto.User; + + +import com.example.nanuer_server.domain.entity.UserEntity; +import com.example.nanuer_server.domain.entity.UserRole; +import com.example.nanuer_server.dto.Post.PostDto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.annotation.Nullable; +import javax.persistence.Column; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class GetUserInfoRes { + //유저 정보 return 값 이렇게만 반환해달라고 요청하셔서 만든 dto입니다!! + private String password; + private String name; + private String email; + private String nickName; + private String phone; + private String birth; + private String profileImg; + private String university; + + + + public UserEntity toEntity() { + UserEntity userEntity = UserEntity.builder() + .password(password) + .name(name) + .nickName(nickName) + .email(email) + .phone(phone) + .birth(birth) + .profileImg(profileImg) + .university(university) + + .build(); + return userEntity; + } + +} diff --git a/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java b/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java index 6683edd..2f16deb 100644 --- a/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java +++ b/src/main/java/com/example/nanuer_server/dto/User/UserInfoDto.java @@ -28,10 +28,10 @@ public class UserInfoDto { private String profileImg; private String university; private String userStatus; - private int userScore; - private UserRole role; + private int userScore; + private UserRole role; - private List postDtoList = new ArrayList<>(); + //private List postDtoList = new ArrayList<>(); public UserEntity toEntity() { UserEntity userEntity = UserEntity.builder() diff --git a/src/main/java/com/example/nanuer_server/service/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java index ad06274..582e485 100644 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/PostService.java @@ -72,4 +72,6 @@ public int deletePost(int post_id) throws BaseException { postEntity.delete(); return post_id; } + + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/User/UserService.java b/src/main/java/com/example/nanuer_server/service/User/UserService.java index 93b8940..c34fdaf 100644 --- a/src/main/java/com/example/nanuer_server/service/User/UserService.java +++ b/src/main/java/com/example/nanuer_server/service/User/UserService.java @@ -8,6 +8,7 @@ import com.example.nanuer_server.domain.entity.UserEntity; import com.example.nanuer_server.domain.repository.PostRepository; import com.example.nanuer_server.domain.repository.UserRepository; +import com.example.nanuer_server.dto.User.GetUserInfoRes; import com.example.nanuer_server.dto.User.JoinUserDto; import com.example.nanuer_server.dto.User.LoginUserDto; import com.example.nanuer_server.dto.User.UserInfoDto; @@ -101,6 +102,24 @@ public UserInfoDto GetUser(String email) throws BaseException { return userInfoDto; } + //유저 정보 return 값 특정해주셔서 만든 service 함수 입니다!! + public GetUserInfoRes GetUser2(String email) throws BaseException { + UserEntity userEntity = userRepository.findByEmail(email).get(); + GetUserInfoRes userInfoDto = new GetUserInfoRes(); + userInfoDto.setBirth(userEntity.getBirth()); + userInfoDto.setEmail(userEntity.getEmail()); + userInfoDto.setName(userEntity.getName()); + userInfoDto.setPhone(userEntity.getPhone()); + userInfoDto.setUniversity(userEntity.getUniversity()); + userInfoDto.setProfileImg(userEntity.getProfileImg()); + userInfoDto.setNickName(userEntity.getNickName()); + userInfoDto.setPassword(userEntity.getPassword()); + if(!userEntity.isPresent()) { + throw new BaseException(USERS_EMPTY_USER_EMAIL); + } + return userInfoDto; + } + public UserInfoDto GetUserByPhone(String phone) throws BaseException { Optional userEntity = userRepository.findByPhone(phone); UserInfoDto userInfoDto = userEntity.get().toDto(); diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index 6a11cd1..6f88af0 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -40,6 +40,6 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws } public void sendChatMessage(ChatMessageEntity chatMessage) { - simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage.getData()); + simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage); } } diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index f0bd8f1..95a3918 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -70,7 +70,7 @@ private UserEntity updateUserUsingUserInfoDto(UserEntity userEntity, UserInfoDto userEntity.setProfileImg(userInfoDto.getProfileImg()); userEntity.setUniversity(userInfoDto.getUniversity()); userEntity.setUserStatus(userInfoDto.getUserStatus()); - userEntity.setUserScore(userInfoDto.getUserScore()); + //userEntity.setUserScore(userInfoDto.getUserScore()); userEntity.setRole(userInfoDto.getRole()); userEntity.setPostEntities(userInfoDto.toEntity().getPostEntities()); return userEntity; From 6709d98fbce15befe534db4880a9c03e8fa27539 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Wed, 24 Aug 2022 02:43:58 +0900 Subject: [PATCH 29/35] =?UTF-8?q?=EC=88=98=EC=A0=95=20:=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EA=B0=80=20=EC=B1=84=ED=8C=85=EB=B0=A9=20=EB=93=A4?= =?UTF-8?q?=EC=96=B4=EA=B0=88=EB=95=8C=20=EC=9D=B4=EB=AF=B8=20room?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=EC=97=90=20=EC=A1=B4=EC=9E=AC?= =?UTF-8?q?=ED=95=98=EB=A9=B4=20=EC=A4=91=EB=B3=B5=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=ED=95=98=EC=A7=80=EC=95=8A=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/Chat/ChatController.java | 21 +------------------ .../domain/entity/ChatMessageEntity.java | 1 + .../domain/entity/ChatRoomEntity.java | 2 ++ .../repository/Chat/ChatRoomRepository.java | 6 ++---- .../service/chat/ChatService.java | 12 ++++++++--- 5 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index c4bbbde..43bc40c 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -21,6 +21,7 @@ import org.springframework.web.socket.WebSocketHttpHeaders; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.Optional; @RestController @@ -58,30 +59,10 @@ public BaseResponse GetChatUser(HttpServletRequest request, @Req @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 public ChatMessageEntity message(ChatMessageEntity message) { - //String userEmail = jwtTokenProvider.getUserPk(token); - //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); chatService.sendChatMessage(message); return message; } - //jwt 읽어서 isWriter(글작성자인지, 아닌지) return - /* - @GetMapping("/isWriter") - public BaseResponse IsWriter(){ - - Boolean result = ; - return new BaseResponse<>(result) - } -*/ - - /* - @PostMapping("/join") - @ResponseBody - public BaseResponse createRoom(HttpServletRequest request, @RequestParam int postId) throws BaseException { - - ChatRoomEntity room = chatService.createRoom(request, postId); - return new BaseResponse<>(room.getRoomNumber()); - }*/ diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index 50d6bb1..1f79826 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -19,6 +19,7 @@ public enum Type { private int roomId; private String data; + public void setSender(int sender) {this.sender = sender;} public void setData(String data){ this.data=data; diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java index 69dffea..544d0e2 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -10,6 +10,8 @@ import javax.persistence.*; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; diff --git a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java index 4467e75..019bcd1 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -17,8 +17,6 @@ public interface ChatRoomRepository extends JpaRepository findAllByPostId(@Param("postId") int postId); - /* - @Query("select user_id from room where (is_writer=1) and (room_number=?)") - List findIsWriterByPostId(@Param("postId") int postId); -*/ + Optional findByUserEntityAndIsWriterAndPostEntity(UserEntity userEntity, Boolean isWriter , PostEntity postEntity); + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java index 6f88af0..a1f25b4 100644 --- a/src/main/java/com/example/nanuer_server/service/chat/ChatService.java +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; +import java.util.List; import java.util.UUID; @Service @@ -34,12 +35,17 @@ public ChatRoomEntity createRoom(HttpServletRequest request, int postId) throws int userId = userService.GetHeaderAndGetUser(request); UserEntity userEntity = userRepository.findByUserId(userId).get(); PostEntity postEntity = postRepository.findByPostId(postId); - ChatRoomEntity chatRoomEntity = ChatRoomEntity.create(false,userEntity, postEntity); - chatRoomRepository.save(chatRoomEntity); - return chatRoomEntity; + if(chatRoomRepository.findByUserEntityAndIsWriterAndPostEntity(userEntity, false, postEntity).isEmpty() && + chatRoomRepository.findByUserEntityAndIsWriterAndPostEntity(userEntity, true, postEntity).isEmpty() ){ + ChatRoomEntity chatRoomEntity = ChatRoomEntity.create(false,userEntity, postEntity); + chatRoomRepository.save(chatRoomEntity); + return chatRoomEntity; + } + else return chatRoomRepository.findAllByPostId(postId).get(0); } public void sendChatMessage(ChatMessageEntity chatMessage) { simpMessageSendingOperations.convertAndSend("/sub/channel/" + chatMessage.getRoomId(), chatMessage); } + } From c388c7dc289f4e7941e4bbef1a749715a61dd978 Mon Sep 17 00:00:00 2001 From: kidzero00 Date: Wed, 24 Aug 2022 13:33:18 +0900 Subject: [PATCH 30/35] =?UTF-8?q?0824=20=EB=B3=91=ED=95=A9=20=EC=A0=84=20?= =?UTF-8?q?=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/BaseResponseStatus.java | 5 +++-- .../config/Chat/StompHandler.java | 17 -------------- .../controller/Chat/ChatController.java | 7 ------ .../controller/PermitController.java | 6 ++--- .../controller/User/UserController.java | 22 ------------------- .../controller/message/MessageController.java | 1 - .../domain/entity/MessageType.java | 5 ----- .../domain/entity/UserEntity.java | 2 +- .../service/User/UserService.java | 5 +++++ 9 files changed, 11 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/com/example/nanuer_server/domain/entity/MessageType.java diff --git a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java index b803fce..33626fd 100644 --- a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java +++ b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java @@ -29,7 +29,7 @@ public enum BaseResponseStatus { // [POST] /post POST_USERS_EMPTY_EMAIL(false, 2015, "아이디를 입력해주세요."), POST_USERS_INVALID_EMAIL(false, 2016, "이메일 형식을 확인해주세요."), - POST_USERS_EXISTS_EMAIL(false,2017,"중복된 아이디입니다."), + POST_USERS_EXISTS_EMAIL(false,2017,"중복된 이메일입니다."), POST_POST_INVALID_TITLE(false, 2018, "게시물의 제목을 확인해주세요."), POST_POST_INVALID_CONTENT(false, 2019, "게시물의 내용을 확인해주세요."), POST_POST_EMPTY_POST(false,2020, "존재하지 않는 게시물입니다."), @@ -37,7 +37,8 @@ public enum BaseResponseStatus { // [POST] /users POST_USERS_EMPTY_ID(false, 2015, "아이디를 입력해주세요."), POST_USERS_INVALID_ID(false, 2016, "이메일 형식을 확인해주세요."), - POST_USERS_EXISTS_ID(false,2017,"중복된 아이디입니다."), + //POST_USERS_EXISTS_ID(false,2017,"중복된 이메일입니다."), + POST_USERS_EXISTS_PHONE(false, 2021, "중복된 휴대폰 번호입니다."), /** * 3000 : Response 오류 diff --git a/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java b/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java index 4852353..42a9c32 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java @@ -33,23 +33,6 @@ public Message preSend(Message message, MessageChannel channel) { if (StompCommand.CONNECT.equals(accessor.getCommand())) { jwtTokenProvider.validateToken(Objects.requireNonNull(accessor.getFirstNativeHeader("X-AUTH-TOKEN"))); System.out.println("토큰 : " + accessor.getNativeHeader("X-AUTH-TOKEN")); - //String token = Objects.requireNonNull(accessor.getFirstNativeHeader("X-AUTH-TOKEN")); - } else if (StompCommand.SUBSCRIBE == accessor.getCommand()) { // 채팅룸 구독요청 - // header정보에서 구독 destination정보를 얻고, roomId를 추출한다. - //String roomId = chatService.getRoomId(Optional.ofNullable((String) message.getHeaders().get("simpDestination")).orElse("InvalidRoomId")); - // 채팅방에 들어온 클라이언트 sessionId를 roomId와 맵핑해 놓는다.(나중에 특정 세션이 어떤 채팅방에 들어가 있는지 알기 위함) - //String sessionId = (String) message.getHeaders().get("simpSessionId"); - //System.out.println("세션 아이디 : " + sessionId); - //chatRoomRepository.setUserEnterInfo(sessionId, roomId); - // 채팅방의 인원수를 +1한다. - //chatRoomRepository.plusUserCount(roomId); - // 클라이언트 입장 메시지를 채팅방에 발송한다.(redis publish) - //String token = Objects.requireNonNull(accessor.getFirstNativeHeader("X-AUTH-TOKEN")); - //String name = userRepository.findByEmail(jwtTokenProvider.getUserPk(token)).get().getNickName(); - //String name = Optional.ofNullable((Principal) message.getHeaders().get("simpUser")).map(Principal::getName).orElse("UnknownUser"); - //chatService.sendChatMessage(ChatMessageEntity.builder().type(ChatMessageEntity.Type.ENTER).channelId(roomId).sender(name).build()); - //System.out.println("구독 정보 : " + name + roomId); - } return message; } diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index 43bc40c..5a29b6e 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -12,18 +12,11 @@ import com.example.nanuer_server.service.User.UserService; import com.example.nanuer_server.service.chat.ChatService; import lombok.RequiredArgsConstructor; -import org.springframework.messaging.handler.annotation.Header; import org.springframework.messaging.handler.annotation.MessageMapping; import org.springframework.messaging.simp.SimpMessageSendingOperations; -import org.springframework.messaging.simp.stomp.StompHeaderAccessor; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; -import org.springframework.web.socket.WebSocketHttpHeaders; import javax.servlet.http.HttpServletRequest; -import java.util.List; -import java.util.Optional; - @RestController @RequiredArgsConstructor @RequestMapping("/chat") diff --git a/src/main/java/com/example/nanuer_server/controller/PermitController.java b/src/main/java/com/example/nanuer_server/controller/PermitController.java index f7c9964..75d268d 100644 --- a/src/main/java/com/example/nanuer_server/controller/PermitController.java +++ b/src/main/java/com/example/nanuer_server/controller/PermitController.java @@ -26,8 +26,6 @@ public class PermitController { @ResponseBody @PostMapping("/join") public BaseResponse join(@RequestBody JoinUserDto joinUserDto) { - //BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - //UserEntity userEntity = UserEntity.createUser(userDto); try { UserEntity userEntity = userService.signup(joinUserDto); return new BaseResponse<>(userEntity); @@ -37,7 +35,6 @@ public BaseResponse join(@RequestBody JoinUserDto joinUserDto) { } //로그인 - @ResponseBody @PostMapping("/login") public BaseResponse login(@RequestBody LoginUserDto loginUserDto) { @@ -55,7 +52,7 @@ public BaseResponse login(@RequestBody LoginUserDto loginUserDto) { //아이디 찾기 @GetMapping("/getEmail") - public BaseResponse GetUserEmail(HttpServletRequest request, @RequestParam String phone){ + public BaseResponse GetUserEmail(@RequestParam String phone){ try{ UserInfoDto userInfoDto = userService.GetUserByPhone(phone); String result = userInfoDto.getEmail(); @@ -67,6 +64,7 @@ public BaseResponse GetUserEmail(HttpServletRequest request, @RequestPar } } + //비밀번호 재설정 @PatchMapping("/updatePw") public BaseResponse ModifyPw(@RequestParam String phone, String password){ try { diff --git a/src/main/java/com/example/nanuer_server/controller/User/UserController.java b/src/main/java/com/example/nanuer_server/controller/User/UserController.java index a4fed32..ca9c7f4 100644 --- a/src/main/java/com/example/nanuer_server/controller/User/UserController.java +++ b/src/main/java/com/example/nanuer_server/controller/User/UserController.java @@ -1,24 +1,14 @@ package com.example.nanuer_server.controller.User; - import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; -import com.example.nanuer_server.domain.entity.UserEntity; -import com.example.nanuer_server.domain.entity.UserRole; import com.example.nanuer_server.dto.User.GetUserInfoRes; -import com.example.nanuer_server.dto.User.JoinUserDto; - import com.example.nanuer_server.dto.User.UserInfoDto; import com.example.nanuer_server.service.User.UserService; import com.example.nanuer_server.config.User.JwtTokenProvider; -import com.example.nanuer_server.dto.User.LoginUserDto; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.web.bind.annotation.*; - import javax.servlet.http.HttpServletRequest; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Optional; @Log4j2 @@ -102,17 +92,5 @@ public BaseResponse getUserAuth(HttpServletRequest request) throws Base return new BaseResponse<>(result); } - /* - // 이메일 보내기 - @Transactional - @PostMapping("/sendEmail") - public String sendEmail(@RequestParam("memberEmail") String memberEmail){ - MailDTO dto = ms.createMailAndChangePassword(memberEmail); - ms.mailSend(dto); - - return "/member/login"; - } - -*/ } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/controller/message/MessageController.java b/src/main/java/com/example/nanuer_server/controller/message/MessageController.java index b14119b..a402ade 100644 --- a/src/main/java/com/example/nanuer_server/controller/message/MessageController.java +++ b/src/main/java/com/example/nanuer_server/controller/message/MessageController.java @@ -25,7 +25,6 @@ public BaseResponse sendSMS(String phone) { String ran = Integer.toString(rand.nextInt(10)); numStr += ran; } - System.out.println("수신자 번호 : " + phone); System.out.println("인증번호 : " + numStr); messageService.sendSMS(phone,numStr); diff --git a/src/main/java/com/example/nanuer_server/domain/entity/MessageType.java b/src/main/java/com/example/nanuer_server/domain/entity/MessageType.java deleted file mode 100644 index 4c7258d..0000000 --- a/src/main/java/com/example/nanuer_server/domain/entity/MessageType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.nanuer_server.domain.entity; - -public enum MessageType { - JOIN, CHAT -} diff --git a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java index 7176f0a..61cfd87 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/UserEntity.java @@ -42,7 +42,7 @@ public class UserEntity extends BaseTimeEntity { @Column(name= "nick_name" ,nullable = false) private String nickName; - @Column(nullable = false) + @Column(nullable = false,unique = true) private String phone; @Column(nullable = false) diff --git a/src/main/java/com/example/nanuer_server/service/User/UserService.java b/src/main/java/com/example/nanuer_server/service/User/UserService.java index e8cb30c..b0073d0 100644 --- a/src/main/java/com/example/nanuer_server/service/User/UserService.java +++ b/src/main/java/com/example/nanuer_server/service/User/UserService.java @@ -40,6 +40,11 @@ public UserEntity signup(JoinUserDto userDto) throws BaseException { String email = userDto.getEmail(); if (userRepository.findByEmail(userDto.getEmail()).orElse(null) != null) { throw new BaseException(POST_USERS_EXISTS_EMAIL); + //이메일 중복 validation + } + else if(userRepository.findByPhone(userDto.getPhone()).orElse(null) != null){ + throw new BaseException(POST_USERS_EXISTS_PHONE); + //휴대폰 중복 validation } try{ userDto.setPassword(passwordEncoder.encode(userDto.getPassword())); From d818ba97de39e5cf706030440f04897d2d8990ba Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Wed, 24 Aug 2022 13:47:22 +0900 Subject: [PATCH 31/35] feature add : update progress / Validation check --- .../config/BaseResponseStatus.java | 1 + .../config/Chat/WebSocketConfig.java | 3 +- .../controller/Chat/ChatController.java | 4 +++ .../controller/Post/PostController.java | 19 +++++++++-- .../domain/entity/ChatMessageEntity.java | 4 +++ .../domain/entity/PostEntity.java | 5 +-- .../domain/repository/PostRepository.java | 5 +++ .../dto/Post/CreatePostReqDto.java | 4 +-- .../nanuer_server/dto/Post/GetPostResDto.java | 4 +-- .../dto/Post/UpdatePostReqDto.java | 4 +-- .../nanuer_server/dto/post/PostDto.java | 4 +-- .../service/post/PostService.java | 32 +++++++++++++------ 12 files changed, 66 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java index b803fce..3a7aa0f 100644 --- a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java +++ b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java @@ -33,6 +33,7 @@ public enum BaseResponseStatus { POST_POST_INVALID_TITLE(false, 2018, "게시물의 제목을 확인해주세요."), POST_POST_INVALID_CONTENT(false, 2019, "게시물의 내용을 확인해주세요."), POST_POST_EMPTY_POST(false,2020, "존재하지 않는 게시물입니다."), + POST_POST_INVALID_CATEGORY(false, 2021, "게시물의 카테고리를 확인해주세요."), // [POST] /users POST_USERS_EMPTY_ID(false, 2015, "아이디를 입력해주세요."), diff --git a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java index 643827d..7d2c8d7 100644 --- a/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -25,8 +25,7 @@ public void configureMessageBroker(MessageBrokerRegistry registry) { public void registerStompEndpoints(StompEndpointRegistry registry) { registry .addEndpoint("/ws") - .setAllowedOrigins("*") - .withSockJS(); + .setAllowedOrigins("*"); } /* @Override diff --git a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java index c4bbbde..e988241 100644 --- a/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -60,6 +60,10 @@ public BaseResponse GetChatUser(HttpServletRequest request, @Req public ChatMessageEntity message(ChatMessageEntity message) { //String userEmail = jwtTokenProvider.getUserPk(token); //String nickName = userRepository.findByEmail(userEmail).get().getNickName(); + + UserEntity userEntity = userRepository.findByUserId(message.getSender()).get(); + message.setNickName(userEntity.getNickName()); + message.setProfileImg(userEntity.getProfileImg()); chatService.sendChatMessage(message); return message; } diff --git a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java index 6d35a71..5bd47b6 100644 --- a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -2,6 +2,7 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; +import com.example.nanuer_server.domain.Progress; import com.example.nanuer_server.domain.entity.ChatRoomEntity; import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.repository.Chat.ChatRoomRepository; @@ -63,14 +64,18 @@ public BaseResponse createPost(HttpServletRequest request, @RequestBody int user_id = userService.GetHeaderAndGetUser(request); createPostReqDto.setUserId(user_id); try { - if(createPostReqDto.getTitle() == null || createPostReqDto.getTitle().length() > 200) { + if (createPostReqDto.getTitle() == null || createPostReqDto.getTitle().length() > 200) { return new BaseResponse<>(POST_POST_INVALID_TITLE); } - if(createPostReqDto.getContent() == null || createPostReqDto.getContent().length() > 1000) { + if (createPostReqDto.getContent() == null || createPostReqDto.getContent().length() > 1000) { return new BaseResponse<>(POST_POST_INVALID_CONTENT); } + if (createPostReqDto.getCategoryId() < 1 || createPostReqDto.getCategoryId() > 5) + return new BaseResponse<>(POST_POST_INVALID_CATEGORY); + int post_id = postService.createPost(createPostReqDto); String result = "post_id = " + post_id + " 게시물 등록 성공"; + //채팅 생성 추가 ChatRoomEntity chatRoomEntity = ChatRoomEntity.create(true,userRepository.findByUserId(user_id).get(), postRepository.findByPostId(post_id)); chatRoomRepository.save(chatRoomEntity); @@ -115,4 +120,14 @@ public BaseResponse deletePost(@PathVariable int post_id) { } } + /* 게시물 진행 상태를 '거래 완료' 로 변경 */ + @PatchMapping("/progress") + public BaseResponse updateProgress(@RequestParam int post_id) { + try { + return new BaseResponse<>(postService.updateProgress(post_id, 2)); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java index 50d6bb1..dfc70c2 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -4,6 +4,7 @@ import javax.persistence.*; +import java.util.List; @AllArgsConstructor @NoArgsConstructor @@ -18,6 +19,9 @@ public enum Type { private int sender; private int roomId; private String data; + private String profileImg; + private String nickName; + private List userIdList; public void setSender(int sender) {this.sender = sender;} public void setData(String data){ diff --git a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java index 089a16d..959375f 100644 --- a/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java +++ b/src/main/java/com/example/nanuer_server/domain/entity/PostEntity.java @@ -39,18 +39,19 @@ public class PostEntity extends BaseTimeEntity { @Column(nullable = true) private int heartCount; + @Column(name = "progress") @Enumerated(EnumType.STRING) private Progress progress; @JsonProperty("cost_info") - private String costInfo; + private int costInfo; private String menu; private int total; @JsonProperty("delivery_cost") - private String deliveryCost; + private int deliveryCost; private String location; diff --git a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 74e0d23..6dae14b 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java @@ -2,6 +2,7 @@ import com.example.nanuer_server.domain.entity.PostEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -21,4 +22,8 @@ public interface PostRepository extends JpaRepository { @Query("select p from PostEntity p where p.postId = :postId") PostEntity findByPostId(@Param("postId") int postId); + +// @Modifying(clearAutomatically = true) +// @Query("update PostEntity p set p.progress = 'End' where p.postId = :postId") +// void updateProgress(@Param("postId") int postId); } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java index 9cd645d..9c52f3c 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java @@ -16,11 +16,11 @@ public class CreatePostReqDto { private String title; private String content; - private String costInfo; + private int costInfo; private String menu; private int total; - private String deliveryCost; + private int deliveryCost; private String location; private String time; private UserEntity userEntity; diff --git a/src/main/java/com/example/nanuer_server/dto/Post/GetPostResDto.java b/src/main/java/com/example/nanuer_server/dto/Post/GetPostResDto.java index a4707c2..129718a 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/GetPostResDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/GetPostResDto.java @@ -18,10 +18,10 @@ public class GetPostResDto { private int view; private int heartCount; private Progress progress; - private String costInfo; + private int costInfo; private String menu; private int total; - private String deliveryCost; + private int deliveryCost; private String location; private String time; private int postStatus; diff --git a/src/main/java/com/example/nanuer_server/dto/Post/UpdatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/UpdatePostReqDto.java index 3283a27..58cb6e6 100644 --- a/src/main/java/com/example/nanuer_server/dto/Post/UpdatePostReqDto.java +++ b/src/main/java/com/example/nanuer_server/dto/Post/UpdatePostReqDto.java @@ -13,14 +13,14 @@ public class UpdatePostReqDto { private String content; @JsonProperty("cost_info") - private String costInfo; + private int costInfo; private String menu; private int total; @JsonProperty("delivery_cost") - private String deliveryCost; + private int deliveryCost; private String location; diff --git a/src/main/java/com/example/nanuer_server/dto/post/PostDto.java b/src/main/java/com/example/nanuer_server/dto/post/PostDto.java index e17a961..2eb9db7 100644 --- a/src/main/java/com/example/nanuer_server/dto/post/PostDto.java +++ b/src/main/java/com/example/nanuer_server/dto/post/PostDto.java @@ -17,9 +17,9 @@ public class PostDto { private int view; private int heartCount; private Progress progress; - private String costInfo; + private int costInfo; private int total; - private String deliveryCost; + private int deliveryCost; private String location; private String time; private int postStatus; diff --git a/src/main/java/com/example/nanuer_server/service/post/PostService.java b/src/main/java/com/example/nanuer_server/service/post/PostService.java index 77a0510..4faf0e5 100644 --- a/src/main/java/com/example/nanuer_server/service/post/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/post/PostService.java @@ -1,6 +1,7 @@ package com.example.nanuer_server.service.post; import com.example.nanuer_server.config.BaseException; +import com.example.nanuer_server.domain.Progress; import com.example.nanuer_server.domain.entity.*; import com.example.nanuer_server.domain.repository.*; import com.example.nanuer_server.dto.Post.*; @@ -11,6 +12,8 @@ import javax.transaction.Transactional; import java.util.*; +import static com.example.nanuer_server.config.BaseResponseStatus.POST_POST_EMPTY_POST; + @Service @RequiredArgsConstructor public class PostService { @@ -41,11 +44,10 @@ public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { } - @Transactional public GetPostResDto getPost(int post_id) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(() -> new IllegalArgumentException("해당 게시물이 없습니다. post_id = " + post_id)); + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); postEntity.increaseView(); @@ -55,7 +57,7 @@ public GetPostResDto getPost(int post_id) throws BaseException { @Transactional public int updatePost(int post_id, UpdatePostReqDto updatePostReqDto) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(()-> new IllegalArgumentException("해당 게시글이 없습니다. post_id = "+ post_id)); + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); postEntity.update(updatePostReqDto); @@ -65,19 +67,31 @@ public int updatePost(int post_id, UpdatePostReqDto updatePostReqDto) throws Bas @Transactional public int deletePost(int post_id) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. post_id = " + post_id)); - for(HeartEntity heartEntity : heartRepository.findByPostId(postEntity.getPostId())) { + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); + + for (HeartEntity heartEntity : heartRepository.findByPostId(postEntity.getPostId())) { heartService.deleteHeart(heartEntity.getHeartId()); } + postEntity.delete(); return post_id; } - public int updatePostProgress(int post_id, int progressId) throws BaseException { + public Progress updateProgress(int post_id, int progressId) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. post_id = " + post_id)); + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); - postEntity.updateProgress(progressId); - return post_id; + if (progressId == 1) { + postEntity.setProgress(Progress.Confirm); + postRepository.save(postEntity); + return Progress.Confirm; + } + else if (progressId == 2) { + postEntity.setProgress(Progress.End); + postRepository.save(postEntity); + return Progress.End; + } + + return Progress.Recruit; } } \ No newline at end of file From a2ad385f7b1a700e43dfd3805753767a844541d3 Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Mon, 22 Aug 2022 14:13:29 +0900 Subject: [PATCH 32/35] =?UTF-8?q?complete=20refactoring=20add=20Heart(post?= =?UTF-8?q?Id=EB=A7=8C=20=EB=B0=9B=EA=B3=A0,=20=EC=9C=A0=EC=A0=80=EB=8A=94?= =?UTF-8?q?=20=ED=86=A0=ED=81=B0=EC=9C=BC=EB=A1=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/heart/HeartController.java | 6 ++++-- .../example/nanuer_server/dto/heart/AddHeartDto.java | 2 +- .../nanuer_server/service/heart/HeartService.java | 11 ++++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java index c49ad33..d6a954a 100644 --- a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java +++ b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java @@ -9,6 +9,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; + @Slf4j @RestController @RequestMapping("/heart") @@ -20,9 +22,9 @@ public class HeartController { //AddHeartDto 요청할 때 "userId"와 "postId"만 json으로 넘기면 됨 @PostMapping("/add") - public BaseResponse addHeart(@RequestBody AddHeartDto addheartDto){ + public BaseResponse addHeart(HttpServletRequest request, @RequestBody AddHeartDto addheartDto){ try { - HeartDto addedHeartDto = heartService.addHeart(addheartDto); + HeartDto addedHeartDto = heartService.addHeart(request, addheartDto); return new BaseResponse<>(addedHeartDto); } catch (BaseException exception) { return new BaseResponse<>(exception.getStatus()); diff --git a/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java b/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java index a3699a7..e168004 100644 --- a/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java +++ b/src/main/java/com/example/nanuer_server/dto/heart/AddHeartDto.java @@ -15,7 +15,7 @@ @AllArgsConstructor @Builder public class AddHeartDto { - private int userId; + private int postId; private UserEntity userEntity; private PostEntity postEntity; diff --git a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java index ffef17e..1db6909 100644 --- a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java +++ b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java @@ -2,6 +2,7 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponseStatus; +import com.example.nanuer_server.config.User.JwtTokenProvider; import com.example.nanuer_server.domain.entity.HeartEntity; import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; @@ -14,6 +15,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; + // 게시물이 삭제되면 heart도 같이 삭제 @Service @Transactional @@ -25,13 +28,15 @@ public class HeartService { private final UserRepository userRepository; + private final JwtTokenProvider jwtTokenProvider; // - public HeartDto addHeart(AddHeartDto addheartDto) throws BaseException { + public HeartDto addHeart(HttpServletRequest request, AddHeartDto addheartDto) throws BaseException { if(postRepository.findByPostId(addheartDto.getPostId()).getPostStatus() ==0){ throw new BaseException(BaseResponseStatus.USER_USER_EMPTY_USER); } - - UserEntity userEntity = userRepository.getReferenceById(addheartDto.getUserId()); + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); + UserEntity userEntity = userRepository.findByEmail(email).get(); PostEntity postEntity = postRepository.getReferenceById(addheartDto.getPostId()); addheartDto.setUserEntity(userEntity); From 0fae231ed93a7626d34ccfc7de1b54bf60854699 Mon Sep 17 00:00:00 2001 From: Dayz-new Date: Mon, 22 Aug 2022 15:15:02 +0900 Subject: [PATCH 33/35] =?UTF-8?q?complete=20refactoring=20mypage=20and=20h?= =?UTF-8?q?eart(=EC=99=84=EC=A0=84=20=EB=81=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/heart/HeartController.java | 6 ++--- .../domain/repository/HeartRepository.java | 6 ++++- .../service/heart/HeartService.java | 26 +++++++++++++------ .../service/post/PostService.java | 6 ++--- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java index d6a954a..a61f642 100644 --- a/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java +++ b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java @@ -31,10 +31,10 @@ public BaseResponse addHeart(HttpServletRequest request, @RequestBody } } - @DeleteMapping("/delete/{heart_id}") - public BaseResponse deleteHeart(@PathVariable(name = "heart_id") int heartId){ + @DeleteMapping("/delete/{post_id}") + public BaseResponse deleteHeart(HttpServletRequest request, @PathVariable(name = "post_id") int postId){ try { - heartService.deleteHeart(heartId); + heartService.deleteHeart(request, postId); String message = "찜이 해제되었습니다."; return new BaseResponse<>(message); } catch (BaseException exception){ diff --git a/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java index 63a70fc..d093cd4 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java @@ -12,5 +12,9 @@ public interface HeartRepository extends JpaRepository { List findAll(@Param("userId")int userId); @Query("select h from HeartEntity h join fetch h.postEntity where h.postEntity.postId = :postId") - List findByPostId(@Param("postId") int postId); + List findAllByPostId(@Param("postId") int postId); + + @Query("select h from HeartEntity h join fetch h.userEntity where h.userEntity.email = :email") + List findByUserEmail(@Param("email") String email); + } diff --git a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java index 1db6909..7bccbad 100644 --- a/src/main/java/com/example/nanuer_server/service/heart/HeartService.java +++ b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java @@ -16,6 +16,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; +import java.util.List; // 게시물이 삭제되면 heart도 같이 삭제 @Service @@ -50,14 +51,23 @@ public HeartDto addHeart(HttpServletRequest request, AddHeartDto addheartDto) th return heartEntity.toDto(); } - public void deleteHeart(int heartId) throws BaseException { - HeartEntity heartEntity = heartRepository.findById(heartId).get(); - if(heartEntity.getPostEntity().getPostStatus()==0){ - throw new BaseException(BaseResponseStatus.POST_POST_EMPTY_POST); - } - PostEntity postEntity = heartEntity.getPostEntity(); - postEntity.setHeartCount(postEntity.getHeartCount()-1); - heartRepository.delete(heartEntity); + public void deleteHeart(HttpServletRequest request, int postId) throws BaseException { + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); + List heartEntities = heartRepository.findByUserEmail(email); + for(int i = 0; i new IllegalArgumentException("해당 게시글이 없습니다. post_id = " + post_id)); - for(HeartEntity heartEntity : heartRepository.findByPostId(postEntity.getPostId())) { - heartService.deleteHeart(heartEntity.getHeartId()); + for(HeartEntity heartEntity : heartRepository.findAllByPostId(postEntity.getPostId())){ + heartRepository.delete(heartEntity); } postEntity.delete(); return post_id; From 44cd530a25bf10a51feeb5f8a7ca83e9997362e7 Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Thu, 25 Aug 2022 13:00:31 +0900 Subject: [PATCH 34/35] fix my page --- .../controller/mypage/MyPageController.java | 21 +++++++--- .../domain/repository/HeartRepository.java | 5 +++ .../domain/repository/PostRepository.java | 4 ++ .../domain/repository/UserRepository.java | 1 + .../service/mypage/MyPageService.java | 39 +++++++++++-------- 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java index 21ce54f..39dafee 100644 --- a/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java +++ b/src/main/java/com/example/nanuer_server/controller/mypage/MyPageController.java @@ -3,6 +3,7 @@ import com.example.nanuer_server.config.BaseException; import com.example.nanuer_server.config.BaseResponse; import com.example.nanuer_server.config.User.JwtTokenProvider; +import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.User.UserInfoDto; import com.example.nanuer_server.service.User.UserService; @@ -12,7 +13,9 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j @RestController @@ -25,19 +28,25 @@ public class MyPageController { @GetMapping("/my-posts") - public BaseResponse> getMyPosts(HttpServletRequest request){ + public BaseResponse>> getMyPosts(HttpServletRequest request){ String token = request.getHeader("X-AUTH-TOKEN"); String email = jwtTokenProvider.getUserPk(token); - List postDtoList = myPageService.getMyPosts(email); - return new BaseResponse<>(postDtoList); + + Map> response = new HashMap<>(); + response.put("postList", myPageService.getMyPosts(email)); + //List postDtoList = myPageService.getMyPosts(email); + return new BaseResponse<>(response); } @GetMapping("/heart-posts") - public BaseResponse> getHeartPosts(HttpServletRequest request){ + public BaseResponse>> getHeartPosts(HttpServletRequest request){ String token = request.getHeader("X-AUTH-TOKEN"); String email = jwtTokenProvider.getUserPk(token); - List postDtoList = myPageService.getHeartPosts(email); - return new BaseResponse<>(postDtoList); + + Map> response = new HashMap<>(); + response.put("postList", myPageService.getHeartPosts(email)); + //List postDtoList = myPageService.getHeartPosts(email); + return new BaseResponse<>(response); } @PatchMapping("/update-user") diff --git a/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java index d093cd4..54dd0a0 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java @@ -1,6 +1,7 @@ package com.example.nanuer_server.domain.repository; import com.example.nanuer_server.domain.entity.HeartEntity; +import com.example.nanuer_server.domain.entity.PostEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -17,4 +18,8 @@ public interface HeartRepository extends JpaRepository { @Query("select h from HeartEntity h join fetch h.userEntity where h.userEntity.email = :email") List findByUserEmail(@Param("email") String email); + + + + } diff --git a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 6dae14b..50ad115 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java @@ -23,6 +23,10 @@ public interface PostRepository extends JpaRepository { @Query("select p from PostEntity p where p.postId = :postId") PostEntity findByPostId(@Param("postId") int postId); + @Query("select p from PostEntity p where p.postId in (" + + "select h.postEntity.postId from HeartEntity h where h.userEntity.userId = :userId)") + List findHeartByUserId(@Param("userId") int user_id); + // @Modifying(clearAutomatically = true) // @Query("update PostEntity p set p.progress = 'End' where p.postId = :postId") // void updateProgress(@Param("postId") int postId); diff --git a/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java index 14c7372..39e0c11 100644 --- a/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java +++ b/src/main/java/com/example/nanuer_server/domain/repository/UserRepository.java @@ -14,4 +14,5 @@ public interface UserRepository extends JpaRepository { Optional findByPhone(String phone); List findAll(); + } diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index 95a3918..0a4b4cc 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -5,6 +5,7 @@ import com.example.nanuer_server.domain.entity.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; import com.example.nanuer_server.domain.repository.HeartRepository; +import com.example.nanuer_server.domain.repository.PostRepository; import com.example.nanuer_server.domain.repository.UserRepository; import com.example.nanuer_server.dto.Post.PostDto; import com.example.nanuer_server.dto.User.UserInfoDto; @@ -24,30 +25,36 @@ @RequiredArgsConstructor public class MyPageService { private final UserRepository userRepository; - + private final PostRepository postRepository; private final HeartRepository heartRepository; - public List getMyPosts(String email){ + public List getMyPosts(String email){ List postEntityList = userRepository.findByEmail(email).get().getPostEntities(); - List postDtoList = postEntityList.stream() - .map(PostEntity::toDto) - .collect(Collectors.toList()); - return postDtoList; +// List postDtoList = postEntityList.stream() +// .map(PostEntity::toDto) +// .collect(Collectors.toList()); + return postEntityList; } // 마이페이지에서 회원이 찜한 게시물들을 볼 수 있는 메서드 - public List getHeartPosts(String email){ - List heartDtoList = heartRepository - .findAll(userRepository.findByEmail(email).get().getUserId()) - .stream() - .map(HeartEntity::toDto) - .collect(Collectors.toList()); + public List getHeartPosts(String email) { +// List heartDtoList = heartRepository +// .findAll(userRepository.findByEmail(email).get().getUserId()) +// .stream() +// .map(HeartEntity::toDto) +// .collect(Collectors.toList()); +// +// List postDtoList = heartDtoList.stream() +// .map(HeartDto::getPostDto) +// .collect(Collectors.toList()); +// return postDtoList; + + Optional userEntity = userRepository.findByEmail(email); + return postRepository.findHeartByUserId(userEntity.get().getUserId()); + + - List postDtoList = heartDtoList.stream() - .map(HeartDto::getPostDto) - .collect(Collectors.toList()); - return postDtoList; } public UserInfoDto updateUser(UserInfoDto userInfoDto,String email) throws BaseException{ From 8fa4cd7dd1f26f9d406f530febdc066b1571722c Mon Sep 17 00:00:00 2001 From: yeojinLee-dev Date: Tue, 30 Aug 2022 10:34:08 +0900 Subject: [PATCH 35/35] fix/ add api --- .../controller/Post/PostController.java | 10 ++++++++++ .../nanuer_server/service/mypage/MyPageService.java | 13 +++++++++---- .../nanuer_server/service/post/PostService.java | 11 ++++++++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java index 5bd47b6..c405d9d 100644 --- a/src/main/java/com/example/nanuer_server/controller/Post/PostController.java +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -130,4 +130,14 @@ public BaseResponse updateProgress(@RequestParam int post_id) { } } + /* 게시물 진행 상태 리턴 */ + @GetMapping("/progress") + public BaseResponse getProgress(@RequestParam int post_id) { + try { + return new BaseResponse<>(postService.getProgress(post_id)); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java index 0a4b4cc..d0ad05b 100644 --- a/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java +++ b/src/main/java/com/example/nanuer_server/service/mypage/MyPageService.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; @@ -31,10 +32,17 @@ public class MyPageService { public List getMyPosts(String email){ List postEntityList = userRepository.findByEmail(email).get().getPostEntities(); + List lists = new ArrayList<>(); + + for (PostEntity postEntity : postEntityList) { + if (postEntity.getPostStatus() == 1) + lists.add(postEntity); + } + // List postDtoList = postEntityList.stream() // .map(PostEntity::toDto) // .collect(Collectors.toList()); - return postEntityList; + return lists; } // 마이페이지에서 회원이 찜한 게시물들을 볼 수 있는 메서드 @@ -52,9 +60,6 @@ public List getHeartPosts(String email) { Optional userEntity = userRepository.findByEmail(email); return postRepository.findHeartByUserId(userEntity.get().getUserId()); - - - } public UserInfoDto updateUser(UserInfoDto userInfoDto,String email) throws BaseException{ diff --git a/src/main/java/com/example/nanuer_server/service/post/PostService.java b/src/main/java/com/example/nanuer_server/service/post/PostService.java index 81749f8..4890e2a 100644 --- a/src/main/java/com/example/nanuer_server/service/post/PostService.java +++ b/src/main/java/com/example/nanuer_server/service/post/PostService.java @@ -69,9 +69,7 @@ public int deletePost(int post_id) throws BaseException { PostEntity postEntity = postRepository.findById(post_id) .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); - for (HeartEntity heartEntity : heartRepository.findAllByPostId(postEntity.getPostId())) { - heartRepository.delete(heartEntity); - } + heartRepository.deleteAll(heartRepository.findAllByPostId(postEntity.getPostId())); postEntity.delete(); return post_id; @@ -94,4 +92,11 @@ else if (progressId == 2) { return Progress.Recruit; } + + public Progress getProgress(int post_id) throws BaseException { + PostEntity postEntity = postRepository.findById(post_id) + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); + + return postEntity.getProgress(); + } } \ No newline at end of file