diff --git a/src/main/java/com/ject/studytrip/stamp/application/dto/StampInfo.java b/src/main/java/com/ject/studytrip/stamp/application/dto/StampInfo.java index 9538dc9..7681f98 100644 --- a/src/main/java/com/ject/studytrip/stamp/application/dto/StampInfo.java +++ b/src/main/java/com/ject/studytrip/stamp/application/dto/StampInfo.java @@ -7,7 +7,6 @@ public record StampInfo( Long stampId, String stampName, int stampOrder, - String deadline, boolean completed, String createdAt, String updatedAt, @@ -17,7 +16,6 @@ public static StampInfo from(Stamp stamp) { stamp.getId(), stamp.getName(), stamp.getStampOrder(), - DateUtil.formatDate(stamp.getDeadline()), stamp.isCompleted(), DateUtil.formatDateTime(stamp.getCreatedAt()), DateUtil.formatDateTime(stamp.getUpdatedAt()), diff --git a/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java b/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java index cd4d1aa..13b4b0a 100644 --- a/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java +++ b/src/main/java/com/ject/studytrip/stamp/application/facade/StampFacade.java @@ -7,8 +7,8 @@ import com.ject.studytrip.stamp.application.service.StampService; import com.ject.studytrip.stamp.domain.model.Stamp; import com.ject.studytrip.stamp.presentation.dto.request.CreateStampRequest; -import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampNameAndDeadlineRequest; import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampOrderRequest; +import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampRequest; import com.ject.studytrip.trip.application.service.TripService; import com.ject.studytrip.trip.domain.model.Trip; import java.util.List; @@ -34,12 +34,11 @@ public StampInfo createStamp(Long memberId, Long tripId, CreateStampRequest requ } @Transactional - public void updateStampNameAndDeadline( - Long memberId, Long tripId, Long stampId, UpdateStampNameAndDeadlineRequest request) { + public void updateStamp(Long memberId, Long tripId, Long stampId, UpdateStampRequest request) { Trip trip = tripService.getValidTrip(memberId, tripId); Stamp stamp = stampService.getValidStamp(trip.getId(), stampId); - stampService.updateStampNameAndDeadline(trip, stamp, request); + stampService.updateStampName(stamp, request); } @Transactional diff --git a/src/main/java/com/ject/studytrip/stamp/application/service/StampService.java b/src/main/java/com/ject/studytrip/stamp/application/service/StampService.java index d850b13..077615e 100644 --- a/src/main/java/com/ject/studytrip/stamp/application/service/StampService.java +++ b/src/main/java/com/ject/studytrip/stamp/application/service/StampService.java @@ -8,8 +8,8 @@ import com.ject.studytrip.stamp.domain.repository.StampQueryRepository; import com.ject.studytrip.stamp.domain.repository.StampRepository; import com.ject.studytrip.stamp.presentation.dto.request.CreateStampRequest; -import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampNameAndDeadlineRequest; import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampOrderRequest; +import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampRequest; import com.ject.studytrip.trip.domain.model.Trip; import com.ject.studytrip.trip.domain.model.TripCategory; import java.util.*; @@ -25,10 +25,7 @@ public class StampService { private final StampQueryRepository stampQueryRepository; public Stamp createStamp(Trip trip, CreateStampRequest request) { - Stamp newStamp = - StampFactory.create(trip, request.name(), request.order(), request.deadline()); - - StampPolicy.validateStampDeadline(trip.getEndDate(), List.of(newStamp)); + Stamp newStamp = StampFactory.create(trip, request.name(), request.order()); List existingStamps = stampRepository.findAllByTripIdAndDeletedAtIsNull(trip.getId()); @@ -43,26 +40,16 @@ public Stamp createStamp(Trip trip, CreateStampRequest request) { public void createStamps(Trip trip, List requests) { List stamps = requests.stream() - .map( - stamp -> - StampFactory.create( - trip, - stamp.name(), - stamp.order(), - stamp.deadline())) + .map(stamp -> StampFactory.create(trip, stamp.name(), stamp.order())) .toList(); - StampPolicy.validateStampDeadline(trip.getEndDate(), stamps); StampPolicy.validateStampOrders(trip.getCategory(), stamps); stampRepository.saveAll(stamps); } - public void updateStampNameAndDeadline( - Trip trip, Stamp stamp, UpdateStampNameAndDeadlineRequest request) { - stamp.update(request.name(), request.deadline()); - - StampPolicy.validateStampDeadline(trip.getEndDate(), List.of(stamp)); + public void updateStampName(Stamp stamp, UpdateStampRequest request) { + stamp.updateName(request.name()); } public void updateStampOrders(Trip trip, UpdateStampOrderRequest request) { @@ -91,7 +78,7 @@ public void updateStampOrders(Trip trip, UpdateStampOrderRequest request) { } public void updateStampOrdersByTripCategoryChange(Long tripId, TripCategory newCategory) { - List stamps = stampRepository.findAllByTripIdOrderByDeadlineAsc(tripId); + List stamps = stampRepository.findAllByTripIdOrderByCreatedAtAsc(tripId); if (newCategory == TripCategory.EXPLORE) { stamps.forEach(stamp -> stamp.updateStampOrder(0)); diff --git a/src/main/java/com/ject/studytrip/stamp/domain/error/StampErrorCode.java b/src/main/java/com/ject/studytrip/stamp/domain/error/StampErrorCode.java index 39e0a24..716512f 100644 --- a/src/main/java/com/ject/studytrip/stamp/domain/error/StampErrorCode.java +++ b/src/main/java/com/ject/studytrip/stamp/domain/error/StampErrorCode.java @@ -7,8 +7,6 @@ @RequiredArgsConstructor public enum StampErrorCode implements ErrorCode { // 400 - STAMP_DEADLINE_CANNOT_BE_IN_PAST(HttpStatus.BAD_REQUEST, "스탬프의 마감일은 과거일 수 없습니다."), - STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE(HttpStatus.BAD_REQUEST, "스탬프의 마감일은 여행 종료일을 초과할 수 없습니다."), INVALID_STAMP_ORDER_FOR_EXPLORATION_TRIP( HttpStatus.BAD_REQUEST, "탐험형 여행에서는 스탬프 순서를 지정할 수 없으며, 항상 0이여야 합니다. "), INVALID_STAMP_ORDER_RANGE_FOR_COURSE_TRIP( diff --git a/src/main/java/com/ject/studytrip/stamp/domain/factory/StampFactory.java b/src/main/java/com/ject/studytrip/stamp/domain/factory/StampFactory.java index 74379c3..96e342a 100644 --- a/src/main/java/com/ject/studytrip/stamp/domain/factory/StampFactory.java +++ b/src/main/java/com/ject/studytrip/stamp/domain/factory/StampFactory.java @@ -2,13 +2,12 @@ import com.ject.studytrip.stamp.domain.model.Stamp; import com.ject.studytrip.trip.domain.model.Trip; -import java.time.LocalDate; import lombok.AccessLevel; import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class StampFactory { - public static Stamp create(Trip trip, String name, int stampOrder, LocalDate deadline) { - return Stamp.of(trip, name, stampOrder, deadline); + public static Stamp create(Trip trip, String name, int stampOrder) { + return Stamp.of(trip, name, stampOrder); } } diff --git a/src/main/java/com/ject/studytrip/stamp/domain/model/Stamp.java b/src/main/java/com/ject/studytrip/stamp/domain/model/Stamp.java index 082799f..20cb278 100644 --- a/src/main/java/com/ject/studytrip/stamp/domain/model/Stamp.java +++ b/src/main/java/com/ject/studytrip/stamp/domain/model/Stamp.java @@ -5,9 +5,7 @@ import com.ject.studytrip.global.common.entity.BaseTimeEntity; import com.ject.studytrip.trip.domain.model.Trip; import jakarta.persistence.*; -import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.Objects; import lombok.*; @Entity @@ -30,24 +28,19 @@ public class Stamp extends BaseTimeEntity { private int stampOrder; - @Column(nullable = false) - private LocalDate deadline; - private boolean completed; - public static Stamp of(Trip trip, String name, int stampOrder, LocalDate deadline) { + public static Stamp of(Trip trip, String name, int stampOrder) { return Stamp.builder() .trip(trip) .name(name) .stampOrder(stampOrder) - .deadline(deadline) .completed(false) .build(); } - public void update(String name, LocalDate deadline) { + public void updateName(String name) { if (hasText(name)) this.name = name; - if (Objects.nonNull(deadline)) this.deadline = deadline; } public void updateStampOrder(int newOrder) { diff --git a/src/main/java/com/ject/studytrip/stamp/domain/policy/StampPolicy.java b/src/main/java/com/ject/studytrip/stamp/domain/policy/StampPolicy.java index e0ce819..672fcfb 100644 --- a/src/main/java/com/ject/studytrip/stamp/domain/policy/StampPolicy.java +++ b/src/main/java/com/ject/studytrip/stamp/domain/policy/StampPolicy.java @@ -4,7 +4,6 @@ import com.ject.studytrip.stamp.domain.error.StampErrorCode; import com.ject.studytrip.stamp.domain.model.Stamp; import com.ject.studytrip.trip.domain.model.TripCategory; -import java.time.LocalDate; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -23,21 +22,6 @@ public static void validateNotDeleted(Stamp stamp) { throw new CustomException(StampErrorCode.STAMP_ALREADY_DELETED); } - public static void validateStampDeadline(LocalDate tripEndDate, List stamps) { - if (tripEndDate == null || stamps.isEmpty()) return; - - LocalDate today = LocalDate.now(); - for (Stamp stamp : stamps) { - LocalDate stampDeadline = stamp.getDeadline(); - - if (stampDeadline.isBefore(today)) - throw new CustomException(StampErrorCode.STAMP_DEADLINE_CANNOT_BE_IN_PAST); - - if (stampDeadline.isAfter(tripEndDate)) - throw new CustomException(StampErrorCode.STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE); - } - } - public static void validateStampOrders(TripCategory tripCategory, List stamps) { int maxOrder = stamps.size(); Set orderSet = new HashSet<>(); diff --git a/src/main/java/com/ject/studytrip/stamp/domain/repository/StampRepository.java b/src/main/java/com/ject/studytrip/stamp/domain/repository/StampRepository.java index 91cb0c8..8aef203 100644 --- a/src/main/java/com/ject/studytrip/stamp/domain/repository/StampRepository.java +++ b/src/main/java/com/ject/studytrip/stamp/domain/repository/StampRepository.java @@ -15,5 +15,5 @@ public interface StampRepository { List findAllByTripIdAndDeletedAtIsNull(Long tripId); - List findAllByTripIdOrderByDeadlineAsc(Long tripId); + List findAllByTripIdOrderByCreatedAtAsc(Long tripId); } diff --git a/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampJpaRepository.java b/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampJpaRepository.java index baedf96..5b1a017 100644 --- a/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampJpaRepository.java +++ b/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampJpaRepository.java @@ -9,5 +9,5 @@ public interface StampJpaRepository extends JpaRepository { List findAllByTripIdAndDeletedAtIsNull(Long tripId); - List findAllByTripIdOrderByDeadlineAsc(Long tripId); + List findAllByTripIdOrderByCreatedAtAsc(Long tripId); } diff --git a/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampRepositoryAdapter.java b/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampRepositoryAdapter.java index a1937ba..239c180 100644 --- a/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampRepositoryAdapter.java +++ b/src/main/java/com/ject/studytrip/stamp/infra/jpa/StampRepositoryAdapter.java @@ -38,7 +38,7 @@ public List findAllByTripIdAndDeletedAtIsNull(Long tripId) { } @Override - public List findAllByTripIdOrderByDeadlineAsc(Long tripId) { - return stampJpaRepository.findAllByTripIdOrderByDeadlineAsc(tripId); + public List findAllByTripIdOrderByCreatedAtAsc(Long tripId) { + return stampJpaRepository.findAllByTripIdOrderByCreatedAtAsc(tripId); } } diff --git a/src/main/java/com/ject/studytrip/stamp/presentation/controller/StampController.java b/src/main/java/com/ject/studytrip/stamp/presentation/controller/StampController.java index d31b5e5..419524c 100644 --- a/src/main/java/com/ject/studytrip/stamp/presentation/controller/StampController.java +++ b/src/main/java/com/ject/studytrip/stamp/presentation/controller/StampController.java @@ -5,8 +5,8 @@ import com.ject.studytrip.stamp.application.dto.StampInfo; import com.ject.studytrip.stamp.application.facade.StampFacade; import com.ject.studytrip.stamp.presentation.dto.request.CreateStampRequest; -import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampNameAndDeadlineRequest; import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampOrderRequest; +import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampRequest; import com.ject.studytrip.stamp.presentation.dto.response.CreateStampResponse; import com.ject.studytrip.stamp.presentation.dto.response.LoadStampDetailResponse; import com.ject.studytrip.stamp.presentation.dto.response.LoadStampInfoResponse; @@ -43,14 +43,14 @@ public ResponseEntity createStamp( HttpStatus.CREATED.value(), CreateStampResponse.of(result))); } - @Operation(summary = "스탬프 이름, 마감일 수정", description = "특정 스탬프의 이름과 마감일을 수정합니다.") + @Operation(summary = "스탬프 수정", description = "특정 스탬프의 이름을 수정합니다.") @PatchMapping("/api/trips/{tripId}/stamps/{stampId}") public ResponseEntity updateStamp( @AuthenticationPrincipal String memberId, @PathVariable @NotNull(message = "여행 ID는 필수 요청 파라미터입니다.") Long tripId, @PathVariable @NotNull(message = "스탬프 ID는 필수 요청 파라미터입니다.") Long stampId, - @RequestBody @Valid UpdateStampNameAndDeadlineRequest request) { - stampFacade.updateStampNameAndDeadline(Long.valueOf(memberId), tripId, stampId, request); + @RequestBody @Valid UpdateStampRequest request) { + stampFacade.updateStamp(Long.valueOf(memberId), tripId, stampId, request); return ResponseEntity.status(HttpStatus.OK) .body(StandardResponse.success(HttpStatus.OK.value(), null)); diff --git a/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/CreateStampRequest.java b/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/CreateStampRequest.java index 432233b..9482334 100644 --- a/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/CreateStampRequest.java +++ b/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/CreateStampRequest.java @@ -1,17 +1,10 @@ package com.ject.studytrip.stamp.presentation.dto.request; import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.FutureOrPresent; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import java.time.LocalDate; public record CreateStampRequest( @Schema(description = "스탬프 이름") @NotEmpty(message = "스탬프 이름은 필수 요청 값입니다.") String name, @Schema(description = "스탬프 순서") @Min(value = 0, message = "스탬프 순서는 최소 0 이상이여야 합니다.") - int order, - @Schema(description = "스탬프 마감일") - @NotNull(message = "스탬프 마감일은 필수 요청 값입니다.") - @FutureOrPresent(message = "스탬프 마감일은 현재 날짜보다 과거일 수 없습니다.") - LocalDate deadline) {} + int order) {} diff --git a/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/UpdateStampNameAndDeadlineRequest.java b/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/UpdateStampNameAndDeadlineRequest.java deleted file mode 100644 index 00d8f3e..0000000 --- a/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/UpdateStampNameAndDeadlineRequest.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.ject.studytrip.stamp.presentation.dto.request; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.FutureOrPresent; -import java.time.LocalDate; - -public record UpdateStampNameAndDeadlineRequest( - @Schema(description = "수정할 스탬프 이름") String name, - @Schema(description = "수정할 스탬프 마감일") - @FutureOrPresent(message = "스탬프 마감일은 현재 날짜보다 과거일 수 없습니다.") - LocalDate deadline) {} diff --git a/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/UpdateStampRequest.java b/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/UpdateStampRequest.java new file mode 100644 index 0000000..5ac3fc7 --- /dev/null +++ b/src/main/java/com/ject/studytrip/stamp/presentation/dto/request/UpdateStampRequest.java @@ -0,0 +1,5 @@ +package com.ject.studytrip.stamp.presentation.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; + +public record UpdateStampRequest(@Schema(description = "수정할 스탬프 이름") String name) {} diff --git a/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampDetailResponse.java b/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampDetailResponse.java index e9b5c86..57b4869 100644 --- a/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampDetailResponse.java +++ b/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampDetailResponse.java @@ -10,7 +10,6 @@ public record LoadStampDetailResponse( @Schema(description = "스탬프 ID") Long stampId, @Schema(description = "스탬프 이름") String stampName, @Schema(description = "스탬프 순서") int stampOrder, - @Schema(description = "스탬프 마감일") String stampDeadline, @Schema(description = "스탬프 완료 여부") boolean completed, @Schema(description = "미션 목록") List missions) { public static LoadStampDetailResponse of(StampInfo stampInfo, List missionInfos) { @@ -18,7 +17,6 @@ public static LoadStampDetailResponse of(StampInfo stampInfo, List stampInfo.stampId(), stampInfo.stampName(), stampInfo.stampOrder(), - stampInfo.deadline(), stampInfo.completed(), missionInfos.stream().map(LoadMissionInfoResponse::of).toList()); } diff --git a/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampInfoResponse.java b/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampInfoResponse.java index 84ae988..8d8eacd 100644 --- a/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampInfoResponse.java +++ b/src/main/java/com/ject/studytrip/stamp/presentation/dto/response/LoadStampInfoResponse.java @@ -7,14 +7,9 @@ public record LoadStampInfoResponse( @Schema(description = "스탬프 ID") Long stampId, @Schema(description = "스탬프 이름") String stampName, @Schema(description = "스탬프 순서") int stampOrder, - @Schema(description = "스탬프 마감일") String stampDeadline, @Schema(description = "스탬프 완료 여부") boolean completed) { public static LoadStampInfoResponse of(StampInfo info) { return new LoadStampInfoResponse( - info.stampId(), - info.stampName(), - info.stampOrder(), - info.deadline(), - info.completed()); + info.stampId(), info.stampName(), info.stampOrder(), info.completed()); } } diff --git a/src/test/java/com/ject/studytrip/stamp/application/service/StampServiceTest.java b/src/test/java/com/ject/studytrip/stamp/application/service/StampServiceTest.java index c6ad50d..7c78adf 100644 --- a/src/test/java/com/ject/studytrip/stamp/application/service/StampServiceTest.java +++ b/src/test/java/com/ject/studytrip/stamp/application/service/StampServiceTest.java @@ -19,8 +19,8 @@ import com.ject.studytrip.stamp.fixture.StampFixture; import com.ject.studytrip.stamp.fixture.UpdateStampRequestFixture; import com.ject.studytrip.stamp.presentation.dto.request.CreateStampRequest; -import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampNameAndDeadlineRequest; import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampOrderRequest; +import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampRequest; import com.ject.studytrip.trip.domain.model.Trip; import com.ject.studytrip.trip.domain.model.TripCategory; import com.ject.studytrip.trip.fixture.TripFixture; @@ -74,8 +74,7 @@ void shouldCreateValidStamp() { // given CreateStampRequest request = fixture.build(); - Stamp saved = - Stamp.of(courseTrip, request.name(), request.order(), request.deadline()); + Stamp saved = Stamp.of(courseTrip, request.name(), request.order()); given(stampRepository.save(any())).willReturn(saved); // when @@ -85,33 +84,6 @@ void shouldCreateValidStamp() { verify(stampRepository).save(any()); assertThat(stamp.getName()).isEqualTo(saved.getName()); assertThat(stamp.getStampOrder()).isEqualTo(saved.getStampOrder()); - assertThat(stamp.getDeadline()).isEqualTo(saved.getDeadline()); - } - - @Test - @DisplayName("스탬프의 마감일이 과거라면 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineCannotBeInPast() { - // given - CreateStampRequest request = fixture.withDeadline(PAST_DATE).build(); - - // when & given - assertThatThrownBy(() -> stampService.createStamp(courseTrip, request)) - .isInstanceOf(CustomException.class) - .hasMessage(StampErrorCode.STAMP_DEADLINE_CANNOT_BE_IN_PAST.getMessage()); - } - - @Test - @DisplayName("스탬프의 마감일이 여행 종료일보다 이후라면 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineExceedsTripEndDate() { - // given - CreateStampRequest request = - fixture.withDeadline(courseTrip.getEndDate().plusDays(1)).build(); - - // when & then - assertThatThrownBy(() -> stampService.createStamp(courseTrip, request)) - .isInstanceOf(CustomException.class) - .hasMessage( - StampErrorCode.STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE.getMessage()); } @Test @@ -187,33 +159,6 @@ void shouldCreateStampsForExploreTrip() { verify(stampRepository).saveAll(anyList()); } - @Test - @DisplayName("스탬프의 마감일이 과거라면 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineCannotBeInPast() { - // given - List requests = - List.of(fixture.withDeadline(PAST_DATE).build()); - - // when & then - assertThatThrownBy(() -> stampService.createStamps(courseTrip, requests)) - .isInstanceOf(CustomException.class) - .hasMessage(StampErrorCode.STAMP_DEADLINE_CANNOT_BE_IN_PAST.getMessage()); - } - - @Test - @DisplayName("스탬프의 마감일이 여행 종료일보다 이후일 경우 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineExceedsTripEndDate() { - // given - List requests = - List.of(fixture.withDeadline(courseTrip.getEndDate().plusDays(1)).build()); - - // when & then - assertThatThrownBy(() -> stampService.createStamps(courseTrip, requests)) - .isInstanceOf(CustomException.class) - .hasMessage( - StampErrorCode.STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE.getMessage()); - } - @Test @DisplayName("탐험형 여행에서 순서가 1 이상이면 예외가 발생한다") void shouldThrowExceptionWhenOrderExistsInExploreTrip() { @@ -266,55 +211,20 @@ class UpdateStamp { private final UpdateStampRequestFixture fixture = new UpdateStampRequestFixture(); @Nested - @DisplayName("스탬프 이름 또는 마감일 수정") - class UpdateStampNameOrDeadline { + @DisplayName("스탬프 이름 수정") + class UpdateStampName { @Test - @DisplayName("유효한 정보로 스탬프의 이름 또는 마감일을 수정하면 스탬프가 업데이트된다") + @DisplayName("유효한 정보로 스탬프의 이름을 수정하면 스탬프가 업데이트된다") void shouldUpdateStampNameOrDeadline() { // given - UpdateStampNameAndDeadlineRequest request = fixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = fixture.buildUpdateName(); // when - stampService.updateStampNameAndDeadline(courseTrip, courseStamp1, request); + stampService.updateStampName(courseStamp1, request); // then assertThat(courseStamp1.getName()).isEqualTo(request.name()); - assertThat(courseStamp1.getDeadline()).isEqualTo(request.deadline()); - } - - @Test - @DisplayName("스탬프의 마감일이 과거라면 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineCannotBeInPast() { - // given - UpdateStampNameAndDeadlineRequest request = - fixture.withDeadline(PAST_DATE).buildUpdateNameAndDeadline(); - - // when & then - assertThatThrownBy( - () -> - stampService.updateStampNameAndDeadline( - courseTrip, courseStamp1, request)) - .isInstanceOf(CustomException.class) - .hasMessage(StampErrorCode.STAMP_DEADLINE_CANNOT_BE_IN_PAST.getMessage()); - } - - @Test - @DisplayName("스탬프의 마감일이 여행 종료일보다 이후일 경우 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineExceedsTripEndDate() { - // given - UpdateStampNameAndDeadlineRequest request = - fixture.withDeadline(courseTrip.getEndDate().plusDays(1)) - .buildUpdateNameAndDeadline(); - - // when & then - assertThatThrownBy( - () -> - stampService.updateStampNameAndDeadline( - courseTrip, courseStamp1, request)) - .isInstanceOf(CustomException.class) - .hasMessage( - StampErrorCode.STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE.getMessage()); } } @@ -408,7 +318,7 @@ class UpdateStampOrdersForUpdateTripCategory { @DisplayName("여행의 카테고리가 탐험형으로 수정되면 소속된 모든 스탬프의 순서를 0으로 수정한다") void shouldSetAllStampOrdersToZeroWhenCategoryChangesToExplore() { // given - given(stampRepository.findAllByTripIdOrderByDeadlineAsc(courseTrip.getId())) + given(stampRepository.findAllByTripIdOrderByCreatedAtAsc(courseTrip.getId())) .willReturn(List.of(courseStamp1, courseStamp2)); // when @@ -421,13 +331,13 @@ void shouldSetAllStampOrdersToZeroWhenCategoryChangesToExplore() { } @Test - @DisplayName("여행의 카테고리가 코스형으로 수정되면 소속된 모든 스탬프의 순서를 마감일이 이른 순으로 1부터 순차적으로 순서를 수정한다") + @DisplayName("여행의 카테고리가 코스형으로 수정되면 소속된 모든 스탬프의 순서를 생성일이 이른 순으로 1부터 순차적으로 순서를 수정한다") void shouldSetSequentialStampOrdersWhenCategoryChangesToCourse() { // given courseStamp1.updateStampOrder(0); courseStamp2.updateStampOrder(0); - given(stampRepository.findAllByTripIdOrderByDeadlineAsc(exploreTrip.getId())) + given(stampRepository.findAllByTripIdOrderByCreatedAtAsc(exploreTrip.getId())) .willReturn(List.of(courseStamp1, courseStamp2)); // when diff --git a/src/test/java/com/ject/studytrip/stamp/fixture/CreateStampRequestFixture.java b/src/test/java/com/ject/studytrip/stamp/fixture/CreateStampRequestFixture.java index 96d1ec9..31fac5a 100644 --- a/src/test/java/com/ject/studytrip/stamp/fixture/CreateStampRequestFixture.java +++ b/src/test/java/com/ject/studytrip/stamp/fixture/CreateStampRequestFixture.java @@ -1,13 +1,11 @@ package com.ject.studytrip.stamp.fixture; import com.ject.studytrip.stamp.presentation.dto.request.CreateStampRequest; -import java.time.LocalDate; public class CreateStampRequestFixture { private String name = "TEST STAMP"; private int stampOrder = 1; - private LocalDate deadline = LocalDate.now().plusDays(7); public CreateStampRequestFixture withName(String name) { this.name = name; @@ -19,12 +17,7 @@ public CreateStampRequestFixture withStampOrder(int stampOrder) { return this; } - public CreateStampRequestFixture withDeadline(LocalDate deadline) { - this.deadline = deadline; - return this; - } - public CreateStampRequest build() { - return new CreateStampRequest(name, stampOrder, deadline); + return new CreateStampRequest(name, stampOrder); } } diff --git a/src/test/java/com/ject/studytrip/stamp/fixture/StampFixture.java b/src/test/java/com/ject/studytrip/stamp/fixture/StampFixture.java index cf1e839..58737a2 100644 --- a/src/test/java/com/ject/studytrip/stamp/fixture/StampFixture.java +++ b/src/test/java/com/ject/studytrip/stamp/fixture/StampFixture.java @@ -3,19 +3,17 @@ import com.ject.studytrip.stamp.domain.factory.StampFactory; import com.ject.studytrip.stamp.domain.model.Stamp; import com.ject.studytrip.trip.domain.model.Trip; -import java.time.LocalDate; import org.springframework.test.util.ReflectionTestUtils; public class StampFixture { private static final String STAMP_NAME = "TEST STAMP NAME"; - private static final LocalDate STAMP_DEAD_LINE = LocalDate.now().plusDays(7); public static Stamp createStamp(Trip trip, int order) { - return StampFactory.create(trip, STAMP_NAME, order, STAMP_DEAD_LINE); + return StampFactory.create(trip, STAMP_NAME, order); } public static Stamp createStampWithId(Long id, Trip trip, int order) { - Stamp stamp = StampFactory.create(trip, STAMP_NAME, order, STAMP_DEAD_LINE); + Stamp stamp = StampFactory.create(trip, STAMP_NAME, order); ReflectionTestUtils.setField(stamp, "id", id); return stamp; diff --git a/src/test/java/com/ject/studytrip/stamp/fixture/UpdateStampRequestFixture.java b/src/test/java/com/ject/studytrip/stamp/fixture/UpdateStampRequestFixture.java index 57ae914..e704ef2 100644 --- a/src/test/java/com/ject/studytrip/stamp/fixture/UpdateStampRequestFixture.java +++ b/src/test/java/com/ject/studytrip/stamp/fixture/UpdateStampRequestFixture.java @@ -1,14 +1,12 @@ package com.ject.studytrip.stamp.fixture; -import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampNameAndDeadlineRequest; import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampOrderRequest; -import java.time.LocalDate; +import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampRequest; import java.util.List; public class UpdateStampRequestFixture { private String name = "TEST STAMP"; private List orderedStampIds = List.of(1L, 2L); - private LocalDate deadline = LocalDate.now().plusDays(1); public UpdateStampRequestFixture withName(String name) { this.name = name; @@ -20,13 +18,8 @@ public UpdateStampRequestFixture withOrderedStampIds(List orderedStampIds) return this; } - public UpdateStampRequestFixture withDeadline(LocalDate deadline) { - this.deadline = deadline; - return this; - } - - public UpdateStampNameAndDeadlineRequest buildUpdateNameAndDeadline() { - return new UpdateStampNameAndDeadlineRequest(name, deadline); + public UpdateStampRequest buildUpdateName() { + return new UpdateStampRequest(name); } public UpdateStampOrderRequest buildUpdateOrders() { diff --git a/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java b/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java index 7ce0860..2466c62 100644 --- a/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java +++ b/src/test/java/com/ject/studytrip/stamp/presentation/controller/StampControllerIntegrationTest.java @@ -17,13 +17,12 @@ import com.ject.studytrip.stamp.fixture.UpdateStampRequestFixture; import com.ject.studytrip.stamp.helper.StampTestHelper; import com.ject.studytrip.stamp.presentation.dto.request.CreateStampRequest; -import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampNameAndDeadlineRequest; import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampOrderRequest; +import com.ject.studytrip.stamp.presentation.dto.request.UpdateStampRequest; import com.ject.studytrip.trip.domain.error.TripErrorCode; import com.ject.studytrip.trip.domain.model.Trip; import com.ject.studytrip.trip.domain.model.TripCategory; import com.ject.studytrip.trip.helper.TripTestHelper; -import java.time.LocalDate; import java.util.List; import org.apache.http.HttpHeaders; import org.junit.jupiter.api.BeforeEach; @@ -153,28 +152,6 @@ void shouldThrowExceptionWhenInvalidRequiredFields() throws Exception { .value())); } - @Test - @DisplayName("스탬프 마감일이 과거일 경우 400 예외가 발생한다") - void shouldThrowExceptionWhenDeadlineIsInThePast() throws Exception { - // given - CreateStampRequest request = - createStampRequestFixture.withDeadline(LocalDate.now().minusDays(1)).build(); - - // when - ResultActions resultActions = getResultActions(token, courseTrip.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_NOT_VALID - .getStatus() - .value())); - } - @Test @DisplayName("유효하지 않은 여행 ID 라면 404 예외가 발생한다") void shouldThrowExceptionWhenInvalidTripId() throws Exception { @@ -233,30 +210,6 @@ void shouldThrowExceptionWhenAlreadyTrip() throws Exception { .value(TripErrorCode.TRIP_ALREADY_DELETED.getStatus().value())); } - @Test - @DisplayName("스탬프 마감일이 여행의 종료일보다 이후일 경우 400 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineIsAfterTripEndDate() throws Exception { - // given - CreateStampRequest request = - createStampRequestFixture - .withDeadline(courseTrip.getEndDate().plusDays(1)) - .build(); - - // when - ResultActions resultActions = getResultActions(token, courseTrip.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - StampErrorCode.STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE - .getStatus() - .value())); - } - @Test @DisplayName("탐험형 여행에 순서가 존재하는 스탬프를 추가하면 400 예외가 발생한다") void shouldThrowExceptionWhenStampOrderExistsInExplorationTrip() throws Exception { @@ -307,13 +260,10 @@ class UpdateStamp { new UpdateStampRequestFixture(); @Nested - @DisplayName("스탬프 이름, 마감일 수정") + @DisplayName("스탬프 이름 수정") class UpdateNameAndDeadline { private ResultActions getResultActions( - String token, - Object tripId, - Object stampId, - UpdateStampNameAndDeadlineRequest request) + String token, Object tripId, Object stampId, UpdateStampRequest request) throws Exception { return mockMvc.perform( patch("/api/trips/{tripId}/stamps/{stampId}", tripId, stampId) @@ -325,11 +275,10 @@ private ResultActions getResultActions( } @Test - @DisplayName("유효한 요청으로 스탬프의 이름과 마감일을 수정한다") - void shouldUpdateStampNameAndDeadline() throws Exception { + @DisplayName("유효한 요청으로 스탬프의 이름을 수정한다") + void shouldUpdateStampName() throws Exception { // given - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -345,8 +294,7 @@ void shouldUpdateStampNameAndDeadline() throws Exception { @DisplayName("인증되지 않은 사용자일 경우 401 예외가 발생한다") void shouldThrowExceptionWhenUnauthenticated() throws Exception { // given - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = getResultActions("", courseTrip.getId(), courseStamp1.getId(), request); @@ -365,8 +313,7 @@ void shouldThrowExceptionWhenUnauthenticated() throws Exception { void shouldThrowExceptionWhenTripIdTypeMismatch() throws Exception { // given String tripId = "abc"; - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -389,8 +336,7 @@ void shouldThrowExceptionWhenTripIdTypeMismatch() throws Exception { void shouldThrowExceptionWhenStampIdTypeMismatch() throws Exception { // given String stampId = "abc"; - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = getResultActions(token, courseTrip.getId(), stampId, request); @@ -407,38 +353,12 @@ void shouldThrowExceptionWhenStampIdTypeMismatch() throws Exception { .value())); } - @Test - @DisplayName("수정한 스탬프 마감일이 과거일 경우 400 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineCannotBeInPast() throws Exception { - // given - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture - .withDeadline(LocalDate.now().minusDays(1)) - .buildUpdateNameAndDeadline(); - - // when - ResultActions resultActions = - getResultActions(token, courseTrip.getId(), courseStamp1.getId(), request); - - // then - resultActions - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.success").value(false)) - .andExpect( - jsonPath("$.status") - .value( - CommonErrorCode.METHOD_ARGUMENT_NOT_VALID - .getStatus() - .value())); - } - @Test @DisplayName("유효하지 않은 여행 ID 라면 404 예외가 발생한다") void shouldThrowExceptionWhenInvalidTripId() throws Exception { // given Long tripId = 10000L; - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -460,8 +380,7 @@ void shouldThrowExceptionWhenNotTripOwner() throws Exception { Member newMember = memberTestHelper.saveMember("test@gmail.com", "TEST"); Trip newTrip = tripTestHelper.saveTrip(newMember, TripCategory.COURSE); Stamp newStamp = stampTestHelper.saveStamp(newTrip, 1); - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -481,8 +400,7 @@ void shouldThrowExceptionWhenNotTripOwner() throws Exception { void shouldThrowExceptionWhenAlreadyDeletedTrip() throws Exception { // given Trip deleted = tripTestHelper.saveDeletedTrip(member, TripCategory.COURSE); - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -505,8 +423,7 @@ void shouldThrowExceptionWhenAlreadyDeletedTrip() throws Exception { void shouldThrowExceptionWhenInvalidStampId() throws Exception { // given Long stampId = 10000L; - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -526,8 +443,7 @@ void shouldThrowExceptionWhenInvalidStampId() throws Exception { void shouldThrowExceptionWhenStampTripMisMatch() throws Exception { // given Stamp newStamp = stampTestHelper.saveStamp(exploreTrip, 0); - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = @@ -550,8 +466,7 @@ void shouldThrowExceptionWhenStampTripMisMatch() throws Exception { void shouldThrowExceptionWhenAlreadyDeletedStamp() throws Exception { // given Stamp newStamp = stampTestHelper.saveDeletedStamp(exploreTrip, 0); - UpdateStampNameAndDeadlineRequest request = - updateStampRequestFixture.buildUpdateNameAndDeadline(); + UpdateStampRequest request = updateStampRequestFixture.buildUpdateName(); // when ResultActions resultActions = diff --git a/src/test/java/com/ject/studytrip/trip/presentation/controller/TripControllerIntegrationTest.java b/src/test/java/com/ject/studytrip/trip/presentation/controller/TripControllerIntegrationTest.java index 14b9ff5..bfdb056 100644 --- a/src/test/java/com/ject/studytrip/trip/presentation/controller/TripControllerIntegrationTest.java +++ b/src/test/java/com/ject/studytrip/trip/presentation/controller/TripControllerIntegrationTest.java @@ -194,56 +194,6 @@ void shouldThrowExceptionWhenRequestStampsIsEmpty() throws Exception { status().is(TripErrorCode.TRIP_STAMP_REQUIRED.getStatus().value())); } - @Test - @DisplayName("스탬프 마감일이 과거일 경우 400 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineCannotBeInPast() throws Exception { - // given - List stampRequests = - List.of( - new CreateStampRequestFixture() - .withDeadline(LocalDate.now().minusDays(1)) - .build()); - CreateTripRequest request = - new CreateTripRequestFixture().withStamps(stampRequests).build(); - - // when - ResultActions resultActions = getResultActions(token, request); - - // then - resultActions.andExpect( - status().is( - StampErrorCode.STAMP_DEADLINE_CANNOT_BE_IN_PAST - .getStatus() - .value())); - } - - @Test - @DisplayName("스탬프 마감일이 여행의 종료일보다 이후일 경우 400 예외가 발생한다") - void shouldThrowExceptionWhenStampDeadlineIsAfterTripEndDate() throws Exception { - // given - LocalDate tripEndDate = LocalDate.now().plusDays(1); - List stampRequests = - List.of( - new CreateStampRequestFixture() - .withDeadline(tripEndDate.plusDays(1)) - .build()); - CreateTripRequest request = - new CreateTripRequestFixture() - .withEndDate(tripEndDate) - .withStamps(stampRequests) - .build(); - - // when - ResultActions resultActions = getResultActions(token, request); - - // then - resultActions.andExpect( - status().is( - StampErrorCode.STAMP_DEADLINE_EXCEEDS_TRIP_END_DATE - .getStatus() - .value())); - } - @Test @DisplayName("탐험형 여행을 선택하고 스탬프 순서가 존재할 경우 400 예외가 발생한다") void shouldThrowExceptionWhenStampOrderExistsInExplorationTrip() throws Exception {