From c94e377b8b6b8ca9fb3acd833df929a851ef7405 Mon Sep 17 00:00:00 2001 From: tjdtn0219 Date: Tue, 21 Nov 2023 18:18:06 +0900 Subject: [PATCH 1/3] =?UTF-8?q?ResponseDto=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 9 ++++++++ .../member/controller/MemberController.java | 22 ++++++++++--------- .../global/common/ResponseDto.java | 11 ++++++++++ 3 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 src/main/java/ybe/mini/travelserver/global/common/ResponseDto.java diff --git a/.gitignore b/.gitignore index c2065bc..d535a84 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,12 @@ out/ ### VS Code ### .vscode/ + +### docker-compse ### +.docker-compose.yml + +### application developer config ### +/src/main/resources/application-dev.yml + +# QueryDsl +/src/main/generated/ \ No newline at end of file diff --git a/src/main/java/ybe/mini/travelserver/domain/member/controller/MemberController.java b/src/main/java/ybe/mini/travelserver/domain/member/controller/MemberController.java index 74a663c..e8a2f4b 100644 --- a/src/main/java/ybe/mini/travelserver/domain/member/controller/MemberController.java +++ b/src/main/java/ybe/mini/travelserver/domain/member/controller/MemberController.java @@ -3,11 +3,13 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import ybe.mini.travelserver.domain.member.dto.*; import ybe.mini.travelserver.domain.member.service.MemberService; +import ybe.mini.travelserver.global.common.ResponseDto; import ybe.mini.travelserver.global.security.PrincipalDetails; import java.net.URI; @@ -21,42 +23,42 @@ public class MemberController { private final MemberService memberService; @PostMapping("/signin") - public ResponseEntity signin(@RequestBody @Valid SigninRequest signinRequest) { + public ResponseDto signin(@RequestBody @Valid SigninRequest signinRequest) { SigninResponse signinResponse = memberService.loginMember(signinRequest); - return ResponseEntity.ok(signinResponse); + return new ResponseDto<>(HttpStatus.OK.value(), signinResponse); } @PostMapping("/signup") - public ResponseEntity signup(@RequestBody @Valid SignupRequest signupRequest) { + public ResponseDto signup(@RequestBody @Valid SignupRequest signupRequest) { SignupResponse signupResponse = memberService.createMember(signupRequest); URI createdUri = URI.create("/home"); - return ResponseEntity.created(createdUri).body(signupResponse); + return new ResponseDto<>(HttpStatus.OK.value(), signupResponse); } @GetMapping("/mypage") - public ResponseEntity bringMember(@AuthenticationPrincipal PrincipalDetails principalDetails) { + public ResponseDto bringMember(@AuthenticationPrincipal PrincipalDetails principalDetails) { MypageResponse mypageResponse = memberService.getMemberProfile(principalDetails); - return ResponseEntity.ok(mypageResponse); + return new ResponseDto<>(HttpStatus.OK.value(), mypageResponse); } @PatchMapping("/mypage") - public ResponseEntity updateMember(@RequestBody @Valid MypageUpdateRequest mypageUpdateRequest) { + public ResponseDto updateMember(@RequestBody @Valid MypageUpdateRequest mypageUpdateRequest) { MypageUpdateResponse mypageUpdateResponse = memberService.updateMemberProfile(mypageUpdateRequest); - return ResponseEntity.ok(mypageUpdateResponse); + return new ResponseDto<>(HttpStatus.OK.value(), mypageUpdateResponse); } @DeleteMapping("/mypage") - public ResponseEntity deleteMember( + public ResponseDto deleteMember( @AuthenticationPrincipal PrincipalDetails principalDetails, @RequestBody @Valid MypageDeleteRequest mypageDeleteRequest ) { memberService.deleteMemberProfile(mypageDeleteRequest); - return ResponseEntity.noContent().build(); + return new ResponseDto<>(HttpStatus.OK.value(), 1); //To do : 1대신 삭제된 ID를 반환해주면 좋을거 같습니다. } } diff --git a/src/main/java/ybe/mini/travelserver/global/common/ResponseDto.java b/src/main/java/ybe/mini/travelserver/global/common/ResponseDto.java new file mode 100644 index 0000000..006eca1 --- /dev/null +++ b/src/main/java/ybe/mini/travelserver/global/common/ResponseDto.java @@ -0,0 +1,11 @@ +package ybe.mini.travelserver.global.common; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import lombok.AllArgsConstructor; + +public record ResponseDto ( + int status, + T data +) { +} From aa1b73d01c922998348649376dfaa12e6a7a0515 Mon Sep 17 00:00:00 2001 From: tjdtn0219 Date: Mon, 27 Nov 2023 18:15:41 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Fix:=20=EC=BD=94=EB=93=9C=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/ReservationRoomCreateRequest.java | 5 +++-- .../global/exception/dto/DTOErrorMessage.java | 4 +++- .../global/exception/dto/DTOExceptionHandler.java | 1 + src/test/http/reservation.http | 8 ++++---- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/ybe/mini/travelserver/domain/reservation_room/dto/ReservationRoomCreateRequest.java b/src/main/java/ybe/mini/travelserver/domain/reservation_room/dto/ReservationRoomCreateRequest.java index 453c481..3a01746 100644 --- a/src/main/java/ybe/mini/travelserver/domain/reservation_room/dto/ReservationRoomCreateRequest.java +++ b/src/main/java/ybe/mini/travelserver/domain/reservation_room/dto/ReservationRoomCreateRequest.java @@ -1,8 +1,7 @@ package ybe.mini.travelserver.domain.reservation_room.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.*; import lombok.Builder; import java.io.Serializable; @@ -19,6 +18,7 @@ public record ReservationRoomCreateRequest( Long roomTypeId, @NotNull + @FutureOrPresent @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm") LocalDateTime checkIn, @@ -26,6 +26,7 @@ public record ReservationRoomCreateRequest( @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm") LocalDateTime checkOut, @NotNull + @Min(value = 1, message = "숙박 인원은 최소 1명 이어야 합니다.") Integer guestNumber ) implements Serializable { } diff --git a/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOErrorMessage.java b/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOErrorMessage.java index 85be1b1..1252edd 100644 --- a/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOErrorMessage.java +++ b/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOErrorMessage.java @@ -10,7 +10,9 @@ @Getter @AllArgsConstructor public enum DTOErrorMessage implements ErrorMessage { - METHOD_ARGUMENT_NOT_VALID(BAD_REQUEST, "DTO 값이 유효하지 않습니다"); + METHOD_ARGUMENT_NOT_VALID(BAD_REQUEST, "DTO 값이 유효하지 않습니다"), + ; + private final HttpStatus status; private final String message; } diff --git a/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOExceptionHandler.java b/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOExceptionHandler.java index 2557b03..a695e5a 100644 --- a/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOExceptionHandler.java +++ b/src/main/java/ybe/mini/travelserver/global/exception/dto/DTOExceptionHandler.java @@ -25,4 +25,5 @@ public ProblemDetail handleMethodArgumentNotValidException( String errorMessage = Objects.requireNonNull(ex.getBindingResult().getFieldError()).getDefaultMessage(); return createProblemDetail(errorMessage, METHOD_ARGUMENT_NOT_VALID.getStatus().value(), request); } + } \ No newline at end of file diff --git a/src/test/http/reservation.http b/src/test/http/reservation.http index b09528b..80cf75d 100644 --- a/src/test/http/reservation.http +++ b/src/test/http/reservation.http @@ -1,7 +1,7 @@ ### 예약 생성 POST http://localhost:8080/temp/reservations Content-Type: application/json -Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwiaWF0IjoxNzAxMDIyMDAzLCJleHAiOjE3MDEwMjM4MDMsImVtYWlsIjoib2tqYWVvb2s5OEBnbWFpbC5jb20ifQ.dnY4hXXEjMkybH1gwaxL9MbQkeAabZczI5S9SzaHxLM +Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwiaWF0IjoxNzAxMDc1Njk4LCJleHAiOjE3MDEwNzc0OTgsImVtYWlsIjoib2tqYWVvb2s5OEBnbWFpbC5jb20ifQ.CFJ_abQV4neJ1B7uYFj2rTxIcjrGfV2RJj09UORA3T4 { "reservationRooms" : [ @@ -9,9 +9,9 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxIiwiaWF0I "accommodationId": 142785, "accommodationName": "가락관광호텔", "roomTypeId": 11430, - "checkIn": "2022-01-01 14:00", - "checkOut": "2022-01-02 11:00", - "guestNumber": 2 + "checkIn": "2024-01-01 14:00", + "checkOut": "2024-01-02 11:00", + "guestNumber": 1 } ] } From a082716752c837fb75dc5c6b405f82bcba762a5b Mon Sep 17 00:00:00 2001 From: tjdtn0219 Date: Mon, 27 Nov 2023 18:36:26 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Fix:=20Test=20Code=20=EC=98=88=EC=95=BD=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=9C=20=EB=A1=9C=EC=A7=81=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ReservationControllerTest.java | 15 --------------- .../service/ReservationServiceTest.java | 14 -------------- 2 files changed, 29 deletions(-) diff --git a/src/test/java/ybe/mini/travelserver/domain/reservation/controller/ReservationControllerTest.java b/src/test/java/ybe/mini/travelserver/domain/reservation/controller/ReservationControllerTest.java index fdd7fe7..e9329e4 100644 --- a/src/test/java/ybe/mini/travelserver/domain/reservation/controller/ReservationControllerTest.java +++ b/src/test/java/ybe/mini/travelserver/domain/reservation/controller/ReservationControllerTest.java @@ -69,21 +69,6 @@ void getMyReservations_success() { then(reservationService).should().getMyReservations(any()); } - @Test - @DisplayName("예약 결제") - void payReservation_success() { - //given - given(reservationService.updateReservationStatusToPay(any())) - .willReturn(1L); - - //when - var actual = reservationController.payReservation(1L); - - //then - var expected = new ResponseDto<>(OK.value(), 1L); - assertEquals(actual, expected); - then(reservationService).should().updateReservationStatusToPay(any()); - } @Test @DisplayName("예약 삭제") diff --git a/src/test/java/ybe/mini/travelserver/domain/reservation/service/ReservationServiceTest.java b/src/test/java/ybe/mini/travelserver/domain/reservation/service/ReservationServiceTest.java index 351372c..68615ab 100644 --- a/src/test/java/ybe/mini/travelserver/domain/reservation/service/ReservationServiceTest.java +++ b/src/test/java/ybe/mini/travelserver/domain/reservation/service/ReservationServiceTest.java @@ -62,20 +62,6 @@ void createReservation_success() { } - @Test - void updateReservationStatusToPay_success() { - //given - given(reservationRepository.findById(anyLong())).willReturn(Optional.ofNullable(dummyReservation())); - - //when - var actual = reservationService.updateReservationStatusToPay(1L); - - //then - var expected = 1L; - assertEquals(actual, expected); - - } - @Test void deleteReservation_success() { //given