From b4da92f90d49df097f6319a651a54879b34c6d7e Mon Sep 17 00:00:00 2001 From: moomint8 Date: Tue, 16 Apr 2024 14:23:42 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor(DTO):=20DTO=20=EA=B3=84=EC=B8=B5?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DTO의 계층을 더 적합하도록 수정했습니다. (Domain -> Application) --- .../Application/controller/AuthController.java | 6 +++--- .../Application/controller/ManageController.java | 4 ++-- .../Application/controller/QuizController.java | 3 +-- .../Application/controller/SolvedController.java | 2 +- .../Application/controller/UserController.java | 2 +- .../newsnippetback/{domain => Application}/dto/AuthDTO.java | 2 +- .../{domain => Application}/dto/CrawlingQuizDTO.java | 2 +- .../{domain => Application}/dto/CustomUserDetails.java | 2 +- .../{domain => Application}/dto/PasswordDTO.java | 2 +- .../newsnippetback/{domain => Application}/dto/QuizDTO.java | 2 +- .../{domain => Application}/dto/SolvedDTO.java | 2 +- .../newsnippetback/{domain => Application}/dto/UserDTO.java | 2 +- .../newsnippetback/Application/service/AuthService.java | 6 +++--- .../newsnippetback/Application/service/AuthServiceImpl.java | 6 +++--- .../Application/service/CustomUserDetailsService.java | 2 +- .../newsnippetback/Application/service/ManageService.java | 4 ++-- .../Application/service/ManageServiceImpl.java | 4 ++-- .../newsnippetback/Application/service/QuizService.java | 2 +- .../newsnippetback/Application/service/QuizServiceImpl.java | 2 +- .../newsnippetback/Application/service/SolvedService.java | 2 +- .../Application/service/SolvedServiceImpl.java | 2 +- .../newsnippetback/Application/service/UserService.java | 2 +- .../newsnippetback/Application/service/UserServiceImpl.java | 2 +- .../org/triumers/newsnippetback/common/jwt/JWTFilter.java | 6 +----- .../org/triumers/newsnippetback/common/jwt/LoginFilter.java | 2 +- .../Application/service/ManageServiceTest.java | 4 ++-- .../Application/service/QuizServiceImplTest.java | 4 +--- .../Application/service/SolvedServiceImplTest.java | 2 +- 28 files changed, 38 insertions(+), 45 deletions(-) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/AuthDTO.java (91%) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/CrawlingQuizDTO.java (90%) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/CustomUserDetails.java (96%) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/PasswordDTO.java (77%) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/QuizDTO.java (92%) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/SolvedDTO.java (91%) rename src/main/java/org/triumers/newsnippetback/{domain => Application}/dto/UserDTO.java (91%) diff --git a/src/main/java/org/triumers/newsnippetback/Application/controller/AuthController.java b/src/main/java/org/triumers/newsnippetback/Application/controller/AuthController.java index e820e91..de3c04e 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/controller/AuthController.java +++ b/src/main/java/org/triumers/newsnippetback/Application/controller/AuthController.java @@ -17,9 +17,9 @@ import org.triumers.newsnippetback.domain.aggregate.vo.RequestModifyPasswordVO; import org.triumers.newsnippetback.domain.aggregate.vo.RequestUserVO; import org.triumers.newsnippetback.domain.aggregate.vo.ResponseMessageVO; -import org.triumers.newsnippetback.domain.dto.AuthDTO; -import org.triumers.newsnippetback.domain.dto.PasswordDTO; -import org.triumers.newsnippetback.domain.dto.UserDTO; +import org.triumers.newsnippetback.Application.dto.AuthDTO; +import org.triumers.newsnippetback.Application.dto.PasswordDTO; +import org.triumers.newsnippetback.Application.dto.UserDTO; @RestController @RequestMapping("/auth") diff --git a/src/main/java/org/triumers/newsnippetback/Application/controller/ManageController.java b/src/main/java/org/triumers/newsnippetback/Application/controller/ManageController.java index 272c7d0..53343d2 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/controller/ManageController.java +++ b/src/main/java/org/triumers/newsnippetback/Application/controller/ManageController.java @@ -6,8 +6,8 @@ import org.springframework.web.bind.annotation.*; import org.triumers.newsnippetback.Application.service.ManageService; import org.triumers.newsnippetback.domain.aggregate.entity.Quiz; -import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import java.time.LocalDate; import java.time.format.DateTimeFormatter; diff --git a/src/main/java/org/triumers/newsnippetback/Application/controller/QuizController.java b/src/main/java/org/triumers/newsnippetback/Application/controller/QuizController.java index 08d63ca..c99d4bf 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/controller/QuizController.java +++ b/src/main/java/org/triumers/newsnippetback/Application/controller/QuizController.java @@ -7,10 +7,9 @@ import org.triumers.newsnippetback.Application.service.QuizService; import org.triumers.newsnippetback.domain.aggregate.vo.QuizRequest; import org.triumers.newsnippetback.domain.aggregate.vo.QuizResponse; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import java.time.LocalDate; -import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; import java.util.stream.Collectors; diff --git a/src/main/java/org/triumers/newsnippetback/Application/controller/SolvedController.java b/src/main/java/org/triumers/newsnippetback/Application/controller/SolvedController.java index 9400af6..bde01e1 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/controller/SolvedController.java +++ b/src/main/java/org/triumers/newsnippetback/Application/controller/SolvedController.java @@ -12,7 +12,7 @@ import org.triumers.newsnippetback.Application.service.SolvedService; import org.triumers.newsnippetback.domain.aggregate.entity.Solved; import org.triumers.newsnippetback.domain.aggregate.vo.*; -import org.triumers.newsnippetback.domain.dto.SolvedDTO; +import org.triumers.newsnippetback.Application.dto.SolvedDTO; import java.util.List; import java.util.NoSuchElementException; diff --git a/src/main/java/org/triumers/newsnippetback/Application/controller/UserController.java b/src/main/java/org/triumers/newsnippetback/Application/controller/UserController.java index c678032..da5a620 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/controller/UserController.java +++ b/src/main/java/org/triumers/newsnippetback/Application/controller/UserController.java @@ -12,7 +12,7 @@ import org.triumers.newsnippetback.domain.aggregate.enums.UserRole; import org.triumers.newsnippetback.domain.aggregate.enums.UserStatus; import org.triumers.newsnippetback.domain.aggregate.vo.ResponseUserInfoVO; -import org.triumers.newsnippetback.domain.dto.UserDTO; +import org.triumers.newsnippetback.Application.dto.UserDTO; @RestController @RequestMapping("/user") diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/AuthDTO.java b/src/main/java/org/triumers/newsnippetback/Application/dto/AuthDTO.java similarity index 91% rename from src/main/java/org/triumers/newsnippetback/domain/dto/AuthDTO.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/AuthDTO.java index f10bca2..c008531 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/AuthDTO.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/AuthDTO.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import lombok.*; import org.triumers.newsnippetback.domain.aggregate.enums.Provider; diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/CrawlingQuizDTO.java b/src/main/java/org/triumers/newsnippetback/Application/dto/CrawlingQuizDTO.java similarity index 90% rename from src/main/java/org/triumers/newsnippetback/domain/dto/CrawlingQuizDTO.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/CrawlingQuizDTO.java index 797efa5..ac8ff95 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/CrawlingQuizDTO.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/CrawlingQuizDTO.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import lombok.Data; import org.triumers.newsnippetback.domain.aggregate.entity.Category; diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/CustomUserDetails.java b/src/main/java/org/triumers/newsnippetback/Application/dto/CustomUserDetails.java similarity index 96% rename from src/main/java/org/triumers/newsnippetback/domain/dto/CustomUserDetails.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/CustomUserDetails.java index 225e972..d456325 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/CustomUserDetails.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/CustomUserDetails.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/PasswordDTO.java b/src/main/java/org/triumers/newsnippetback/Application/dto/PasswordDTO.java similarity index 77% rename from src/main/java/org/triumers/newsnippetback/domain/dto/PasswordDTO.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/PasswordDTO.java index 63aaa44..7f9e124 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/PasswordDTO.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/PasswordDTO.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import lombok.*; diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/QuizDTO.java b/src/main/java/org/triumers/newsnippetback/Application/dto/QuizDTO.java similarity index 92% rename from src/main/java/org/triumers/newsnippetback/domain/dto/QuizDTO.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/QuizDTO.java index a2bdc67..00fe911 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/QuizDTO.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/QuizDTO.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import lombok.Data; import org.triumers.newsnippetback.domain.aggregate.entity.Category; diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/SolvedDTO.java b/src/main/java/org/triumers/newsnippetback/Application/dto/SolvedDTO.java similarity index 91% rename from src/main/java/org/triumers/newsnippetback/domain/dto/SolvedDTO.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/SolvedDTO.java index 359948e..f5ef5b1 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/SolvedDTO.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/SolvedDTO.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import lombok.*; diff --git a/src/main/java/org/triumers/newsnippetback/domain/dto/UserDTO.java b/src/main/java/org/triumers/newsnippetback/Application/dto/UserDTO.java similarity index 91% rename from src/main/java/org/triumers/newsnippetback/domain/dto/UserDTO.java rename to src/main/java/org/triumers/newsnippetback/Application/dto/UserDTO.java index 893198d..72b4beb 100644 --- a/src/main/java/org/triumers/newsnippetback/domain/dto/UserDTO.java +++ b/src/main/java/org/triumers/newsnippetback/Application/dto/UserDTO.java @@ -1,4 +1,4 @@ -package org.triumers.newsnippetback.domain.dto; +package org.triumers.newsnippetback.Application.dto; import lombok.*; import org.triumers.newsnippetback.domain.aggregate.enums.Provider; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java b/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java index 9f744bc..e61608b 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java @@ -4,9 +4,9 @@ import org.triumers.newsnippetback.common.exception.UserNicknameDuplicateException; import org.triumers.newsnippetback.common.exception.WrongInputTypeException; import org.triumers.newsnippetback.common.exception.WrongPasswordException; -import org.triumers.newsnippetback.domain.dto.AuthDTO; -import org.triumers.newsnippetback.domain.dto.PasswordDTO; -import org.triumers.newsnippetback.domain.dto.UserDTO; +import org.triumers.newsnippetback.Application.dto.AuthDTO; +import org.triumers.newsnippetback.Application.dto.PasswordDTO; +import org.triumers.newsnippetback.Application.dto.UserDTO; public interface AuthService { diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java index 24b629d..e910bb3 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java @@ -11,9 +11,9 @@ import org.triumers.newsnippetback.domain.aggregate.entity.User; import org.triumers.newsnippetback.domain.aggregate.enums.UserRole; import org.triumers.newsnippetback.domain.aggregate.enums.UserStatus; -import org.triumers.newsnippetback.domain.dto.AuthDTO; -import org.triumers.newsnippetback.domain.dto.PasswordDTO; -import org.triumers.newsnippetback.domain.dto.UserDTO; +import org.triumers.newsnippetback.Application.dto.AuthDTO; +import org.triumers.newsnippetback.Application.dto.PasswordDTO; +import org.triumers.newsnippetback.Application.dto.UserDTO; import org.triumers.newsnippetback.domain.repository.UserRepository; import org.triumers.newsnippetback.domain.service.ValidationAuthService; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/CustomUserDetailsService.java b/src/main/java/org/triumers/newsnippetback/Application/service/CustomUserDetailsService.java index 920bb68..1369f42 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/CustomUserDetailsService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/CustomUserDetailsService.java @@ -6,7 +6,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import org.triumers.newsnippetback.domain.aggregate.entity.User; -import org.triumers.newsnippetback.domain.dto.CustomUserDetails; +import org.triumers.newsnippetback.Application.dto.CustomUserDetails; import org.triumers.newsnippetback.domain.repository.UserRepository; @Service diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/ManageService.java b/src/main/java/org/triumers/newsnippetback/Application/service/ManageService.java index 9bf4cde..ecb017a 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/ManageService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/ManageService.java @@ -1,8 +1,8 @@ package org.triumers.newsnippetback.Application.service; import org.triumers.newsnippetback.domain.aggregate.entity.Quiz; -import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import java.time.LocalDate; import java.util.List; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/ManageServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/ManageServiceImpl.java index 322f728..1708adf 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/ManageServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/ManageServiceImpl.java @@ -7,8 +7,8 @@ import org.triumers.newsnippetback.domain.aggregate.entity.Category; import org.triumers.newsnippetback.domain.aggregate.entity.CrawlingQuiz; import org.triumers.newsnippetback.domain.aggregate.entity.Quiz; -import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import org.triumers.newsnippetback.domain.repository.CategoryRepository; import org.triumers.newsnippetback.domain.repository.CrawlingQuizRepository; import org.triumers.newsnippetback.domain.repository.QuizRepository; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/QuizService.java b/src/main/java/org/triumers/newsnippetback/Application/service/QuizService.java index edaa16d..d9857ae 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/QuizService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/QuizService.java @@ -1,6 +1,6 @@ package org.triumers.newsnippetback.Application.service; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import java.time.LocalDate; import java.util.List; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/QuizServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/QuizServiceImpl.java index 741e0a2..7371adc 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/QuizServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/QuizServiceImpl.java @@ -4,7 +4,7 @@ import org.springframework.stereotype.Service; import org.triumers.newsnippetback.domain.aggregate.entity.Category; import org.triumers.newsnippetback.domain.aggregate.entity.Quiz; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import org.triumers.newsnippetback.domain.repository.CategoryRepository; import org.triumers.newsnippetback.domain.repository.QuizRepository; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/SolvedService.java b/src/main/java/org/triumers/newsnippetback/Application/service/SolvedService.java index 143f703..df08379 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/SolvedService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/SolvedService.java @@ -3,7 +3,7 @@ import org.triumers.newsnippetback.domain.aggregate.entity.Solved; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedRequest; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedResultRequest; -import org.triumers.newsnippetback.domain.dto.SolvedDTO; +import org.triumers.newsnippetback.Application.dto.SolvedDTO; import java.util.List; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java index 230a5e5..49c0731 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java @@ -9,7 +9,7 @@ import org.triumers.newsnippetback.domain.aggregate.entity.Solved; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedRequest; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedResultRequest; -import org.triumers.newsnippetback.domain.dto.SolvedDTO; +import org.triumers.newsnippetback.Application.dto.SolvedDTO; import org.triumers.newsnippetback.domain.repository.CategoryRepository; import org.triumers.newsnippetback.domain.repository.QuizRepository; import org.triumers.newsnippetback.domain.repository.SolvedRepository; diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/UserService.java b/src/main/java/org/triumers/newsnippetback/Application/service/UserService.java index 57c8f53..823f1bb 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/UserService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/UserService.java @@ -1,7 +1,7 @@ package org.triumers.newsnippetback.Application.service; import org.triumers.newsnippetback.common.exception.UserNotFoundException; -import org.triumers.newsnippetback.domain.dto.UserDTO; +import org.triumers.newsnippetback.Application.dto.UserDTO; public interface UserService { diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/UserServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/UserServiceImpl.java index 88be50e..f921d9e 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/UserServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/UserServiceImpl.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Service; import org.triumers.newsnippetback.common.exception.UserNotFoundException; import org.triumers.newsnippetback.domain.aggregate.entity.User; -import org.triumers.newsnippetback.domain.dto.UserDTO; +import org.triumers.newsnippetback.Application.dto.UserDTO; import org.triumers.newsnippetback.domain.repository.UserRepository; @Service diff --git a/src/main/java/org/triumers/newsnippetback/common/jwt/JWTFilter.java b/src/main/java/org/triumers/newsnippetback/common/jwt/JWTFilter.java index cfddd63..d728a5b 100644 --- a/src/main/java/org/triumers/newsnippetback/common/jwt/JWTFilter.java +++ b/src/main/java/org/triumers/newsnippetback/common/jwt/JWTFilter.java @@ -1,20 +1,16 @@ package org.triumers.newsnippetback.common.jwt; -import io.jsonwebtoken.ExpiredJwtException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.http.HttpStatus; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.web.ErrorResponse; -import org.springframework.web.ErrorResponseException; import org.springframework.web.filter.OncePerRequestFilter; import org.triumers.newsnippetback.domain.aggregate.entity.User; import org.triumers.newsnippetback.domain.aggregate.enums.UserRole; -import org.triumers.newsnippetback.domain.dto.CustomUserDetails; +import org.triumers.newsnippetback.Application.dto.CustomUserDetails; import java.io.IOException; diff --git a/src/main/java/org/triumers/newsnippetback/common/jwt/LoginFilter.java b/src/main/java/org/triumers/newsnippetback/common/jwt/LoginFilter.java index 5c0fcfd..4e0f435 100644 --- a/src/main/java/org/triumers/newsnippetback/common/jwt/LoginFilter.java +++ b/src/main/java/org/triumers/newsnippetback/common/jwt/LoginFilter.java @@ -13,7 +13,7 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.triumers.newsnippetback.domain.aggregate.enums.UserRole; import org.triumers.newsnippetback.domain.aggregate.vo.RequestLoginVO; -import org.triumers.newsnippetback.domain.dto.CustomUserDetails; +import org.triumers.newsnippetback.Application.dto.CustomUserDetails; import java.io.IOException; import java.util.Collection; diff --git a/src/test/java/org/triumers/newsnippetback/Application/service/ManageServiceTest.java b/src/test/java/org/triumers/newsnippetback/Application/service/ManageServiceTest.java index fcd5798..8d55440 100644 --- a/src/test/java/org/triumers/newsnippetback/Application/service/ManageServiceTest.java +++ b/src/test/java/org/triumers/newsnippetback/Application/service/ManageServiceTest.java @@ -7,8 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.triumers.newsnippetback.domain.aggregate.entity.Quiz; -import org.triumers.newsnippetback.domain.dto.CrawlingQuizDTO; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.CrawlingQuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import java.time.LocalDate; import java.util.List; diff --git a/src/test/java/org/triumers/newsnippetback/Application/service/QuizServiceImplTest.java b/src/test/java/org/triumers/newsnippetback/Application/service/QuizServiceImplTest.java index b0abf7a..c8b82ab 100644 --- a/src/test/java/org/triumers/newsnippetback/Application/service/QuizServiceImplTest.java +++ b/src/test/java/org/triumers/newsnippetback/Application/service/QuizServiceImplTest.java @@ -3,11 +3,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.triumers.newsnippetback.domain.aggregate.vo.QuizRequest; -import org.triumers.newsnippetback.domain.dto.QuizDTO; +import org.triumers.newsnippetback.Application.dto.QuizDTO; import java.time.LocalDate; import java.util.List; diff --git a/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java b/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java index aaceea5..60a17ac 100644 --- a/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java +++ b/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java @@ -12,7 +12,7 @@ import org.triumers.newsnippetback.domain.aggregate.entity.Solved; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedRequest; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedResultRequest; -import org.triumers.newsnippetback.domain.dto.SolvedDTO; +import org.triumers.newsnippetback.Application.dto.SolvedDTO; import java.time.LocalDate; import java.util.List; From 92887303d5a8a4492644e50ee2bbdfac1d7d4d8a Mon Sep 17 00:00:00 2001 From: moomint8 Date: Tue, 16 Apr 2024 16:07:14 +0900 Subject: [PATCH 2/4] =?UTF-8?q?test(Solved):=20=ED=80=B4=EC=A6=88=20?= =?UTF-8?q?=EB=8B=B5=EC=95=88=20=EC=A0=9C=EC=B6=9C=20=EC=8B=9C=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 답안 제출 시 정답, 오답 여부에 따라 유저 정보 업데이트를 테스트하는 메소드가 구현되었습니다. --- .../service/SolvedServiceImplTest.java | 81 ++++++++++++++++++- 1 file changed, 77 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java b/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java index 60a17ac..fdb3963 100644 --- a/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java +++ b/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java @@ -1,30 +1,54 @@ package org.triumers.newsnippetback.Application.service; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.support.DefaultTransactionDefinition; +import org.triumers.newsnippetback.common.exception.UserNotFoundException; import org.triumers.newsnippetback.domain.aggregate.entity.Solved; +import org.triumers.newsnippetback.domain.aggregate.entity.User; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedRequest; import org.triumers.newsnippetback.domain.aggregate.vo.SolvedResultRequest; import org.triumers.newsnippetback.Application.dto.SolvedDTO; +import org.triumers.newsnippetback.domain.repository.UserRepository; import java.time.LocalDate; import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + @SpringBootTest class SolvedServiceImplTest { + + private final int TEST_QUIZ_ID = 1; + private final String TEST_RIGHT_OPTION = "C"; + private final String TEST_WRONG_OPTION = "A"; + @Autowired private SolvedService solvedService; + @Autowired + private UserService userService; + + @Autowired + private UserRepository userRepository; + @Autowired private PlatformTransactionManager transactionManager; + @BeforeEach + void setUserToken() { + setUserToContextByUsername(); + } + @AfterEach void rollback() { TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); @@ -106,4 +130,53 @@ void findCorrectQuizByUserIdAndSolvedDate() { // Then Assertions.assertNotNull(solvedList); } + + @DisplayName("퀴즈 정답 제출시 유저 정보 업데이트 테스트") + @Test + @Transactional + void userInfoUpdateWhenCorrect() throws UserNotFoundException { + // given + User user = userRepository.findByEmail(userService.findByToken().getEmail()); + int solvedCnt = user.getSolvedCnt(); + int correctCnt = user.getCorrectCnt(); + SolvedRequest request = new SolvedRequest(user.getId(), TEST_QUIZ_ID); + request.setSolvedDate(LocalDate.now()); + request.setSelectedOption(TEST_RIGHT_OPTION); + + // when + solvedService.findSelectedOptionAndCompareAnswer(request); + user = userRepository.findByEmail(userService.findByToken().getEmail()); + + // then + assertEquals(solvedCnt + 1, user.getSolvedCnt()); + assertEquals(correctCnt + 1, user.getCorrectCnt()); + } + + @DisplayName("퀴즈 오답 제출시 유저 정보 업데이트 테스트") + @Test + @Transactional + void userInfoUpdateWhenWrong() throws UserNotFoundException { + // given + User user = userRepository.findByEmail(userService.findByToken().getEmail()); + int solvedCnt = user.getSolvedCnt(); + int correctCnt = user.getCorrectCnt(); + SolvedRequest request = new SolvedRequest(user.getId(), TEST_QUIZ_ID); + request.setSolvedDate(LocalDate.now()); + request.setSelectedOption(TEST_WRONG_OPTION); + + // when + solvedService.findSelectedOptionAndCompareAnswer(request); + user = userRepository.findByEmail(userService.findByToken().getEmail()); + + // then + assertEquals(solvedCnt + 1, user.getSolvedCnt()); + assertEquals(correctCnt, user.getCorrectCnt()); + } + + private void setUserToContextByUsername() { + CustomUserDetailsService customUserDetailsService = new CustomUserDetailsService(userRepository); + UserDetails userDetails = customUserDetailsService.loadUserByUsername("test@gmail.com"); + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication(new UsernamePasswordAuthenticationToken(userDetails, userDetails.getPassword(), userDetails.getAuthorities())); + } } \ No newline at end of file From 2509241df20a4014e58f3ea8de72e211b22a1049 Mon Sep 17 00:00:00 2001 From: moomint8 Date: Tue, 16 Apr 2024 16:07:48 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat(Solved):=20=ED=80=B4=EC=A6=88=20?= =?UTF-8?q?=EB=8B=B5=EC=95=88=20=EC=A0=9C=EC=B6=9C=20=EC=8B=9C=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=95=EB=B3=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 답안 제출 시 정답, 오답 여부에 따라 유저 정보 업데이트하는 기능이 구현되었습니다. --- .../Application/service/AuthService.java | 2 ++ .../Application/service/AuthServiceImpl.java | 12 ++++++++++++ .../Application/service/SolvedServiceImpl.java | 7 ++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java b/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java index e61608b..0be6ab4 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/AuthService.java @@ -19,4 +19,6 @@ public interface AuthService { void modifyUserInfo(UserDTO userDTO) throws UserNicknameDuplicateException, WrongInputTypeException; void modifyPassword(PasswordDTO passwordDTO) throws WrongPasswordException, WrongInputTypeException; + + void updateSolvedQuiz(boolean isCorrect); } diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java index e910bb3..dca8966 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/AuthServiceImpl.java @@ -101,6 +101,18 @@ public void modifyPassword(PasswordDTO passwordDTO) throws WrongPasswordExceptio throw new WrongPasswordException(); } + @Override + public void updateSolvedQuiz(boolean isCorrect) { + User user = userRepository.findByEmail(SecurityContextHolder.getContext().getAuthentication().getName()); + + user.setSolvedCnt(user.getSolvedCnt() + 1); + if (isCorrect) { + user.setCorrectCnt(user.getCorrectCnt() + 1); + } + + userRepository.save(user); + } + private User userMapper(AuthDTO request) { User user = new User(); diff --git a/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java b/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java index 49c0731..578dccb 100644 --- a/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java +++ b/src/main/java/org/triumers/newsnippetback/Application/service/SolvedServiceImpl.java @@ -20,13 +20,15 @@ @Service public class SolvedServiceImpl implements SolvedService{ + private final AuthService authService; private final SolvedRepository solvedRepository; private final QuizRepository quizRepository; private final CategoryRepository categoryRepository; private final ModelMapper modelMapper; @Autowired - public SolvedServiceImpl(SolvedRepository solvedRepository, QuizRepository quizRepository, CategoryRepository categoryRepository, ModelMapper modelMapper) { + public SolvedServiceImpl(AuthService authService, SolvedRepository solvedRepository, QuizRepository quizRepository, CategoryRepository categoryRepository, ModelMapper modelMapper) { + this.authService = authService; this.solvedRepository = solvedRepository; this.quizRepository = quizRepository; this.categoryRepository = categoryRepository; @@ -55,6 +57,9 @@ public SolvedDTO findSelectedOptionAndCompareAnswer(SolvedRequest solvedRequest) Solved solved = modelMapper.map(solvedDTO, Solved.class); solvedRepository.save(solved); + // 사용자 정보 업데이트 + authService.updateSolvedQuiz(solvedDTO.isCorrect()); + if (answer == null || solved == null) { throw new NoSuchElementException("Quiz or Selected Option not found for quizId: " + quizId); } From 0a58ad4dff21942fd0b51645618250cf78521933 Mon Sep 17 00:00:00 2001 From: moomint8 Date: Tue, 16 Apr 2024 16:34:02 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor(Solved=20Test):=20Solved=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 반복해 사용되는 값의 경우 상수 처리를 하고, DB DDL 변경 등의 조건에 따라 적합하게 테스트 코드를 개선했습니다. --- .../service/SolvedServiceImplTest.java | 77 +++++++------------ 1 file changed, 28 insertions(+), 49 deletions(-) diff --git a/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java b/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java index fdb3963..f18b5f1 100644 --- a/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java +++ b/src/test/java/org/triumers/newsnippetback/Application/service/SolvedServiceImplTest.java @@ -22,9 +22,9 @@ import java.time.LocalDate; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; +@Transactional @SpringBootTest class SolvedServiceImplTest { @@ -41,85 +41,64 @@ class SolvedServiceImplTest { @Autowired private UserRepository userRepository; - @Autowired - private PlatformTransactionManager transactionManager; - @BeforeEach void setUserToken() { setUserToContextByUsername(); } - @AfterEach - void rollback() { - TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); - transactionManager.rollback(status); - } - - @DisplayName("사용자가 입력한 답과 정답 비교하여 판정") + @DisplayName("사용자가 정답을 제출한 경우 정답 판정 내리는지 테스트") @Test - void findSelectedOptionAndCompareAnswer() { + void isCorrectIsTrueWhenRightOption() throws UserNotFoundException { // Given - int userId = 1; - int quizId = 1; - SolvedRequest solvedRequest = new SolvedRequest(userId, quizId); + int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId(); + SolvedRequest solvedRequest = new SolvedRequest(userId, TEST_QUIZ_ID); + solvedRequest.setSolvedDate(LocalDate.now()); + solvedRequest.setSelectedOption(TEST_RIGHT_OPTION); // When SolvedDTO solvedDTO = solvedService.findSelectedOptionAndCompareAnswer(solvedRequest); // Then - Assertions.assertNotNull(solvedDTO); - Assertions.assertEquals(1,solvedDTO.getUserId()); - Assertions.assertEquals(1,solvedDTO.getQuizId()); - Assertions.assertEquals(true, solvedDTO.isCorrect()); + assertNotNull(solvedDTO); + assertTrue(solvedDTO.isCorrect()); } - @DisplayName("사용자가 풀었던 문제 리스트 조회") + @DisplayName("사용자가 오답을 제출한 경우 정답 판정 내리는지 테스트") @Test - void findSolvedQuizListByUserId() { + void isCorrectIsFalseWhenWrongOption() throws UserNotFoundException { // Given - int userId = 1; - int quizId = 0; + int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId(); + SolvedRequest solvedRequest = new SolvedRequest(userId, TEST_QUIZ_ID); + solvedRequest.setSolvedDate(LocalDate.now()); + solvedRequest.setSelectedOption(TEST_WRONG_OPTION); // When - SolvedRequest solvedRequest = new SolvedRequest(userId, quizId); - List solvedList = solvedService.findSolvedQuizListByUserId(solvedRequest); + SolvedDTO solvedDTO = solvedService.findSelectedOptionAndCompareAnswer(solvedRequest); // Then - Assertions.assertNotNull(solvedList); + assertNotNull(solvedDTO); + assertFalse(solvedDTO.isCorrect()); } - @DisplayName("사용자가 풀었던 문제 한 개 조회") + @DisplayName("사용자가 풀었던 문제 리스트 조회") @Test - void findSolvedQuizByUserID() { + void findSolvedQuizListByUserId() throws UserNotFoundException { // Given - int userId = 1; - int quizId = 1; - SolvedRequest solvedRequest = new SolvedRequest(userId, quizId); + int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId(); // When - SolvedDTO solvedDTO = solvedService.findSolvedQuizByUserIdAndQuizId(solvedRequest); + SolvedRequest solvedRequest = new SolvedRequest(userId, TEST_QUIZ_ID); + List solvedList = solvedService.findSolvedQuizListByUserId(solvedRequest); // Then - Assertions.assertNotNull(solvedDTO); - Assertions.assertEquals(1, solvedDTO.getUserId()); - Assertions.assertEquals(1, solvedDTO.getQuizId()); - Assertions.assertEquals(9, solvedDTO.getCategoryId()); - Assertions.assertEquals("EELS 로봇에 관한 다음 설명 중 옳은 것은 무엇입니까?", solvedDTO.getContent()); - Assertions.assertEquals("EELS 로봇은 지구의 앨버타주에 있는 애서배스카 빙하에서 개발되었습니다.", solvedDTO.getOptionA()); - Assertions.assertEquals("이 로봇은 머리 쪽에 자율주행용 라이다와 카메라를 장착하고 있어서 스스로 움직일 수 있습니다.", solvedDTO.getOptionB()); - Assertions.assertEquals("EELS 로봇의 목표는 타이탄 위성에서의 탐사를 위한 것입니다.", solvedDTO.getOptionC()); - Assertions.assertEquals("이 로봇은 무게가 50kg이며, 액추에이터는 총 24개 달려 있습니다.", solvedDTO.getOptionD()); - Assertions.assertEquals("C",solvedDTO.getAnswer()); - Assertions.assertEquals("캐나다 앨버타주의 애서배스카 빙하에서 출발한 NASA의 로봇 탐사 임무에 대한 내용을 담고 있습니다. 이 임무는 미 항공우주국이 개발 중인 외계 생명체 탐사로봇인 EELS(일스)를 사용하여 토성의 위성 엔셀라두스에 보내는 것이 목표입니다. 이 로봇은 지구의 극한 환경에서도 작동할 수 있는 고성능을 갖추고 있으며, 엔셀라두스의 얼음 아래에 있는 바다에서 생명체를 찾는 임무를 수행할 예정입니다.", solvedDTO.getExplanation()); - Assertions.assertEquals("https://www.ytn.co.kr/_ln/0105_202404012353120871", solvedDTO.getNewsLink()); - Assertions.assertEquals(LocalDate.of(2024, 4, 2), solvedDTO.getDate()); + assertNotNull(solvedList); } @DisplayName("회원이 지정한 날짜에 맞춘 문제 조회") @Test - void findCorrectQuizByUserIdAndSolvedDate() { + void findCorrectQuizByUserIdAndSolvedDate() throws UserNotFoundException { // Given - int userId = 1; + int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId(); boolean isCorrect = true; LocalDate solvedDate = LocalDate.parse("2024-04-08"); SolvedResultRequest solvedResultRequest = new SolvedResultRequest(userId, isCorrect, solvedDate); @@ -128,7 +107,7 @@ void findCorrectQuizByUserIdAndSolvedDate() { List solvedList = solvedService.findCorrectQuizByUserIdAndSolvedDate(solvedResultRequest); // Then - Assertions.assertNotNull(solvedList); + assertNotNull(solvedList); } @DisplayName("퀴즈 정답 제출시 유저 정보 업데이트 테스트")