From 7ea560b64827ccefd2e218aa65aaa53d767ee679 Mon Sep 17 00:00:00 2001 From: dongHyo Date: Tue, 12 Jul 2022 17:45:40 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=A0=95=EC=A0=81=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A6=AC=20->=20=EC=83=9D=EC=84=B1=EC=9E=90=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/security/jwt/JwtProvider.java | 6 +-- .../response/TicketDetailsResponse.java | 2 +- .../movie/service/TicketServiceImpl.java | 2 +- .../movie/service/dto/TicketDetailsDTO.java | 2 +- .../application/PaymentController.java | 13 +++++-- .../response/PaymentDetailResponse.java | 24 ++---------- .../response/SimplePaymentsResponse.java | 1 - .../application/response/TicketDetailDTO.java | 36 ----------------- .../service/PaymentApisServiceImpl.java | 6 +-- .../payment/service/dto/CreatePaymentDTO.java | 12 +++--- .../payment/service/dto/PaymentDetailDTO.java | 39 +++++++++++++++++++ .../payment/service/dto/SimplePaymentDTO.java | 8 ++-- .../payment/service/dto/TicketDetailDTO.java | 31 +++++++++++++++ .../interfaces/PaymentApisService.java | 4 +- .../user/application/AuthController.java | 20 +++++----- .../user/application/UserController.java | 35 ++++++++++++----- .../application/response/LogoutResponse.java | 22 ++--------- .../response/PaymentsResponse.java | 9 +---- .../application/response/SignUpResponse.java | 13 ++----- .../user/application/response/TokenDto.java | 20 ---------- .../application/response/TokenResponse.java | 15 +++++++ .../response/UserChangePasswordResponse.java | 15 +++---- .../response/UserDeleteResponse.java | 15 +++---- .../response/UserDetailResponse.java | 11 +----- .../service/AuthenticationServiceImpl.java | 20 +++++----- .../user/service/UserApisServiceImpl.java | 6 +-- .../server/user/service/UserServiceImpl.java | 28 ++++++++----- .../user/service/dto/ChangePasswordDTO.java | 17 +++----- .../service/dto/ChangedPasswordUserDTO.java | 24 ++++++++++++ .../user/service/dto/CreatedUserDTO.java | 25 ++++++++++++ .../service/dto/DeleteRefreshTokenDTO.java | 26 +++++++++++++ .../user/service/dto/DeleteUserDTO.java | 14 +++---- .../user/service/dto/DeletedUserDTO.java | 26 +++++++++++++ .../server/user/service/dto/PaymentsDTO.java | 27 +++++++++++++ .../server/user/service/dto/SignUpDTO.java | 8 ++-- .../server/user/service/dto/TokenDTO.java | 20 ++++++++++ .../user/service/dto/UserDetailDTO.java | 13 ++++--- .../interfaces/AuthenticationService.java | 10 ++--- .../service/interfaces/UserApisService.java | 4 +- .../user/service/interfaces/UserService.java | 9 +++-- .../security/jwt/TokenProviderTest.java | 8 ++-- .../movie/service/TicketServiceImplTest.java | 2 +- .../service/PaymentApisServiceImplTest.java | 5 ++- .../AuthenticationServiceImplTest.java | 4 +- .../user/service/UserApisServiceImplTest.java | 14 +++---- .../user/service/UserServiceImplTest.java | 15 ++++--- 46 files changed, 415 insertions(+), 271 deletions(-) delete mode 100644 server/src/main/java/com/ticketing/server/payment/application/response/TicketDetailDTO.java create mode 100644 server/src/main/java/com/ticketing/server/payment/service/dto/PaymentDetailDTO.java create mode 100644 server/src/main/java/com/ticketing/server/payment/service/dto/TicketDetailDTO.java delete mode 100644 server/src/main/java/com/ticketing/server/user/application/response/TokenDto.java create mode 100644 server/src/main/java/com/ticketing/server/user/application/response/TokenResponse.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/ChangedPasswordUserDTO.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/CreatedUserDTO.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/DeleteRefreshTokenDTO.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/DeletedUserDTO.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/PaymentsDTO.java create mode 100644 server/src/main/java/com/ticketing/server/user/service/dto/TokenDTO.java diff --git a/server/src/main/java/com/ticketing/server/global/security/jwt/JwtProvider.java b/server/src/main/java/com/ticketing/server/global/security/jwt/JwtProvider.java index 3e0be0c..9eb16f4 100644 --- a/server/src/main/java/com/ticketing/server/global/security/jwt/JwtProvider.java +++ b/server/src/main/java/com/ticketing/server/global/security/jwt/JwtProvider.java @@ -1,6 +1,6 @@ package com.ticketing.server.global.security.jwt; -import com.ticketing.server.user.application.response.TokenDto; +import com.ticketing.server.user.service.dto.TokenDTO; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -42,12 +42,12 @@ public class JwtProvider { this.refreshTokenValidityInMilliseconds = jwtProperties.getRefreshTokenValidityInSeconds() * 1000L; } - public TokenDto generateTokenDto(Authentication authentication) { + public TokenDTO generateTokenDto(Authentication authentication) { String accessToken = createAccessToken(authentication); String refreshToken = createRefreshToken(authentication); long expiresIn = accessTokenValidityInMilliseconds / 1000L; - return TokenDto.of(accessToken, refreshToken, prefix, expiresIn); + return new TokenDTO(accessToken, refreshToken, prefix, expiresIn); } private String createAccessToken(Authentication authentication) { diff --git a/server/src/main/java/com/ticketing/server/movie/application/response/TicketDetailsResponse.java b/server/src/main/java/com/ticketing/server/movie/application/response/TicketDetailsResponse.java index 9f316b3..9efa4a8 100644 --- a/server/src/main/java/com/ticketing/server/movie/application/response/TicketDetailsResponse.java +++ b/server/src/main/java/com/ticketing/server/movie/application/response/TicketDetailsResponse.java @@ -1,6 +1,6 @@ package com.ticketing.server.movie.application.response; -import com.ticketing.server.payment.application.response.TicketDetailDTO; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; import java.util.List; import lombok.Getter; diff --git a/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java b/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java index 10b72fe..4a33370 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/movie/service/TicketServiceImpl.java @@ -4,7 +4,7 @@ import com.ticketing.server.global.exception.ErrorCode; import com.ticketing.server.movie.domain.repository.TicketRepository; import com.ticketing.server.movie.service.dto.TicketDetailsDTO; import com.ticketing.server.movie.service.interfaces.TicketService; -import com.ticketing.server.payment.application.response.TicketDetailDTO; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; import java.util.List; import java.util.stream.Collectors; import javax.validation.constraints.NotNull; diff --git a/server/src/main/java/com/ticketing/server/movie/service/dto/TicketDetailsDTO.java b/server/src/main/java/com/ticketing/server/movie/service/dto/TicketDetailsDTO.java index 3a36d2b..1a95734 100644 --- a/server/src/main/java/com/ticketing/server/movie/service/dto/TicketDetailsDTO.java +++ b/server/src/main/java/com/ticketing/server/movie/service/dto/TicketDetailsDTO.java @@ -1,7 +1,7 @@ package com.ticketing.server.movie.service.dto; import com.ticketing.server.movie.application.response.TicketDetailsResponse; -import com.ticketing.server.payment.application.response.TicketDetailDTO; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java b/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java index 7510fbf..6f5485e 100644 --- a/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java +++ b/server/src/main/java/com/ticketing/server/payment/application/PaymentController.java @@ -1,10 +1,11 @@ package com.ticketing.server.payment.application; import com.ticketing.server.payment.application.response.PaymentDetailResponse; +import com.ticketing.server.payment.application.response.SimplePaymentsResponse; +import com.ticketing.server.payment.service.dto.PaymentDetailDTO; import com.ticketing.server.payment.service.dto.SimplePaymentsDTO; import com.ticketing.server.payment.service.interfaces.PaymentApisService; import com.ticketing.server.payment.service.interfaces.PaymentService; -import com.ticketing.server.payment.application.response.SimplePaymentsResponse; import com.ticketing.server.user.domain.UserGrade; import javax.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; @@ -29,14 +30,18 @@ public class PaymentController { @Secured(UserGrade.ROLES.USER) public ResponseEntity simplePayments(@NotNull Long userAlternateId) { SimplePaymentsDTO simplePayments = paymentService.findSimplePayments(userAlternateId); - return ResponseEntity.status(HttpStatus.OK).body(simplePayments.toResponse()); + + return ResponseEntity.status(HttpStatus.OK) + .body(simplePayments.toResponse()); } @GetMapping("/detail") @Secured(UserGrade.ROLES.USER) public ResponseEntity detail(@NotNull Long paymentId) { - PaymentDetailResponse paymentDetail = paymentApisService.findPaymentDetail(paymentId); - return ResponseEntity.status(HttpStatus.OK).body(paymentDetail); + PaymentDetailDTO paymentDetail = paymentApisService.findPaymentDetail(paymentId); + + return ResponseEntity.status(HttpStatus.OK) + .body(paymentDetail.toResponse()); } } diff --git a/server/src/main/java/com/ticketing/server/payment/application/response/PaymentDetailResponse.java b/server/src/main/java/com/ticketing/server/payment/application/response/PaymentDetailResponse.java index ef92a8e..2851afc 100644 --- a/server/src/main/java/com/ticketing/server/payment/application/response/PaymentDetailResponse.java +++ b/server/src/main/java/com/ticketing/server/payment/application/response/PaymentDetailResponse.java @@ -1,38 +1,20 @@ package com.ticketing.server.payment.application.response; -import com.ticketing.server.movie.application.response.TicketDetailsResponse; -import com.ticketing.server.payment.domain.Payment; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; import java.time.LocalDateTime; import java.util.List; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class PaymentDetailResponse { private Long paymentId; - private String movieTitle; - private String paymentNumber; - private Integer totalPrice; - private LocalDateTime createdAt; - - List tickets; - - public PaymentDetailResponse(Payment payment, TicketDetailsResponse ticketDetails) { - this( - payment.getId(), - payment.getMovieTitle(), - payment.getPaymentNumber(), - payment.getTotalPrice(), - payment.getCreatedAt(), - ticketDetails.getTicketDetails() - ); - } + private List tickets; } diff --git a/server/src/main/java/com/ticketing/server/payment/application/response/SimplePaymentsResponse.java b/server/src/main/java/com/ticketing/server/payment/application/response/SimplePaymentsResponse.java index a58f261..5ccefa4 100644 --- a/server/src/main/java/com/ticketing/server/payment/application/response/SimplePaymentsResponse.java +++ b/server/src/main/java/com/ticketing/server/payment/application/response/SimplePaymentsResponse.java @@ -10,7 +10,6 @@ import lombok.Getter; public class SimplePaymentsResponse { private final Long userAlternateId; - private final List payments; } diff --git a/server/src/main/java/com/ticketing/server/payment/application/response/TicketDetailDTO.java b/server/src/main/java/com/ticketing/server/payment/application/response/TicketDetailDTO.java deleted file mode 100644 index 98bc8a7..0000000 --- a/server/src/main/java/com/ticketing/server/payment/application/response/TicketDetailDTO.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ticketing.server.payment.application.response; - -import com.ticketing.server.movie.domain.Ticket; -import java.time.LocalDateTime; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class TicketDetailDTO { - - private Integer price; - - private Integer theaterNumber; - - private Integer column; - - private Integer row; - - private LocalDateTime startAt; - - private LocalDateTime endAt; - - public TicketDetailDTO(Ticket ticket) { - this( - ticket.getTicketPrice(), - ticket.getTheaterNumber(), - ticket.getColumn(), - ticket.getRow(), - ticket.getStartAt(), - ticket.getEndAt() - ); - } - -} diff --git a/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java b/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java index e987880..fc5241c 100644 --- a/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/payment/service/PaymentApisServiceImpl.java @@ -5,9 +5,9 @@ import com.ticketing.server.movie.application.response.TicketDetailsResponse; import com.ticketing.server.payment.api.MovieClient; import com.ticketing.server.payment.api.UserClient; import com.ticketing.server.payment.api.dto.response.UserDetailResponse; -import com.ticketing.server.payment.application.response.PaymentDetailResponse; import com.ticketing.server.payment.domain.Payment; import com.ticketing.server.payment.domain.repository.PaymentRepository; +import com.ticketing.server.payment.service.dto.PaymentDetailDTO; import com.ticketing.server.payment.service.interfaces.PaymentApisService; import javax.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; @@ -28,7 +28,7 @@ public class PaymentApisServiceImpl implements PaymentApisService { private final UserClient userClient; @Override - public PaymentDetailResponse findPaymentDetail(@NotNull Long paymentId) { + public PaymentDetailDTO findPaymentDetail(@NotNull Long paymentId) { Payment payment = paymentRepository.findById(paymentId) .orElseThrow(ErrorCode::throwPaymentIdNotFound); @@ -38,7 +38,7 @@ public class PaymentApisServiceImpl implements PaymentApisService { } TicketDetailsResponse tickets = movieClient.getTicketsByPaymentId(payment.getId()); - return new PaymentDetailResponse(payment, tickets); + return new PaymentDetailDTO(payment, tickets); } } diff --git a/server/src/main/java/com/ticketing/server/payment/service/dto/CreatePaymentDTO.java b/server/src/main/java/com/ticketing/server/payment/service/dto/CreatePaymentDTO.java index b0ee78f..d839c95 100644 --- a/server/src/main/java/com/ticketing/server/payment/service/dto/CreatePaymentDTO.java +++ b/server/src/main/java/com/ticketing/server/payment/service/dto/CreatePaymentDTO.java @@ -10,12 +10,12 @@ import lombok.Getter; @AllArgsConstructor public class CreatePaymentDTO { - private Long userAlternateId; - private String movieTitle; - private PaymentType type; - private PaymentStatus status; - private String paymentNumber; - private Integer totalPrice; + private final Long userAlternateId; + private final String movieTitle; + private final PaymentType type; + private final PaymentStatus status; + private final String paymentNumber; + private final Integer totalPrice; public Payment toEntity() { return new Payment diff --git a/server/src/main/java/com/ticketing/server/payment/service/dto/PaymentDetailDTO.java b/server/src/main/java/com/ticketing/server/payment/service/dto/PaymentDetailDTO.java new file mode 100644 index 0000000..e9b454c --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/service/dto/PaymentDetailDTO.java @@ -0,0 +1,39 @@ +package com.ticketing.server.payment.service.dto; + +import com.ticketing.server.movie.application.response.TicketDetailsResponse; +import com.ticketing.server.payment.application.response.PaymentDetailResponse; +import com.ticketing.server.payment.domain.Payment; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; +import java.time.LocalDateTime; +import java.util.List; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PaymentDetailDTO { + + private final Long paymentId; + private final String movieTitle; + private final String paymentNumber; + private final Integer totalPrice; + private final LocalDateTime createdAt; + private final List tickets; + + public PaymentDetailDTO(Payment payment, TicketDetailsResponse ticketDetails) { + this( + payment.getId(), + payment.getMovieTitle(), + payment.getPaymentNumber(), + payment.getTotalPrice(), + payment.getCreatedAt(), + ticketDetails.getTicketDetails() + ); + } + + public PaymentDetailResponse toResponse() { + return new PaymentDetailResponse(paymentId, movieTitle, paymentNumber, totalPrice, createdAt, tickets); + } + +} diff --git a/server/src/main/java/com/ticketing/server/payment/service/dto/SimplePaymentDTO.java b/server/src/main/java/com/ticketing/server/payment/service/dto/SimplePaymentDTO.java index 9cb7b13..4fb169c 100644 --- a/server/src/main/java/com/ticketing/server/payment/service/dto/SimplePaymentDTO.java +++ b/server/src/main/java/com/ticketing/server/payment/service/dto/SimplePaymentDTO.java @@ -9,10 +9,10 @@ import lombok.Getter; @AllArgsConstructor(access = AccessLevel.PRIVATE) public class SimplePaymentDTO { - private Long paymentId; - private String movieTitle; - private String paymentNumber; - private Integer totalPrice; + private final Long paymentId; + private final String movieTitle; + private final String paymentNumber; + private final Integer totalPrice; public SimplePaymentDTO(Payment payment) { this( diff --git a/server/src/main/java/com/ticketing/server/payment/service/dto/TicketDetailDTO.java b/server/src/main/java/com/ticketing/server/payment/service/dto/TicketDetailDTO.java new file mode 100644 index 0000000..56b3bec --- /dev/null +++ b/server/src/main/java/com/ticketing/server/payment/service/dto/TicketDetailDTO.java @@ -0,0 +1,31 @@ +package com.ticketing.server.payment.service.dto; + +import com.ticketing.server.movie.domain.Ticket; +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class TicketDetailDTO { + + private final Integer price; + private final Integer theaterNumber; + private final Integer column; + private final Integer row; + private final LocalDateTime startAt; + private final LocalDateTime endAt; + + public TicketDetailDTO(Ticket ticket) { + this( + ticket.getTicketPrice(), + ticket.getTheaterNumber(), + ticket.getColumn(), + ticket.getRow(), + ticket.getStartAt(), + ticket.getEndAt() + ); + } + +} diff --git a/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java b/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java index 4705083..9120688 100644 --- a/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java +++ b/server/src/main/java/com/ticketing/server/payment/service/interfaces/PaymentApisService.java @@ -1,9 +1,9 @@ package com.ticketing.server.payment.service.interfaces; -import com.ticketing.server.payment.application.response.PaymentDetailResponse; +import com.ticketing.server.payment.service.dto.PaymentDetailDTO; import javax.validation.constraints.NotNull; public interface PaymentApisService { - PaymentDetailResponse findPaymentDetail(@NotNull Long paymentId); + PaymentDetailDTO findPaymentDetail(@NotNull Long paymentId); } diff --git a/server/src/main/java/com/ticketing/server/user/application/AuthController.java b/server/src/main/java/com/ticketing/server/user/application/AuthController.java index e722e6f..a41d5ab 100644 --- a/server/src/main/java/com/ticketing/server/user/application/AuthController.java +++ b/server/src/main/java/com/ticketing/server/user/application/AuthController.java @@ -2,7 +2,9 @@ package com.ticketing.server.user.application; import com.ticketing.server.user.application.request.LoginRequest; import com.ticketing.server.user.application.response.LogoutResponse; -import com.ticketing.server.user.application.response.TokenDto; +import com.ticketing.server.user.service.dto.TokenDTO; +import com.ticketing.server.user.application.response.TokenResponse; +import com.ticketing.server.user.service.dto.DeleteRefreshTokenDTO; import com.ticketing.server.user.service.interfaces.AuthenticationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,29 +28,29 @@ public class AuthController { private final AuthenticationService authenticationService; @PostMapping("/token") - public ResponseEntity login(@RequestBody LoginRequest loginRequest) { - TokenDto tokenDto = authenticationService.generateTokenDto(loginRequest.toAuthentication()); + public ResponseEntity login(@RequestBody LoginRequest loginRequest) { + TokenDTO tokenDto = authenticationService.generateTokenDto(loginRequest.toAuthentication()); return ResponseEntity.status(HttpStatus.OK) .headers(getHttpHeaders()) - .body(tokenDto); + .body(tokenDto.toResponse()); } @PostMapping("/refresh") - public ResponseEntity refreshToken(@RequestParam("refreshToken") String refreshToken) { - TokenDto tokenDto = authenticationService.reissueTokenDto(refreshToken); + public ResponseEntity refreshToken(@RequestParam("refreshToken") String refreshToken) { + TokenDTO tokenDto = authenticationService.reissueTokenDto(refreshToken); return ResponseEntity.status(HttpStatus.OK) .headers(getHttpHeaders()) - .body(tokenDto); + .body(tokenDto.toResponse()); } @PostMapping("/logout") public ResponseEntity logout(@AuthenticationPrincipal UserDetails userRequest) { - LogoutResponse logoutResponse = authenticationService.deleteRefreshToken(userRequest.getUsername()); + DeleteRefreshTokenDTO refreshToken = authenticationService.deleteRefreshToken(userRequest.getUsername()); return ResponseEntity.status(HttpStatus.OK) - .body(logoutResponse); + .body(refreshToken.toResponse()); } private HttpHeaders getHttpHeaders() { diff --git a/server/src/main/java/com/ticketing/server/user/application/UserController.java b/server/src/main/java/com/ticketing/server/user/application/UserController.java index 46edf5b..aa97400 100644 --- a/server/src/main/java/com/ticketing/server/user/application/UserController.java +++ b/server/src/main/java/com/ticketing/server/user/application/UserController.java @@ -8,8 +8,12 @@ import com.ticketing.server.user.application.response.SignUpResponse; import com.ticketing.server.user.application.response.UserChangePasswordResponse; import com.ticketing.server.user.application.response.UserDeleteResponse; import com.ticketing.server.user.application.response.UserDetailResponse; -import com.ticketing.server.user.domain.User; import com.ticketing.server.user.domain.UserGrade; +import com.ticketing.server.user.service.dto.ChangedPasswordUserDTO; +import com.ticketing.server.user.service.dto.DeletedUserDTO; +import com.ticketing.server.user.service.dto.PaymentsDTO; +import com.ticketing.server.user.service.dto.ChangePasswordDTO; +import com.ticketing.server.user.service.dto.CreatedUserDTO; import com.ticketing.server.user.service.dto.UserDetailDTO; import com.ticketing.server.user.service.interfaces.UserApisService; import com.ticketing.server.user.service.interfaces.UserService; @@ -42,22 +46,28 @@ public class UserController { @PostMapping public ResponseEntity register(@RequestBody @Valid SignUpRequest request) { - User user = userService.register(request.toSignUpDto(passwordEncoder)); - return ResponseEntity.status(HttpStatus.CREATED).body(SignUpResponse.from(user)); + CreatedUserDTO createdUserDto = userService.register(request.toSignUpDto(passwordEncoder)); + + return ResponseEntity.status(HttpStatus.CREATED) + .body(createdUserDto.toResponse()); } @GetMapping("/details") @Secured(UserGrade.ROLES.USER) public ResponseEntity details(@AuthenticationPrincipal UserDetails userRequest) { UserDetailDTO userDetail = userService.findDetailByEmail(userRequest.getUsername()); - return ResponseEntity.status(HttpStatus.OK).body(userDetail.toResponse()); + + return ResponseEntity.status(HttpStatus.OK) + .body(userDetail.toResponse()); } @DeleteMapping @Secured(UserGrade.ROLES.USER) public ResponseEntity deleteUser(@RequestBody @Valid UserDeleteRequest request) { - User user = userService.delete(request.toDeleteUserDto(passwordEncoder)); - return ResponseEntity.status(HttpStatus.OK).body(UserDeleteResponse.from(user)); + DeletedUserDTO deletedUserDto = userService.delete(request.toDeleteUserDto(passwordEncoder)); + + return ResponseEntity.status(HttpStatus.OK) + .body(deletedUserDto.toResponse()); } @PutMapping("/password") @@ -65,15 +75,20 @@ public class UserController { public ResponseEntity changePassword( @AuthenticationPrincipal UserDetails userRequest, @RequestBody @Valid UserChangePasswordRequest request) { - User user = userService.changePassword(request.toChangePasswordDto(userRequest.getUsername(), passwordEncoder)); - return ResponseEntity.status(HttpStatus.OK).body(UserChangePasswordResponse.from(user)); + ChangePasswordDTO changePasswordDto = request.toChangePasswordDto(userRequest.getUsername(), passwordEncoder); + ChangedPasswordUserDTO changedUserDto = userService.changePassword(changePasswordDto); + + return ResponseEntity.status(HttpStatus.OK) + .body(changedUserDto.toResponse()); } @GetMapping("/payments") @Secured(UserGrade.ROLES.USER) public ResponseEntity getPayments(@AuthenticationPrincipal UserDetails userRequest) { - PaymentsResponse paymentDetails = userApisService.findPaymentsByEmail(userRequest.getUsername()); - return ResponseEntity.status(HttpStatus.OK).body(paymentDetails); + PaymentsDTO paymentsDto = userApisService.findPaymentsByEmail(userRequest.getUsername()); + + return ResponseEntity.status(HttpStatus.OK) + .body(paymentsDto.toResponse()); } } diff --git a/server/src/main/java/com/ticketing/server/user/application/response/LogoutResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/LogoutResponse.java index e2b2bf9..8d2fa90 100644 --- a/server/src/main/java/com/ticketing/server/user/application/response/LogoutResponse.java +++ b/server/src/main/java/com/ticketing/server/user/application/response/LogoutResponse.java @@ -1,28 +1,14 @@ package com.ticketing.server.user.application.response; -import com.ticketing.server.global.redis.RefreshToken; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class LogoutResponse { - private Long refreshTokenId; - private String email; - private String refreshToken; - - private LogoutResponse(String email) { - this.email = email; - } - - public static LogoutResponse from(String email) { - return new LogoutResponse(email); - } - - public static LogoutResponse from(RefreshToken refreshToken) { - return new LogoutResponse(refreshToken.getId(), refreshToken.getEmail(), refreshToken.getToken()); - } + private final Long refreshTokenId; + private final String email; + private final String refreshToken; } diff --git a/server/src/main/java/com/ticketing/server/user/application/response/PaymentsResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/PaymentsResponse.java index 9daffb0..1824e7e 100644 --- a/server/src/main/java/com/ticketing/server/user/application/response/PaymentsResponse.java +++ b/server/src/main/java/com/ticketing/server/user/application/response/PaymentsResponse.java @@ -1,6 +1,5 @@ package com.ticketing.server.user.application.response; -import com.ticketing.server.payment.application.response.SimplePaymentsResponse; import com.ticketing.server.payment.service.dto.SimplePaymentDTO; import java.util.List; import lombok.AllArgsConstructor; @@ -10,11 +9,7 @@ import lombok.Getter; @AllArgsConstructor public class PaymentsResponse { - private String email; - private List payments; + private final String email; + private final List payments; - public PaymentsResponse(String email, SimplePaymentsResponse simplePayments) { - this(email, simplePayments.getPayments()); - } - } diff --git a/server/src/main/java/com/ticketing/server/user/application/response/SignUpResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/SignUpResponse.java index 195c1d1..835ce7b 100644 --- a/server/src/main/java/com/ticketing/server/user/application/response/SignUpResponse.java +++ b/server/src/main/java/com/ticketing/server/user/application/response/SignUpResponse.java @@ -1,20 +1,13 @@ package com.ticketing.server.user.application.response; -import com.ticketing.server.user.domain.User; -import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class SignUpResponse { - private String name; - - private String email; - - public static SignUpResponse from(User user) { - return new SignUpResponse(user.getName(), user.getEmail()); - } + private final String name; + private final String email; } diff --git a/server/src/main/java/com/ticketing/server/user/application/response/TokenDto.java b/server/src/main/java/com/ticketing/server/user/application/response/TokenDto.java deleted file mode 100644 index 3b4470f..0000000 --- a/server/src/main/java/com/ticketing/server/user/application/response/TokenDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ticketing.server.user.application.response; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class TokenDto { - - private final String accessToken; - private final String refreshToken; - private final String tokenType; - private final long expiresIn; - - public static TokenDto of(String accessToken, String refreshToken, String tokenType, long expiresIn) { - return new TokenDto(accessToken, refreshToken, tokenType, expiresIn); - } - -} diff --git a/server/src/main/java/com/ticketing/server/user/application/response/TokenResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/TokenResponse.java new file mode 100644 index 0000000..0921967 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/application/response/TokenResponse.java @@ -0,0 +1,15 @@ +package com.ticketing.server.user.application.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class TokenResponse { + + private final String accessToken; + private final String refreshToken; + private final String tokenType; + private final long expiresIn; + +} diff --git a/server/src/main/java/com/ticketing/server/user/application/response/UserChangePasswordResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/UserChangePasswordResponse.java index c6e6b2f..077afb6 100644 --- a/server/src/main/java/com/ticketing/server/user/application/response/UserChangePasswordResponse.java +++ b/server/src/main/java/com/ticketing/server/user/application/response/UserChangePasswordResponse.java @@ -1,20 +1,15 @@ package com.ticketing.server.user.application.response; -import com.ticketing.server.user.domain.User; -import lombok.AccessLevel; +import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class UserChangePasswordResponse { - private String name; - - private String email; - - public static UserChangePasswordResponse from(User user) { - return new UserChangePasswordResponse(user.getName(), user.getEmail()); - } + private final String name; + private final String email; + private final LocalDateTime updatedAt; } diff --git a/server/src/main/java/com/ticketing/server/user/application/response/UserDeleteResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/UserDeleteResponse.java index 292643f..f747aab 100644 --- a/server/src/main/java/com/ticketing/server/user/application/response/UserDeleteResponse.java +++ b/server/src/main/java/com/ticketing/server/user/application/response/UserDeleteResponse.java @@ -1,20 +1,15 @@ package com.ticketing.server.user.application.response; -import com.ticketing.server.user.domain.User; -import lombok.AccessLevel; +import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class UserDeleteResponse { - private String name; - - private String email; - - public static UserDeleteResponse from(User user) { - return new UserDeleteResponse(user.getName(), user.getEmail()); - } + private final String name; + private final String email; + private final LocalDateTime deletedAt; } diff --git a/server/src/main/java/com/ticketing/server/user/application/response/UserDetailResponse.java b/server/src/main/java/com/ticketing/server/user/application/response/UserDetailResponse.java index b25eab7..27bb6c0 100644 --- a/server/src/main/java/com/ticketing/server/user/application/response/UserDetailResponse.java +++ b/server/src/main/java/com/ticketing/server/user/application/response/UserDetailResponse.java @@ -7,7 +7,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; @Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor public class UserDetailResponse { private final String name; @@ -15,13 +15,4 @@ public class UserDetailResponse { private final UserGrade grade; private final String phone; - public UserDetailResponse(UserDetailDTO userDetailDto) { - this( - userDetailDto.getName(), - userDetailDto.getEmail(), - userDetailDto.getGrade(), - userDetailDto.getPhone() - ); - } - } diff --git a/server/src/main/java/com/ticketing/server/user/service/AuthenticationServiceImpl.java b/server/src/main/java/com/ticketing/server/user/service/AuthenticationServiceImpl.java index 8f656cc..d534c09 100644 --- a/server/src/main/java/com/ticketing/server/user/service/AuthenticationServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/user/service/AuthenticationServiceImpl.java @@ -5,8 +5,8 @@ import com.ticketing.server.global.redis.RefreshRedisRepository; import com.ticketing.server.global.redis.RefreshToken; import com.ticketing.server.global.security.jwt.JwtProperties; import com.ticketing.server.global.security.jwt.JwtProvider; -import com.ticketing.server.user.application.response.LogoutResponse; -import com.ticketing.server.user.application.response.TokenDto; +import com.ticketing.server.user.service.dto.TokenDTO; +import com.ticketing.server.user.service.dto.DeleteRefreshTokenDTO; import com.ticketing.server.user.service.interfaces.AuthenticationService; import lombok.RequiredArgsConstructor; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -28,14 +28,14 @@ public class AuthenticationServiceImpl implements AuthenticationService { @Override @Transactional - public TokenDto generateTokenDto(UsernamePasswordAuthenticationToken authenticationToken) { + public TokenDTO generateTokenDto(UsernamePasswordAuthenticationToken authenticationToken) { // 회원인증 Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authenticationToken); String email = authenticationToken.getName(); // 토큰 발급 - TokenDto tokenDto = jwtProvider.generateTokenDto(authentication); + TokenDTO tokenDto = jwtProvider.generateTokenDto(authentication); // refresh 토큰이 있으면 수정, 없으면 생성 refreshRedisRepository.findByEmail(email) @@ -49,7 +49,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { @Override @Transactional - public TokenDto reissueTokenDto(String bearerRefreshToken) { + public TokenDTO reissueTokenDto(String bearerRefreshToken) { String refreshToken = resolveToken(bearerRefreshToken); // 토큰 검증 @@ -67,7 +67,7 @@ public class AuthenticationServiceImpl implements AuthenticationService { } // 토큰 발급 - TokenDto tokenDto = jwtProvider.generateTokenDto(authentication); + TokenDTO tokenDto = jwtProvider.generateTokenDto(authentication); // 토큰 최신화 findTokenEntity.changeToken(tokenDto.getRefreshToken()); @@ -78,12 +78,14 @@ public class AuthenticationServiceImpl implements AuthenticationService { @Override @Transactional - public LogoutResponse deleteRefreshToken(String email) { + public DeleteRefreshTokenDTO deleteRefreshToken(String email) { return refreshRedisRepository.findByEmail(email) .map(tokenDto -> { refreshRedisRepository.delete(tokenDto); - return LogoutResponse.from(tokenDto); - }).orElseGet(() -> LogoutResponse.from(email)); + return new DeleteRefreshTokenDTO(tokenDto); + }).orElseGet( + () -> new DeleteRefreshTokenDTO(email) + ); } private String resolveToken(String bearerToken) { diff --git a/server/src/main/java/com/ticketing/server/user/service/UserApisServiceImpl.java b/server/src/main/java/com/ticketing/server/user/service/UserApisServiceImpl.java index c8c90a8..88bdd20 100644 --- a/server/src/main/java/com/ticketing/server/user/service/UserApisServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/user/service/UserApisServiceImpl.java @@ -2,8 +2,8 @@ package com.ticketing.server.user.service; import com.ticketing.server.payment.application.response.SimplePaymentsResponse; import com.ticketing.server.user.api.PaymentClient; -import com.ticketing.server.user.application.response.PaymentsResponse; import com.ticketing.server.user.domain.User; +import com.ticketing.server.user.service.dto.PaymentsDTO; import com.ticketing.server.user.service.interfaces.UserApisService; import com.ticketing.server.user.service.interfaces.UserService; import javax.validation.constraints.NotNull; @@ -24,11 +24,11 @@ public class UserApisServiceImpl implements UserApisService { private final UserService userService; @Override - public PaymentsResponse findPaymentsByEmail(@NotNull String email) { + public PaymentsDTO findPaymentsByEmail(@NotNull String email) { User user = userService.findNotDeletedUserByEmail(email); SimplePaymentsResponse simplePayments = paymentClient.getPayments(user.getAlternateId()); - return new PaymentsResponse(user.getEmail(), simplePayments); + return new PaymentsDTO(user, simplePayments); } } diff --git a/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java b/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java index 39b8a98..fc59a45 100644 --- a/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java +++ b/server/src/main/java/com/ticketing/server/user/service/UserServiceImpl.java @@ -5,7 +5,10 @@ import com.ticketing.server.user.domain.SequenceGenerator; import com.ticketing.server.user.domain.User; import com.ticketing.server.user.domain.repository.UserRepository; import com.ticketing.server.user.service.dto.ChangePasswordDTO; +import com.ticketing.server.user.service.dto.ChangedPasswordUserDTO; +import com.ticketing.server.user.service.dto.CreatedUserDTO; import com.ticketing.server.user.service.dto.DeleteUserDTO; +import com.ticketing.server.user.service.dto.DeletedUserDTO; import com.ticketing.server.user.service.dto.SignUpDTO; import com.ticketing.server.user.service.dto.UserDetailDTO; import com.ticketing.server.user.service.interfaces.UserService; @@ -30,10 +33,11 @@ public class UserServiceImpl implements UserService { @Override @Transactional - public User register(@Valid SignUpDTO signUpDto) { - Optional user = userRepository.findByEmail(signUpDto.getEmail()); - if (user.isEmpty()) { - return userRepository.save(signUpDto.toUser(sequenceGenerator.generateId())); + public CreatedUserDTO register(@Valid SignUpDTO signUpDto) { + Optional optionalUser = userRepository.findByEmail(signUpDto.getEmail()); + if (optionalUser.isEmpty()) { + User user = userRepository.save(signUpDto.toUser(sequenceGenerator.generateId())); + return new CreatedUserDTO(user); } throw ErrorCode.throwDuplicateEmail(); @@ -41,16 +45,20 @@ public class UserServiceImpl implements UserService { @Override @Transactional - public User delete(@Valid DeleteUserDTO deleteUserDto) { - User user = findNotDeletedUserByEmail(deleteUserDto.getEmail()); - return user.delete(deleteUserDto); + public DeletedUserDTO delete(@Valid DeleteUserDTO deleteUserDto) { + User user = findNotDeletedUserByEmail(deleteUserDto.getEmail()) + .delete(deleteUserDto); + + return new DeletedUserDTO(user); } @Override @Transactional - public User changePassword(@Valid ChangePasswordDTO changePasswordDto) { - User user = findNotDeletedUserByEmail(changePasswordDto.getEmail()); - return user.changePassword(changePasswordDto); + public ChangedPasswordUserDTO changePassword(@Valid ChangePasswordDTO changePasswordDto) { + User user = findNotDeletedUserByEmail(changePasswordDto.getEmail()) + .changePassword(changePasswordDto); + + return new ChangedPasswordUserDTO(user); } @Override diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/ChangePasswordDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/ChangePasswordDTO.java index d7cd6a5..dfa354c 100644 --- a/server/src/main/java/com/ticketing/server/user/service/dto/ChangePasswordDTO.java +++ b/server/src/main/java/com/ticketing/server/user/service/dto/ChangePasswordDTO.java @@ -2,28 +2,23 @@ package com.ticketing.server.user.service.dto; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; +import lombok.AllArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; +@AllArgsConstructor public class ChangePasswordDTO implements PasswordMatches { @NotEmpty(message = "{validation.not.empty.email}") @Email(message = "{validation.email}") - private String email; + private final String email; @NotEmpty(message = "{validation.not.empty.oldpassword}") - private String oldPassword; + private final String oldPassword; @NotEmpty(message = "{validation.not.empty.newpassword}") - private String newPassword; + private final String newPassword; - private PasswordEncoder passwordEncoder; - - public ChangePasswordDTO(String email, String oldPassword, String newPassword, PasswordEncoder passwordEncoder) { - this.email = email; - this.oldPassword = oldPassword; - this.newPassword = newPassword; - this.passwordEncoder = passwordEncoder; - } + private final PasswordEncoder passwordEncoder; public String getEmail() { return email; diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/ChangedPasswordUserDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/ChangedPasswordUserDTO.java new file mode 100644 index 0000000..a63a808 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/ChangedPasswordUserDTO.java @@ -0,0 +1,24 @@ +package com.ticketing.server.user.service.dto; + +import com.ticketing.server.user.application.response.UserChangePasswordResponse; +import com.ticketing.server.user.domain.User; +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class ChangedPasswordUserDTO { + + private final String name; + private final String email; + private final LocalDateTime updatedAt; + + public ChangedPasswordUserDTO(User user) { + this(user.getName(), user.getEmail(), user.getUpdatedAt()); + } + + public UserChangePasswordResponse toResponse() { + return new UserChangePasswordResponse(name, email, updatedAt); + } + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/CreatedUserDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/CreatedUserDTO.java new file mode 100644 index 0000000..46d9126 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/CreatedUserDTO.java @@ -0,0 +1,25 @@ +package com.ticketing.server.user.service.dto; + +import com.ticketing.server.user.application.response.SignUpResponse; +import com.ticketing.server.user.domain.User; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class CreatedUserDTO { + + private final String name; + private final String email; + + public CreatedUserDTO(User user) { + this( + user.getName(), + user.getEmail() + ); + } + + public SignUpResponse toResponse() { + return new SignUpResponse(name, email); + } + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/DeleteRefreshTokenDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/DeleteRefreshTokenDTO.java new file mode 100644 index 0000000..c54fd0c --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/DeleteRefreshTokenDTO.java @@ -0,0 +1,26 @@ +package com.ticketing.server.user.service.dto; + +import com.ticketing.server.global.redis.RefreshToken; +import com.ticketing.server.user.application.response.LogoutResponse; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class DeleteRefreshTokenDTO { + + private final Long refreshTokenId; + private final String email; + private final String refreshToken; + + public DeleteRefreshTokenDTO(String email) { + this(null, email, null); + } + + public DeleteRefreshTokenDTO(RefreshToken refreshToken) { + this(refreshToken.getId(), refreshToken.getEmail(), refreshToken.getToken()); + } + + public LogoutResponse toResponse() { + return new LogoutResponse(refreshTokenId, email, refreshToken); + } +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUserDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUserDTO.java index 3540ed0..a3d604b 100644 --- a/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUserDTO.java +++ b/server/src/main/java/com/ticketing/server/user/service/dto/DeleteUserDTO.java @@ -2,24 +2,20 @@ package com.ticketing.server.user.service.dto; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; +import lombok.AllArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; +@AllArgsConstructor public class DeleteUserDTO implements PasswordMatches { @NotEmpty(message = "{validation.not.empty.email}") @Email(message = "{validation.email}") - private String email; + private final String email; @NotEmpty(message = "{validation.not.empty.password}") - private String inputPassword; + private final String inputPassword; - private PasswordEncoder passwordEncoder; - - public DeleteUserDTO(String email, String inputPassword, PasswordEncoder passwordEncoder) { - this.email = email; - this.inputPassword = inputPassword; - this.passwordEncoder = passwordEncoder; - } + private final PasswordEncoder passwordEncoder; @Override public boolean passwordMatches(String password) { diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/DeletedUserDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/DeletedUserDTO.java new file mode 100644 index 0000000..7d9b941 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/DeletedUserDTO.java @@ -0,0 +1,26 @@ +package com.ticketing.server.user.service.dto; + +import com.ticketing.server.user.application.response.UserDeleteResponse; +import com.ticketing.server.user.domain.User; +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class DeletedUserDTO { + + private final String name; + private final String email; + private final LocalDateTime deletedAt; + + public DeletedUserDTO(User user) { + this(user.getName(), user.getEmail(), user.getDeletedAt()); + } + + public UserDeleteResponse toResponse() { + return new UserDeleteResponse(name, email, deletedAt); + } + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/PaymentsDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/PaymentsDTO.java new file mode 100644 index 0000000..389faf1 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/PaymentsDTO.java @@ -0,0 +1,27 @@ +package com.ticketing.server.user.service.dto; + +import com.ticketing.server.payment.application.response.SimplePaymentsResponse; +import com.ticketing.server.payment.service.dto.SimplePaymentDTO; +import com.ticketing.server.user.application.response.PaymentsResponse; +import com.ticketing.server.user.domain.User; +import java.util.List; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PaymentsDTO { + + private final String email; + private final List payments; + + public PaymentsDTO(User user, SimplePaymentsResponse simplePayments) { + this(user.getEmail(), simplePayments.getPayments()); + } + + public PaymentsResponse toResponse() { + return new PaymentsResponse(email, payments); + } + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/SignUpDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/SignUpDTO.java index 37742f1..2d0dfcd 100644 --- a/server/src/main/java/com/ticketing/server/user/service/dto/SignUpDTO.java +++ b/server/src/main/java/com/ticketing/server/user/service/dto/SignUpDTO.java @@ -13,18 +13,18 @@ import lombok.Getter; public class SignUpDTO { @NotEmpty(message = "{validation.not.empty.name}") - private String name; + private final String name; @NotEmpty(message = "{validation.not.empty.email}") @Email(message = "{validation.email}") - private String email; + private final String email; @NotEmpty(message = "{validation.not.empty.password}") - private String password; + private final String password; @NotEmpty(message = "{validation.not.empty.phone}") @Phone - private String phone; + private final String phone; public User toUser(long alternateId) { return new User(alternateId, this.name, this.email, password, UserGrade.USER, this.phone); diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/TokenDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/TokenDTO.java new file mode 100644 index 0000000..d27b022 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/user/service/dto/TokenDTO.java @@ -0,0 +1,20 @@ +package com.ticketing.server.user.service.dto; + +import com.ticketing.server.user.application.response.TokenResponse; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class TokenDTO { + + private final String accessToken; + private final String refreshToken; + private final String tokenType; + private final long expiresIn; + + public TokenResponse toResponse() { + return new TokenResponse(accessToken, refreshToken, tokenType, expiresIn); + } + +} diff --git a/server/src/main/java/com/ticketing/server/user/service/dto/UserDetailDTO.java b/server/src/main/java/com/ticketing/server/user/service/dto/UserDetailDTO.java index 778d5be..b435f05 100644 --- a/server/src/main/java/com/ticketing/server/user/service/dto/UserDetailDTO.java +++ b/server/src/main/java/com/ticketing/server/user/service/dto/UserDetailDTO.java @@ -11,11 +11,11 @@ import lombok.Getter; @AllArgsConstructor(access = AccessLevel.PRIVATE) public class UserDetailDTO { - private Long alternateId; - private String name; - private String email; - private UserGrade grade; - private String phone; + private final Long alternateId; + private final String name; + private final String email; + private final UserGrade grade; + private final String phone; public UserDetailDTO(User user) { this( @@ -28,6 +28,7 @@ public class UserDetailDTO { } public UserDetailResponse toResponse() { - return new UserDetailResponse(this); + return new UserDetailResponse(name, email, grade, phone); } + } diff --git a/server/src/main/java/com/ticketing/server/user/service/interfaces/AuthenticationService.java b/server/src/main/java/com/ticketing/server/user/service/interfaces/AuthenticationService.java index e3fc99d..4f17e92 100644 --- a/server/src/main/java/com/ticketing/server/user/service/interfaces/AuthenticationService.java +++ b/server/src/main/java/com/ticketing/server/user/service/interfaces/AuthenticationService.java @@ -1,15 +1,15 @@ package com.ticketing.server.user.service.interfaces; -import com.ticketing.server.user.application.response.LogoutResponse; -import com.ticketing.server.user.application.response.TokenDto; +import com.ticketing.server.user.service.dto.TokenDTO; +import com.ticketing.server.user.service.dto.DeleteRefreshTokenDTO; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; public interface AuthenticationService { - TokenDto generateTokenDto(UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken); + TokenDTO generateTokenDto(UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken); - TokenDto reissueTokenDto(String bearerRefreshToken); + TokenDTO reissueTokenDto(String bearerRefreshToken); - LogoutResponse deleteRefreshToken(String email); + DeleteRefreshTokenDTO deleteRefreshToken(String email); } diff --git a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserApisService.java b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserApisService.java index 311da72..df6b7c4 100644 --- a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserApisService.java +++ b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserApisService.java @@ -1,10 +1,10 @@ package com.ticketing.server.user.service.interfaces; -import com.ticketing.server.user.application.response.PaymentsResponse; +import com.ticketing.server.user.service.dto.PaymentsDTO; import javax.validation.constraints.NotNull; public interface UserApisService { - PaymentsResponse findPaymentsByEmail(@NotNull String email); + PaymentsDTO findPaymentsByEmail(@NotNull String email); } diff --git a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java index adc998f..49449f0 100644 --- a/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java +++ b/server/src/main/java/com/ticketing/server/user/service/interfaces/UserService.java @@ -1,7 +1,10 @@ package com.ticketing.server.user.service.interfaces; import com.ticketing.server.user.domain.User; +import com.ticketing.server.user.service.dto.ChangedPasswordUserDTO; +import com.ticketing.server.user.service.dto.DeletedUserDTO; import com.ticketing.server.user.service.dto.ChangePasswordDTO; +import com.ticketing.server.user.service.dto.CreatedUserDTO; import com.ticketing.server.user.service.dto.DeleteUserDTO; import com.ticketing.server.user.service.dto.SignUpDTO; import com.ticketing.server.user.service.dto.UserDetailDTO; @@ -10,11 +13,11 @@ import javax.validation.constraints.NotNull; public interface UserService { - User register(@Valid SignUpDTO signUpDto); + CreatedUserDTO register(@Valid SignUpDTO signUpDto); - User delete(@Valid DeleteUserDTO deleteUserDto); + DeletedUserDTO delete(@Valid DeleteUserDTO deleteUserDto); - User changePassword(@Valid ChangePasswordDTO changePasswordDto); + ChangedPasswordUserDTO changePassword(@Valid ChangePasswordDTO changePasswordDto); UserDetailDTO findDetailByEmail(@NotNull String email); diff --git a/server/src/test/java/com/ticketing/server/global/security/jwt/TokenProviderTest.java b/server/src/test/java/com/ticketing/server/global/security/jwt/TokenProviderTest.java index cd94555..6aa403f 100644 --- a/server/src/test/java/com/ticketing/server/global/security/jwt/TokenProviderTest.java +++ b/server/src/test/java/com/ticketing/server/global/security/jwt/TokenProviderTest.java @@ -3,7 +3,7 @@ package com.ticketing.server.global.security.jwt; import static org.assertj.core.api.Assertions.assertThat; import com.ticketing.server.global.factory.YamlPropertySourceFactory; -import com.ticketing.server.user.application.response.TokenDto; +import com.ticketing.server.user.service.dto.TokenDTO; import com.ticketing.server.user.domain.UserGrade; import java.util.Collections; import org.junit.jupiter.api.BeforeEach; @@ -43,10 +43,10 @@ class TokenProviderTest { new UsernamePasswordAuthenticationToken("ticketing@gmail.com", "123456", Collections.singleton(grantedAuthority)); // when - TokenDto tokenDto = jwtProvider.generateTokenDto(authenticationToken); + TokenDTO tokenDto = jwtProvider.generateTokenDto(authenticationToken); // then - assertThat(tokenDto).isInstanceOf(TokenDto.class); + assertThat(tokenDto).isInstanceOf(TokenDTO.class); } @Test @@ -58,7 +58,7 @@ class TokenProviderTest { new UsernamePasswordAuthenticationToken("ticketing@gmail.com", "123456", Collections.singleton(grantedAuthority)); // when - TokenDto tokenDto = jwtProvider.generateTokenDto(authenticationToken); + TokenDTO tokenDto = jwtProvider.generateTokenDto(authenticationToken); Authentication authentication = jwtProvider.getAuthentication(tokenDto.getAccessToken()); // then diff --git a/server/src/test/java/com/ticketing/server/movie/service/TicketServiceImplTest.java b/server/src/test/java/com/ticketing/server/movie/service/TicketServiceImplTest.java index dac238b..729d845 100644 --- a/server/src/test/java/com/ticketing/server/movie/service/TicketServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/movie/service/TicketServiceImplTest.java @@ -11,7 +11,7 @@ import com.ticketing.server.global.exception.TicketingException; import com.ticketing.server.movie.domain.Ticket; import com.ticketing.server.movie.domain.repository.TicketRepository; import com.ticketing.server.movie.service.dto.TicketDetailsDTO; -import com.ticketing.server.payment.application.response.TicketDetailDTO; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.DisplayName; diff --git a/server/src/test/java/com/ticketing/server/payment/service/PaymentApisServiceImplTest.java b/server/src/test/java/com/ticketing/server/payment/service/PaymentApisServiceImplTest.java index 16db744..96f70df 100644 --- a/server/src/test/java/com/ticketing/server/payment/service/PaymentApisServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/payment/service/PaymentApisServiceImplTest.java @@ -16,7 +16,8 @@ import com.ticketing.server.payment.api.MovieClient; import com.ticketing.server.payment.api.UserClient; import com.ticketing.server.payment.api.dto.response.UserDetailResponse; import com.ticketing.server.payment.application.response.PaymentDetailResponse; -import com.ticketing.server.payment.application.response.TicketDetailDTO; +import com.ticketing.server.payment.service.dto.PaymentDetailDTO; +import com.ticketing.server.payment.service.dto.TicketDetailDTO; import com.ticketing.server.payment.domain.repository.PaymentRepository; import com.ticketing.server.user.domain.User; import com.ticketing.server.user.service.dto.UserDetailDTO; @@ -104,7 +105,7 @@ class PaymentApisServiceImplTest { when(movieClient.getTicketsByPaymentId(1L)).thenReturn(response); // when - PaymentDetailResponse paymentDetail = paymentApisService.findPaymentDetail(1L); + PaymentDetailDTO paymentDetail = paymentApisService.findPaymentDetail(1L); // then assertAll( diff --git a/server/src/test/java/com/ticketing/server/user/service/AuthenticationServiceImplTest.java b/server/src/test/java/com/ticketing/server/user/service/AuthenticationServiceImplTest.java index ccd1453..c6f6015 100644 --- a/server/src/test/java/com/ticketing/server/user/service/AuthenticationServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/user/service/AuthenticationServiceImplTest.java @@ -10,7 +10,7 @@ import com.ticketing.server.global.redis.RefreshRedisRepository; import com.ticketing.server.global.redis.RefreshToken; import com.ticketing.server.global.security.jwt.JwtProperties; import com.ticketing.server.global.security.jwt.JwtProvider; -import com.ticketing.server.user.application.response.TokenDto; +import com.ticketing.server.user.service.dto.TokenDTO; import com.ticketing.server.user.domain.UserGrade; import java.util.Collections; import java.util.Optional; @@ -70,7 +70,7 @@ class AuthenticationServiceImplTest { when(jwtProperties.hasTokenStartsWith(refreshToken)).thenReturn(true); // when - TokenDto tokenDto = authenticationService.reissueTokenDto(refreshToken); + TokenDTO tokenDto = authenticationService.reissueTokenDto(refreshToken); // then assertAll( diff --git a/server/src/test/java/com/ticketing/server/user/service/UserApisServiceImplTest.java b/server/src/test/java/com/ticketing/server/user/service/UserApisServiceImplTest.java index 11c48f7..a584b29 100644 --- a/server/src/test/java/com/ticketing/server/user/service/UserApisServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/user/service/UserApisServiceImplTest.java @@ -11,9 +11,9 @@ import com.ticketing.server.payment.application.response.SimplePaymentsResponse; import com.ticketing.server.payment.service.dto.CreatePaymentDTO; import com.ticketing.server.payment.service.dto.SimplePaymentDTO; import com.ticketing.server.user.api.PaymentClient; -import com.ticketing.server.user.application.response.PaymentsResponse; import com.ticketing.server.user.domain.User; import com.ticketing.server.user.domain.UserGrade; +import com.ticketing.server.user.service.dto.PaymentsDTO; import com.ticketing.server.user.service.interfaces.UserService; import java.util.Arrays; import java.util.Collections; @@ -53,12 +53,12 @@ class UserApisServiceImplTest { when(paymentClient.getPayments(any())).thenReturn(new SimplePaymentsResponse(1L, Collections.emptyList())); // when - PaymentsResponse paymentDetails = userApisService.findPaymentsByEmail("ticketing@gmail.com"); + PaymentsDTO paymentsDto = userApisService.findPaymentsByEmail("ticketing@gmail.com"); // then assertAll( - () -> assertThat(paymentDetails.getEmail()).isEqualTo("ticketing@gmail.com") - , () -> assertThat(paymentDetails.getPayments()).hasSize(0) + () -> assertThat(paymentsDto.getEmail()).isEqualTo("ticketing@gmail.com") + , () -> assertThat(paymentsDto.getPayments()).isEmpty() ); } @@ -77,12 +77,12 @@ class UserApisServiceImplTest { when(paymentClient.getPayments(any())).thenReturn(new SimplePaymentsResponse(1L, payments)); // when - PaymentsResponse paymentDetails = userApisService.findPaymentsByEmail("ticketing@gmail.com"); + PaymentsDTO patmentsDto = userApisService.findPaymentsByEmail("ticketing@gmail.com"); // then assertAll( - () -> assertThat(paymentDetails.getEmail()).isEqualTo("ticketing@gmail.com") - , () -> assertThat(paymentDetails.getPayments()).hasSize(2) + () -> assertThat(patmentsDto.getEmail()).isEqualTo("ticketing@gmail.com") + , () -> assertThat(patmentsDto.getPayments()).hasSize(2) ); } diff --git a/server/src/test/java/com/ticketing/server/user/service/UserServiceImplTest.java b/server/src/test/java/com/ticketing/server/user/service/UserServiceImplTest.java index 208777f..4da4020 100644 --- a/server/src/test/java/com/ticketing/server/user/service/UserServiceImplTest.java +++ b/server/src/test/java/com/ticketing/server/user/service/UserServiceImplTest.java @@ -13,8 +13,11 @@ import com.ticketing.server.user.domain.User; import com.ticketing.server.user.domain.UserGrade; import com.ticketing.server.user.domain.repository.UserRepository; import com.ticketing.server.user.service.dto.ChangePasswordDTO; +import com.ticketing.server.user.service.dto.ChangedPasswordUserDTO; +import com.ticketing.server.user.service.dto.CreatedUserDTO; import com.ticketing.server.user.service.dto.DeleteUserDTO; import com.ticketing.server.user.service.dto.DeleteUserDTOTest; +import com.ticketing.server.user.service.dto.DeletedUserDTO; import com.ticketing.server.user.service.dto.SignUpDTO; import com.ticketing.server.user.service.dto.UserDetailDTO; import java.util.Optional; @@ -72,10 +75,10 @@ class UserServiceImplTest { when(sequenceGenerator.generateId()).thenReturn(123L); // when - User user = userService.register(signUpDto); + CreatedUserDTO createdUserDto = userService.register(signUpDto); // then - assertThat(user).isNotNull(); + assertThat(createdUserDto).isNotNull(); } @Test @@ -97,10 +100,10 @@ class UserServiceImplTest { when(userRepository.findByEmailAndDeletedAtNull("ticketing@gmail.com")).thenReturn(Optional.of(user)); // when - User user = userService.delete(deleteUserDto); + DeletedUserDTO deletedUserDto = userService.delete(deleteUserDto); // then - assertThat(user.getDeletedAt()).isNotNull(); + assertThat(deletedUserDto.getDeletedAt()).isNotNull(); } @Test @@ -122,10 +125,10 @@ class UserServiceImplTest { when(userRepository.findByEmailAndDeletedAtNull("ticketing@gmail.com")).thenReturn(Optional.of(user)); // when - User user = userService.changePassword(changePasswordDto); + ChangedPasswordUserDTO changedUserDto = userService.changePassword(changePasswordDto); // then - assertThat(user).isNotNull(); + assertThat(changedUserDto).isNotNull(); } @Test