diff --git a/build.gradle b/build.gradle index 419ca20..79eabee 100644 --- a/build.gradle +++ b/build.gradle @@ -45,12 +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-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/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/BaseResponseStatus.java b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java index e06b467..af80568 100644 --- a/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java +++ b/src/main/java/com/example/nanuer_server/config/BaseResponseStatus.java @@ -24,18 +24,22 @@ public enum BaseResponseStatus { // users USERS_EMPTY_USER_EMAIL(false, 2010, "유저 이메일 값을 확인해주세요."), + USER_USER_EMPTY_USER(false, 2011, "존재하지 않는 유저입니다."), // [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, "존재하지 않는 게시물입니다."), + POST_POST_INVALID_CATEGORY(false, 2021, "게시물의 카테고리를 확인해주세요."), // [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 new file mode 100644 index 0000000..42a9c32 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/StompHandler.java @@ -0,0 +1,39 @@ +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")); + } + return message; + } +} 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..7d2c8d7 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/config/Chat/WebSocketConfig.java @@ -0,0 +1,35 @@ +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.simp.config.ChannelRegistration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.*; + +@Configuration +@EnableWebSocketMessageBroker +@RequiredArgsConstructor +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + private final StompHandler stompHandler; + + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + registry.enableSimpleBroker("/sub"); + registry.setApplicationDestinationPrefixes("/pub"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + 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/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 c83ba43..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 @@ -52,7 +52,9 @@ protected void configure(HttpSecurity http) throws Exception { //URL 인증여부. http.authorizeRequests() - .antMatchers( "/", "/user/**", "/css/**", "/api/mypage/**", "/exception/**", "/favicon.ico", "/post/**").permitAll() + .antMatchers("/user/**","/heart/**","/post/**","/mypage/**","/chat/**").hasAuthority("ROLE_USER") + .antMatchers( "/join","/login","/css/**", "/getEmail","/updatePw", "/chat/**", "/ws/**","/room/**","/hello/**","/chat/join/**","/message/**") + .permitAll() .anyRequest().authenticated(); //JwtFilter 추가 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..d7b717d --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/Chat/ChatController.java @@ -0,0 +1,88 @@ +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.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; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.simp.SimpMessageSendingOperations; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +@RestController +@RequiredArgsConstructor +@RequestMapping("/chat") +public class ChatController { + + private final SimpMessageSendingOperations simpMessageSendingOperations; + private final UserService userService; + 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); + 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); + } + + @MessageMapping("/send") //채팅방에서 메세지 보내기 버튼 + 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()); + System.out.println("ChatController : message() => " + message.getData()); + 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()); + }*/ + + + + +} \ 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 new file mode 100644 index 0000000..75d268d --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/PermitController.java @@ -0,0 +1,81 @@ +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.*; + +import javax.servlet.http.HttpServletRequest; + +@Log4j2 +@RequiredArgsConstructor +@RestController +public class PermitController { + + private final UserService userService; + private final JwtTokenProvider jwtTokenProvider; + + @ResponseBody + @PostMapping("/join") + public BaseResponse join(@RequestBody JoinUserDto joinUserDto) { + try { + UserEntity userEntity = userService.signup(joinUserDto); + return new BaseResponse<>(userEntity); + } catch (BaseException exception) { + return new BaseResponse<>((exception.getStatus())); + } + } + + //로그인 + @ResponseBody + @PostMapping("/login") + 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())); + } + } + + //아이디 찾기 + @GetMapping("/getEmail") + public BaseResponse GetUserEmail(@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/Post/PostController.java b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java new file mode 100644 index 0000000..c405d9d --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/Post/PostController.java @@ -0,0 +1,143 @@ +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.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; +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.post.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.HashMap; +import java.util.List; +import java.util.Map; + +import static com.example.nanuer_server.config.BaseResponseStatus.*; + +@Log4j2 +@RestController +@RequestMapping("/post") +@RequiredArgsConstructor +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() { + return "success"; + } + + /* 게시물 리스트 조회 */ + @GetMapping("") + @JsonIgnore + public BaseResponse>> getPostList(HttpServletRequest request, @RequestParam String query) { + try { + 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()); + } + } + + /* 게시물 등록 */ + @PostMapping("") + 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); + } + 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); + + return new BaseResponse<>(result); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + + /* 게시물 조회 */ + @GetMapping("/{post_id}") + public BaseResponse getPost(@PathVariable int post_id) { + try { + GetPostResDto post = postService.getPost(post_id); + return new BaseResponse<>(post); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + + /* 게시물 수정 */ + @PutMapping("/{post_id}") + public BaseResponse updatePost(@PathVariable int post_id, @RequestBody UpdatePostReqDto updatePostReqDto) { + try { + String result = "post_id = " + postService.updatePost(post_id, updatePostReqDto) + " 수정 완료"; + return new BaseResponse<>(result); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + + } + + /* 게시물 삭제 */ + @PatchMapping("/{post_id}") + public BaseResponse deletePost(@PathVariable int post_id) { + try { + String result = "post_id = " + postService.deletePost(post_id) + " 삭제 완료"; + return new BaseResponse<>(result); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + + /* 게시물 진행 상태를 '거래 완료' 로 변경 */ + @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()); + } + } + + /* 게시물 진행 상태 리턴 */ + @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/controller/PostController.java b/src/main/java/com/example/nanuer_server/controller/PostController.java deleted file mode 100644 index 39fa0e7..0000000 --- a/src/main/java/com/example/nanuer_server/controller/PostController.java +++ /dev/null @@ -1,95 +0,0 @@ -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.dto.Post.*; -import com.example.nanuer_server.service.PostService; -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 java.util.List; - -import static com.example.nanuer_server.config.BaseResponseStatus.*; - -@Log4j2 -@RestController -@RequestMapping("/post") -@RequiredArgsConstructor -public class PostController { - - @Autowired - private final PostService postService; - - @GetMapping("/test") - public String testPostController() { - return "success"; - } - - /* 게시물 리스트 조회 */ - @GetMapping("") - @JsonIgnore - public BaseResponse> getPostList(@RequestParam int user_id, @RequestParam String query) { - try { - List posts = postService.getPostList(user_id, query); - return new BaseResponse<>(posts); - } catch (BaseException exception) { - return new BaseResponse<>(exception.getStatus()); - } - } - - /* 게시물 등록 */ - @PostMapping("") - public BaseResponse createPost(@RequestBody CreatePostReqDto createPostReqDto) { - try { - if(createPostReqDto.getTitle() == null || createPostReqDto.getTitle().length() > 200) { - return new BaseResponse<>(POST_POST_INVALID_TITLE); - } - if(createPostReqDto.getContent() == null || createPostReqDto.getContent().length() > 1000) { - return new BaseResponse<>(POST_POST_INVALID_CONTENT); - } - - String result = "post_id = " + postService.createPost(createPostReqDto) + " 게시물 등록 성공"; - return new BaseResponse<>(result); - } catch (BaseException exception) { - return new BaseResponse<>(exception.getStatus()); - } - } - - /* 게시물 조회 */ - @GetMapping("/{post_id}") - public BaseResponse getPost(@PathVariable int post_id) { - try { - GetPostResDto post = postService.getPost(post_id); - return new BaseResponse<>(post); - } catch (BaseException exception) { - return new BaseResponse<>(exception.getStatus()); - } - } - - /* 게시물 수정 */ - @PutMapping("/{post_id}") - public BaseResponse updatePost(@PathVariable int post_id, @RequestBody UpdatePostReqDto updatePostReqDto) { - try { - String result = "post_id = " + postService.updatePost(post_id, updatePostReqDto) + " 수정 완료"; - return new BaseResponse<>(result); - } catch (BaseException exception) { - return new BaseResponse<>(exception.getStatus()); - } - - } - - /* 게시물 삭제 */ - @PatchMapping("/{post_id}") - public BaseResponse deletePost(@PathVariable int post_id) { - try { - String result = "post_id = " + postService.deletePost(post_id) + " 삭제 완료"; - 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 6405827..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,21 +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.JoinUserDto; - +import com.example.nanuer_server.dto.User.GetUserInfoRes; 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.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; - -import java.util.Optional; +import javax.servlet.http.HttpServletRequest; @Log4j2 @@ -33,41 +26,11 @@ 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) { + public BaseResponse delete(HttpServletRequest request) { + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); try{ userService.delete(email); String result = email + " 해당 유저가 삭제되었습니다."; @@ -81,7 +44,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); @@ -97,9 +62,11 @@ 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); + GetUserInfoRes userInfoDto = userService.GetUser2(email); return new BaseResponse<>(userInfoDto); @@ -110,32 +77,20 @@ public BaseResponse GetUser(@RequestParam String email) { } } - - //아이디 찾기 - @GetMapping("/getEmail") - public BaseResponse GetUserEmail(@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())); - } + //jwt 토근 헤더에서 가져와 사용자 이메일 조회 + @ResponseBody + @GetMapping("/userInfo") + public BaseResponse getUserInfoByJwt(HttpServletRequest request) throws BaseException { + int userId = userService.GetHeaderAndGetUser(request); + return new BaseResponse<>(userId); } - /* - // 이메일 보내기 - @Transactional - @PostMapping("/sendEmail") - public String sendEmail(@RequestParam("memberEmail") String memberEmail){ - MailDTO dto = ms.createMailAndChangePassword(memberEmail); - ms.mailSend(dto); - - return "/member/login"; + @ResponseBody + @GetMapping("/AuthTest") + public BaseResponse getUserAuth(HttpServletRequest request) throws BaseException { + Boolean result = userService.UserAuth(request); + return new BaseResponse<>(result); } -*/ } \ No newline at end of file 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..a61f642 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/controller/heart/HeartController.java @@ -0,0 +1,44 @@ +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.AddHeartDto; +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.*; + +import javax.servlet.http.HttpServletRequest; + +@Slf4j +@RestController +@RequestMapping("/heart") +@RequiredArgsConstructor +public class HeartController { + private final HeartService heartService; + + // 내가 찜한 게시물 조회는 마이페이지 서비스에서 구현함. + + //AddHeartDto 요청할 때 "userId"와 "postId"만 json으로 넘기면 됨 + @PostMapping("/add") + public BaseResponse addHeart(HttpServletRequest request, @RequestBody AddHeartDto addheartDto){ + try { + HeartDto addedHeartDto = heartService.addHeart(request, addheartDto); + return new BaseResponse<>(addedHeartDto); + } catch (BaseException exception) { + return new BaseResponse<>(exception.getStatus()); + } + } + + @DeleteMapping("/delete/{post_id}") + public BaseResponse deleteHeart(HttpServletRequest request, @PathVariable(name = "post_id") int postId){ + try { + heartService.deleteHeart(request, postId); + 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/message/MessageController.java b/src/main/java/com/example/nanuer_server/controller/message/MessageController.java index 6880120..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 @@ -17,15 +17,14 @@ 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); System.out.println("인증번호 : " + numStr); messageService.sendSMS(phone,numStr); 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..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 @@ -2,14 +2,20 @@ 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; import com.example.nanuer_server.service.mypage.MyPageService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; 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 @@ -17,15 +23,36 @@ @RequiredArgsConstructor public class MyPageController { private final MyPageService myPageService; + private final UserService userService; + private final JwtTokenProvider jwtTokenProvider; + + + @GetMapping("/my-posts") + public BaseResponse>> getMyPosts(HttpServletRequest request){ + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); + + 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(@RequestParam String email){ - List postDtoList = myPageService.getHeartPosts(email); - return new BaseResponse<>(postDtoList); + public BaseResponse>> getHeartPosts(HttpServletRequest request){ + String token = request.getHeader("X-AUTH-TOKEN"); + String email = jwtTokenProvider.getUserPk(token); + + Map> response = new HashMap<>(); + response.put("postList", myPageService.getHeartPosts(email)); + //List postDtoList = myPageService.getHeartPosts(email); + return new BaseResponse<>(response); } @PatchMapping("/update-user") - public BaseResponse patchUpdatedUser(@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/domain/entity/CategoryEntity.java b/src/main/java/com/example/nanuer_server/domain/entity/CategoryEntity.java index ba3a347..b0d30b2 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{ @Id 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..bce7f74 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatMessageEntity.java @@ -0,0 +1,33 @@ +package com.example.nanuer_server.domain.entity; + +import lombok.*; + + +import javax.persistence.*; +import java.util.List; + +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +@Setter +public class ChatMessageEntity { + public enum Type { + ENTER, TALK, QUIT + } + private Type 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){ + 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 new file mode 100644 index 0000000..544d0e2 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/entity/ChatRoomEntity.java @@ -0,0 +1,62 @@ +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; +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="room") +@AllArgsConstructor +@NoArgsConstructor +@Builder +@Data +@DynamicUpdate +@DynamicInsert +@Entity +@ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. +public class ChatRoomEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @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") + @ToString.Exclude + private UserEntity userEntity; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "post_id") + @JsonIgnore + @ToString.Exclude + private 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; + } + + +} \ No newline at end of file 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..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 @@ -4,17 +4,21 @@ 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 @NoArgsConstructor @Builder @Entity -@Getter +@Data @ToString(callSuper = true) // 부모 클래스의 toString 불러오는 어노테이션. 붙이면 createdAt 하고 updatedAt 데이터 정상적으로 나옴. @EqualsAndHashCode(callSuper = true) // 부모클래스의 equalsAndHashCode 불러오는 어노테이션. public class PostEntity extends BaseTimeEntity { @@ -35,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; @@ -55,6 +60,11 @@ 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) + //@JsonIgnore @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id") @ToString.Exclude @@ -65,6 +75,13 @@ public class PostEntity extends BaseTimeEntity { @JoinColumn(name = "category_id") private CategoryEntity categoryEntity; + //채팅 ****** + @OneToMany(mappedBy = "postEntity") + @JsonIgnore + @ToString.Exclude + private List chatRoomEntityList; + + public void update(UpdatePostReqDto updatePostReqDto) { this.title = updatePostReqDto.getTitle(); this.content = updatePostReqDto.getContent(); @@ -86,7 +103,14 @@ public void increaseView() { this.view += 1; } - public PostDto toDto(){ + public void updateProgress(int progressId) { + if (progressId == 1) + this.progress = Progress.Confirm; + else if (progressId == 2) + this.progress = Progress.End; + } + + public PostDto toDto() { PostDto postDto = PostDto.builder() .postId(postId) .title(title) @@ -104,7 +128,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..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 @@ -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; @@ -41,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) @@ -70,27 +71,16 @@ 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; - }*/ + @JsonIgnore + @OneToMany(mappedBy = "userEntity") + private List chatRoom = new ArrayList<>(); public void status(String status){ this.userStatus = status; + } + public void upDatePw(String password){ + this.password = password; } public UserInfoDto toDto(){ UserInfoDto userInfoDto = UserInfoDto.builder() @@ -103,6 +93,7 @@ public UserInfoDto toDto(){ .profileImg(profileImg) .university(university) .userStatus(userStatus) + .userScore(userScore) .role(role) .build(); return userInfoDto; 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..019bcd1 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/domain/repository/Chat/ChatRoomRepository.java @@ -0,0 +1,22 @@ +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; + +import java.util.*; + +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); + + @Query("select h from ChatRoomEntity h join fetch h.postEntity where h.postEntity.postId = :postId") + List findAllByPostId(@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/domain/repository/HeartRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/HeartRepository.java index ba379f6..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; @@ -10,4 +11,15 @@ 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 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/domain/repository/PostRepository.java b/src/main/java/com/example/nanuer_server/domain/repository/PostRepository.java index 76ee0d8..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 @@ -2,13 +2,32 @@ 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; 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); + + @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); +} \ 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..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 @@ -8,10 +8,11 @@ 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); List findAll(); + } 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..9297909 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/dto/Chat/GetChatUserDto.java @@ -0,0 +1,19 @@ +package com.example.nanuer_server.dto.Chat; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +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/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/CreatePostReqDto.java b/src/main/java/com/example/nanuer_server/dto/Post/CreatePostReqDto.java index 7d9a7d2..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 @@ -4,10 +4,11 @@ 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; +import lombok.Setter; +@Setter @Getter @NoArgsConstructor public class CreatePostReqDto { @@ -15,22 +16,18 @@ public class CreatePostReqDto { private String title; 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; 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/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/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/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/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 393d21f..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 @@ -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; @@ -25,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; + //private List postDtoList = new ArrayList<>(); public UserEntity toEntity() { UserEntity userEntity = UserEntity.builder() 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..e168004 --- /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 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/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/PostService.java b/src/main/java/com/example/nanuer_server/service/PostService.java deleted file mode 100644 index 1da722a..0000000 --- a/src/main/java/com/example/nanuer_server/service/PostService.java +++ /dev/null @@ -1,70 +0,0 @@ -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.PostEntity; -import com.example.nanuer_server.domain.entity.UserEntity; -import com.example.nanuer_server.domain.repository.*; -import com.example.nanuer_server.dto.Post.*; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import javax.transaction.Transactional; -import java.util.*; - -@Service -@RequiredArgsConstructor -public class PostService { - - private final PostRepository postRepository; - private final UserRepository userRepository; - private final CategoryRepository categoryRepository; - - 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)); - - return posts; - } - - public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { - UserEntity userEntity = userRepository.getReferenceById((long) createPostReqDto.getUserId()); - CategoryEntity categoryEntity = categoryRepository.getReferenceById(createPostReqDto.getCategoryId()); - - createPostReqDto.setUserEntity(userEntity); - createPostReqDto.setCategoryEntity(categoryEntity); - - return postRepository.save(createPostReqDto.toEntity()).getPostId(); - } - - @Transactional - public GetPostResDto getPost(int post_id) throws BaseException { - PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(() -> new IllegalArgumentException("해당 게시물이 없습니다. post_id = " + post_id)); - - postEntity.increaseView(); - - return new GetPostResDto(postEntity); - } - - @Transactional - public int updatePost(int post_id, UpdatePostReqDto updatePostReqDto) throws BaseException { - PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(()-> new IllegalArgumentException("해당 게시글이 없습니다. post_id = "+ post_id)); - - postEntity.update(updatePostReqDto); - - return post_id; - } - - @Transactional - public int deletePost(int post_id) throws BaseException { - PostEntity postEntity = postRepository.findById(post_id) - .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. post_id = " + post_id)); - 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 7322201..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 @@ -2,11 +2,16 @@ 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.PostEntity; import com.example.nanuer_server.domain.entity.UserEntity; 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; +import com.example.nanuer_server.service.post.PostService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.password.PasswordEncoder; @@ -14,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; import java.util.Objects; import java.util.Optional; @@ -25,6 +31,8 @@ public class UserService { private final UserRepository userRepository; private final PasswordEncoder passwordEncoder; + private final JwtTokenProvider jwtTokenProvider; + private final PostService postService; //회원가입 @@ -32,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())); @@ -60,8 +73,10 @@ public void delete(String email) throws BaseException { if(!userEntity.isPresent()) { throw new BaseException(USERS_EMPTY_USER_EMAIL); } + for(PostEntity postEntity : userEntity.get().getPostEntities()){ + postService.deletePost(postEntity.getPostId()); + } userRepository.delete(userEntity.get()); - } //비활성화, 활성화 @@ -90,6 +105,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(); @@ -99,4 +132,34 @@ 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; + } + + public Boolean UserAuth(HttpServletRequest request)throws BaseException{ + String token = request.getHeader("X-AUTH-TOKEN"); + if (jwtTokenProvider.getUserPk(token) != null){ + return true; + } + else return false; + } + } 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..a1f25b4 --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/chat/ChatService.java @@ -0,0 +1,51 @@ +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.messaging.simp.SimpMessageSendingOperations; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.UUID; + +@Service +@Transactional +@RequiredArgsConstructor +public class ChatService { + + private final SimpMessageSendingOperations simpMessageSendingOperations; + 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); + 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); + } + +} 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..7bccbad --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/heart/HeartService.java @@ -0,0 +1,73 @@ +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.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; +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; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +// 게시물이 삭제되면 heart도 같이 삭제 +@Service +@Transactional +@RequiredArgsConstructor +public class HeartService { + private final HeartRepository heartRepository; + + private final PostRepository postRepository; + + private final UserRepository userRepository; + + private final JwtTokenProvider jwtTokenProvider; + // + public HeartDto addHeart(HttpServletRequest request, AddHeartDto addheartDto) throws BaseException { + if(postRepository.findByPostId(addheartDto.getPostId()).getPostStatus() ==0){ + throw new BaseException(BaseResponseStatus.USER_USER_EMPTY_USER); + } + 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); + addheartDto.setPostEntity(postEntity); + + HeartEntity heartEntity = addheartDto.toEntity(); + + PostEntity heartPostEntity = heartEntity.getPostEntity(); + heartPostEntity.setHeartCount(heartPostEntity.getHeartCount()+1); + heartRepository.save(heartEntity); + return heartEntity.toDto(); + } + + 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 getPosts(int userId){ - List postEntityList = userRepository.findByUserId(userId).get().getPostEntities(); - List postDtoList = postEntityList.stream() - .map(PostEntity::toDto) - .collect(Collectors.toList()); - return postDtoList; + 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 lists; } - // like를 어떤 식으로...? 찜한 게시물을 보여주는 건데 그러면 게시물에 - 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; - List postDtoList = heartDtoList.stream() - .map(HeartDto::getPostDto) - .collect(Collectors.toList()); - return postDtoList; + Optional userEntity = userRepository.findByEmail(email); + return postRepository.findHeartByUserId(userEntity.get().getUserId()); } public UserInfoDto updateUser(UserInfoDto userInfoDto,String email) throws BaseException{ @@ -71,7 +82,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; @@ -90,4 +101,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 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 new file mode 100644 index 0000000..4890e2a --- /dev/null +++ b/src/main/java/com/example/nanuer_server/service/post/PostService.java @@ -0,0 +1,102 @@ +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.*; +import com.example.nanuer_server.service.heart.HeartService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.util.*; + +import static com.example.nanuer_server.config.BaseResponseStatus.POST_POST_EMPTY_POST; + +@Service +@RequiredArgsConstructor +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 getAllPosts() throws BaseException { + return postRepository.findAllOrderByPostIdDesc(); + } + + public List getPostList(int user_id, String query) throws BaseException { + return postRepository.findAll(user_id, query); + } + + public int createPost(CreatePostReqDto createPostReqDto) throws BaseException { + UserEntity userEntity = userRepository.getReferenceById(createPostReqDto.getUserId()); + CategoryEntity categoryEntity = categoryRepository.getReferenceById(createPostReqDto.getCategoryId()); + + createPostReqDto.setUserEntity(userEntity); + createPostReqDto.setCategoryEntity(categoryEntity); + + return postRepository.save(createPostReqDto.toEntity()).getPostId(); + + } + + + @Transactional + public GetPostResDto getPost(int post_id) throws BaseException { + PostEntity postEntity = postRepository.findById(post_id) + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); + + postEntity.increaseView(); + + return new GetPostResDto(postEntity); + } + + @Transactional + public int updatePost(int post_id, UpdatePostReqDto updatePostReqDto) throws BaseException { + PostEntity postEntity = postRepository.findById(post_id) + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); + + postEntity.update(updatePostReqDto); + + return post_id; + } + + @Transactional + public int deletePost(int post_id) throws BaseException { + PostEntity postEntity = postRepository.findById(post_id) + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); + + heartRepository.deleteAll(heartRepository.findAllByPostId(postEntity.getPostId())); + + postEntity.delete(); + return post_id; + } + + public Progress updateProgress(int post_id, int progressId) throws BaseException { + PostEntity postEntity = postRepository.findById(post_id) + .orElseThrow(() -> new BaseException(POST_POST_EMPTY_POST)); + + 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; + } + + 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 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 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/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