From d7624cfaed177944bed2ead8be78a592e297339e Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Fri, 22 Nov 2024 12:06:45 +0900 Subject: [PATCH 01/29] =?UTF-8?q?refactor(recruit-board):=20RecruitBoard?= =?UTF-8?q?=20=EA=B0=9D=EC=B2=B4=20=EB=B6=84=EB=A6=AC=20=20-=20=EB=B4=89?= =?UTF-8?q?=EC=82=AC=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20VolunteerInfo=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=EC=97=90=EC=84=9C=20=EA=B4=80=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/RecruitBoard.java | 57 +++------------- .../recruitboard/domain/VolunteerInfo.java | 67 +++++++++++++++++++ .../request/RecruitBoardCreateRequestDto.java | 17 +++-- 3 files changed, 89 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java diff --git a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java index 14b3dad61..7633330c9 100644 --- a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java +++ b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java @@ -7,14 +7,13 @@ import com.somemore.global.common.BaseEntity; import jakarta.persistence.Column; +import jakarta.persistence.Embedded; import jakarta.persistence.Entity; import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Lob; import jakarta.persistence.Table; -import java.time.Duration; -import java.time.LocalDateTime; import java.time.LocalTime; import java.util.UUID; import lombok.Builder; @@ -44,64 +43,30 @@ public class RecruitBoard extends BaseEntity { @Column(name = "content", nullable = false) private String content; - @Column(name = "region", nullable = false) - private String region; - - @Column(name = "recruitment_count", nullable = false) - private Integer recruitmentCount; - - @Column(name = "img_url", nullable = false) - private String imgUrl; + @Embedded + private VolunteerInfo volunteerInfo; @Enumerated(value = STRING) @Column(name = "recruit_status", nullable = false, length = 20) private RecruitStatus recruitStatus = RECRUITING; - @Column(name = "volunteer_start_date_time", nullable = false) - private LocalDateTime volunteerStartDateTime; - - @Column(name = "volunteer_end_date_time", nullable = false) - private LocalDateTime volunteerEndDateTime; - - @Enumerated(value = STRING) - @Column(name = "volunteer_type", nullable = false, length = 30) - private VolunteerType volunteerType; - - @Column(name = "admitted", nullable = false) - private Boolean admitted; + @Column(name = "img_url", nullable = false) + private String imgUrl; @Builder - public RecruitBoard(UUID centerId, Long locationId, String title, String content, String region, - Integer recruitmentCount, String imgUrl, LocalDateTime volunteerStartDateTime, - LocalDateTime volunteerEndDateTime, VolunteerType volunteerType, Boolean admitted) { - - validateVolunteerDateTime(volunteerStartDateTime, volunteerEndDateTime); - + public RecruitBoard(UUID centerId, Long locationId, String title, String content, + VolunteerInfo volunteerInfo, String imgUrl) { this.centerId = centerId; this.locationId = locationId; this.title = title; this.content = content; - this.region = region; - this.recruitmentCount = recruitmentCount; + this.volunteerInfo = volunteerInfo; this.imgUrl = imgUrl; - this.volunteerStartDateTime = volunteerStartDateTime; - this.volunteerEndDateTime = volunteerEndDateTime; - this.volunteerType = volunteerType; - this.admitted = admitted; } - public LocalTime calculateVolunteerTime() { - Duration duration = Duration.between(volunteerStartDateTime, volunteerEndDateTime); - - long hours = duration.toHours(); - long minutes = duration.toMinutes() % 60; - - return LocalTime.of((int) hours, (int) minutes); + public LocalTime getVolunteerHours() { + return volunteerInfo.calculateVolunteerTime(); } - private void validateVolunteerDateTime(LocalDateTime startDateTime, LocalDateTime endDateTime) { - if (endDateTime.isEqual(startDateTime) || endDateTime.isBefore(startDateTime)) { - throw new IllegalArgumentException("종료 시간은 시작 시간보다 이후여야 합니다."); - } - } + } \ No newline at end of file diff --git a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java b/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java new file mode 100644 index 000000000..6bfe2feb6 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java @@ -0,0 +1,67 @@ +package com.somemore.recruitboard.domain; + +import static jakarta.persistence.EnumType.STRING; +import static lombok.AccessLevel.PROTECTED; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Enumerated; +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.LocalTime; +import lombok.Builder; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = PROTECTED) +@Embeddable +public class VolunteerInfo { + + @Column(name = "region", nullable = false) + private String region; + + @Column(name = "recruitment_count", nullable = false) + private Integer recruitmentCount; + + @Column(name = "volunteer_start_date_time", nullable = false) + private LocalDateTime volunteerStartDateTime; + + @Column(name = "volunteer_end_date_time", nullable = false) + private LocalDateTime volunteerEndDateTime; + + @Enumerated(value = STRING) + @Column(name = "volunteer_type", nullable = false, length = 30) + private VolunteerType volunteerType; + + @Column(name = "admitted", nullable = false) + private Boolean admitted; + + @Builder + public VolunteerInfo(String region, Integer recruitmentCount, + LocalDateTime volunteerStartDateTime, LocalDateTime volunteerEndDateTime, + VolunteerType volunteerType, Boolean admitted) { + + validateVolunteerDateTime(volunteerStartDateTime, volunteerEndDateTime); + + this.region = region; + this.recruitmentCount = recruitmentCount; + this.volunteerStartDateTime = volunteerStartDateTime; + this.volunteerEndDateTime = volunteerEndDateTime; + this.volunteerType = volunteerType; + this.admitted = admitted; + } + + public LocalTime calculateVolunteerTime() { + Duration duration = Duration.between(volunteerStartDateTime, volunteerEndDateTime); + + long hours = duration.toHours(); + long minutes = duration.toMinutes() % 60; + + return LocalTime.of((int) hours, (int) minutes); + } + + private void validateVolunteerDateTime(LocalDateTime startDateTime, LocalDateTime endDateTime) { + if (endDateTime.isEqual(startDateTime) || endDateTime.isBefore(startDateTime)) { + throw new IllegalArgumentException("종료 시간은 시작 시간보다 이후여야 합니다."); + } + } +} diff --git a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java index e047c5886..6d02406cd 100644 --- a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java +++ b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.somemore.location.dto.request.LocationCreateRequestDto; import com.somemore.recruitboard.domain.RecruitBoard; +import com.somemore.recruitboard.domain.VolunteerInfo; import com.somemore.recruitboard.domain.VolunteerType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -44,18 +45,22 @@ public record RecruitBoardCreateRequestDto( ) { public RecruitBoard toEntity(UUID centerId, Long locationId, String imgUrl) { + VolunteerInfo volunteerInfo = VolunteerInfo.builder() + .region("경기") + .recruitmentCount(recruitmentCount) + .volunteerStartDateTime(volunteerStartDateTime) + .volunteerEndDateTime(volunteerEndDateTime) + .volunteerType(volunteerType) + .admitted(admitted) + .build(); + return RecruitBoard.builder() .centerId(centerId) .locationId(locationId) .title(title) .content(content) - .region(region) - .recruitmentCount(recruitmentCount) .imgUrl(imgUrl) - .volunteerStartDateTime(volunteerStartDateTime) - .volunteerEndDateTime(volunteerEndDateTime) - .volunteerType(volunteerType) - .admitted(admitted) + .volunteerInfo(volunteerInfo) .build(); } } From fea380020b997cb329f11e643a878ef00b9db15d Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Fri, 22 Nov 2024 12:07:23 +0900 Subject: [PATCH 02/29] =?UTF-8?q?test(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EB=B6=84=EB=A6=AC=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=A5=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/RecruitBoardTest.java | 98 +++++++++---------- .../domain/VolunteerInfoTest.java | 56 +++++++++++ 2 files changed, 102 insertions(+), 52 deletions(-) create mode 100644 src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java diff --git a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java index 3ef77e328..15d4193c2 100644 --- a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java @@ -3,15 +3,12 @@ import static com.somemore.recruitboard.domain.RecruitStatus.RECRUITING; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.UUID; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; class RecruitBoardTest { @@ -19,53 +16,19 @@ class RecruitBoardTest { @Test void createRecruitBoardWithDefaultStatus() { // given - RecruitBoard board = RecruitBoard.builder() - .centerId(UUID.randomUUID()) - .locationId(1L) - .title("봉사모집제목") - .content("봉사모집내용") - .region("경기") - .recruitmentCount(10) - .imgUrl("https://image.domain.com/links") - .volunteerStartDateTime(LocalDateTime.now()) - .volunteerEndDateTime(LocalDateTime.now().plusHours(1)) - .volunteerType(OTHER) - .admitted(true) - .build(); + UUID centerId = UUID.randomUUID(); + Long locationId = 1L; + RecruitBoard board = createRecruitBoard(centerId, locationId); // when RecruitStatus recruitStatus = board.getRecruitStatus(); // then + assertThat(board.getCenterId()).isEqualTo(centerId); + assertThat(board.getLocationId()).isEqualTo(locationId); assertThat(recruitStatus).isEqualTo(RECRUITING); } - @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글 생성 시 에러가 발생한다") - @ParameterizedTest - @ValueSource(longs = {0, -1}) - void createRecruitBoardWithInValidVolunteerTime(long secondsOffset) { - // given - LocalDateTime now = LocalDateTime.now(); - LocalDateTime endDateTime = now.plusSeconds(secondsOffset); - - // when & then - assertThatThrownBy( - () -> RecruitBoard.builder() - .centerId(UUID.randomUUID()) - .locationId(1L) - .title("봉사모집제목") - .content("봉사모집내용") - .region("경기") - .recruitmentCount(10) - .imgUrl("https://image.domain.com/links") - .volunteerStartDateTime(now) - .volunteerEndDateTime(endDateTime) - .volunteerType(VolunteerType.OTHER) - .admitted(true) - .build() - ).isInstanceOf(IllegalArgumentException.class); - } - @DisplayName("봉사 시간을 계산할 수 있다") @Test void testCalculateVolunteerTime() { @@ -74,24 +37,55 @@ void testCalculateVolunteerTime() { LocalDateTime startDateTime = LocalDateTime.now(); LocalDateTime endDateTime = startDateTime.plusHours(hours); - RecruitBoard board = RecruitBoard.builder() - .centerId(UUID.randomUUID()) - .locationId(1L) + RecruitBoard board = createRecruitBoard(startDateTime, endDateTime); + + // when + LocalTime volunteerTime = board.getVolunteerHours(); + + // then + assertThat(volunteerTime).isEqualTo(LocalTime.of(hours, 0)); + } + + private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId) { + VolunteerInfo volunteerInfo = VolunteerInfo.builder() + .region("경기") + .recruitmentCount(1) + .volunteerStartDateTime(LocalDateTime.now()) + .volunteerEndDateTime(LocalDateTime.now().plusHours(1)) + .volunteerType(OTHER) + .admitted(true) + .build(); + + return RecruitBoard.builder() + .centerId(centerId) + .locationId(locationId) .title("봉사모집제목") .content("봉사모집내용") - .region("경기") - .recruitmentCount(10) .imgUrl("https://image.domain.com/links") + .volunteerInfo(volunteerInfo) + .build(); + } + + private static RecruitBoard createRecruitBoard(LocalDateTime startDateTime, + LocalDateTime endDateTime) { + + VolunteerInfo volunteerInfo = VolunteerInfo.builder() + .region("경기") + .recruitmentCount(1) .volunteerStartDateTime(startDateTime) .volunteerEndDateTime(endDateTime) .volunteerType(OTHER) .admitted(true) .build(); - // when - LocalTime volunteerTime = board.calculateVolunteerTime(); - - // then - assertThat(volunteerTime).isEqualTo(LocalTime.of(hours, 0)); + return RecruitBoard.builder() + .centerId(UUID.randomUUID()) + .locationId(1L) + .title("봉사모집제목") + .content("봉사모집내용") + .imgUrl("https://image.domain.com/links") + .volunteerInfo(volunteerInfo) + .build(); } + } \ No newline at end of file diff --git a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java b/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java new file mode 100644 index 000000000..8d4116200 --- /dev/null +++ b/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java @@ -0,0 +1,56 @@ +package com.somemore.recruitboard.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class VolunteerInfoTest { + + @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글 생성 시 에러가 발생한다") + @ParameterizedTest + @ValueSource(longs = {0, -1}) + void createRecruitBoardWithInValidVolunteerTime(long secondsOffset) { + // given + LocalDateTime now = LocalDateTime.now(); + LocalDateTime endDateTime = now.plusSeconds(secondsOffset); + + // when & then + assertThatThrownBy( + () -> createVolunteerInfo(now, endDateTime) + ).isInstanceOf(IllegalArgumentException.class); + + } + + @DisplayName("봉사 시간을 계산할 수 있다") + @Test + void testCalculateVolunteerTime() { + // given + int hours = 3; + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusHours(hours); + + VolunteerInfo volunteerInfo = createVolunteerInfo(startDateTime, endDateTime); + // when + LocalTime volunteerTime = volunteerInfo.calculateVolunteerTime(); + + // then + assertThat(volunteerTime).isEqualTo(LocalTime.of(hours, 0)); + } + + private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, LocalDateTime endDateTime) { + return VolunteerInfo.builder() + .region("경기") + .recruitmentCount(1) + .volunteerStartDateTime(startDateTime) + .volunteerEndDateTime(endDateTime) + .volunteerType(VolunteerType.OTHER) + .admitted(true) + .build(); + } +} From fa85194f720cf861811e2a1c9b63077048b78e12 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:48:45 +0900 Subject: [PATCH 03/29] =?UTF-8?q?feat(location):=20Location=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=A1=B0=ED=9A=8C,=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../somemore/location/domain/Location.java | 12 +++++-- .../dto/request/LocationUpdateRequestDto.java | 31 +++++++++++++++++++ .../command/UpdateLocationService.java | 26 ++++++++++++++++ .../service/query/LocationQueryService.java | 30 ++++++++++++++++++ .../command/UpdateLocationUseCase.java | 8 +++++ .../usecase/query/LocationQueryUseCase.java | 12 +++++++ 6 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/somemore/location/dto/request/LocationUpdateRequestDto.java create mode 100644 src/main/java/com/somemore/location/service/command/UpdateLocationService.java create mode 100644 src/main/java/com/somemore/location/service/query/LocationQueryService.java create mode 100644 src/main/java/com/somemore/location/usecase/command/UpdateLocationUseCase.java create mode 100644 src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java diff --git a/src/main/java/com/somemore/location/domain/Location.java b/src/main/java/com/somemore/location/domain/Location.java index 3ac082619..7229778f0 100644 --- a/src/main/java/com/somemore/location/domain/Location.java +++ b/src/main/java/com/somemore/location/domain/Location.java @@ -4,12 +4,14 @@ import static lombok.AccessLevel.PROTECTED; import com.somemore.global.common.BaseEntity; +import com.somemore.location.dto.request.LocationUpdateRequestDto; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Table; import java.math.BigDecimal; +import java.math.RoundingMode; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -36,7 +38,13 @@ public class Location extends BaseEntity { @Builder public Location(String address, BigDecimal latitude, BigDecimal longitude) { this.address = address; - this.latitude = latitude; - this.longitude = longitude; + this.latitude = latitude.setScale(8, RoundingMode.HALF_UP); + this.longitude = longitude.setScale(8, RoundingMode.HALF_UP); + } + + public void updateWith(LocationUpdateRequestDto requestDto) { + this.address = requestDto.address(); + this.latitude = requestDto.latitude().setScale(8, RoundingMode.HALF_UP); + this.longitude = requestDto.longitude().setScale(8, RoundingMode.HALF_UP); } } \ No newline at end of file diff --git a/src/main/java/com/somemore/location/dto/request/LocationUpdateRequestDto.java b/src/main/java/com/somemore/location/dto/request/LocationUpdateRequestDto.java new file mode 100644 index 000000000..1fe898e0f --- /dev/null +++ b/src/main/java/com/somemore/location/dto/request/LocationUpdateRequestDto.java @@ -0,0 +1,31 @@ +package com.somemore.location.dto.request; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import lombok.Builder; + +@JsonNaming(SnakeCaseStrategy.class) +@Builder +public record LocationUpdateRequestDto( + @Schema(description = "도로명 주소", example = "서울특별시 서초구 반포대로 45, 4층(서초동, 명정빌딩)") + @NotBlank(message = "주소는 필수 입력 값입니다.") + String address, + @Schema(description = "주소에 해당하는 위도 정보", example = "37.4845373748015") + @NotNull(message = "위도는 필수 입력 값입니다.") + @DecimalMin(value = "33", message = "위도는 33도 이상이어야 합니다.") + @DecimalMax(value = "39", message = "위도는 38도 이하이어야 합니다.") + BigDecimal latitude, + @Schema(description = "주소에 해당하는 경도 정보", example = "127.010842267696") + @NotNull(message = "경도는 필수 입력 값입니다.") + @DecimalMin(value = "124", message = "경도는 124도 이상이어야 합니다.") + @DecimalMax(value = "132", message = "경도는 132도 이하이어야 합니다.") + BigDecimal longitude +) { + +} diff --git a/src/main/java/com/somemore/location/service/command/UpdateLocationService.java b/src/main/java/com/somemore/location/service/command/UpdateLocationService.java new file mode 100644 index 000000000..deec6d0c8 --- /dev/null +++ b/src/main/java/com/somemore/location/service/command/UpdateLocationService.java @@ -0,0 +1,26 @@ +package com.somemore.location.service.command; + +import com.somemore.location.domain.Location; +import com.somemore.location.dto.request.LocationUpdateRequestDto; +import com.somemore.location.repository.LocationRepository; +import com.somemore.location.usecase.command.UpdateLocationUseCase; +import com.somemore.location.usecase.query.LocationQueryUseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional +@Service +public class UpdateLocationService implements UpdateLocationUseCase { + + private final LocationQueryUseCase locationQueryUseCase; + private final LocationRepository locationRepository; + + @Override + public void updateLocation(LocationUpdateRequestDto requestDto, Long locationId) { + Location location = locationQueryUseCase.findByIdOrThrow(locationId); + location.updateWith(requestDto); + locationRepository.save(location); + } +} diff --git a/src/main/java/com/somemore/location/service/query/LocationQueryService.java b/src/main/java/com/somemore/location/service/query/LocationQueryService.java new file mode 100644 index 000000000..1b9c291ca --- /dev/null +++ b/src/main/java/com/somemore/location/service/query/LocationQueryService.java @@ -0,0 +1,30 @@ +package com.somemore.location.service.query; + +import com.somemore.global.exception.BadRequestException; +import com.somemore.location.domain.Location; +import com.somemore.location.repository.LocationRepository; +import com.somemore.location.usecase.query.LocationQueryUseCase; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional(readOnly = true) +@Service +public class LocationQueryService implements LocationQueryUseCase { + + private final LocationRepository locationRepository; + + @Override + public Optional findById(Long id) { + return locationRepository.findById(id); + } + + @Override + public Location findByIdOrThrow(Long id) { + return locationRepository.findById(id).orElseThrow( + () -> new BadRequestException("존재하지 않는 위치입니다.") + ); + } +} diff --git a/src/main/java/com/somemore/location/usecase/command/UpdateLocationUseCase.java b/src/main/java/com/somemore/location/usecase/command/UpdateLocationUseCase.java new file mode 100644 index 000000000..b1e776b8b --- /dev/null +++ b/src/main/java/com/somemore/location/usecase/command/UpdateLocationUseCase.java @@ -0,0 +1,8 @@ +package com.somemore.location.usecase.command; + +import com.somemore.location.dto.request.LocationUpdateRequestDto; + +public interface UpdateLocationUseCase { + + void updateLocation(LocationUpdateRequestDto requestDto, Long locationId); +} diff --git a/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java b/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java new file mode 100644 index 000000000..5aec218ce --- /dev/null +++ b/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java @@ -0,0 +1,12 @@ +package com.somemore.location.usecase.query; + +import com.somemore.location.domain.Location; +import java.util.Optional; + +public interface LocationQueryUseCase { + + Optional findById(Long id); + + Location findByIdOrThrow(Long id); + +} From 9973e1cff0332b689832180bd65b527ba379dc6e Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:49:45 +0900 Subject: [PATCH 04/29] =?UTF-8?q?test(location):=20Location=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=A1=B0=ED=9A=8C,=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../location/domain/LocationTest.java | 61 ++++++++++++ .../repository/LocationRepositoryTest.java | 10 +- .../command/UpdateLocationServiceTest.java | 63 ++++++++++++ .../query/LocationQueryServiceTest.java | 96 +++++++++++++++++++ 4 files changed, 225 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/somemore/location/domain/LocationTest.java create mode 100644 src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java create mode 100644 src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java diff --git a/src/test/java/com/somemore/location/domain/LocationTest.java b/src/test/java/com/somemore/location/domain/LocationTest.java new file mode 100644 index 000000000..4f5de223f --- /dev/null +++ b/src/test/java/com/somemore/location/domain/LocationTest.java @@ -0,0 +1,61 @@ +package com.somemore.location.domain; + +import static java.math.RoundingMode.HALF_UP; +import static org.assertj.core.api.Assertions.assertThat; + +import com.somemore.location.dto.request.LocationUpdateRequestDto; +import java.math.BigDecimal; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class LocationTest { + + @DisplayName("Location 생성시 소수점이 올바르게 반올림된다.") + @Test + void createLocation() { + // given + String address = "서울특별시 강남구"; + BigDecimal latitude = new BigDecimal("37.123456789"); // 소수점 초과값 + BigDecimal longitude = new BigDecimal("127.987654321"); // 소수점 초과값 + + // when + Location location = Location.builder() + .address(address) + .latitude(latitude) + .longitude(longitude) + .build(); + + // then + assertThat(location.getAddress()).isEqualTo(address); + assertThat(location.getLatitude()).isEqualTo(latitude.setScale(8, HALF_UP)); + assertThat(location.getLongitude()).isEqualTo(longitude.setScale(8, HALF_UP)); + } + + @DisplayName("위치를 업데이트 할 수 있다.") + @Test + void updateLocationWithDto() { + // given + Location location = Location.builder() + .address("서울특별시 서초구 반포대로 45, 4층(서초동, 명정빌딩)") + .longitude(BigDecimal.valueOf(37.4845373748015)) + .latitude(BigDecimal.valueOf(127.010842267696)) + .build(); + + LocationUpdateRequestDto requestDto = LocationUpdateRequestDto.builder() + .address("업데이트 주소") + .longitude(BigDecimal.valueOf(37.333333333333)) + .latitude(BigDecimal.valueOf(127.00000000000)) + .build(); + + // when + location.updateWith(requestDto); + + // then + assertThat(location.getAddress()).isEqualTo(requestDto.address()); + assertThat(location.getLongitude() + .compareTo(requestDto.longitude().setScale(8, HALF_UP))).isZero(); + assertThat(location.getLatitude() + .compareTo(requestDto.latitude().setScale(8, HALF_UP))).isZero(); + } + +} \ No newline at end of file diff --git a/src/test/java/com/somemore/location/repository/LocationRepositoryTest.java b/src/test/java/com/somemore/location/repository/LocationRepositoryTest.java index 372b7a3c5..b5c29b1f2 100644 --- a/src/test/java/com/somemore/location/repository/LocationRepositoryTest.java +++ b/src/test/java/com/somemore/location/repository/LocationRepositoryTest.java @@ -1,11 +1,11 @@ package com.somemore.location.repository; +import static java.math.RoundingMode.HALF_UP; import static org.assertj.core.api.Assertions.assertThat; import com.somemore.IntegrationTestSupport; import com.somemore.location.domain.Location; import java.math.BigDecimal; -import java.math.RoundingMode; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -28,9 +28,9 @@ void testLocationPrecisionWithRound() { Location locationWithRound = Location.builder() .address("서울특별시 서초구 반포대로 45, 4층(서초동, 명정빌딩)") .latitude( - new BigDecimal("37.484537379").setScale(8, RoundingMode.HALF_UP)) // 9자리 반올림 + new BigDecimal("37.484537379").setScale(8, HALF_UP)) // 9자리 반올림 .longitude( - new BigDecimal("127.010842349").setScale(8, RoundingMode.HALF_UP)) // 9자리 반올림 + new BigDecimal("127.010842349").setScale(8, HALF_UP)) // 9자리 반올림 .build(); // when @@ -49,9 +49,9 @@ void testLocationPrecisionWithLargeValues() { Location locationWithLargeValues = Location.builder() .address("서울특별시 서초구 반포대로 45, 4층(서초동, 명정빌딩)") .latitude( - new BigDecimal("89.999999999").setScale(8, RoundingMode.HALF_UP)) // 9자리 + new BigDecimal("89.999999999").setScale(8, HALF_UP)) // 9자리 .longitude( - new BigDecimal("179.999999999").setScale(8, RoundingMode.HALF_UP)) // 9자리 + new BigDecimal("179.999999999").setScale(8, HALF_UP)) // 9자리 .build(); // when diff --git a/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java b/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java new file mode 100644 index 000000000..d3fca6421 --- /dev/null +++ b/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java @@ -0,0 +1,63 @@ +package com.somemore.location.service.command; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.somemore.IntegrationTestSupport; +import com.somemore.location.domain.Location; +import com.somemore.location.dto.request.LocationUpdateRequestDto; +import com.somemore.location.repository.LocationRepository; +import java.math.BigDecimal; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class UpdateLocationServiceTest extends IntegrationTestSupport { + + @Autowired + private UpdateLocationService updateLocationService; + + @Autowired + private LocationRepository locationRepository; + + private Location location; + + @BeforeEach + void setUp() { + location = Location.builder() + .address("주소주소") + .latitude(BigDecimal.valueOf(37.00000)) + .longitude(BigDecimal.valueOf(127.00000)) + .build(); + + locationRepository.saveAndFlush(location); + } + + @AfterEach + void tearDown() { + locationRepository.deleteAllInBatch(); + } + + @DisplayName("위치를 업데이트하면 저장소에 반영된다.") + @Test + void updateLocationWithDto() { + // given + BigDecimal latitude = BigDecimal.valueOf(37.111111); + BigDecimal longitude = BigDecimal.valueOf(127.11111); + LocationUpdateRequestDto dto = LocationUpdateRequestDto.builder() + .address("새로새로") + .latitude(latitude) + .longitude(longitude) + .build(); + + // when + updateLocationService.updateLocation(dto, location.getId()); + + // then + Location updateLocation = locationRepository.findById(location.getId()).orElseThrow(); + assertThat(updateLocation.getAddress()).isEqualTo(dto.address()); + assertThat(updateLocation.getLatitude().compareTo(dto.latitude())).isZero(); + assertThat(updateLocation.getLongitude().compareTo(dto.longitude())).isZero(); + } +} \ No newline at end of file diff --git a/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java b/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java new file mode 100644 index 000000000..61b56a877 --- /dev/null +++ b/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java @@ -0,0 +1,96 @@ +package com.somemore.location.service.query; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.somemore.IntegrationTestSupport; +import com.somemore.global.exception.BadRequestException; +import com.somemore.location.domain.Location; +import com.somemore.location.repository.LocationRepository; +import java.math.BigDecimal; +import java.util.Optional; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class LocationQueryServiceTest extends IntegrationTestSupport { + + @Autowired + private LocationQueryService locationQueryService; + + @Autowired + private LocationRepository locationRepository; + + private Location location; + + @BeforeEach + void setUp() { + location = Location.builder() + .address("123") + .latitude(BigDecimal.valueOf(37.0)) + .longitude(BigDecimal.valueOf(127.0)) + .build(); + locationRepository.saveAndFlush(location); + } + + @AfterEach + void tearDown() { + locationRepository.deleteAllInBatch(); + } + + @DisplayName("존재하는 ID가 주어지면 Location 엔티티를 조회할 수 있다") + @Test + void findByIdWithExistsId() { + // given + Long id = location.getId(); + + // when + Optional findLocation = locationQueryService.findById(id); + + // then + assertThat(findLocation).isPresent(); + } + + @DisplayName("존재하지 않는 ID가 주어지면 빈 Optional 반환한다.") + @Test + void findByIdWithDoesNotExistId() { + // given + Long wrongId = 999L; + + // when + Optional findLocation = locationQueryService.findById(wrongId); + + // then + assertThat(findLocation).isEmpty(); + } + + @DisplayName("ID로 Location 조회할 수 있다") + @Test + void findByIdOrThrowWithExistsId() { + // given + Long id = location.getId(); + + // when + Location findLocation = locationQueryService.findByIdOrThrow(id); + + // then + assertThat(findLocation.getId()).isEqualTo(id); + } + + @DisplayName("존재하지 않는 ID로 Location 조회하면 에러가 발생한다") + @Test + void findByIdOrThrowWithDoesNotExistId() { + // given + Long wrongId = 999L; + + // when + // then + assertThatThrownBy( + () -> locationQueryService.findByIdOrThrow(wrongId) + ).isInstanceOf(BadRequestException.class); + + } + +} \ No newline at end of file From ac3c60a57945ac4decc3df1a1dfaa50ed7c01f52 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:51:04 +0900 Subject: [PATCH 05/29] =?UTF-8?q?feat(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/RecruitBoard.java | 29 +++++++++++++++++++ .../recruitboard/domain/VolunteerInfo.java | 19 ++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java index 7633330c9..ee25afbf0 100644 --- a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java +++ b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java @@ -6,6 +6,7 @@ import static lombok.AccessLevel.PROTECTED; import com.somemore.global.common.BaseEntity; +import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; import jakarta.persistence.Column; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; @@ -68,5 +69,33 @@ public LocalTime getVolunteerHours() { return volunteerInfo.calculateVolunteerTime(); } + public boolean isWriter(UUID centerId) { + return this.centerId.equals(centerId); + } + + public boolean isNotWriter(UUID centerId) { + return !isWriter(centerId); + } + + public void updateWith(RecruitBoardUpdateRequestDto dto, String imgUrl) { + updateVolunteerInfo(dto); + this.title = dto.title(); + this.content = dto.content(); + this.imgUrl = imgUrl; + } + + public void updateWith(String region) { + volunteerInfo.updateWith(region); + } + + private void updateVolunteerInfo(RecruitBoardUpdateRequestDto dto) { + volunteerInfo.updateWith( + dto.recruitmentCount(), + dto.volunteerType(), + dto.volunteerStartDateTime(), + dto.volunteerEndDateTime(), + dto.admitted() + ); + } } \ No newline at end of file diff --git a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java b/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java index 6bfe2feb6..fdcd8336a 100644 --- a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java +++ b/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java @@ -10,8 +10,10 @@ import java.time.LocalDateTime; import java.time.LocalTime; import lombok.Builder; +import lombok.Getter; import lombok.NoArgsConstructor; +@Getter @NoArgsConstructor(access = PROTECTED) @Embeddable public class VolunteerInfo { @@ -59,6 +61,23 @@ public LocalTime calculateVolunteerTime() { return LocalTime.of((int) hours, (int) minutes); } + public void updateWith(Integer recruitmentCount, VolunteerType volunteerType, + LocalDateTime volunteerStartDateTime, LocalDateTime volunteerEndDateTime, + Boolean admitted) { + + validateVolunteerDateTime(volunteerStartDateTime, volunteerEndDateTime); + + this.recruitmentCount = recruitmentCount; + this.volunteerType = volunteerType; + this.volunteerStartDateTime = volunteerStartDateTime; + this.volunteerEndDateTime = volunteerEndDateTime; + this.admitted = admitted; + } + + public void updateWith(String region) { + this.region = region; + } + private void validateVolunteerDateTime(LocalDateTime startDateTime, LocalDateTime endDateTime) { if (endDateTime.isEqual(startDateTime) || endDateTime.isBefore(startDateTime)) { throw new IllegalArgumentException("종료 시간은 시작 시간보다 이후여야 합니다."); From a32242a79cb41915f87b14982e08b6f03511f5a3 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:51:19 +0900 Subject: [PATCH 06/29] =?UTF-8?q?test(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/RecruitBoardTest.java | 100 ++++++++++++++---- .../domain/VolunteerInfoTest.java | 66 +++++++++++- 2 files changed, 144 insertions(+), 22 deletions(-) diff --git a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java index 15d4193c2..c6d04598c 100644 --- a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java @@ -4,6 +4,7 @@ import static com.somemore.recruitboard.domain.VolunteerType.OTHER; import static org.assertj.core.api.Assertions.assertThat; +import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; import java.time.LocalDateTime; import java.time.LocalTime; import java.util.UUID; @@ -17,15 +18,13 @@ class RecruitBoardTest { void createRecruitBoardWithDefaultStatus() { // given UUID centerId = UUID.randomUUID(); - Long locationId = 1L; - RecruitBoard board = createRecruitBoard(centerId, locationId); + RecruitBoard board = createRecruitBoard(centerId); // when RecruitStatus recruitStatus = board.getRecruitStatus(); // then assertThat(board.getCenterId()).isEqualTo(centerId); - assertThat(board.getLocationId()).isEqualTo(locationId); assertThat(recruitStatus).isEqualTo(RECRUITING); } @@ -34,10 +33,11 @@ void createRecruitBoardWithDefaultStatus() { void testCalculateVolunteerTime() { // given int hours = 3; + UUID centerId = UUID.randomUUID(); LocalDateTime startDateTime = LocalDateTime.now(); LocalDateTime endDateTime = startDateTime.plusHours(hours); - RecruitBoard board = createRecruitBoard(startDateTime, endDateTime); + RecruitBoard board = createRecruitBoard(centerId, startDateTime, endDateTime); // when LocalTime volunteerTime = board.getVolunteerHours(); @@ -46,27 +46,85 @@ void testCalculateVolunteerTime() { assertThat(volunteerTime).isEqualTo(LocalTime.of(hours, 0)); } - private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId) { - VolunteerInfo volunteerInfo = VolunteerInfo.builder() - .region("경기") - .recruitmentCount(1) + @DisplayName("봉사 모집글을 업데이트 할 수 있다") + @Test + void updateRecruitBoard() { + // given + UUID centerId = UUID.randomUUID(); + RecruitBoard board = createRecruitBoard(centerId); + String imgUrl = "https://image.domain.com/updates"; + + RecruitBoardUpdateRequestDto dto = RecruitBoardUpdateRequestDto.builder() + .title("봉사 모집글 작성 수정") + .content("봉사 하실분을 모집합니다. 수정
") + .recruitmentCount(10) .volunteerStartDateTime(LocalDateTime.now()) - .volunteerEndDateTime(LocalDateTime.now().plusHours(1)) + .volunteerEndDateTime(LocalDateTime.now().plusHours(2)) .volunteerType(OTHER) - .admitted(true) - .build(); + .admitted(true).build(); - return RecruitBoard.builder() - .centerId(centerId) - .locationId(locationId) - .title("봉사모집제목") - .content("봉사모집내용") - .imgUrl("https://image.domain.com/links") - .volunteerInfo(volunteerInfo) - .build(); + // when + board.updateWith(dto, imgUrl); + + // then + assertThat(board.getTitle()).isEqualTo(dto.title()); + assertThat(board.getContent()).isEqualTo(dto.content()); + assertThat(board.getImgUrl()).isEqualTo(imgUrl); + } + + @DisplayName("봉사 활동 지역을 수정할 수 있다.") + @Test + void updateWithRegion() { + // given + UUID centerId = UUID.randomUUID(); + RecruitBoard board = createRecruitBoard(centerId); + String updateRegion = "새로운지역"; + + // when + board.updateWith(updateRegion); + + // then + VolunteerInfo volunteerInfo = board.getVolunteerInfo(); + assertThat(volunteerInfo.getRegion()).isEqualTo(updateRegion); + } + + @DisplayName("올바른 기관 식별 값이 주어지면 작성자인지 확인할 수 있다") + @Test + void isWriterWithCorrectCenterId() { + // given + UUID centerId = UUID.randomUUID(); + RecruitBoard recruitBoard = createRecruitBoard(centerId); + + // when + boolean isWriter = recruitBoard.isWriter(centerId); + + // then + assertThat(isWriter).isTrue(); + } + + @DisplayName("잘못된 기관 식별 값이 주어지면 잘못된 작성자인 확인할 수있다.") + @Test + void isNotWriterWithWrongCenterId() { + UUID centerId = UUID.randomUUID(); + UUID wrongId = UUID.randomUUID(); + RecruitBoard recruitBoard = createRecruitBoard(centerId); + + // when + boolean isNotWriter = recruitBoard.isNotWriter(wrongId); + + // then + assertThat(isNotWriter).isTrue(); } - private static RecruitBoard createRecruitBoard(LocalDateTime startDateTime, + + private static RecruitBoard createRecruitBoard(UUID centerId) { + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusHours(1); + + return createRecruitBoard(centerId, startDateTime, endDateTime); + } + + private static RecruitBoard createRecruitBoard(UUID centerId, LocalDateTime startDateTime, LocalDateTime endDateTime) { VolunteerInfo volunteerInfo = VolunteerInfo.builder() @@ -79,7 +137,7 @@ private static RecruitBoard createRecruitBoard(LocalDateTime startDateTime, .build(); return RecruitBoard.builder() - .centerId(UUID.randomUUID()) + .centerId(centerId) .locationId(1L) .title("봉사모집제목") .content("봉사모집내용") diff --git a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java b/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java index 8d4116200..d19014972 100644 --- a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java @@ -1,5 +1,7 @@ package com.somemore.recruitboard.domain; +import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT; +import static com.somemore.recruitboard.domain.VolunteerType.SAFETY_PREVENTION; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -43,7 +45,64 @@ void testCalculateVolunteerTime() { assertThat(volunteerTime).isEqualTo(LocalTime.of(hours, 0)); } - private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, LocalDateTime endDateTime) { + @DisplayName("봉사 활동 정보를 업데이트 할 수 있다") + @Test + void updateVolunteerInfo() { + // given + VolunteerInfo volunteerInfo = createVolunteerInfo(); + + Integer count = 2; + VolunteerType volunteerType = SAFETY_PREVENTION; + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusHours(2); + Boolean admitted = false; + + // when + volunteerInfo.updateWith(count, volunteerType, startDateTime, + endDateTime, admitted); + + // then + assertThat(volunteerInfo.getRecruitmentCount()).isEqualTo(count); + assertThat(volunteerInfo.getVolunteerType()).isEqualTo(volunteerType); + assertThat(volunteerInfo.getVolunteerStartDateTime().compareTo(startDateTime)).isZero(); + assertThat(volunteerInfo.getVolunteerEndDateTime().compareTo(endDateTime)).isZero(); + assertThat(volunteerInfo.getAdmitted()).isEqualTo(admitted); + } + + @DisplayName("봉사활동 지역 정보를 업데이트할 수 있다") + @Test + void updateVolunteerInfoWithRegion() { + // given + VolunteerInfo volunteerInfo = createVolunteerInfo(); + String updateRegion = "새로운지역"; + + // when + volunteerInfo.updateWith(updateRegion); + + // then + assertThat(volunteerInfo.getRegion()).isEqualTo(updateRegion); + } + + @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글을 업데이트시 에러가 발생한다") + @ParameterizedTest + @ValueSource(longs = {0, -1}) + void updateRecruitBoardWithInValidVolunteerTime(long secondsOffset) { + // given + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusSeconds(secondsOffset); + + VolunteerInfo volunteerInfo = createVolunteerInfo(); + + // when & then + assertThatThrownBy( + () -> volunteerInfo.updateWith(3, ADMINISTRATIVE_SUPPORT, startDateTime, endDateTime, + false) + ).isInstanceOf(IllegalArgumentException.class); + + } + + private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, + LocalDateTime endDateTime) { return VolunteerInfo.builder() .region("경기") .recruitmentCount(1) @@ -53,4 +112,9 @@ private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, Lo .admitted(true) .build(); } + + private static VolunteerInfo createVolunteerInfo() { + return createVolunteerInfo(LocalDateTime.now(), LocalDateTime.now().plusHours(1)); + } + } From 219d00c8e29dfbe904fba55e06ad4abcf45a684b Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:52:13 +0900 Subject: [PATCH 07/29] =?UTF-8?q?refactor(recruit-board):=20RecruitBoard?= =?UTF-8?q?=20=EB=A0=88=ED=8F=AC=EC=A7=80=ED=86=A0=EB=A6=AC=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/RecruitBoardJpaRepository.java | 8 +++++ .../repository/RecruitBoardRepository.java | 12 +++++-- .../RecruitBoardRepositoryImpl.java | 35 +++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/somemore/recruitboard/repository/RecruitBoardJpaRepository.java create mode 100644 src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java diff --git a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardJpaRepository.java b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardJpaRepository.java new file mode 100644 index 000000000..1380d9b80 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardJpaRepository.java @@ -0,0 +1,8 @@ +package com.somemore.recruitboard.repository; + +import com.somemore.recruitboard.domain.RecruitBoard; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RecruitBoardJpaRepository extends JpaRepository { + +} diff --git a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepository.java b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepository.java index 8544032b0..ffc340b6c 100644 --- a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepository.java +++ b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepository.java @@ -1,8 +1,16 @@ package com.somemore.recruitboard.repository; import com.somemore.recruitboard.domain.RecruitBoard; -import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; -public interface RecruitBoardRepository extends JpaRepository { +public interface RecruitBoardRepository { + + RecruitBoard save(RecruitBoard recruitBoard); + + RecruitBoard saveAndFlush(RecruitBoard recruitBoard); + + Optional findById(Long id); + + void deleteAllInBatch(); } diff --git a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java new file mode 100644 index 000000000..fecd7a922 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java @@ -0,0 +1,35 @@ +package com.somemore.recruitboard.repository; + +import com.somemore.recruitboard.domain.RecruitBoard; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@RequiredArgsConstructor +@Repository +public class RecruitBoardRepositoryImpl implements RecruitBoardRepository { + + private final RecruitBoardJpaRepository recruitBoardJpaRepository; + + @Override + public RecruitBoard save(RecruitBoard recruitBoard) { + return recruitBoardJpaRepository.save(recruitBoard); + } + + @Override + public RecruitBoard saveAndFlush(RecruitBoard recruitBoard) { + return recruitBoardJpaRepository.saveAndFlush(recruitBoard); + } + + @Override + public Optional findById(Long id) { + return recruitBoardJpaRepository.findById(id); + } + + @Override + public void deleteAllInBatch() { + recruitBoardJpaRepository.deleteAllInBatch(); + } + + +} From 22d50915c89654de2dae147130437f495e444e17 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:52:37 +0900 Subject: [PATCH 08/29] =?UTF-8?q?feat(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/query/RecruitQueryService.java | 31 +++++++++++++++++++ .../usecase/query/RecruitQueryUseCase.java | 12 +++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java create mode 100644 src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java diff --git a/src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java b/src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java new file mode 100644 index 000000000..bd9942ba2 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java @@ -0,0 +1,31 @@ +package com.somemore.recruitboard.service.query; + +import com.somemore.global.exception.BadRequestException; +import com.somemore.recruitboard.domain.RecruitBoard; +import com.somemore.recruitboard.repository.RecruitBoardRepository; +import com.somemore.recruitboard.usecase.query.RecruitQueryUseCase; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional(readOnly = true) +@Service +public class RecruitQueryService implements RecruitQueryUseCase { + + private final RecruitBoardRepository recruitBoardRepository; + + @Override + public Optional findById(Long id) { + return recruitBoardRepository.findById(id); + } + + @Override + public RecruitBoard findByIdOrThrow(Long id) { + return recruitBoardRepository.findById(id).orElseThrow( + () -> new BadRequestException("존재하지 않는 봉사 모집 활동입니다.") + ); + } + +} diff --git a/src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java b/src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java new file mode 100644 index 000000000..4655dae0b --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java @@ -0,0 +1,12 @@ +package com.somemore.recruitboard.usecase.query; + +import com.somemore.recruitboard.domain.RecruitBoard; +import java.util.Optional; + +public interface RecruitQueryUseCase { + + Optional findById(Long id); + + RecruitBoard findByIdOrThrow(Long id); + +} From 2a021ecce9e10667c2ed2768af7df56b77565913 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:52:46 +0900 Subject: [PATCH 09/29] =?UTF-8?q?test(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/RecruitQueryServiceTest.java | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java diff --git a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java new file mode 100644 index 000000000..077adca3c --- /dev/null +++ b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java @@ -0,0 +1,118 @@ +package com.somemore.recruitboard.service.query; + +import static com.somemore.recruitboard.domain.VolunteerType.OTHER; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.somemore.IntegrationTestSupport; +import com.somemore.global.exception.BadRequestException; +import com.somemore.recruitboard.domain.RecruitBoard; +import com.somemore.recruitboard.domain.VolunteerInfo; +import com.somemore.recruitboard.repository.RecruitBoardRepository; +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.UUID; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class RecruitQueryServiceTest extends IntegrationTestSupport { + + @Autowired + private RecruitQueryService recruitQueryService; + + @Autowired + private RecruitBoardRepository recruitBoardRepository; + + private RecruitBoard recruitBoard; + + @BeforeEach + void setUp() { + recruitBoard = createRecruitBoard(); + recruitBoardRepository.saveAndFlush(recruitBoard); + } + + @AfterEach + void tearDown() { + recruitBoardRepository.deleteAllInBatch(); + } + + @DisplayName("존재하는 ID가 주어지면 RecruitBoard 엔티티를 조회할 수 있다") + @Test + void findByIdWithExistsId() { + // given + Long id = recruitBoard.getId(); + + // when + Optional findBoard = recruitQueryService.findById(id); + + // then + assertThat(findBoard).isPresent(); + } + + @DisplayName("존재하지 않는 ID가 주어지면 빈 Optional 반환한다.") + @Test + void findByIdWithDoesNotExistId() { + // given + Long wrongId = 999L; + + // when + Optional findBoard = recruitQueryService.findById(wrongId); + + // then + assertThat(findBoard).isEmpty(); + } + + @DisplayName("ID로 RecruitBoard 조회할 수 있다") + @Test + void findByIdOrThrowWithExistsId() { + // given + Long id = recruitBoard.getId(); + + // when + RecruitBoard findBoard = recruitQueryService.findByIdOrThrow(id); + + // then + assertThat(findBoard.getId()).isEqualTo(id); + } + + @DisplayName("존재하지 않는 ID로 RecruitBoard 조회하면 에러가 발생한다") + @Test + void findByIdOrThrowWithDoesNotExistId() { + // given + Long wrongId = 999L; + + // when + // then + assertThatThrownBy( + () -> recruitQueryService.findByIdOrThrow(wrongId) + ).isInstanceOf(BadRequestException.class); + + } + + private static RecruitBoard createRecruitBoard() { + + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusHours(1); + + VolunteerInfo volunteerInfo = VolunteerInfo.builder() + .region("경기") + .recruitmentCount(1) + .volunteerStartDateTime(startDateTime) + .volunteerEndDateTime(endDateTime) + .volunteerType(OTHER) + .admitted(true) + .build(); + + return RecruitBoard.builder() + .centerId(UUID.randomUUID()) + .locationId(1L) + .title("봉사모집제목") + .content("봉사모집내용") + .imgUrl("https://image.domain.com/links") + .volunteerInfo(volunteerInfo) + .build(); + } +} \ No newline at end of file From 950ca5d4836a9dc383250ca63d4efc08d374bf9a Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:53:32 +0900 Subject: [PATCH 10/29] =?UTF-8?q?feat(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=20-=20=EB=AA=A8?= =?UTF-8?q?=EC=A7=91=20=EC=A0=95=EB=B3=B4=20=EC=88=98=EC=A0=95=20=20-=20?= =?UTF-8?q?=EB=AA=A8=EC=A7=91=20=EC=9C=84=EC=B9=98=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RecruitBoardLocationUpdateRequestDto.java | 42 +++++++++++++ .../request/RecruitBoardUpdateRequestDto.java | 38 ++++++++++++ .../command/UpdateRecruitBoardService.java | 60 +++++++++++++++++++ .../command/UpdateRecruitBoardUseCase.java | 22 +++++++ 4 files changed, 162 insertions(+) create mode 100644 src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardLocationUpdateRequestDto.java create mode 100644 src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardUpdateRequestDto.java create mode 100644 src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java create mode 100644 src/main/java/com/somemore/recruitboard/usecase/command/UpdateRecruitBoardUseCase.java diff --git a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardLocationUpdateRequestDto.java b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardLocationUpdateRequestDto.java new file mode 100644 index 000000000..e2a5d0515 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardLocationUpdateRequestDto.java @@ -0,0 +1,42 @@ +package com.somemore.recruitboard.dto.request; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.somemore.location.dto.request.LocationUpdateRequestDto; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.math.BigDecimal; +import lombok.Builder; + +@JsonNaming(SnakeCaseStrategy.class) +@Builder +public record RecruitBoardLocationUpdateRequestDto( + @Schema(description = "지역", example = "서울특별시") + @NotBlank(message = "지역은 필수 입력 값입니다.") + String region, + @Schema(description = "도로명 주소", example = "서울특별시 서초구 반포대로 45, 4층(서초동, 명정빌딩)") + @NotBlank(message = "주소는 필수 입력 값입니다.") + String address, + @Schema(description = "주소에 해당하는 위도 정보", example = "37.4845373748015") + @NotNull(message = "위도는 필수 입력 값입니다.") + @DecimalMin(value = "33", message = "위도는 33도 이상이어야 합니다.") + @DecimalMax(value = "39", message = "위도는 38도 이하이어야 합니다.") + BigDecimal latitude, + @Schema(description = "주소에 해당하는 경도 정보", example = "127.010842267696") + @NotNull(message = "경도는 필수 입력 값입니다.") + @DecimalMin(value = "124", message = "경도는 124도 이상이어야 합니다.") + @DecimalMax(value = "132", message = "경도는 132도 이하이어야 합니다.") + BigDecimal longitude +) { + + public LocationUpdateRequestDto toLocationUpdateRequestDto() { + return LocationUpdateRequestDto.builder() + .address(address) + .latitude(latitude) + .longitude(longitude) + .build(); + } +} diff --git a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardUpdateRequestDto.java b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardUpdateRequestDto.java new file mode 100644 index 000000000..f1592b5a2 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardUpdateRequestDto.java @@ -0,0 +1,38 @@ +package com.somemore.recruitboard.dto.request; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.somemore.recruitboard.domain.VolunteerType; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; +import lombok.Builder; + +@JsonNaming(SnakeCaseStrategy.class) +@Builder +public record RecruitBoardUpdateRequestDto( + @Schema(description = "봉사 모집글 제목", example = "서울 청계천 환경 미화 봉사 모집") + @NotBlank(message = "모집글 제목은 필수 값입니다.") + String title, + @Schema(description = "봉사 모집글 내용", example = "서울 청계천 주변 환경 미화 봉사 모집합니다.
") + @NotBlank(message = "모집글 내용은 필수 값입니다.") + String content, + @Schema(description = "예상 모집 인원", example = "4") + @NotNull(message = "예상 모집 인원은 필수 값입니다.") + Integer recruitmentCount, + @Schema(description = "봉사 시작 일시", example = "2024-11-20T10:00:00") + @NotNull(message = "봉사 시작 일시는 필수 값입니다.") + LocalDateTime volunteerStartDateTime, + @Schema(description = "봉사 종료 일시", example = "2024-11-20T12:00:00") + @NotNull(message = "봉사 종료 일시는 필수 값입니다.") + LocalDateTime volunteerEndDateTime, + @Schema(description = "봉사 활동 유형", example = "ENVIRONMENTAL_PROTECTION") + @NotNull(message = "봉사 활동 유형은 필수 값입니다.") + VolunteerType volunteerType, + @Schema(description = "봉사 시간 인정 여부", example = "true") + @NotNull(message = "시간 인정 여부는 필수 값입니다.") + Boolean admitted +) { + +} diff --git a/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java b/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java new file mode 100644 index 000000000..0b90de6e2 --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java @@ -0,0 +1,60 @@ +package com.somemore.recruitboard.service.command; + +import com.somemore.global.exception.BadRequestException; +import com.somemore.location.usecase.command.UpdateLocationUseCase; +import com.somemore.recruitboard.domain.RecruitBoard; +import com.somemore.recruitboard.dto.request.RecruitBoardLocationUpdateRequestDto; +import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; +import com.somemore.recruitboard.repository.RecruitBoardRepository; +import com.somemore.recruitboard.usecase.command.UpdateRecruitBoardUseCase; +import com.somemore.recruitboard.usecase.query.RecruitQueryUseCase; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +@RequiredArgsConstructor +@Transactional +@Service +public class UpdateRecruitBoardService implements UpdateRecruitBoardUseCase { + + private final RecruitBoardRepository recruitBoardRepository; + private final RecruitQueryUseCase recruitQueryUseCase; + private final UpdateLocationUseCase updateLocationUseCase; + + @Override + public void updateRecruitBoard( + RecruitBoardUpdateRequestDto requestDto, + Long recruitBoardId, + UUID centerId, + String imgUrl) { + + RecruitBoard recruitBoard = recruitQueryUseCase.findByIdOrThrow(recruitBoardId); + validateWriter(recruitBoard, centerId); + recruitBoard.updateWith(requestDto, imgUrl); + + recruitBoardRepository.save(recruitBoard); + } + + @Override + public void updateRecruitBoardLocation(RecruitBoardLocationUpdateRequestDto requestDto, + Long recruitBoardId, UUID centerId) { + + RecruitBoard recruitBoard = recruitQueryUseCase.findByIdOrThrow(recruitBoardId); + validateWriter(recruitBoard, centerId); + + updateLocationUseCase.updateLocation(requestDto.toLocationUpdateRequestDto(), + recruitBoard.getLocationId()); + + recruitBoard.updateWith(requestDto.region()); + recruitBoardRepository.save(recruitBoard); + } + + private void validateWriter(RecruitBoard recruitBoard, UUID centerId) { + if (recruitBoard.isNotWriter(centerId)) { + throw new BadRequestException("자신이 작성한 봉사 모집글만 수정할 수 있습니다."); + } + + } +} diff --git a/src/main/java/com/somemore/recruitboard/usecase/command/UpdateRecruitBoardUseCase.java b/src/main/java/com/somemore/recruitboard/usecase/command/UpdateRecruitBoardUseCase.java new file mode 100644 index 000000000..304e5ae8b --- /dev/null +++ b/src/main/java/com/somemore/recruitboard/usecase/command/UpdateRecruitBoardUseCase.java @@ -0,0 +1,22 @@ +package com.somemore.recruitboard.usecase.command; + +import com.somemore.recruitboard.dto.request.RecruitBoardLocationUpdateRequestDto; +import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; +import java.util.UUID; + +public interface UpdateRecruitBoardUseCase { + + public void updateRecruitBoard( + RecruitBoardUpdateRequestDto requestDto, + Long recruitBoardId, + UUID centerId, + String imgUrl + ); + + public void updateRecruitBoardLocation( + RecruitBoardLocationUpdateRequestDto requestDto, + Long recruitBoardId, + UUID centerId + ); + +} From 7bb562b52fe73bc599d10663fd39dd9a137a16e2 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:53:47 +0900 Subject: [PATCH 11/29] =?UTF-8?q?test(recruit-board):=20RecruitBoard=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=20-=20=EB=AA=A8=EC=A7=91=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=20-=20?= =?UTF-8?q?=EB=AA=A8=EC=A7=91=20=EC=9C=84=EC=B9=98=20=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UpdateRecruitBoardServiceTest.java | 188 ++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java new file mode 100644 index 000000000..8335cce27 --- /dev/null +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -0,0 +1,188 @@ +package com.somemore.recruitboard.service.command; + +import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT; +import static com.somemore.recruitboard.domain.VolunteerType.OTHER; +import static org.assertj.core.api.Assertions.assertThat; + +import com.somemore.IntegrationTestSupport; +import com.somemore.global.exception.BadRequestException; +import com.somemore.location.domain.Location; +import com.somemore.location.repository.LocationRepository; +import com.somemore.recruitboard.domain.RecruitBoard; +import com.somemore.recruitboard.domain.VolunteerInfo; +import com.somemore.recruitboard.dto.request.RecruitBoardLocationUpdateRequestDto; +import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; +import com.somemore.recruitboard.repository.RecruitBoardRepository; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.UUID; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class UpdateRecruitBoardServiceTest extends IntegrationTestSupport { + + @Autowired + private UpdateRecruitBoardService updateRecruitBoardService; + + @Autowired + private RecruitBoardRepository recruitBoardRepository; + + @Autowired + private LocationRepository locationRepository; + + private RecruitBoard recruitBoard; + private Location location; + private UUID centerId; + + @BeforeEach + void setUp() { + location = createLocation(); + locationRepository.saveAndFlush(location); + centerId = UUID.randomUUID(); + recruitBoard = createRecruitBoard(centerId, location.getId()); + recruitBoardRepository.saveAndFlush(recruitBoard); + + } + + + @AfterEach + void tearDown() { + recruitBoardRepository.deleteAllInBatch(); + locationRepository.deleteAllInBatch(); + } + + @DisplayName("봉사 모집글의 데이터를 업데이트하면 저장소에 반영된다.") + @Test + void updateRecruitBoard() { + // given + LocalDateTime newStartDateTime = LocalDateTime.now(); + LocalDateTime newEndDateTime = newStartDateTime.plusHours(3); + String newImgUrl = "https://image.domain.com/updates"; + RecruitBoardUpdateRequestDto dto = RecruitBoardUpdateRequestDto.builder() + .title("업데이트 제목") + .content("업데이트 내용") + .recruitmentCount(1111) + .volunteerStartDateTime(newStartDateTime) + .volunteerEndDateTime(newEndDateTime) + .volunteerType(ADMINISTRATIVE_SUPPORT) + .admitted(false) + .build(); + + // when + updateRecruitBoardService.updateRecruitBoard(dto, recruitBoard.getId(), centerId, + newImgUrl); + + // then + RecruitBoard updatedRecruitBoard = recruitBoardRepository.findById(recruitBoard.getId()) + .orElseThrow(); + + assertThat(updatedRecruitBoard.getTitle()).isEqualTo(dto.title()); + assertThat(updatedRecruitBoard.getContent()).isEqualTo(dto.content()); + assertThat(updatedRecruitBoard.getImgUrl()).isEqualTo(newImgUrl); + + VolunteerInfo volunteerInfo = updatedRecruitBoard.getVolunteerInfo(); + assertThat(volunteerInfo.getRecruitmentCount()).isEqualTo(dto.recruitmentCount()); + assertThat(volunteerInfo.getVolunteerStartDateTime()).isEqualTo( + dto.volunteerStartDateTime()); + assertThat(volunteerInfo.getVolunteerEndDateTime()).isEqualTo(dto.volunteerEndDateTime()); + assertThat(volunteerInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); + assertThat(volunteerInfo.getAdmitted()).isEqualTo(dto.admitted()); + } + + @DisplayName("봉사 모집글 위치를 수정할 수 있다") + @Test + void updateRecruitBoardLocation() { + // given + RecruitBoardLocationUpdateRequestDto dto = RecruitBoardLocationUpdateRequestDto.builder() + .region("새로새로지역지역") + .address("새로새로주소주소") + .latitude(BigDecimal.valueOf(37.2222222)) + .longitude(BigDecimal.valueOf(127.2222222)) + .build(); + + // when + updateRecruitBoardService.updateRecruitBoardLocation(dto, recruitBoard.getId(), centerId); + + // then + RecruitBoard updateRecruitBoard = recruitBoardRepository.findById(recruitBoard.getId()) + .orElseThrow(); + Location updateLocation = locationRepository.findById(recruitBoard.getLocationId()) + .orElseThrow(); + + assertThat(updateRecruitBoard.getVolunteerInfo().getRegion()).isEqualTo(dto.region()); + assertThat(updateLocation.getAddress()).isEqualTo(dto.address()); + assertThat(updateLocation.getLongitude().compareTo(dto.longitude())).isZero(); + assertThat(updateLocation.getLatitude().compareTo(dto.latitude())).isZero(); + } + + @DisplayName("봉사 모집글은 작성자만 수정할 수 있다") + @Test + void updateRecruitBoardWhenCenterIdIsWrong() { + // given + UUID wrongCenterId = UUID.randomUUID(); + LocalDateTime newStartDateTime = LocalDateTime.now(); + LocalDateTime newEndDateTime = newStartDateTime.plusHours(3); + String newImgUrl = "https://image.domain.com/updates"; + RecruitBoardUpdateRequestDto dto = RecruitBoardUpdateRequestDto.builder() + .title("업데이트 제목") + .content("업데이트 내용") + .recruitmentCount(1111) + .volunteerStartDateTime(newStartDateTime) + .volunteerEndDateTime(newEndDateTime) + .volunteerType(ADMINISTRATIVE_SUPPORT) + .admitted(false) + .build(); + + // when + // then + Assertions.assertThatThrownBy( + () -> updateRecruitBoardService.updateRecruitBoard(dto, recruitBoard.getId(), + wrongCenterId, + newImgUrl) + ).isInstanceOf(BadRequestException.class); + + } + + + private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId) { + LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime endDateTime = startDateTime.plusHours(1); + + return createRecruitBoard(centerId, locationId, startDateTime, endDateTime); + } + + private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId, + LocalDateTime startDateTime, + LocalDateTime endDateTime) { + + VolunteerInfo volunteerInfo = VolunteerInfo.builder() + .region("경기") + .recruitmentCount(1) + .volunteerStartDateTime(startDateTime) + .volunteerEndDateTime(endDateTime) + .volunteerType(OTHER) + .admitted(true) + .build(); + + return RecruitBoard.builder() + .centerId(centerId) + .locationId(locationId) + .title("봉사모집제목") + .content("봉사모집내용") + .imgUrl("https://image.domain.com/links") + .volunteerInfo(volunteerInfo) + .build(); + } + + private static Location createLocation() { + return Location.builder() + .address("주소주소") + .longitude(BigDecimal.valueOf(37.11111)) + .latitude(BigDecimal.valueOf(127.11111)) + .build(); + } +} \ No newline at end of file From b00b3c5d0dde61059c50384638e608d19e27b6d3 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 14:58:36 +0900 Subject: [PATCH 12/29] =?UTF-8?q?feat:=20QueryDsl=20queryFactory=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/somemore/location/repository/LocationRepository.java | 2 ++ .../somemore/location/repository/LocationRepositoryImpl.java | 5 +++++ .../recruitboard/repository/RecruitBoardRepositoryImpl.java | 3 +++ 3 files changed, 10 insertions(+) diff --git a/src/main/java/com/somemore/location/repository/LocationRepository.java b/src/main/java/com/somemore/location/repository/LocationRepository.java index 602211c7a..b2a5681a7 100644 --- a/src/main/java/com/somemore/location/repository/LocationRepository.java +++ b/src/main/java/com/somemore/location/repository/LocationRepository.java @@ -7,6 +7,8 @@ public interface LocationRepository { Location save(Location location); + Location saveAndFlush(Location location); + Optional findById(Long id); void deleteAllInBatch(); diff --git a/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java b/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java index 35104da0d..06b7d940e 100644 --- a/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java +++ b/src/main/java/com/somemore/location/repository/LocationRepositoryImpl.java @@ -18,6 +18,11 @@ public Location save(Location location) { return locationJpaRepository.save(location); } + @Override + public Location saveAndFlush(Location location) { + return locationJpaRepository.saveAndFlush(location); + } + @Override public Optional findById(Long id) { return locationJpaRepository.findById(id); diff --git a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java index fecd7a922..0dc414800 100644 --- a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java +++ b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java @@ -1,5 +1,7 @@ package com.somemore.recruitboard.repository; +import com.querydsl.core.QueryFactory; +import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.recruitboard.domain.RecruitBoard; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -10,6 +12,7 @@ public class RecruitBoardRepositoryImpl implements RecruitBoardRepository { private final RecruitBoardJpaRepository recruitBoardJpaRepository; + private final JPAQueryFactory queryFactory; @Override public RecruitBoard save(RecruitBoard recruitBoard) { From 0ced1c9b579916a85921d653a8e1b59f16b0ae8c Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 15:09:23 +0900 Subject: [PATCH 13/29] =?UTF-8?q?chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/repository/RecruitBoardRepositoryImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java index 0dc414800..3ac769016 100644 --- a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java +++ b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java @@ -1,6 +1,5 @@ package com.somemore.recruitboard.repository; -import com.querydsl.core.QueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.recruitboard.domain.RecruitBoard; import java.util.Optional; From 78622a92a73001b6fd532fefbfa5e37169fc7d25 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 17:28:20 +0900 Subject: [PATCH 14/29] =?UTF-8?q?feat:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/command/UpdateRecruitBoardServiceTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java index 8335cce27..826978c50 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -86,9 +86,10 @@ void updateRecruitBoard() { VolunteerInfo volunteerInfo = updatedRecruitBoard.getVolunteerInfo(); assertThat(volunteerInfo.getRecruitmentCount()).isEqualTo(dto.recruitmentCount()); - assertThat(volunteerInfo.getVolunteerStartDateTime()).isEqualTo( - dto.volunteerStartDateTime()); - assertThat(volunteerInfo.getVolunteerEndDateTime()).isEqualTo(dto.volunteerEndDateTime()); + assertThat(volunteerInfo.getVolunteerStartDateTime() + .compareTo(dto.volunteerStartDateTime())).isZero(); + assertThat(volunteerInfo.getVolunteerEndDateTime() + .compareTo(dto.volunteerEndDateTime())).isZero(); assertThat(volunteerInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); assertThat(volunteerInfo.getAdmitted()).isEqualTo(dto.admitted()); } From 0e5e3bfc915259e6c20a9ab11b3076eee1192202 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 18:17:53 +0900 Subject: [PATCH 15/29] =?UTF-8?q?fix:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/UpdateRecruitBoardServiceTest.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java index 826978c50..317ca462f 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -2,6 +2,7 @@ import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; +import static java.time.temporal.ChronoUnit.MILLIS; import static org.assertj.core.api.Assertions.assertThat; import com.somemore.IntegrationTestSupport; @@ -86,12 +87,15 @@ void updateRecruitBoard() { VolunteerInfo volunteerInfo = updatedRecruitBoard.getVolunteerInfo(); assertThat(volunteerInfo.getRecruitmentCount()).isEqualTo(dto.recruitmentCount()); - assertThat(volunteerInfo.getVolunteerStartDateTime() - .compareTo(dto.volunteerStartDateTime())).isZero(); - assertThat(volunteerInfo.getVolunteerEndDateTime() - .compareTo(dto.volunteerEndDateTime())).isZero(); assertThat(volunteerInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); assertThat(volunteerInfo.getAdmitted()).isEqualTo(dto.admitted()); + + assertThat(volunteerInfo.getVolunteerStartDateTime().truncatedTo(MILLIS) + .compareTo(dto.volunteerStartDateTime().truncatedTo(MILLIS))) + .isZero(); + assertThat(volunteerInfo.getVolunteerEndDateTime().truncatedTo(MILLIS) + .compareTo(dto.volunteerEndDateTime().truncatedTo(MILLIS))) + .isZero(); } @DisplayName("봉사 모집글 위치를 수정할 수 있다") From 4601f0eac0cbdcd662556e9d11f6adcfdf26299d Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 22:06:27 +0900 Subject: [PATCH 16/29] =?UTF-8?q?feat:=20=EB=85=BC=EB=A6=AC=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/somemore/global/common/BaseEntity.java | 4 ++++ .../repository/RecruitBoardRepositoryImpl.java | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/somemore/global/common/BaseEntity.java b/src/main/java/com/somemore/global/common/BaseEntity.java index 8f7aafc2d..4bf05c604 100644 --- a/src/main/java/com/somemore/global/common/BaseEntity.java +++ b/src/main/java/com/somemore/global/common/BaseEntity.java @@ -33,4 +33,8 @@ public void prePersist() { this.deleted = false; } } + + public void markAsDeleted() { + this.deleted = true; + } } diff --git a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java index 3ac769016..3db97c1b6 100644 --- a/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java +++ b/src/main/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImpl.java @@ -1,6 +1,8 @@ package com.somemore.recruitboard.repository; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; +import com.somemore.recruitboard.domain.QRecruitBoard; import com.somemore.recruitboard.domain.RecruitBoard; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -25,13 +27,23 @@ public RecruitBoard saveAndFlush(RecruitBoard recruitBoard) { @Override public Optional findById(Long id) { - return recruitBoardJpaRepository.findById(id); - } + QRecruitBoard recruitBoard = QRecruitBoard.recruitBoard; + + RecruitBoard result = queryFactory + .selectFrom(recruitBoard) + .where(isNotDeleted().and(recruitBoard.id.eq(id))) + .fetchOne(); + return Optional.ofNullable(result); + } + @Override public void deleteAllInBatch() { recruitBoardJpaRepository.deleteAllInBatch(); } - + private BooleanExpression isNotDeleted() { + QRecruitBoard recruitBoard = QRecruitBoard.recruitBoard; + return recruitBoard.deleted.eq(false); + } } From 4f1a9a19620c38e4a3b6e2fd15515584e5e7e19f Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 22:06:36 +0900 Subject: [PATCH 17/29] =?UTF-8?q?feat:=20=EB=85=BC=EB=A6=AC=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RecruitBoardRepositoryImplTest.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java diff --git a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java new file mode 100644 index 000000000..08ea8ea75 --- /dev/null +++ b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java @@ -0,0 +1,76 @@ +package com.somemore.recruitboard.repository; + +import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; +import static com.somemore.recruitboard.domain.VolunteerType.OTHER; +import static org.assertj.core.api.Assertions.assertThat; + +import com.somemore.IntegrationTestSupport; +import com.somemore.common.fixture.LocalDateTimeFixture; +import com.somemore.recruitboard.domain.RecruitBoard; +import com.somemore.recruitboard.domain.VolunteerInfo; +import java.time.LocalDateTime; +import java.util.Optional; +import java.util.UUID; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +class RecruitBoardRepositoryImplTest extends IntegrationTestSupport { + + @Autowired + private RecruitBoardRepositoryImpl recruitBoardRepository; + + private RecruitBoard recruitBoard; + @BeforeEach + void setUp() { + recruitBoard = createRecruitBoard(); + recruitBoardRepository.saveAndFlush(recruitBoard); + recruitBoard.markAsDeleted(); + recruitBoardRepository.saveAndFlush(recruitBoard); + } + + @AfterEach + void tearDown() { + recruitBoardRepository.deleteAllInBatch(); + } + + @DisplayName("논리 삭제된 데이터를 id로 조회시 빈 Optional 반환된다") + @Test + void findById() { + // given + Long deletedId = recruitBoard.getId(); + + // when + Optional findBoard = recruitBoardRepository.findById(deletedId); + + // then + assertThat(findBoard).isEmpty(); + } + + private static RecruitBoard createRecruitBoard() { + + LocalDateTime startDateTime = createStartDateTime(); + LocalDateTime endDateTime = startDateTime.plusHours(1); + + VolunteerInfo volunteerInfo = VolunteerInfo.builder() + .region("경기") + .recruitmentCount(1) + .volunteerStartDateTime(startDateTime) + .volunteerEndDateTime(endDateTime) + .volunteerType(OTHER) + .admitted(true) + .build(); + + return RecruitBoard.builder() + .centerId(UUID.randomUUID()) + .locationId(1L) + .title("봉사모집제목") + .content("봉사모집내용") + .imgUrl("https://image.domain.com/links") + .volunteerInfo(volunteerInfo) + .build(); + } + +} \ No newline at end of file From de47b58404ecb05f35870b5b87cf5cfd823dedcb Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 22:07:07 +0900 Subject: [PATCH 18/29] =?UTF-8?q?test:=20=EA=B3=A0=EC=A0=95=EB=90=9C=20Loc?= =?UTF-8?q?alDateTime=20=EB=B0=98=ED=99=98=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/fixture/LocalDateTimeFixture.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java diff --git a/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java b/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java new file mode 100644 index 000000000..f8da83fd6 --- /dev/null +++ b/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java @@ -0,0 +1,17 @@ +package com.somemore.common.fixture; + +import java.time.LocalDateTime; + +public class LocalDateTimeFixture { + + public static LocalDateTime createStartDateTime() { + // 2024-11-25 T:13:00:00 + return LocalDateTime.of(2024, 11, 25, 13, 0); + } + + public static LocalDateTime createUpdateStartDateTime() { + // 2024-11-25 T:16:00:00 + return LocalDateTime.of(2024, 11, 25, 16, 0); + } + +} From 921e21069955d9a76818cdc0b3bde640c86bb063 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 22:07:32 +0900 Subject: [PATCH 19/29] =?UTF-8?q?test:=20LocalDateTimeFixture=20=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/VolunteerInfo.java | 9 ++++---- .../recruitboard/domain/RecruitBoardTest.java | 12 ++++++---- .../domain/VolunteerInfoTest.java | 23 +++++++++++-------- .../CreateRecruitBoardServiceTest.java | 8 +++++-- .../UpdateRecruitBoardServiceTest.java | 19 +++++++-------- .../query/RecruitQueryServiceTest.java | 4 +++- 6 files changed, 46 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java b/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java index fdcd8336a..7ef7e4113 100644 --- a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java +++ b/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java @@ -1,6 +1,7 @@ package com.somemore.recruitboard.domain; import static jakarta.persistence.EnumType.STRING; +import static java.time.temporal.ChronoUnit.MINUTES; import static lombok.AccessLevel.PROTECTED; import jakarta.persistence.Column; @@ -46,8 +47,8 @@ public VolunteerInfo(String region, Integer recruitmentCount, this.region = region; this.recruitmentCount = recruitmentCount; - this.volunteerStartDateTime = volunteerStartDateTime; - this.volunteerEndDateTime = volunteerEndDateTime; + this.volunteerStartDateTime = volunteerStartDateTime.truncatedTo(MINUTES); + this.volunteerEndDateTime = volunteerEndDateTime.truncatedTo(MINUTES); this.volunteerType = volunteerType; this.admitted = admitted; } @@ -69,8 +70,8 @@ public void updateWith(Integer recruitmentCount, VolunteerType volunteerType, this.recruitmentCount = recruitmentCount; this.volunteerType = volunteerType; - this.volunteerStartDateTime = volunteerStartDateTime; - this.volunteerEndDateTime = volunteerEndDateTime; + this.volunteerStartDateTime = volunteerStartDateTime.truncatedTo(MINUTES); + this.volunteerEndDateTime = volunteerEndDateTime.truncatedTo(MINUTES); this.admitted = admitted; } diff --git a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java index c6d04598c..0d07f0c6d 100644 --- a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java @@ -1,5 +1,7 @@ package com.somemore.recruitboard.domain; +import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; +import static com.somemore.common.fixture.LocalDateTimeFixture.createUpdateStartDateTime; import static com.somemore.recruitboard.domain.RecruitStatus.RECRUITING; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; import static org.assertj.core.api.Assertions.assertThat; @@ -34,7 +36,7 @@ void testCalculateVolunteerTime() { // given int hours = 3; UUID centerId = UUID.randomUUID(); - LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(hours); RecruitBoard board = createRecruitBoard(centerId, startDateTime, endDateTime); @@ -53,13 +55,15 @@ void updateRecruitBoard() { UUID centerId = UUID.randomUUID(); RecruitBoard board = createRecruitBoard(centerId); String imgUrl = "https://image.domain.com/updates"; + LocalDateTime startDateTime = createUpdateStartDateTime(); + LocalDateTime endDateTime = startDateTime.plusHours(2); RecruitBoardUpdateRequestDto dto = RecruitBoardUpdateRequestDto.builder() .title("봉사 모집글 작성 수정") .content("봉사 하실분을 모집합니다. 수정
") .recruitmentCount(10) - .volunteerStartDateTime(LocalDateTime.now()) - .volunteerEndDateTime(LocalDateTime.now().plusHours(2)) + .volunteerStartDateTime(startDateTime) + .volunteerEndDateTime(endDateTime) .volunteerType(OTHER) .admitted(true).build(); @@ -118,7 +122,7 @@ void isNotWriterWithWrongCenterId() { private static RecruitBoard createRecruitBoard(UUID centerId) { - LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(1); return createRecruitBoard(centerId, startDateTime, endDateTime); diff --git a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java b/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java index d19014972..edf04c9b4 100644 --- a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java @@ -1,5 +1,7 @@ package com.somemore.recruitboard.domain; +import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; +import static com.somemore.common.fixture.LocalDateTimeFixture.createUpdateStartDateTime; import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT; import static com.somemore.recruitboard.domain.VolunteerType.SAFETY_PREVENTION; import static org.assertj.core.api.Assertions.assertThat; @@ -17,10 +19,10 @@ class VolunteerInfoTest { @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글 생성 시 에러가 발생한다") @ParameterizedTest @ValueSource(longs = {0, -1}) - void createRecruitBoardWithInValidVolunteerTime(long secondsOffset) { + void createRecruitBoardWithInValidVolunteerTime(long minutesOffset) { // given - LocalDateTime now = LocalDateTime.now(); - LocalDateTime endDateTime = now.plusSeconds(secondsOffset); + LocalDateTime now = createStartDateTime(); + LocalDateTime endDateTime = now.plusMinutes(minutesOffset); // when & then assertThatThrownBy( @@ -34,10 +36,11 @@ void createRecruitBoardWithInValidVolunteerTime(long secondsOffset) { void testCalculateVolunteerTime() { // given int hours = 3; - LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(hours); VolunteerInfo volunteerInfo = createVolunteerInfo(startDateTime, endDateTime); + // when LocalTime volunteerTime = volunteerInfo.calculateVolunteerTime(); @@ -53,7 +56,7 @@ void updateVolunteerInfo() { Integer count = 2; VolunteerType volunteerType = SAFETY_PREVENTION; - LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = createUpdateStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(2); Boolean admitted = false; @@ -86,10 +89,10 @@ void updateVolunteerInfoWithRegion() { @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글을 업데이트시 에러가 발생한다") @ParameterizedTest @ValueSource(longs = {0, -1}) - void updateRecruitBoardWithInValidVolunteerTime(long secondsOffset) { + void updateRecruitBoardWithInValidVolunteerTime(long minutesOffset) { // given - LocalDateTime startDateTime = LocalDateTime.now(); - LocalDateTime endDateTime = startDateTime.plusSeconds(secondsOffset); + LocalDateTime startDateTime = createStartDateTime(); + LocalDateTime endDateTime = startDateTime.plusMinutes(minutesOffset); VolunteerInfo volunteerInfo = createVolunteerInfo(); @@ -114,7 +117,9 @@ private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, } private static VolunteerInfo createVolunteerInfo() { - return createVolunteerInfo(LocalDateTime.now(), LocalDateTime.now().plusHours(1)); + LocalDateTime startDateTime = createStartDateTime(); + LocalDateTime endDateTime = startDateTime.plusHours(1); + return createVolunteerInfo(startDateTime, endDateTime); } } diff --git a/src/test/java/com/somemore/recruitboard/service/command/CreateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/CreateRecruitBoardServiceTest.java index c97271866..894aa05c7 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/CreateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/CreateRecruitBoardServiceTest.java @@ -1,5 +1,6 @@ package com.somemore.recruitboard.service.command; +import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; import static org.assertj.core.api.Assertions.assertThat; import com.somemore.IntegrationTestSupport; @@ -45,13 +46,16 @@ void createRecruitBoardWithDto() { .longitude(BigDecimal.valueOf(127.010842267696)) .build(); + LocalDateTime startDateTime = createStartDateTime(); + LocalDateTime endDateTime = startDateTime.plusHours(2); + RecruitBoardCreateRequestDto dto = RecruitBoardCreateRequestDto.builder() .title("봉사 모집글 작성") .content("봉사 하실분을 모집합니다.
") .region("지역") .recruitmentCount(10) - .volunteerStartDateTime(LocalDateTime.now()) - .volunteerEndDateTime(LocalDateTime.now().plusHours(2)) + .volunteerStartDateTime(startDateTime) + .volunteerEndDateTime(endDateTime) .volunteerType(VolunteerType.OTHER) .admitted(true) .location(locationDto) diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java index 317ca462f..56618cca0 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -1,8 +1,10 @@ package com.somemore.recruitboard.service.command; +import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; +import static com.somemore.common.fixture.LocalDateTimeFixture.createUpdateStartDateTime; import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; -import static java.time.temporal.ChronoUnit.MILLIS; +import static java.time.temporal.ChronoUnit.MINUTES; import static org.assertj.core.api.Assertions.assertThat; import com.somemore.IntegrationTestSupport; @@ -60,7 +62,7 @@ void tearDown() { @Test void updateRecruitBoard() { // given - LocalDateTime newStartDateTime = LocalDateTime.now(); + LocalDateTime newStartDateTime = createUpdateStartDateTime(); LocalDateTime newEndDateTime = newStartDateTime.plusHours(3); String newImgUrl = "https://image.domain.com/updates"; RecruitBoardUpdateRequestDto dto = RecruitBoardUpdateRequestDto.builder() @@ -90,11 +92,11 @@ void updateRecruitBoard() { assertThat(volunteerInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); assertThat(volunteerInfo.getAdmitted()).isEqualTo(dto.admitted()); - assertThat(volunteerInfo.getVolunteerStartDateTime().truncatedTo(MILLIS) - .compareTo(dto.volunteerStartDateTime().truncatedTo(MILLIS))) + assertThat(volunteerInfo.getVolunteerStartDateTime().truncatedTo(MINUTES) + .compareTo(dto.volunteerStartDateTime().truncatedTo(MINUTES))) .isZero(); - assertThat(volunteerInfo.getVolunteerEndDateTime().truncatedTo(MILLIS) - .compareTo(dto.volunteerEndDateTime().truncatedTo(MILLIS))) + assertThat(volunteerInfo.getVolunteerEndDateTime().truncatedTo(MINUTES) + .compareTo(dto.volunteerEndDateTime().truncatedTo(MINUTES))) .isZero(); } @@ -129,7 +131,7 @@ void updateRecruitBoardLocation() { void updateRecruitBoardWhenCenterIdIsWrong() { // given UUID wrongCenterId = UUID.randomUUID(); - LocalDateTime newStartDateTime = LocalDateTime.now(); + LocalDateTime newStartDateTime = createUpdateStartDateTime(); LocalDateTime newEndDateTime = newStartDateTime.plusHours(3); String newImgUrl = "https://image.domain.com/updates"; RecruitBoardUpdateRequestDto dto = RecruitBoardUpdateRequestDto.builder() @@ -152,9 +154,8 @@ void updateRecruitBoardWhenCenterIdIsWrong() { } - private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId) { - LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(1); return createRecruitBoard(centerId, locationId, startDateTime, endDateTime); diff --git a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java index 077adca3c..d15c63fb7 100644 --- a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java @@ -1,10 +1,12 @@ package com.somemore.recruitboard.service.query; +import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.somemore.IntegrationTestSupport; +import com.somemore.common.fixture.LocalDateTimeFixture; import com.somemore.global.exception.BadRequestException; import com.somemore.recruitboard.domain.RecruitBoard; import com.somemore.recruitboard.domain.VolunteerInfo; @@ -94,7 +96,7 @@ void findByIdOrThrowWithDoesNotExistId() { private static RecruitBoard createRecruitBoard() { - LocalDateTime startDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(1); VolunteerInfo volunteerInfo = VolunteerInfo.builder() From 06102daf73192907f2e6fcf1c6e7961cd1e5cbef Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Mon, 25 Nov 2024 22:24:26 +0900 Subject: [PATCH 20/29] fix: sonarqube issue fix --- .../common/fixture/LocalDateTimeFixture.java | 3 +++ .../command/UpdateLocationServiceTest.java | 6 +++-- .../RecruitBoardRepositoryImplTest.java | 2 +- .../UpdateRecruitBoardServiceTest.java | 24 ++++++++----------- .../query/RecruitQueryServiceTest.java | 1 - 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java b/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java index f8da83fd6..6bf9370e5 100644 --- a/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java +++ b/src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java @@ -4,6 +4,9 @@ public class LocalDateTimeFixture { + private LocalDateTimeFixture() { + } + public static LocalDateTime createStartDateTime() { // 2024-11-25 T:13:00:00 return LocalDateTime.of(2024, 11, 25, 13, 0); diff --git a/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java b/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java index d3fca6421..049301483 100644 --- a/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java +++ b/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java @@ -57,7 +57,9 @@ void updateLocationWithDto() { // then Location updateLocation = locationRepository.findById(location.getId()).orElseThrow(); assertThat(updateLocation.getAddress()).isEqualTo(dto.address()); - assertThat(updateLocation.getLatitude().compareTo(dto.latitude())).isZero(); - assertThat(updateLocation.getLongitude().compareTo(dto.longitude())).isZero(); + assertThat(updateLocation.getLatitude()) + .isEqualByComparingTo(dto.latitude()); + assertThat(updateLocation.getLongitude()) + .isEqualByComparingTo(dto.longitude()); } } \ No newline at end of file diff --git a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java index 08ea8ea75..ca49b177c 100644 --- a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java +++ b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java @@ -5,7 +5,6 @@ import static org.assertj.core.api.Assertions.assertThat; import com.somemore.IntegrationTestSupport; -import com.somemore.common.fixture.LocalDateTimeFixture; import com.somemore.recruitboard.domain.RecruitBoard; import com.somemore.recruitboard.domain.VolunteerInfo; import java.time.LocalDateTime; @@ -23,6 +22,7 @@ class RecruitBoardRepositoryImplTest extends IntegrationTestSupport { private RecruitBoardRepositoryImpl recruitBoardRepository; private RecruitBoard recruitBoard; + @BeforeEach void setUp() { recruitBoard = createRecruitBoard(); diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java index 56618cca0..482c8e8bc 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -4,7 +4,6 @@ import static com.somemore.common.fixture.LocalDateTimeFixture.createUpdateStartDateTime; import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; -import static java.time.temporal.ChronoUnit.MINUTES; import static org.assertj.core.api.Assertions.assertThat; import com.somemore.IntegrationTestSupport; @@ -48,10 +47,8 @@ void setUp() { centerId = UUID.randomUUID(); recruitBoard = createRecruitBoard(centerId, location.getId()); recruitBoardRepository.saveAndFlush(recruitBoard); - } - @AfterEach void tearDown() { recruitBoardRepository.deleteAllInBatch(); @@ -92,12 +89,10 @@ void updateRecruitBoard() { assertThat(volunteerInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); assertThat(volunteerInfo.getAdmitted()).isEqualTo(dto.admitted()); - assertThat(volunteerInfo.getVolunteerStartDateTime().truncatedTo(MINUTES) - .compareTo(dto.volunteerStartDateTime().truncatedTo(MINUTES))) - .isZero(); - assertThat(volunteerInfo.getVolunteerEndDateTime().truncatedTo(MINUTES) - .compareTo(dto.volunteerEndDateTime().truncatedTo(MINUTES))) - .isZero(); + assertThat(volunteerInfo.getVolunteerStartDateTime()) + .isEqualToIgnoringNanos(dto.volunteerStartDateTime()); + assertThat(volunteerInfo.getVolunteerEndDateTime()) + .isEqualToIgnoringNanos(dto.volunteerEndDateTime()); } @DisplayName("봉사 모집글 위치를 수정할 수 있다") @@ -122,14 +117,17 @@ void updateRecruitBoardLocation() { assertThat(updateRecruitBoard.getVolunteerInfo().getRegion()).isEqualTo(dto.region()); assertThat(updateLocation.getAddress()).isEqualTo(dto.address()); - assertThat(updateLocation.getLongitude().compareTo(dto.longitude())).isZero(); - assertThat(updateLocation.getLatitude().compareTo(dto.latitude())).isZero(); + assertThat(updateLocation.getLongitude()) + .isEqualByComparingTo(dto.longitude()); + assertThat(updateLocation.getLatitude()) + .isEqualByComparingTo(dto.latitude()); } @DisplayName("봉사 모집글은 작성자만 수정할 수 있다") @Test void updateRecruitBoardWhenCenterIdIsWrong() { // given + Long id = recruitBoard.getId(); UUID wrongCenterId = UUID.randomUUID(); LocalDateTime newStartDateTime = createUpdateStartDateTime(); LocalDateTime newEndDateTime = newStartDateTime.plusHours(3); @@ -147,9 +145,7 @@ void updateRecruitBoardWhenCenterIdIsWrong() { // when // then Assertions.assertThatThrownBy( - () -> updateRecruitBoardService.updateRecruitBoard(dto, recruitBoard.getId(), - wrongCenterId, - newImgUrl) + () -> updateRecruitBoardService.updateRecruitBoard(dto, id, wrongCenterId, newImgUrl) ).isInstanceOf(BadRequestException.class); } diff --git a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java index d15c63fb7..2b7bb6343 100644 --- a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java @@ -6,7 +6,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.somemore.IntegrationTestSupport; -import com.somemore.common.fixture.LocalDateTimeFixture; import com.somemore.global.exception.BadRequestException; import com.somemore.recruitboard.domain.RecruitBoard; import com.somemore.recruitboard.domain.VolunteerInfo; From ad45c7242f29a9fb9a9c53ffa43df14764e3af23 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 00:29:40 +0900 Subject: [PATCH 21/29] =?UTF-8?q?chore:=20=ED=8C=8C=EC=9D=BC=20=EB=81=9D?= =?UTF-8?q?=20=EA=B0=9C=ED=96=89=20=EB=AC=B8=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/somemore/location/domain/Location.java | 2 +- .../java/com/somemore/recruitboard/domain/RecruitBoard.java | 3 +-- src/test/java/com/somemore/location/domain/LocationTest.java | 3 +-- .../location/service/command/CreateLocationServiceTest.java | 5 +---- .../location/service/command/UpdateLocationServiceTest.java | 2 +- .../location/service/query/LocationQueryServiceTest.java | 4 +--- .../com/somemore/recruitboard/domain/RecruitBoardTest.java | 3 +-- .../repository/RecruitBoardRepositoryImplTest.java | 3 +-- .../service/command/UpdateRecruitBoardServiceTest.java | 2 +- .../recruitboard/service/query/RecruitQueryServiceTest.java | 2 +- 10 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/somemore/location/domain/Location.java b/src/main/java/com/somemore/location/domain/Location.java index 7229778f0..d2d474c39 100644 --- a/src/main/java/com/somemore/location/domain/Location.java +++ b/src/main/java/com/somemore/location/domain/Location.java @@ -47,4 +47,4 @@ public void updateWith(LocationUpdateRequestDto requestDto) { this.latitude = requestDto.latitude().setScale(8, RoundingMode.HALF_UP); this.longitude = requestDto.longitude().setScale(8, RoundingMode.HALF_UP); } -} \ No newline at end of file +} diff --git a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java index ee25afbf0..d1bd182da 100644 --- a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java +++ b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java @@ -97,5 +97,4 @@ private void updateVolunteerInfo(RecruitBoardUpdateRequestDto dto) { dto.admitted() ); } - -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/location/domain/LocationTest.java b/src/test/java/com/somemore/location/domain/LocationTest.java index 4f5de223f..4d698e052 100644 --- a/src/test/java/com/somemore/location/domain/LocationTest.java +++ b/src/test/java/com/somemore/location/domain/LocationTest.java @@ -57,5 +57,4 @@ void updateLocationWithDto() { assertThat(location.getLatitude() .compareTo(requestDto.latitude().setScale(8, HALF_UP))).isZero(); } - -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/location/service/command/CreateLocationServiceTest.java b/src/test/java/com/somemore/location/service/command/CreateLocationServiceTest.java index e0d85fd56..8ff85f49c 100644 --- a/src/test/java/com/somemore/location/service/command/CreateLocationServiceTest.java +++ b/src/test/java/com/somemore/location/service/command/CreateLocationServiceTest.java @@ -43,8 +43,5 @@ void createLocationWithCreateRequestDto() { Optional location = locationRepository.findById(locationId); assertThat(location).isPresent(); assertThat(location.get().getId()).isEqualTo(locationId); - } - - -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java b/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java index 049301483..9c815a5a6 100644 --- a/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java +++ b/src/test/java/com/somemore/location/service/command/UpdateLocationServiceTest.java @@ -62,4 +62,4 @@ void updateLocationWithDto() { assertThat(updateLocation.getLongitude()) .isEqualByComparingTo(dto.longitude()); } -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java b/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java index 61b56a877..35608715d 100644 --- a/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java +++ b/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java @@ -90,7 +90,5 @@ void findByIdOrThrowWithDoesNotExistId() { assertThatThrownBy( () -> locationQueryService.findByIdOrThrow(wrongId) ).isInstanceOf(BadRequestException.class); - } - -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java index 0d07f0c6d..565d98902 100644 --- a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java @@ -149,5 +149,4 @@ private static RecruitBoard createRecruitBoard(UUID centerId, LocalDateTime star .volunteerInfo(volunteerInfo) .build(); } - -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java index ca49b177c..7d01e4830 100644 --- a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java +++ b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java @@ -72,5 +72,4 @@ private static RecruitBoard createRecruitBoard() { .volunteerInfo(volunteerInfo) .build(); } - -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java index 482c8e8bc..91466a80f 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -187,4 +187,4 @@ private static Location createLocation() { .latitude(BigDecimal.valueOf(127.11111)) .build(); } -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java index 2b7bb6343..3c66ef2fa 100644 --- a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java @@ -116,4 +116,4 @@ private static RecruitBoard createRecruitBoard() { .volunteerInfo(volunteerInfo) .build(); } -} \ No newline at end of file +} From 4cc9412c2c88d3db2e4d9d2825d9df1a5fad2130 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 00:30:27 +0900 Subject: [PATCH 22/29] =?UTF-8?q?fix:=20region=20=EA=B3=A0=EC=A0=95?= =?UTF-8?q?=EB=90=9C=20=EA=B0=92=EC=9D=B4=20=EB=93=A4=EC=96=B4=EA=B0=80?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/dto/request/RecruitBoardCreateRequestDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java index 6d02406cd..06722dc09 100644 --- a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java +++ b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java @@ -46,7 +46,7 @@ public record RecruitBoardCreateRequestDto( public RecruitBoard toEntity(UUID centerId, Long locationId, String imgUrl) { VolunteerInfo volunteerInfo = VolunteerInfo.builder() - .region("경기") + .region(region) .recruitmentCount(recruitmentCount) .volunteerStartDateTime(volunteerStartDateTime) .volunteerEndDateTime(volunteerEndDateTime) From e4b30b8be8ade9bbb75e797433cc9d49d1197846 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 10:47:20 +0900 Subject: [PATCH 23/29] =?UTF-8?q?refactor:=20findByIdOrThrow()=20->=20find?= =?UTF-8?q?ById()=20=EB=8C=80=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/ExceptionMessage.java | 5 ++++- .../service/command/UpdateLocationService.java | 7 ++++++- .../service/query/LocationQueryService.java | 6 ------ .../usecase/query/LocationQueryUseCase.java | 2 -- .../command/UpdateRecruitBoardService.java | 18 ++++++++++++------ ...vice.java => RecruitBoardQueryService.java} | 12 ++---------- ...Case.java => RecruitBoardQueryUseCase.java} | 4 +--- 7 files changed, 25 insertions(+), 29 deletions(-) rename src/main/java/com/somemore/recruitboard/service/query/{RecruitQueryService.java => RecruitBoardQueryService.java} (58%) rename src/main/java/com/somemore/recruitboard/usecase/query/{RecruitQueryUseCase.java => RecruitBoardQueryUseCase.java} (68%) diff --git a/src/main/java/com/somemore/global/exception/ExceptionMessage.java b/src/main/java/com/somemore/global/exception/ExceptionMessage.java index 615f84ac0..546c529c5 100644 --- a/src/main/java/com/somemore/global/exception/ExceptionMessage.java +++ b/src/main/java/com/somemore/global/exception/ExceptionMessage.java @@ -8,7 +8,10 @@ @Getter public enum ExceptionMessage { - NOT_EXISTS_CENTER("존재하지 않는 기관 ID 입니다.") + NOT_EXISTS_CENTER("존재하지 않는 기관 ID 입니다."), + NOT_EXISTS_LOCATION("존재하지 않는 위치 ID 입니다."), + NOT_EXISTS_RECRUIT_BOARD("존재하지 않는 봉사 모집글 ID 입니다."), + UNAUTHORIZED_RECRUIT_BOARD("자신이 작성한 봉사 모집글이 아닙니다."), ; private final String message; diff --git a/src/main/java/com/somemore/location/service/command/UpdateLocationService.java b/src/main/java/com/somemore/location/service/command/UpdateLocationService.java index deec6d0c8..63d528385 100644 --- a/src/main/java/com/somemore/location/service/command/UpdateLocationService.java +++ b/src/main/java/com/somemore/location/service/command/UpdateLocationService.java @@ -1,5 +1,9 @@ package com.somemore.location.service.command; +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_LOCATION; + +import com.somemore.global.exception.BadRequestException; +import com.somemore.global.exception.ExceptionMessage; import com.somemore.location.domain.Location; import com.somemore.location.dto.request.LocationUpdateRequestDto; import com.somemore.location.repository.LocationRepository; @@ -19,7 +23,8 @@ public class UpdateLocationService implements UpdateLocationUseCase { @Override public void updateLocation(LocationUpdateRequestDto requestDto, Long locationId) { - Location location = locationQueryUseCase.findByIdOrThrow(locationId); + Location location = locationQueryUseCase.findById(locationId) + .orElseThrow(() -> new BadRequestException(NOT_EXISTS_LOCATION.getMessage())); location.updateWith(requestDto); locationRepository.save(location); } diff --git a/src/main/java/com/somemore/location/service/query/LocationQueryService.java b/src/main/java/com/somemore/location/service/query/LocationQueryService.java index 1b9c291ca..5cb2a380b 100644 --- a/src/main/java/com/somemore/location/service/query/LocationQueryService.java +++ b/src/main/java/com/somemore/location/service/query/LocationQueryService.java @@ -21,10 +21,4 @@ public Optional findById(Long id) { return locationRepository.findById(id); } - @Override - public Location findByIdOrThrow(Long id) { - return locationRepository.findById(id).orElseThrow( - () -> new BadRequestException("존재하지 않는 위치입니다.") - ); - } } diff --git a/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java b/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java index 5aec218ce..b1e468da0 100644 --- a/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java +++ b/src/main/java/com/somemore/location/usecase/query/LocationQueryUseCase.java @@ -7,6 +7,4 @@ public interface LocationQueryUseCase { Optional findById(Long id); - Location findByIdOrThrow(Long id); - } diff --git a/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java b/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java index 0b90de6e2..7d2afb9c1 100644 --- a/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java +++ b/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java @@ -1,5 +1,8 @@ package com.somemore.recruitboard.service.command; +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_RECRUIT_BOARD; +import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_RECRUIT_BOARD; + import com.somemore.global.exception.BadRequestException; import com.somemore.location.usecase.command.UpdateLocationUseCase; import com.somemore.recruitboard.domain.RecruitBoard; @@ -7,7 +10,7 @@ import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; import com.somemore.recruitboard.repository.RecruitBoardRepository; import com.somemore.recruitboard.usecase.command.UpdateRecruitBoardUseCase; -import com.somemore.recruitboard.usecase.query.RecruitQueryUseCase; +import com.somemore.recruitboard.usecase.query.RecruitBoardQueryUseCase; import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -20,7 +23,7 @@ public class UpdateRecruitBoardService implements UpdateRecruitBoardUseCase { private final RecruitBoardRepository recruitBoardRepository; - private final RecruitQueryUseCase recruitQueryUseCase; + private final RecruitBoardQueryUseCase recruitBoardQueryUseCase; private final UpdateLocationUseCase updateLocationUseCase; @Override @@ -30,7 +33,9 @@ public void updateRecruitBoard( UUID centerId, String imgUrl) { - RecruitBoard recruitBoard = recruitQueryUseCase.findByIdOrThrow(recruitBoardId); + RecruitBoard recruitBoard = recruitBoardQueryUseCase.findById(recruitBoardId).orElseThrow( + () -> new BadRequestException(NOT_EXISTS_RECRUIT_BOARD.getMessage()) + ); validateWriter(recruitBoard, centerId); recruitBoard.updateWith(requestDto, imgUrl); @@ -41,7 +46,9 @@ public void updateRecruitBoard( public void updateRecruitBoardLocation(RecruitBoardLocationUpdateRequestDto requestDto, Long recruitBoardId, UUID centerId) { - RecruitBoard recruitBoard = recruitQueryUseCase.findByIdOrThrow(recruitBoardId); + RecruitBoard recruitBoard = recruitBoardQueryUseCase.findById(recruitBoardId).orElseThrow( + () -> new BadRequestException(NOT_EXISTS_RECRUIT_BOARD.getMessage()) + ); validateWriter(recruitBoard, centerId); updateLocationUseCase.updateLocation(requestDto.toLocationUpdateRequestDto(), @@ -53,8 +60,7 @@ public void updateRecruitBoardLocation(RecruitBoardLocationUpdateRequestDto requ private void validateWriter(RecruitBoard recruitBoard, UUID centerId) { if (recruitBoard.isNotWriter(centerId)) { - throw new BadRequestException("자신이 작성한 봉사 모집글만 수정할 수 있습니다."); + throw new BadRequestException(UNAUTHORIZED_RECRUIT_BOARD.getMessage()); } - } } diff --git a/src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java b/src/main/java/com/somemore/recruitboard/service/query/RecruitBoardQueryService.java similarity index 58% rename from src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java rename to src/main/java/com/somemore/recruitboard/service/query/RecruitBoardQueryService.java index bd9942ba2..e3c9dffd1 100644 --- a/src/main/java/com/somemore/recruitboard/service/query/RecruitQueryService.java +++ b/src/main/java/com/somemore/recruitboard/service/query/RecruitBoardQueryService.java @@ -1,9 +1,8 @@ package com.somemore.recruitboard.service.query; -import com.somemore.global.exception.BadRequestException; import com.somemore.recruitboard.domain.RecruitBoard; import com.somemore.recruitboard.repository.RecruitBoardRepository; -import com.somemore.recruitboard.usecase.query.RecruitQueryUseCase; +import com.somemore.recruitboard.usecase.query.RecruitBoardQueryUseCase; import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -12,7 +11,7 @@ @RequiredArgsConstructor @Transactional(readOnly = true) @Service -public class RecruitQueryService implements RecruitQueryUseCase { +public class RecruitBoardQueryService implements RecruitBoardQueryUseCase { private final RecruitBoardRepository recruitBoardRepository; @@ -21,11 +20,4 @@ public Optional findById(Long id) { return recruitBoardRepository.findById(id); } - @Override - public RecruitBoard findByIdOrThrow(Long id) { - return recruitBoardRepository.findById(id).orElseThrow( - () -> new BadRequestException("존재하지 않는 봉사 모집 활동입니다.") - ); - } - } diff --git a/src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java b/src/main/java/com/somemore/recruitboard/usecase/query/RecruitBoardQueryUseCase.java similarity index 68% rename from src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java rename to src/main/java/com/somemore/recruitboard/usecase/query/RecruitBoardQueryUseCase.java index 4655dae0b..b98576d79 100644 --- a/src/main/java/com/somemore/recruitboard/usecase/query/RecruitQueryUseCase.java +++ b/src/main/java/com/somemore/recruitboard/usecase/query/RecruitBoardQueryUseCase.java @@ -3,10 +3,8 @@ import com.somemore.recruitboard.domain.RecruitBoard; import java.util.Optional; -public interface RecruitQueryUseCase { +public interface RecruitBoardQueryUseCase { Optional findById(Long id); - RecruitBoard findByIdOrThrow(Long id); - } From d0747cc46eb6253bce006edcafea187b5625292a Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 10:47:55 +0900 Subject: [PATCH 24/29] =?UTF-8?q?test:=20findByIdOrThrow()=20->=20findById?= =?UTF-8?q?()=20=EB=94=B0=EB=A5=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/LocationQueryServiceTest.java | 27 ---------------- .../query/RecruitQueryServiceTest.java | 31 +------------------ 2 files changed, 1 insertion(+), 57 deletions(-) diff --git a/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java b/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java index 35608715d..389c34418 100644 --- a/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java +++ b/src/test/java/com/somemore/location/service/query/LocationQueryServiceTest.java @@ -1,10 +1,8 @@ package com.somemore.location.service.query; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.somemore.IntegrationTestSupport; -import com.somemore.global.exception.BadRequestException; import com.somemore.location.domain.Location; import com.somemore.location.repository.LocationRepository; import java.math.BigDecimal; @@ -66,29 +64,4 @@ void findByIdWithDoesNotExistId() { assertThat(findLocation).isEmpty(); } - @DisplayName("ID로 Location 조회할 수 있다") - @Test - void findByIdOrThrowWithExistsId() { - // given - Long id = location.getId(); - - // when - Location findLocation = locationQueryService.findByIdOrThrow(id); - - // then - assertThat(findLocation.getId()).isEqualTo(id); - } - - @DisplayName("존재하지 않는 ID로 Location 조회하면 에러가 발생한다") - @Test - void findByIdOrThrowWithDoesNotExistId() { - // given - Long wrongId = 999L; - - // when - // then - assertThatThrownBy( - () -> locationQueryService.findByIdOrThrow(wrongId) - ).isInstanceOf(BadRequestException.class); - } } diff --git a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java index 3c66ef2fa..1423ede5d 100644 --- a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java @@ -3,10 +3,8 @@ import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; import static com.somemore.recruitboard.domain.VolunteerType.OTHER; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.somemore.IntegrationTestSupport; -import com.somemore.global.exception.BadRequestException; import com.somemore.recruitboard.domain.RecruitBoard; import com.somemore.recruitboard.domain.VolunteerInfo; import com.somemore.recruitboard.repository.RecruitBoardRepository; @@ -22,7 +20,7 @@ class RecruitQueryServiceTest extends IntegrationTestSupport { @Autowired - private RecruitQueryService recruitQueryService; + private RecruitBoardQueryService recruitQueryService; @Autowired private RecruitBoardRepository recruitBoardRepository; @@ -66,33 +64,6 @@ void findByIdWithDoesNotExistId() { assertThat(findBoard).isEmpty(); } - @DisplayName("ID로 RecruitBoard 조회할 수 있다") - @Test - void findByIdOrThrowWithExistsId() { - // given - Long id = recruitBoard.getId(); - - // when - RecruitBoard findBoard = recruitQueryService.findByIdOrThrow(id); - - // then - assertThat(findBoard.getId()).isEqualTo(id); - } - - @DisplayName("존재하지 않는 ID로 RecruitBoard 조회하면 에러가 발생한다") - @Test - void findByIdOrThrowWithDoesNotExistId() { - // given - Long wrongId = 999L; - - // when - // then - assertThatThrownBy( - () -> recruitQueryService.findByIdOrThrow(wrongId) - ).isInstanceOf(BadRequestException.class); - - } - private static RecruitBoard createRecruitBoard() { LocalDateTime startDateTime = createStartDateTime(); From 4d3060420aba2be6fe85f17f9c80f1b0e761532f Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 10:49:55 +0900 Subject: [PATCH 25/29] =?UTF-8?q?refactor:=20isNotWriter=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/somemore/recruitboard/domain/RecruitBoard.java | 4 ---- .../service/command/UpdateRecruitBoardService.java | 6 ++++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java index d1bd182da..ef2c1d6d2 100644 --- a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java +++ b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java @@ -73,10 +73,6 @@ public boolean isWriter(UUID centerId) { return this.centerId.equals(centerId); } - public boolean isNotWriter(UUID centerId) { - return !isWriter(centerId); - } - public void updateWith(RecruitBoardUpdateRequestDto dto, String imgUrl) { updateVolunteerInfo(dto); this.title = dto.title(); diff --git a/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java b/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java index 7d2afb9c1..1abaf0c02 100644 --- a/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java +++ b/src/main/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardService.java @@ -59,8 +59,10 @@ public void updateRecruitBoardLocation(RecruitBoardLocationUpdateRequestDto requ } private void validateWriter(RecruitBoard recruitBoard, UUID centerId) { - if (recruitBoard.isNotWriter(centerId)) { - throw new BadRequestException(UNAUTHORIZED_RECRUIT_BOARD.getMessage()); + if (recruitBoard.isWriter(centerId)) { + return; } + + throw new BadRequestException(UNAUTHORIZED_RECRUIT_BOARD.getMessage()); } } From 7f3d31bf47e1d8bd7789bb63f8aedc6f185deaa2 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 10:50:07 +0900 Subject: [PATCH 26/29] =?UTF-8?q?test:=20isNotWriter=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/somemore/recruitboard/domain/RecruitBoardTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java index 565d98902..74363f6a5 100644 --- a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java @@ -114,10 +114,10 @@ void isNotWriterWithWrongCenterId() { RecruitBoard recruitBoard = createRecruitBoard(centerId); // when - boolean isNotWriter = recruitBoard.isNotWriter(wrongId); + boolean isWriter = recruitBoard.isWriter(wrongId); // then - assertThat(isNotWriter).isTrue(); + assertThat(isWriter).isFalse(); } From d6992bc0b59ad83922e246ad6e19cb6f0c24ab4a Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 10:59:45 +0900 Subject: [PATCH 27/29] =?UTF-8?q?refactor:=20VolunteerInfo=20->=20Recruitm?= =?UTF-8?q?entInfo=20=EA=B0=9D=EC=B2=B4=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/RecruitBoard.java | 16 ++++++++-------- .../{VolunteerInfo.java => RecruitmentInfo.java} | 4 ++-- .../request/RecruitBoardCreateRequestDto.java | 6 +++--- 3 files changed, 13 insertions(+), 13 deletions(-) rename src/main/java/com/somemore/recruitboard/domain/{VolunteerInfo.java => RecruitmentInfo.java} (96%) diff --git a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java index ef2c1d6d2..0b3115f3f 100644 --- a/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java +++ b/src/main/java/com/somemore/recruitboard/domain/RecruitBoard.java @@ -45,7 +45,7 @@ public class RecruitBoard extends BaseEntity { private String content; @Embedded - private VolunteerInfo volunteerInfo; + private RecruitmentInfo recruitmentInfo; @Enumerated(value = STRING) @Column(name = "recruit_status", nullable = false, length = 20) @@ -56,17 +56,17 @@ public class RecruitBoard extends BaseEntity { @Builder public RecruitBoard(UUID centerId, Long locationId, String title, String content, - VolunteerInfo volunteerInfo, String imgUrl) { + RecruitmentInfo recruitmentInfo, String imgUrl) { this.centerId = centerId; this.locationId = locationId; this.title = title; this.content = content; - this.volunteerInfo = volunteerInfo; + this.recruitmentInfo = recruitmentInfo; this.imgUrl = imgUrl; } public LocalTime getVolunteerHours() { - return volunteerInfo.calculateVolunteerTime(); + return recruitmentInfo.calculateVolunteerTime(); } public boolean isWriter(UUID centerId) { @@ -74,18 +74,18 @@ public boolean isWriter(UUID centerId) { } public void updateWith(RecruitBoardUpdateRequestDto dto, String imgUrl) { - updateVolunteerInfo(dto); + updateRecruitmentInfo(dto); this.title = dto.title(); this.content = dto.content(); this.imgUrl = imgUrl; } public void updateWith(String region) { - volunteerInfo.updateWith(region); + recruitmentInfo.updateWith(region); } - private void updateVolunteerInfo(RecruitBoardUpdateRequestDto dto) { - volunteerInfo.updateWith( + private void updateRecruitmentInfo(RecruitBoardUpdateRequestDto dto) { + recruitmentInfo.updateWith( dto.recruitmentCount(), dto.volunteerType(), dto.volunteerStartDateTime(), diff --git a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java b/src/main/java/com/somemore/recruitboard/domain/RecruitmentInfo.java similarity index 96% rename from src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java rename to src/main/java/com/somemore/recruitboard/domain/RecruitmentInfo.java index 7ef7e4113..1b50bee28 100644 --- a/src/main/java/com/somemore/recruitboard/domain/VolunteerInfo.java +++ b/src/main/java/com/somemore/recruitboard/domain/RecruitmentInfo.java @@ -17,7 +17,7 @@ @Getter @NoArgsConstructor(access = PROTECTED) @Embeddable -public class VolunteerInfo { +public class RecruitmentInfo { @Column(name = "region", nullable = false) private String region; @@ -39,7 +39,7 @@ public class VolunteerInfo { private Boolean admitted; @Builder - public VolunteerInfo(String region, Integer recruitmentCount, + public RecruitmentInfo(String region, Integer recruitmentCount, LocalDateTime volunteerStartDateTime, LocalDateTime volunteerEndDateTime, VolunteerType volunteerType, Boolean admitted) { diff --git a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java index 06722dc09..8906c48a4 100644 --- a/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java +++ b/src/main/java/com/somemore/recruitboard/dto/request/RecruitBoardCreateRequestDto.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.somemore.location.dto.request.LocationCreateRequestDto; import com.somemore.recruitboard.domain.RecruitBoard; -import com.somemore.recruitboard.domain.VolunteerInfo; +import com.somemore.recruitboard.domain.RecruitmentInfo; import com.somemore.recruitboard.domain.VolunteerType; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; @@ -45,7 +45,7 @@ public record RecruitBoardCreateRequestDto( ) { public RecruitBoard toEntity(UUID centerId, Long locationId, String imgUrl) { - VolunteerInfo volunteerInfo = VolunteerInfo.builder() + RecruitmentInfo recruitmentInfo = RecruitmentInfo.builder() .region(region) .recruitmentCount(recruitmentCount) .volunteerStartDateTime(volunteerStartDateTime) @@ -60,7 +60,7 @@ public RecruitBoard toEntity(UUID centerId, Long locationId, String imgUrl) { .title(title) .content(content) .imgUrl(imgUrl) - .volunteerInfo(volunteerInfo) + .recruitmentInfo(recruitmentInfo) .build(); } } From c58f0c2301a97cf0d8d7705b35025495c9d8d793 Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 11:00:01 +0900 Subject: [PATCH 28/29] =?UTF-8?q?test:=20VolunteerInfo=20->=20RecruitmentI?= =?UTF-8?q?nfo=20=EB=B3=80=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recruitboard/domain/RecruitBoardTest.java | 8 ++-- ...InfoTest.java => RecruitmentInfoTest.java} | 44 +++++++++---------- .../RecruitBoardRepositoryImplTest.java | 6 +-- .../UpdateRecruitBoardServiceTest.java | 20 ++++----- .../query/RecruitQueryServiceTest.java | 6 +-- 5 files changed, 42 insertions(+), 42 deletions(-) rename src/test/java/com/somemore/recruitboard/domain/{VolunteerInfoTest.java => RecruitmentInfoTest.java} (68%) diff --git a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java index 74363f6a5..4decdd19b 100644 --- a/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java @@ -88,8 +88,8 @@ void updateWithRegion() { board.updateWith(updateRegion); // then - VolunteerInfo volunteerInfo = board.getVolunteerInfo(); - assertThat(volunteerInfo.getRegion()).isEqualTo(updateRegion); + RecruitmentInfo recruitmentInfo = board.getRecruitmentInfo(); + assertThat(recruitmentInfo.getRegion()).isEqualTo(updateRegion); } @DisplayName("올바른 기관 식별 값이 주어지면 작성자인지 확인할 수 있다") @@ -131,7 +131,7 @@ private static RecruitBoard createRecruitBoard(UUID centerId) { private static RecruitBoard createRecruitBoard(UUID centerId, LocalDateTime startDateTime, LocalDateTime endDateTime) { - VolunteerInfo volunteerInfo = VolunteerInfo.builder() + RecruitmentInfo recruitmentInfo = RecruitmentInfo.builder() .region("경기") .recruitmentCount(1) .volunteerStartDateTime(startDateTime) @@ -146,7 +146,7 @@ private static RecruitBoard createRecruitBoard(UUID centerId, LocalDateTime star .title("봉사모집제목") .content("봉사모집내용") .imgUrl("https://image.domain.com/links") - .volunteerInfo(volunteerInfo) + .recruitmentInfo(recruitmentInfo) .build(); } } diff --git a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java b/src/test/java/com/somemore/recruitboard/domain/RecruitmentInfoTest.java similarity index 68% rename from src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java rename to src/test/java/com/somemore/recruitboard/domain/RecruitmentInfoTest.java index edf04c9b4..df46af4eb 100644 --- a/src/test/java/com/somemore/recruitboard/domain/VolunteerInfoTest.java +++ b/src/test/java/com/somemore/recruitboard/domain/RecruitmentInfoTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -class VolunteerInfoTest { +class RecruitmentInfoTest { @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글 생성 시 에러가 발생한다") @ParameterizedTest @@ -26,7 +26,7 @@ void createRecruitBoardWithInValidVolunteerTime(long minutesOffset) { // when & then assertThatThrownBy( - () -> createVolunteerInfo(now, endDateTime) + () -> createRecruitmentInfo(now, endDateTime) ).isInstanceOf(IllegalArgumentException.class); } @@ -39,10 +39,10 @@ void testCalculateVolunteerTime() { LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(hours); - VolunteerInfo volunteerInfo = createVolunteerInfo(startDateTime, endDateTime); + RecruitmentInfo recruitmentInfo = createRecruitmentInfo(startDateTime, endDateTime); // when - LocalTime volunteerTime = volunteerInfo.calculateVolunteerTime(); + LocalTime volunteerTime = recruitmentInfo.calculateVolunteerTime(); // then assertThat(volunteerTime).isEqualTo(LocalTime.of(hours, 0)); @@ -50,9 +50,9 @@ void testCalculateVolunteerTime() { @DisplayName("봉사 활동 정보를 업데이트 할 수 있다") @Test - void updateVolunteerInfo() { + void updateRecruitmentInfo() { // given - VolunteerInfo volunteerInfo = createVolunteerInfo(); + RecruitmentInfo recruitmentInfo = createRecruitmentInfo(); Integer count = 2; VolunteerType volunteerType = SAFETY_PREVENTION; @@ -61,29 +61,29 @@ void updateVolunteerInfo() { Boolean admitted = false; // when - volunteerInfo.updateWith(count, volunteerType, startDateTime, + recruitmentInfo.updateWith(count, volunteerType, startDateTime, endDateTime, admitted); // then - assertThat(volunteerInfo.getRecruitmentCount()).isEqualTo(count); - assertThat(volunteerInfo.getVolunteerType()).isEqualTo(volunteerType); - assertThat(volunteerInfo.getVolunteerStartDateTime().compareTo(startDateTime)).isZero(); - assertThat(volunteerInfo.getVolunteerEndDateTime().compareTo(endDateTime)).isZero(); - assertThat(volunteerInfo.getAdmitted()).isEqualTo(admitted); + assertThat(recruitmentInfo.getRecruitmentCount()).isEqualTo(count); + assertThat(recruitmentInfo.getVolunteerType()).isEqualTo(volunteerType); + assertThat(recruitmentInfo.getVolunteerStartDateTime().compareTo(startDateTime)).isZero(); + assertThat(recruitmentInfo.getVolunteerEndDateTime().compareTo(endDateTime)).isZero(); + assertThat(recruitmentInfo.getAdmitted()).isEqualTo(admitted); } @DisplayName("봉사활동 지역 정보를 업데이트할 수 있다") @Test - void updateVolunteerInfoWithRegion() { + void updateRecruitmentInfoWithRegion() { // given - VolunteerInfo volunteerInfo = createVolunteerInfo(); + RecruitmentInfo recruitmentInfo = createRecruitmentInfo(); String updateRegion = "새로운지역"; // when - volunteerInfo.updateWith(updateRegion); + recruitmentInfo.updateWith(updateRegion); // then - assertThat(volunteerInfo.getRegion()).isEqualTo(updateRegion); + assertThat(recruitmentInfo.getRegion()).isEqualTo(updateRegion); } @DisplayName("봉사 종료 시간이 시작 시간과 같거나 빠르면, 봉사 모집글을 업데이트시 에러가 발생한다") @@ -94,19 +94,19 @@ void updateRecruitBoardWithInValidVolunteerTime(long minutesOffset) { LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusMinutes(minutesOffset); - VolunteerInfo volunteerInfo = createVolunteerInfo(); + RecruitmentInfo recruitmentInfo = createRecruitmentInfo(); // when & then assertThatThrownBy( - () -> volunteerInfo.updateWith(3, ADMINISTRATIVE_SUPPORT, startDateTime, endDateTime, + () -> recruitmentInfo.updateWith(3, ADMINISTRATIVE_SUPPORT, startDateTime, endDateTime, false) ).isInstanceOf(IllegalArgumentException.class); } - private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, + private static RecruitmentInfo createRecruitmentInfo(LocalDateTime startDateTime, LocalDateTime endDateTime) { - return VolunteerInfo.builder() + return RecruitmentInfo.builder() .region("경기") .recruitmentCount(1) .volunteerStartDateTime(startDateTime) @@ -116,10 +116,10 @@ private static VolunteerInfo createVolunteerInfo(LocalDateTime startDateTime, .build(); } - private static VolunteerInfo createVolunteerInfo() { + private static RecruitmentInfo createRecruitmentInfo() { LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(1); - return createVolunteerInfo(startDateTime, endDateTime); + return createRecruitmentInfo(startDateTime, endDateTime); } } diff --git a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java index 7d01e4830..bc4383d9a 100644 --- a/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java +++ b/src/test/java/com/somemore/recruitboard/repository/RecruitBoardRepositoryImplTest.java @@ -6,7 +6,7 @@ import com.somemore.IntegrationTestSupport; import com.somemore.recruitboard.domain.RecruitBoard; -import com.somemore.recruitboard.domain.VolunteerInfo; +import com.somemore.recruitboard.domain.RecruitmentInfo; import java.time.LocalDateTime; import java.util.Optional; import java.util.UUID; @@ -54,7 +54,7 @@ private static RecruitBoard createRecruitBoard() { LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(1); - VolunteerInfo volunteerInfo = VolunteerInfo.builder() + RecruitmentInfo recruitmentInfo = RecruitmentInfo.builder() .region("경기") .recruitmentCount(1) .volunteerStartDateTime(startDateTime) @@ -69,7 +69,7 @@ private static RecruitBoard createRecruitBoard() { .title("봉사모집제목") .content("봉사모집내용") .imgUrl("https://image.domain.com/links") - .volunteerInfo(volunteerInfo) + .recruitmentInfo(recruitmentInfo) .build(); } } diff --git a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java index 91466a80f..81b95a277 100644 --- a/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java @@ -11,7 +11,7 @@ import com.somemore.location.domain.Location; import com.somemore.location.repository.LocationRepository; import com.somemore.recruitboard.domain.RecruitBoard; -import com.somemore.recruitboard.domain.VolunteerInfo; +import com.somemore.recruitboard.domain.RecruitmentInfo; import com.somemore.recruitboard.dto.request.RecruitBoardLocationUpdateRequestDto; import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; import com.somemore.recruitboard.repository.RecruitBoardRepository; @@ -84,14 +84,14 @@ void updateRecruitBoard() { assertThat(updatedRecruitBoard.getContent()).isEqualTo(dto.content()); assertThat(updatedRecruitBoard.getImgUrl()).isEqualTo(newImgUrl); - VolunteerInfo volunteerInfo = updatedRecruitBoard.getVolunteerInfo(); - assertThat(volunteerInfo.getRecruitmentCount()).isEqualTo(dto.recruitmentCount()); - assertThat(volunteerInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); - assertThat(volunteerInfo.getAdmitted()).isEqualTo(dto.admitted()); + RecruitmentInfo recruitmentInfo = updatedRecruitBoard.getRecruitmentInfo(); + assertThat(recruitmentInfo.getRecruitmentCount()).isEqualTo(dto.recruitmentCount()); + assertThat(recruitmentInfo.getVolunteerType()).isEqualTo(dto.volunteerType()); + assertThat(recruitmentInfo.getAdmitted()).isEqualTo(dto.admitted()); - assertThat(volunteerInfo.getVolunteerStartDateTime()) + assertThat(recruitmentInfo.getVolunteerStartDateTime()) .isEqualToIgnoringNanos(dto.volunteerStartDateTime()); - assertThat(volunteerInfo.getVolunteerEndDateTime()) + assertThat(recruitmentInfo.getVolunteerEndDateTime()) .isEqualToIgnoringNanos(dto.volunteerEndDateTime()); } @@ -115,7 +115,7 @@ void updateRecruitBoardLocation() { Location updateLocation = locationRepository.findById(recruitBoard.getLocationId()) .orElseThrow(); - assertThat(updateRecruitBoard.getVolunteerInfo().getRegion()).isEqualTo(dto.region()); + assertThat(updateRecruitBoard.getRecruitmentInfo().getRegion()).isEqualTo(dto.region()); assertThat(updateLocation.getAddress()).isEqualTo(dto.address()); assertThat(updateLocation.getLongitude()) .isEqualByComparingTo(dto.longitude()); @@ -161,7 +161,7 @@ private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId, LocalDateTime startDateTime, LocalDateTime endDateTime) { - VolunteerInfo volunteerInfo = VolunteerInfo.builder() + RecruitmentInfo recruitmentInfo = RecruitmentInfo.builder() .region("경기") .recruitmentCount(1) .volunteerStartDateTime(startDateTime) @@ -176,7 +176,7 @@ private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId, .title("봉사모집제목") .content("봉사모집내용") .imgUrl("https://image.domain.com/links") - .volunteerInfo(volunteerInfo) + .recruitmentInfo(recruitmentInfo) .build(); } diff --git a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java index 1423ede5d..d001cc182 100644 --- a/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java +++ b/src/test/java/com/somemore/recruitboard/service/query/RecruitQueryServiceTest.java @@ -6,7 +6,7 @@ import com.somemore.IntegrationTestSupport; import com.somemore.recruitboard.domain.RecruitBoard; -import com.somemore.recruitboard.domain.VolunteerInfo; +import com.somemore.recruitboard.domain.RecruitmentInfo; import com.somemore.recruitboard.repository.RecruitBoardRepository; import java.time.LocalDateTime; import java.util.Optional; @@ -69,7 +69,7 @@ private static RecruitBoard createRecruitBoard() { LocalDateTime startDateTime = createStartDateTime(); LocalDateTime endDateTime = startDateTime.plusHours(1); - VolunteerInfo volunteerInfo = VolunteerInfo.builder() + RecruitmentInfo recruitmentInfo = RecruitmentInfo.builder() .region("경기") .recruitmentCount(1) .volunteerStartDateTime(startDateTime) @@ -84,7 +84,7 @@ private static RecruitBoard createRecruitBoard() { .title("봉사모집제목") .content("봉사모집내용") .imgUrl("https://image.domain.com/links") - .volunteerInfo(volunteerInfo) + .recruitmentInfo(recruitmentInfo) .build(); } } From c02bd42766b962412df66eb0691586bd09d0f07a Mon Sep 17 00:00:00 2001 From: leebs0521 Date: Tue, 26 Nov 2024 11:04:42 +0900 Subject: [PATCH 29/29] =?UTF-8?q?chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../somemore/location/service/command/UpdateLocationService.java | 1 - .../somemore/location/service/query/LocationQueryService.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/com/somemore/location/service/command/UpdateLocationService.java b/src/main/java/com/somemore/location/service/command/UpdateLocationService.java index 63d528385..6c5185034 100644 --- a/src/main/java/com/somemore/location/service/command/UpdateLocationService.java +++ b/src/main/java/com/somemore/location/service/command/UpdateLocationService.java @@ -3,7 +3,6 @@ import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_LOCATION; import com.somemore.global.exception.BadRequestException; -import com.somemore.global.exception.ExceptionMessage; import com.somemore.location.domain.Location; import com.somemore.location.dto.request.LocationUpdateRequestDto; import com.somemore.location.repository.LocationRepository; diff --git a/src/main/java/com/somemore/location/service/query/LocationQueryService.java b/src/main/java/com/somemore/location/service/query/LocationQueryService.java index 5cb2a380b..266811cdf 100644 --- a/src/main/java/com/somemore/location/service/query/LocationQueryService.java +++ b/src/main/java/com/somemore/location/service/query/LocationQueryService.java @@ -1,6 +1,5 @@ package com.somemore.location.service.query; -import com.somemore.global.exception.BadRequestException; import com.somemore.location.domain.Location; import com.somemore.location.repository.LocationRepository; import com.somemore.location.usecase.query.LocationQueryUseCase;