diff --git a/src/main/java/com/somemore/domains/center/controller/PreferItemCommandApiController.java b/src/main/java/com/somemore/center/controller/PreferItemCommandApiController.java similarity index 75% rename from src/main/java/com/somemore/domains/center/controller/PreferItemCommandApiController.java rename to src/main/java/com/somemore/center/controller/PreferItemCommandApiController.java index ca2073164..4df34bb0c 100644 --- a/src/main/java/com/somemore/domains/center/controller/PreferItemCommandApiController.java +++ b/src/main/java/com/somemore/center/controller/PreferItemCommandApiController.java @@ -1,14 +1,15 @@ -package com.somemore.domains.center.controller; +package com.somemore.center.controller; -import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto; -import com.somemore.domains.center.dto.response.PreferItemCreateResponseDto; -import com.somemore.domains.center.usecase.command.CreatePreferItemUseCase; -import com.somemore.domains.center.usecase.command.DeletePreferItemUseCase; -import com.somemore.global.auth.annotation.UserId; +import com.somemore.center.dto.request.PreferItemCreateRequestDto; +import com.somemore.center.dto.response.PreferItemCreateResponseDto; +import com.somemore.center.usecase.CreatePreferItemUseCase; +import com.somemore.center.usecase.DeletePreferItemUseCase; +import com.somemore.global.auth.annotation.RoleId; import com.somemore.global.common.response.ApiResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.DeleteMapping; @@ -18,8 +19,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.UUID; - @RequiredArgsConstructor @RestController @RequestMapping("/api/preferItem") @@ -31,10 +30,11 @@ public class PreferItemCommandApiController { @Secured("ROLE_CENTER") @Operation(summary = "기관 선호물품 등록 API") - @PostMapping() + @PostMapping public ApiResponse registerPreferItem( @Valid @RequestBody PreferItemCreateRequestDto requestDto, - @UserId UUID centerId) { + @RoleId UUID centerId + ) { PreferItemCreateResponseDto responseDto = createPreferItemUseCase.createPreferItem(centerId, requestDto); @@ -45,7 +45,10 @@ public ApiResponse registerPreferItem( @Secured("ROLE_CENTER") @Operation(summary = "기관 선호물품 삭제 API") @DeleteMapping("/{preferItemId}") - public ApiResponse deletePreferItem(@UserId UUID centerId, @PathVariable Long preferItemId) { + public ApiResponse deletePreferItem( + @RoleId UUID centerId, + @PathVariable Long preferItemId + ) { deletePreferItemUseCase.deletePreferItem(centerId, preferItemId); diff --git a/src/main/java/com/somemore/domains/center/domain/PreferItem.java b/src/main/java/com/somemore/center/domain/PreferItem.java similarity index 95% rename from src/main/java/com/somemore/domains/center/domain/PreferItem.java rename to src/main/java/com/somemore/center/domain/PreferItem.java index f2a48e5b5..d13f19ccb 100644 --- a/src/main/java/com/somemore/domains/center/domain/PreferItem.java +++ b/src/main/java/com/somemore/center/domain/PreferItem.java @@ -1,4 +1,4 @@ -package com.somemore.domains.center.domain; +package com.somemore.center.domain; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -6,13 +6,12 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import java.util.UUID; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import java.util.UUID; - @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity diff --git a/src/main/java/com/somemore/domains/center/dto/request/PreferItemCreateRequestDto.java b/src/main/java/com/somemore/center/dto/request/PreferItemCreateRequestDto.java similarity index 86% rename from src/main/java/com/somemore/domains/center/dto/request/PreferItemCreateRequestDto.java rename to src/main/java/com/somemore/center/dto/request/PreferItemCreateRequestDto.java index 9165a1206..a5b3c92f8 100644 --- a/src/main/java/com/somemore/domains/center/dto/request/PreferItemCreateRequestDto.java +++ b/src/main/java/com/somemore/center/dto/request/PreferItemCreateRequestDto.java @@ -1,11 +1,10 @@ -package com.somemore.domains.center.dto.request; +package com.somemore.center.dto.request; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.domains.center.domain.PreferItem; +import com.somemore.center.domain.PreferItem; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; - import java.util.UUID; @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) @@ -16,6 +15,7 @@ public record PreferItemCreateRequestDto( String itemName ) { + public PreferItem toEntity(UUID centerId) { return PreferItem.create(centerId, itemName); } diff --git a/src/main/java/com/somemore/center/dto/response/CenterProfileResponseDto.java b/src/main/java/com/somemore/center/dto/response/CenterProfileResponseDto.java index f8497d355..3f7c3740f 100644 --- a/src/main/java/com/somemore/center/dto/response/CenterProfileResponseDto.java +++ b/src/main/java/com/somemore/center/dto/response/CenterProfileResponseDto.java @@ -3,13 +3,11 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.somemore.center.repository.record.CenterProfileDto; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; import com.somemore.user.repository.usercommonattribute.record.UserProfileDto; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; - import java.util.List; import java.util.UUID; +import lombok.Builder; @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) @Builder @@ -39,7 +37,9 @@ public record CenterProfileResponseDto( @Schema(description = "선호 물품 리스트") List preferItems ) { - public static CenterProfileResponseDto of(CenterProfileDto centerProfileDto, UserProfileDto userProfileDto, List preferItems) { + + public static CenterProfileResponseDto of(CenterProfileDto centerProfileDto, + UserProfileDto userProfileDto, List preferItems) { return CenterProfileResponseDto.builder() .id(centerProfileDto.id()) .userId(centerProfileDto.userId()) diff --git a/src/main/java/com/somemore/domains/center/dto/response/PreferItemCreateResponseDto.java b/src/main/java/com/somemore/center/dto/response/PreferItemCreateResponseDto.java similarity index 78% rename from src/main/java/com/somemore/domains/center/dto/response/PreferItemCreateResponseDto.java rename to src/main/java/com/somemore/center/dto/response/PreferItemCreateResponseDto.java index 32b794e48..66ec10352 100644 --- a/src/main/java/com/somemore/domains/center/dto/response/PreferItemCreateResponseDto.java +++ b/src/main/java/com/somemore/center/dto/response/PreferItemCreateResponseDto.java @@ -1,14 +1,13 @@ -package com.somemore.domains.center.dto.response; +package com.somemore.center.dto.response; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.domains.center.domain.PreferItem; +import com.somemore.center.domain.PreferItem; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; - import java.util.UUID; +import lombok.Builder; -@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +@JsonNaming(SnakeCaseStrategy.class) @Builder public record PreferItemCreateResponseDto( @Schema(description = "선호물품의 ID", example = "111") @@ -18,6 +17,7 @@ public record PreferItemCreateResponseDto( @Schema(description = "선호물품 이름", example = "어린이 도서") String itemName ) { + public static PreferItemCreateResponseDto from(PreferItem preferItem) { return PreferItemCreateResponseDto.builder() .id(preferItem.getId()) diff --git a/src/main/java/com/somemore/center/dto/response/PreferItemResponseDto.java b/src/main/java/com/somemore/center/dto/response/PreferItemResponseDto.java new file mode 100644 index 000000000..8818292f1 --- /dev/null +++ b/src/main/java/com/somemore/center/dto/response/PreferItemResponseDto.java @@ -0,0 +1,28 @@ +package com.somemore.center.dto.response; + +import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.somemore.center.domain.PreferItem; +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.UUID; +import lombok.Builder; + +@JsonNaming(SnakeCaseStrategy.class) +@Builder +public record PreferItemResponseDto( + @Schema(description = "선호 물품 ID", example = "1") + Long id, + @Schema(description = "기관 ID", example = "123e4567-e89b-12d3-a456-426614174000") + UUID centerId, + @Schema(description = "선호 물품명", example = "쌀20kg") + String itemName +) { + + public static PreferItemResponseDto from(PreferItem preferItem) { + return PreferItemResponseDto.builder() + .id(preferItem.getId()) + .centerId(preferItem.getCenterId()) + .itemName(preferItem.getItemName()) + .build(); + } +} diff --git a/src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemJpaRepository.java b/src/main/java/com/somemore/center/repository/preferitem/PreferItemJpaRepository.java similarity index 68% rename from src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemJpaRepository.java rename to src/main/java/com/somemore/center/repository/preferitem/PreferItemJpaRepository.java index 4b3189a61..2545599e3 100644 --- a/src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemJpaRepository.java +++ b/src/main/java/com/somemore/center/repository/preferitem/PreferItemJpaRepository.java @@ -1,11 +1,11 @@ -package com.somemore.domains.center.repository.preferitem; - -import com.somemore.domains.center.domain.PreferItem; -import org.springframework.data.jpa.repository.JpaRepository; +package com.somemore.center.repository.preferitem; +import com.somemore.center.domain.PreferItem; import java.util.List; import java.util.UUID; +import org.springframework.data.jpa.repository.JpaRepository; public interface PreferItemJpaRepository extends JpaRepository { + List findByCenterId(UUID centerId); } diff --git a/src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemRepository.java b/src/main/java/com/somemore/center/repository/preferitem/PreferItemRepository.java similarity index 76% rename from src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemRepository.java rename to src/main/java/com/somemore/center/repository/preferitem/PreferItemRepository.java index 9a0e88427..d8e161100 100644 --- a/src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemRepository.java +++ b/src/main/java/com/somemore/center/repository/preferitem/PreferItemRepository.java @@ -1,14 +1,14 @@ -package com.somemore.domains.center.repository.preferitem; - -import com.somemore.domains.center.domain.PreferItem; -import org.springframework.stereotype.Repository; +package com.somemore.center.repository.preferitem; +import com.somemore.center.domain.PreferItem; import java.util.List; import java.util.Optional; import java.util.UUID; +import org.springframework.stereotype.Repository; @Repository public interface PreferItemRepository { + void save(PreferItem preferItem); void deleteById(Long preferItemId); diff --git a/src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemRepositoryImpl.java b/src/main/java/com/somemore/center/repository/preferitem/PreferItemRepositoryImpl.java similarity index 88% rename from src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemRepositoryImpl.java rename to src/main/java/com/somemore/center/repository/preferitem/PreferItemRepositoryImpl.java index e22f1f68d..e4be4519c 100644 --- a/src/main/java/com/somemore/domains/center/repository/preferitem/PreferItemRepositoryImpl.java +++ b/src/main/java/com/somemore/center/repository/preferitem/PreferItemRepositoryImpl.java @@ -1,12 +1,11 @@ -package com.somemore.domains.center.repository.preferitem; - -import com.somemore.domains.center.domain.PreferItem; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; +package com.somemore.center.repository.preferitem; +import com.somemore.center.domain.PreferItem; import java.util.List; import java.util.Optional; import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; @RequiredArgsConstructor @Repository diff --git a/src/main/java/com/somemore/center/service/CreatePreferItemService.java b/src/main/java/com/somemore/center/service/CreatePreferItemService.java new file mode 100644 index 000000000..7010323bd --- /dev/null +++ b/src/main/java/com/somemore/center/service/CreatePreferItemService.java @@ -0,0 +1,35 @@ +package com.somemore.center.service; + +import com.somemore.center.domain.PreferItem; +import com.somemore.center.dto.request.PreferItemCreateRequestDto; +import com.somemore.center.dto.response.PreferItemCreateResponseDto; +import com.somemore.center.repository.preferitem.PreferItemRepository; +import com.somemore.center.usecase.CreatePreferItemUseCase; +import com.somemore.center.usecase.NEWCenterQueryUseCase; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@RequiredArgsConstructor +@Transactional +@Service +public class CreatePreferItemService implements CreatePreferItemUseCase { + + private final NEWCenterQueryUseCase centerQueryUseCase; + private final PreferItemRepository preferItemRepository; + + @Override + public PreferItemCreateResponseDto createPreferItem(UUID centerId, + PreferItemCreateRequestDto requestDto) { + + centerQueryUseCase.validateCenterExists(centerId); + + PreferItem preferItem = requestDto.toEntity(centerId); + + preferItemRepository.save(preferItem); + + return PreferItemCreateResponseDto.from(preferItem); + } + +} diff --git a/src/main/java/com/somemore/domains/center/service/command/DeletePreferItemService.java b/src/main/java/com/somemore/center/service/DeletePreferItemService.java similarity index 70% rename from src/main/java/com/somemore/domains/center/service/command/DeletePreferItemService.java rename to src/main/java/com/somemore/center/service/DeletePreferItemService.java index 7d19f6b7e..4083f9cb1 100644 --- a/src/main/java/com/somemore/domains/center/service/command/DeletePreferItemService.java +++ b/src/main/java/com/somemore/center/service/DeletePreferItemService.java @@ -1,17 +1,19 @@ -package com.somemore.domains.center.service.command; +package com.somemore.center.service; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; -import com.somemore.domains.center.usecase.command.DeletePreferItemUseCase; +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_PREFER_ITEM; +import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_PREFER_ITEM; + +import com.somemore.center.domain.PreferItem; +import com.somemore.center.repository.preferitem.PreferItemRepository; +import com.somemore.center.usecase.DeletePreferItemUseCase; import com.somemore.global.exception.BadRequestException; +import com.somemore.global.exception.NoSuchElementException; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.UUID; - -import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_PREFER_ITEM; -import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_PREFER_ITEM; - +@Transactional @RequiredArgsConstructor @Service public class DeletePreferItemService implements DeletePreferItemUseCase { @@ -21,7 +23,7 @@ public class DeletePreferItemService implements DeletePreferItemUseCase { @Override public void deletePreferItem(UUID centerId, Long preferItemId) { PreferItem preferItem = preferItemRepository.findById(preferItemId) - .orElseThrow(() -> new BadRequestException(NOT_EXISTS_PREFER_ITEM)); + .orElseThrow(() -> new NoSuchElementException(NOT_EXISTS_PREFER_ITEM)); validatePreferItemOwnership(centerId, preferItem); diff --git a/src/main/java/com/somemore/center/service/NEWCenterQueryService.java b/src/main/java/com/somemore/center/service/NEWCenterQueryService.java index 72dafe5d4..daeaa3bed 100644 --- a/src/main/java/com/somemore/center/service/NEWCenterQueryService.java +++ b/src/main/java/com/somemore/center/service/NEWCenterQueryService.java @@ -4,12 +4,12 @@ import com.somemore.center.domain.NEWCenter; import com.somemore.center.dto.response.CenterProfileResponseDto; +import com.somemore.center.dto.response.PreferItemResponseDto; import com.somemore.center.repository.NEWCenterRepository; import com.somemore.center.repository.record.CenterOverviewInfo; import com.somemore.center.repository.record.CenterProfileDto; import com.somemore.center.usecase.NEWCenterQueryUseCase; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; -import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase; +import com.somemore.center.usecase.PreferItemQueryUseCase; import com.somemore.global.exception.ExceptionMessage; import com.somemore.global.exception.NoSuchElementException; import com.somemore.user.repository.usercommonattribute.record.UserProfileDto; diff --git a/src/main/java/com/somemore/domains/center/service/query/PreferItemQueryService.java b/src/main/java/com/somemore/center/service/PreferItemQueryService.java similarity index 73% rename from src/main/java/com/somemore/domains/center/service/query/PreferItemQueryService.java rename to src/main/java/com/somemore/center/service/PreferItemQueryService.java index e968ef097..803da6323 100644 --- a/src/main/java/com/somemore/domains/center/service/query/PreferItemQueryService.java +++ b/src/main/java/com/somemore/center/service/PreferItemQueryService.java @@ -1,16 +1,15 @@ -package com.somemore.domains.center.service.query; +package com.somemore.center.service; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; -import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase; +import com.somemore.center.domain.PreferItem; +import com.somemore.center.dto.response.PreferItemResponseDto; +import com.somemore.center.repository.preferitem.PreferItemRepository; +import com.somemore.center.usecase.PreferItemQueryUseCase; +import java.util.List; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.UUID; - @RequiredArgsConstructor @Transactional(readOnly = true) @Service @@ -30,7 +29,8 @@ public List getPreferItemsByCenterId(UUID centerId) { return preferItemRepository.findByCenterId(centerId); } - private static List preferItemConvertToDtos(List preferItems) { + private static List preferItemConvertToDtos( + List preferItems) { return preferItems.stream() .map(PreferItemResponseDto::from) .toList(); diff --git a/src/main/java/com/somemore/center/usecase/CreatePreferItemUseCase.java b/src/main/java/com/somemore/center/usecase/CreatePreferItemUseCase.java new file mode 100644 index 000000000..b9f3ff4f9 --- /dev/null +++ b/src/main/java/com/somemore/center/usecase/CreatePreferItemUseCase.java @@ -0,0 +1,11 @@ +package com.somemore.center.usecase; + +import com.somemore.center.dto.request.PreferItemCreateRequestDto; +import com.somemore.center.dto.response.PreferItemCreateResponseDto; +import java.util.UUID; + +public interface CreatePreferItemUseCase { + + PreferItemCreateResponseDto createPreferItem(UUID centerId, + PreferItemCreateRequestDto requestDto); +} diff --git a/src/main/java/com/somemore/domains/center/usecase/command/DeletePreferItemUseCase.java b/src/main/java/com/somemore/center/usecase/DeletePreferItemUseCase.java similarity index 71% rename from src/main/java/com/somemore/domains/center/usecase/command/DeletePreferItemUseCase.java rename to src/main/java/com/somemore/center/usecase/DeletePreferItemUseCase.java index 9d9e8916a..cf708bdb5 100644 --- a/src/main/java/com/somemore/domains/center/usecase/command/DeletePreferItemUseCase.java +++ b/src/main/java/com/somemore/center/usecase/DeletePreferItemUseCase.java @@ -1,7 +1,8 @@ -package com.somemore.domains.center.usecase.command; +package com.somemore.center.usecase; import java.util.UUID; public interface DeletePreferItemUseCase { + void deletePreferItem(UUID centerId, Long preferItemId); } diff --git a/src/main/java/com/somemore/domains/center/usecase/query/PreferItemQueryUseCase.java b/src/main/java/com/somemore/center/usecase/PreferItemQueryUseCase.java similarity index 56% rename from src/main/java/com/somemore/domains/center/usecase/query/PreferItemQueryUseCase.java rename to src/main/java/com/somemore/center/usecase/PreferItemQueryUseCase.java index e38770f14..cf982dcb0 100644 --- a/src/main/java/com/somemore/domains/center/usecase/query/PreferItemQueryUseCase.java +++ b/src/main/java/com/somemore/center/usecase/PreferItemQueryUseCase.java @@ -1,12 +1,12 @@ -package com.somemore.domains.center.usecase.query; - -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; +package com.somemore.center.usecase; +import com.somemore.center.domain.PreferItem; +import com.somemore.center.dto.response.PreferItemResponseDto; import java.util.List; import java.util.UUID; public interface PreferItemQueryUseCase { + List getPreferItemDtosByCenterId(UUID centerId); List getPreferItemsByCenterId(UUID centerId); diff --git a/src/main/java/com/somemore/domains/center/usecase/command/UpdateCenterProfileUseCase.java b/src/main/java/com/somemore/center/usecase/UpdateCenterProfileUseCase.java similarity index 70% rename from src/main/java/com/somemore/domains/center/usecase/command/UpdateCenterProfileUseCase.java rename to src/main/java/com/somemore/center/usecase/UpdateCenterProfileUseCase.java index 8f90413d5..013894f3a 100644 --- a/src/main/java/com/somemore/domains/center/usecase/command/UpdateCenterProfileUseCase.java +++ b/src/main/java/com/somemore/center/usecase/UpdateCenterProfileUseCase.java @@ -1,9 +1,10 @@ -package com.somemore.domains.center.usecase.command; +package com.somemore.center.usecase; import com.somemore.domains.center.dto.request.CenterProfileUpdateRequestDto; - import java.util.UUID; public interface UpdateCenterProfileUseCase { - void updateCenterProfile(UUID centerId, CenterProfileUpdateRequestDto requestDto, String imgUrl); + + void updateCenterProfile(UUID centerId, CenterProfileUpdateRequestDto requestDto, + String imgUrl); } diff --git a/src/main/java/com/somemore/domains/center/controller/CenterProfileCommandApiController.java b/src/main/java/com/somemore/domains/center/controller/CenterProfileCommandApiController.java index 3201274a7..0bf5f3495 100644 --- a/src/main/java/com/somemore/domains/center/controller/CenterProfileCommandApiController.java +++ b/src/main/java/com/somemore/domains/center/controller/CenterProfileCommandApiController.java @@ -1,7 +1,9 @@ package com.somemore.domains.center.controller; +import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; + +import com.somemore.center.usecase.UpdateCenterProfileUseCase; import com.somemore.domains.center.dto.request.CenterProfileUpdateRequestDto; -import com.somemore.domains.center.usecase.command.UpdateCenterProfileUseCase; import com.somemore.global.auth.annotation.CurrentUser; import com.somemore.global.common.response.ApiResponse; import com.somemore.global.imageupload.dto.ImageUploadRequestDto; @@ -9,6 +11,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.PutMapping; @@ -17,10 +20,6 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; -import java.util.UUID; - -import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; - @Tag(name = "Center Command API", description = "센터 프로필 수정 API") @RequiredArgsConstructor @RequestMapping("/api/center/profile") diff --git a/src/main/java/com/somemore/domains/center/dto/response/CenterProfileResponseDto.java b/src/main/java/com/somemore/domains/center/dto/response/CenterProfileResponseDto.java index 3c2b34b5c..d2605e033 100644 --- a/src/main/java/com/somemore/domains/center/dto/response/CenterProfileResponseDto.java +++ b/src/main/java/com/somemore/domains/center/dto/response/CenterProfileResponseDto.java @@ -2,12 +2,12 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; +import com.somemore.center.dto.response.PreferItemResponseDto; import com.somemore.domains.center.domain.Center; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; - import java.util.List; import java.util.UUID; +import lombok.Builder; @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) @Builder @@ -33,7 +33,9 @@ public record CenterProfileResponseDto( @Schema(description = "선호 물품 리스트") List preferItems ) { - public static CenterProfileResponseDto of(Center center, List preferItemDtos) { + + public static CenterProfileResponseDto of(Center center, + List preferItemDtos) { return CenterProfileResponseDto.builder() .centerId(center.getId()) .name(center.getName()) diff --git a/src/main/java/com/somemore/domains/center/dto/response/PreferItemResponseDto.java b/src/main/java/com/somemore/domains/center/dto/response/PreferItemResponseDto.java deleted file mode 100644 index 18327394e..000000000 --- a/src/main/java/com/somemore/domains/center/dto/response/PreferItemResponseDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.somemore.domains.center.dto.response; - -import com.somemore.domains.center.domain.PreferItem; -import lombok.Builder; - -import java.util.UUID; - -@Builder -public record PreferItemResponseDto( - Long id, - UUID centerId, - String itemName -) { - public static PreferItemResponseDto from(PreferItem preferItem) { - return PreferItemResponseDto.builder() - .id(preferItem.getId()) - .centerId(preferItem.getCenterId()) - .itemName(preferItem.getItemName()) - .build(); - } -} diff --git a/src/main/java/com/somemore/domains/center/service/command/CreatePreferItemService.java b/src/main/java/com/somemore/domains/center/service/command/CreatePreferItemService.java deleted file mode 100644 index 59afab418..000000000 --- a/src/main/java/com/somemore/domains/center/service/command/CreatePreferItemService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.somemore.domains.center.service.command; - -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto; -import com.somemore.domains.center.dto.response.PreferItemCreateResponseDto; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; -import com.somemore.domains.center.usecase.command.CreatePreferItemUseCase; -import com.somemore.domains.center.usecase.query.CenterQueryUseCase; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.UUID; - -@RequiredArgsConstructor -@Transactional -@Service -public class CreatePreferItemService implements CreatePreferItemUseCase { - - private final CenterQueryUseCase centerQueryUseCase; - private final PreferItemRepository preferItemRepository; - - @Override - public PreferItemCreateResponseDto createPreferItem(UUID userId, PreferItemCreateRequestDto requestDto) { - - centerQueryUseCase.validateCenterExists(userId); - - PreferItem preferItem = requestDto.toEntity(userId); - - preferItemRepository.save(preferItem); - - return PreferItemCreateResponseDto.from(preferItem); - } - -} diff --git a/src/main/java/com/somemore/domains/center/service/command/UpdateCenterProfileService.java b/src/main/java/com/somemore/domains/center/service/command/UpdateCenterProfileService.java index 93fc2d43f..92d6eeb13 100644 --- a/src/main/java/com/somemore/domains/center/service/command/UpdateCenterProfileService.java +++ b/src/main/java/com/somemore/domains/center/service/command/UpdateCenterProfileService.java @@ -1,18 +1,17 @@ package com.somemore.domains.center.service.command; +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER; + +import com.somemore.center.usecase.UpdateCenterProfileUseCase; import com.somemore.domains.center.domain.Center; import com.somemore.domains.center.dto.request.CenterProfileUpdateRequestDto; import com.somemore.domains.center.repository.center.CenterRepository; -import com.somemore.domains.center.usecase.command.UpdateCenterProfileUseCase; import com.somemore.global.exception.BadRequestException; +import java.util.UUID; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.UUID; - -import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER; - @RequiredArgsConstructor @Transactional @Service @@ -21,7 +20,8 @@ public class UpdateCenterProfileService implements UpdateCenterProfileUseCase { private final CenterRepository centerRepository; @Override - public void updateCenterProfile(UUID centerId, CenterProfileUpdateRequestDto requestDto, String imgUrl) { + public void updateCenterProfile(UUID centerId, CenterProfileUpdateRequestDto requestDto, + String imgUrl) { Center center = centerRepository.findCenterById(centerId) .orElseThrow(() -> new BadRequestException(NOT_EXISTS_CENTER)); diff --git a/src/main/java/com/somemore/domains/center/usecase/command/CreatePreferItemUseCase.java b/src/main/java/com/somemore/domains/center/usecase/command/CreatePreferItemUseCase.java deleted file mode 100644 index 1854b5b5d..000000000 --- a/src/main/java/com/somemore/domains/center/usecase/command/CreatePreferItemUseCase.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.somemore.domains.center.usecase.command; - -import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto; -import com.somemore.domains.center.dto.response.PreferItemCreateResponseDto; - -import java.util.UUID; - -public interface CreatePreferItemUseCase { - - PreferItemCreateResponseDto createPreferItem(UUID userId, PreferItemCreateRequestDto requestDto); -} diff --git a/src/main/java/com/somemore/domains/volunteerrecord/dto/response/VolunteerRankingResponseDto.java b/src/main/java/com/somemore/domains/volunteerrecord/dto/response/VolunteerRankingResponseDto.java index 8c05e5580..4a832c656 100644 --- a/src/main/java/com/somemore/domains/volunteerrecord/dto/response/VolunteerRankingResponseDto.java +++ b/src/main/java/com/somemore/domains/volunteerrecord/dto/response/VolunteerRankingResponseDto.java @@ -1,23 +1,22 @@ package com.somemore.domains.volunteerrecord.dto.response; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; +import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; -import lombok.Builder; - import java.util.List; +import lombok.Builder; -@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) +@JsonNaming(SnakeCaseStrategy.class) @Builder public record VolunteerRankingResponseDto( List volunteerTotalRankingResponse, List volunteerMonthlyRankingResponse, List volunteerWeeklyRankingResponse ) { + public static VolunteerRankingResponseDto of( List totalRanking, List monthlyRanking, - List weeklyRanking){ + List weeklyRanking) { return VolunteerRankingResponseDto.builder() .volunteerTotalRankingResponse(totalRanking) diff --git a/src/test/java/com/somemore/domains/center/controller/PreferItemCommandApiControllerTest.java b/src/test/java/com/somemore/center/controller/PreferItemCommandApiControllerTest.java similarity index 94% rename from src/test/java/com/somemore/domains/center/controller/PreferItemCommandApiControllerTest.java rename to src/test/java/com/somemore/center/controller/PreferItemCommandApiControllerTest.java index 1771fbf39..7f2b9b620 100644 --- a/src/test/java/com/somemore/domains/center/controller/PreferItemCommandApiControllerTest.java +++ b/src/test/java/com/somemore/center/controller/PreferItemCommandApiControllerTest.java @@ -1,4 +1,4 @@ -package com.somemore.domains.center.controller; +package com.somemore.center.controller; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.doThrow; @@ -9,10 +9,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto; -import com.somemore.domains.center.dto.response.PreferItemCreateResponseDto; -import com.somemore.domains.center.usecase.command.CreatePreferItemUseCase; -import com.somemore.domains.center.usecase.command.DeletePreferItemUseCase; +import com.somemore.center.dto.request.PreferItemCreateRequestDto; +import com.somemore.center.dto.response.PreferItemCreateResponseDto; +import com.somemore.center.usecase.CreatePreferItemUseCase; +import com.somemore.center.usecase.DeletePreferItemUseCase; import com.somemore.global.exception.BadRequestException; import com.somemore.support.ControllerTestSupport; import com.somemore.support.annotation.MockUser; diff --git a/src/test/java/com/somemore/domains/center/repository/PreferItemRepositoryTest.java b/src/test/java/com/somemore/center/repository/PreferItemRepositoryTest.java similarity index 84% rename from src/test/java/com/somemore/domains/center/repository/PreferItemRepositoryTest.java rename to src/test/java/com/somemore/center/repository/PreferItemRepositoryTest.java index 98f6bf0c2..7a7f3196b 100644 --- a/src/test/java/com/somemore/domains/center/repository/PreferItemRepositoryTest.java +++ b/src/test/java/com/somemore/center/repository/PreferItemRepositoryTest.java @@ -1,19 +1,18 @@ -package com.somemore.domains.center.repository; +package com.somemore.center.repository; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.repository.preferitem.PreferItemJpaRepository; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.tuple; + +import com.somemore.center.domain.PreferItem; +import com.somemore.center.repository.preferitem.PreferItemJpaRepository; +import com.somemore.center.repository.preferitem.PreferItemRepository; import com.somemore.support.IntegrationTestSupport; +import java.util.List; +import java.util.UUID; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import java.util.List; -import java.util.UUID; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.tuple; - class PreferItemRepositoryTest extends IntegrationTestSupport { @Autowired @@ -39,7 +38,8 @@ void findByCenterId() { preferItemJpaRepository.saveAll(List.of(preferItem, preferItem1, preferItem2, preferItem3)); //when - List preferItems = preferItemRepository.findByCenterId(UUID.fromString("1a1a1a1a-1a1a-1a1a-1a1a-1a1a1a1a1a2")); + List preferItems = preferItemRepository.findByCenterId( + UUID.fromString("1a1a1a1a-1a1a-1a1a-1a1a-1a1a1a1a1a2")); //then assertThat(preferItems).hasSize(1) diff --git a/src/test/java/com/somemore/center/service/CreatePreferItemServiceTest.java b/src/test/java/com/somemore/center/service/CreatePreferItemServiceTest.java new file mode 100644 index 000000000..02d4f5528 --- /dev/null +++ b/src/test/java/com/somemore/center/service/CreatePreferItemServiceTest.java @@ -0,0 +1,76 @@ +package com.somemore.center.service; + +import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_CENTER; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.somemore.center.domain.NEWCenter; +import com.somemore.center.domain.PreferItem; +import com.somemore.center.dto.request.PreferItemCreateRequestDto; +import com.somemore.center.dto.response.PreferItemCreateResponseDto; +import com.somemore.center.repository.NEWCenterRepository; +import com.somemore.center.repository.preferitem.PreferItemRepository; +import com.somemore.global.exception.NoSuchElementException; +import com.somemore.support.IntegrationTestSupport; +import jakarta.transaction.Transactional; +import java.util.Optional; +import java.util.UUID; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +@Transactional +class CreatePreferItemServiceTest extends IntegrationTestSupport { + + @Autowired + private CreatePreferItemService createPreferItemService; + + @Autowired + private PreferItemRepository preferItemRepository; + + @Autowired + private NEWCenterRepository centerRepository; + + @DisplayName("기관 아이디와 선호물품 이름을 받아 선호물품을 생성한다.") + @Test + void createPreferItem() { + // given + NEWCenter center = createCenter(); + centerRepository.save(center); + String itemName = "어린이 도서"; + + PreferItemCreateRequestDto requestDto = new PreferItemCreateRequestDto(itemName); + + // when + PreferItemCreateResponseDto dto = createPreferItemService.createPreferItem( + center.getId(), requestDto); + + // then + Optional findItem = preferItemRepository.findById(dto.id()); + assertThat(findItem).isPresent(); + assertThat(findItem.get().getItemName()).isEqualTo(itemName); + } + + @DisplayName("존재하지 않는 기관 아이디로 선호물품을 등록하려고 하면 예외를 발생시킨다.") + @Test + void createPreferItemThrowsExceptionWhenCenterDoesNotExist() { + // given + UUID invalidCenterId = UUID.randomUUID(); + String itemName = "어린이 도서"; + + PreferItemCreateRequestDto requestDto = new PreferItemCreateRequestDto( + itemName + ); + + // when & then + assertThatThrownBy( + () -> createPreferItemService.createPreferItem(invalidCenterId, requestDto)) + .isInstanceOf(NoSuchElementException.class) + .hasMessageContaining(NOT_EXISTS_CENTER.getMessage()); + } + + private NEWCenter createCenter() { + return NEWCenter.createDefault(UUID.randomUUID()); + } + +} diff --git a/src/test/java/com/somemore/center/service/DeletePreferItemServiceTest.java b/src/test/java/com/somemore/center/service/DeletePreferItemServiceTest.java new file mode 100644 index 000000000..70ada77df --- /dev/null +++ b/src/test/java/com/somemore/center/service/DeletePreferItemServiceTest.java @@ -0,0 +1,70 @@ +package com.somemore.center.service; + +import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_PREFER_ITEM; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import com.somemore.center.domain.PreferItem; +import com.somemore.center.repository.preferitem.PreferItemRepository; +import com.somemore.global.exception.BadRequestException; +import com.somemore.support.IntegrationTestSupport; +import java.util.Optional; +import java.util.UUID; +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; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +class DeletePreferItemServiceTest extends IntegrationTestSupport { + + @Autowired + private DeletePreferItemService deletePreferItemService; + + @Autowired + private PreferItemRepository preferItemRepository; + + private UUID centerId; + private PreferItem preferItem; + + @BeforeEach + void setUp() { + centerId = UUID.randomUUID(); + preferItem = createPreferItem(centerId); + preferItemRepository.save(preferItem); + } + + @DisplayName("기관은 자신의 선호 물품을 삭제할 수 있다.") + @Test + void deletePreferItem() { + //given + Long id = preferItem.getId(); + + //when + deletePreferItemService.deletePreferItem(centerId, id); + + //then + Optional deletedItem = preferItemRepository.findById(id); + assertThat(deletedItem).isEmpty(); + } + + @DisplayName("선호 물품을 등록한 기관이 아니라면 선호 물품을 삭제할 수 없다") + @Test + void deletePreferItemUnauthorized() { + //given + Long id = preferItem.getId(); + UUID wrongCenterId = UUID.randomUUID(); + + // when + // then + assertThatThrownBy( + () -> deletePreferItemService.deletePreferItem(wrongCenterId, id)) + .isInstanceOf(BadRequestException.class) + .hasMessage(UNAUTHORIZED_PREFER_ITEM.getMessage()); + } + + private PreferItem createPreferItem(UUID centerId) { + return PreferItem.create(centerId, "선호 물품"); + } +} diff --git a/src/test/java/com/somemore/center/service/NEWCenterQueryServiceTest.java b/src/test/java/com/somemore/center/service/NEWCenterQueryServiceTest.java index 25b4fc80a..1f3bea6e3 100644 --- a/src/test/java/com/somemore/center/service/NEWCenterQueryServiceTest.java +++ b/src/test/java/com/somemore/center/service/NEWCenterQueryServiceTest.java @@ -7,12 +7,12 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import com.somemore.center.domain.NEWCenter; +import com.somemore.center.domain.PreferItem; import com.somemore.center.dto.response.CenterProfileResponseDto; +import com.somemore.center.dto.response.PreferItemResponseDto; import com.somemore.center.repository.NEWCenterRepository; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; -import com.somemore.domains.center.repository.preferitem.PreferItemJpaRepository; -import com.somemore.domains.center.usecase.query.PreferItemQueryUseCase; +import com.somemore.center.repository.preferitem.PreferItemJpaRepository; +import com.somemore.center.usecase.PreferItemQueryUseCase; import com.somemore.global.exception.NoSuchElementException; import com.somemore.support.IntegrationTestSupport; import com.somemore.user.domain.UserCommonAttribute; diff --git a/src/test/java/com/somemore/domains/center/service/query/PreferItemQueryServiceTest.java b/src/test/java/com/somemore/center/service/PreferItemQueryServiceTest.java similarity index 85% rename from src/test/java/com/somemore/domains/center/service/query/PreferItemQueryServiceTest.java rename to src/test/java/com/somemore/center/service/PreferItemQueryServiceTest.java index 16634b98b..02af61786 100644 --- a/src/test/java/com/somemore/domains/center/service/query/PreferItemQueryServiceTest.java +++ b/src/test/java/com/somemore/center/service/PreferItemQueryServiceTest.java @@ -1,20 +1,21 @@ -package com.somemore.domains.center.service.query; +package com.somemore.center.service; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.response.PreferItemResponseDto; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.somemore.center.domain.PreferItem; +import com.somemore.center.dto.response.PreferItemResponseDto; +import com.somemore.center.repository.preferitem.PreferItemRepository; +import java.util.List; +import java.util.UUID; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.util.List; -import java.util.UUID; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class PreferItemQueryServiceTest { @@ -35,7 +36,8 @@ void getPreferItemDtosByCenterId() { when(preferItemRepository.findByCenterId(centerId)).thenReturn(preferItems); // When - List result = preferItemQueryService.getPreferItemDtosByCenterId(centerId); + List result = preferItemQueryService.getPreferItemDtosByCenterId( + centerId); // Then assertThat(result).hasSize(2); @@ -72,4 +74,4 @@ private PreferItem createPreferItem(UUID centerId, String itemName) { .itemName(itemName) .build(); } -} \ No newline at end of file +} diff --git a/src/test/java/com/somemore/domains/center/controller/CenterProfileCommandApiControllerTest.java b/src/test/java/com/somemore/domains/center/controller/CenterProfileCommandApiControllerTest.java index c2886d8fa..e826c8133 100644 --- a/src/test/java/com/somemore/domains/center/controller/CenterProfileCommandApiControllerTest.java +++ b/src/test/java/com/somemore/domains/center/controller/CenterProfileCommandApiControllerTest.java @@ -9,8 +9,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.somemore.center.usecase.UpdateCenterProfileUseCase; import com.somemore.domains.center.dto.request.CenterProfileUpdateRequestDto; -import com.somemore.domains.center.usecase.command.UpdateCenterProfileUseCase; import com.somemore.global.imageupload.usecase.ImageUploadUseCase; import com.somemore.support.ControllerTestSupport; import com.somemore.support.annotation.WithMockCustomUser; diff --git a/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java b/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java deleted file mode 100644 index fb949e9b0..000000000 --- a/src/test/java/com/somemore/domains/center/service/command/CreatePreferItemServiceTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.somemore.domains.center.service.command; - -import com.somemore.domains.center.domain.Center; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto; -import com.somemore.domains.center.repository.center.CenterRepository; -import com.somemore.domains.center.repository.preferitem.PreferItemJpaRepository; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; -import com.somemore.global.exception.BadRequestException; -import com.somemore.support.IntegrationTestSupport; -import jakarta.transaction.Transactional; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.UUID; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -@Transactional -class CreatePreferItemServiceTest extends IntegrationTestSupport { - - @Autowired - private CreatePreferItemService createPreferItemService; - - @Autowired - private PreferItemRepository preferItemRepository; - - @Autowired - private PreferItemJpaRepository preferItemJpaRepository; - - @Autowired - private CenterRepository centerRepository; - - @DisplayName("기관 아이디와 선호물품 이름을 받아 선호물품을 생성한다.") - @Test - void createPreferItem() { - //given - Center center = createCenter(); - centerRepository.save(center); - String itemName = "어린이 도서"; - - PreferItemCreateRequestDto requestDto = new PreferItemCreateRequestDto( - itemName - ); - - //when - createPreferItemService.createPreferItem(center.getId(), requestDto); - - //then - PreferItem savedItem = preferItemJpaRepository.findAll().stream() - .filter(item -> item.getCenterId().equals(center.getId()) - && item.getItemName().equals(itemName)) - .findFirst() - .orElseThrow(() -> new AssertionError("저장된 선호물품을 찾을 수 없습니다.")); - - assertThat(savedItem.getCenterId()).isEqualTo(center.getId()); - assertThat(savedItem.getItemName()).isEqualTo(itemName); - } - - @DisplayName("존재하지 않는 기관 아이디로 선호물품을 등록하려고 하면 예외를 발생시킨다.") - @Test - void createPreferItemThrowsExceptionWhenCenterDoesNotExist() { - // given - UUID invalidCenterId = UUID.randomUUID(); - String itemName = "어린이 도서"; - - PreferItemCreateRequestDto requestDto = new PreferItemCreateRequestDto( - itemName - ); - - // when & then - assertThatThrownBy(() -> createPreferItemService.createPreferItem(invalidCenterId, requestDto)) - .isInstanceOf(BadRequestException.class) - .hasMessageContaining("존재하지 않는 기관입니다."); - } - - private Center createCenter() { - Center center = Center.create( - "기본 기관 이름", - "010-1234-5678", - "http://example.com/image.jpg", - "기관 소개 내용", - "http://example.com" - ); - - centerRepository.save(center); - - return center; - } - -} diff --git a/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java b/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java deleted file mode 100644 index 7148f09e0..000000000 --- a/src/test/java/com/somemore/domains/center/service/command/DeletePreferItemServiceTest.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.somemore.domains.center.service.command; - -import com.somemore.domains.center.domain.Center; -import com.somemore.domains.center.domain.PreferItem; -import com.somemore.domains.center.dto.request.PreferItemCreateRequestDto; -import com.somemore.domains.center.repository.center.CenterRepository; -import com.somemore.domains.center.repository.preferitem.PreferItemJpaRepository; -import com.somemore.domains.center.repository.preferitem.PreferItemRepository; -import com.somemore.global.exception.BadRequestException; -import com.somemore.support.IntegrationTestSupport; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import java.util.List; - -import static com.somemore.global.exception.ExceptionMessage.UNAUTHORIZED_PREFER_ITEM; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.BDDAssertions.catchThrowable; - -class DeletePreferItemServiceTest extends IntegrationTestSupport { - - @Autowired - private CreatePreferItemService createPreferItemService; - - @Autowired - private DeletePreferItemService deletePreferItemService; - - @Autowired - private PreferItemRepository preferItemRepository; - - @Autowired - private PreferItemJpaRepository preferItemJpaRepository; - - @Autowired - private CenterRepository centerRepository; - - @DisplayName("기관은 자신의 선호 물품을 삭제할 수 있다.") - @Test - void deletePreferItem() { - //given - Center center = createCenter(); - String itemName = "어린이 도서"; - PreferItemCreateRequestDto createRequestDto = new PreferItemCreateRequestDto(itemName); - createPreferItemService.createPreferItem(center.getId(), createRequestDto); - - PreferItem savedItem = preferItemJpaRepository.findAll().stream() - .filter(item -> item.getCenterId().equals(center.getId()) - && item.getItemName().equals(itemName)) - .findFirst() - .orElseThrow(() -> new AssertionError("저장된 선호물품을 찾을 수 없습니다.")); - - //when - deletePreferItemService.deletePreferItem(center.getId(), savedItem.getId()); - - //then - List remainingItems = preferItemJpaRepository.findAll().stream() - .filter(item -> item.getCenterId().equals(center.getId())) - .toList(); - - assertThat(remainingItems).isEmpty(); - } - - @DisplayName("선호 물품을 등록한 기관이 아니라면 선호 물품을 삭제할 수 없다") - @Test - void deletePreferItemUnauthorized() { - //given - Center center1 = createCenter(); - Center center2 = createCenter(); - String itemName = "어린이 도서"; - PreferItemCreateRequestDto createRequestDto = new PreferItemCreateRequestDto(itemName); - createPreferItemService.createPreferItem(center1.getId(), createRequestDto); - - PreferItem savedItem = preferItemJpaRepository.findAll().stream() - .filter(item -> item.getCenterId().equals(center1.getId()) - && item.getItemName().equals(itemName)) - .findFirst() - .orElseThrow(() -> new AssertionError("저장된 선호물품을 찾을 수 없습니다.")); - - // when - Throwable thrown = catchThrowable(() -> deletePreferItemService.deletePreferItem(center2.getId(), savedItem.getId())); - - // then - assertThat(thrown) - .isInstanceOf(BadRequestException.class) - .hasMessage(UNAUTHORIZED_PREFER_ITEM.getMessage()); - } - - private Center createCenter() { - Center center = Center.create( - "기본 기관 이름", - "010-1234-5678", - "http://example.com/image.jpg", - "기관 소개 내용", - "http://example.com" - ); - - centerRepository.save(center); - - return center; - } - -}