diff --git a/src/main/java/until/the/eternity/item/application/service/ItemService.java b/src/main/java/until/the/eternity/item/application/service/ItemService.java new file mode 100644 index 00000000..49a8dee5 --- /dev/null +++ b/src/main/java/until/the/eternity/item/application/service/ItemService.java @@ -0,0 +1,18 @@ +package until.the.eternity.item.application.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import until.the.eternity.item.interfaces.rest.dto.ItemCategoryResponse; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class ItemService { + + public List findItemCategories() { + return ItemCategoryResponse.from(); + } +} diff --git a/src/main/java/until/the/eternity/item/interfaces/rest/controller/ItemController.java b/src/main/java/until/the/eternity/item/interfaces/rest/controller/ItemController.java new file mode 100644 index 00000000..2d134108 --- /dev/null +++ b/src/main/java/until/the/eternity/item/interfaces/rest/controller/ItemController.java @@ -0,0 +1,30 @@ +package until.the.eternity.item.interfaces.rest.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import until.the.eternity.common.response.ApiResponse; +import until.the.eternity.item.application.service.ItemService; +import until.the.eternity.item.interfaces.rest.dto.ItemCategoryResponse; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/items") +@Tag(name = "아이템 정보 API", description = "아이템 정보 API") +public class ItemController { + + private final ItemService itemService; + + @GetMapping("/categories") + @Operation(summary = "카테고리 정보", description = "아이템 상위 카테고리, 하위 카테고리 정보 조회") + public ResponseEntity>> findItemCategories() { + List itemCategories = itemService.findItemCategories(); + return ResponseEntity.ok(ApiResponse.success(itemCategories)); + } +} diff --git a/src/main/java/until/the/eternity/item/interfaces/rest/dto/ItemCategoryResponse.java b/src/main/java/until/the/eternity/item/interfaces/rest/dto/ItemCategoryResponse.java new file mode 100644 index 00000000..d8a57ca2 --- /dev/null +++ b/src/main/java/until/the/eternity/item/interfaces/rest/dto/ItemCategoryResponse.java @@ -0,0 +1,28 @@ +package until.the.eternity.item.interfaces.rest.dto; + +import lombok.Builder; +import lombok.Getter; +import until.the.eternity.common.enums.ItemCategory; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Builder +public class ItemCategoryResponse { + + private String subCategory; + private String topCategory; + + public static List from() { + return Arrays.stream(ItemCategory.values()) + .map( + itemCategory -> + ItemCategoryResponse.builder() + .subCategory(itemCategory.getSubCategory()) + .topCategory(itemCategory.getTopCategory()) + .build()) + .collect(Collectors.toList()); + } +} diff --git a/src/main/java/until/the/eternity/itemoption/domain/entity/ItemOption.java b/src/main/java/until/the/eternity/itemoption/domain/entity/ItemOption.java index 1eeaf6e6..0b1c6881 100644 --- a/src/main/java/until/the/eternity/itemoption/domain/entity/ItemOption.java +++ b/src/main/java/until/the/eternity/itemoption/domain/entity/ItemOption.java @@ -55,15 +55,15 @@ public void createId() { public void setAuctionHistory(AuctionHistory auctionHistory) { - // 1️⃣ 이전 연관관계 정리 + // 이전 연관관계 정리 if (this.auctionHistory != null) { this.auctionHistory.getItemOptions().remove(this); } - // 2️⃣ 새 연관관계 설정 + // 새 연관관계 설정 this.auctionHistory = auctionHistory; - // 3️⃣ 반대 쪽 컬렉션 동기화 + // 반대 쪽 컬렉션 동기화 if (auctionHistory != null && !auctionHistory.getItemOptions().contains(this)) { auctionHistory.getItemOptions().add(this); } diff --git a/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java index 958796ba..92c9bc6a 100644 --- a/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/application/service/AuctionHistoryServiceTest.java @@ -1,5 +1,11 @@ package until.the.eternity.auctionhistory.application.service; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -21,13 +27,6 @@ import until.the.eternity.common.request.PageRequestDto; import until.the.eternity.common.response.PageResponseDto; -import java.util.List; -import java.util.Optional; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class AuctionHistoryServiceTest { diff --git a/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java index 87dbdbc1..a5b89c0c 100644 --- a/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/application/service/fetcher/AuctionHistoryFetcherTest.java @@ -1,5 +1,12 @@ package until.the.eternity.auctionhistory.application.service.fetcher; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +import java.time.Instant; +import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -14,14 +21,6 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; -import java.time.Instant; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class AuctionHistoryFetcherTest { diff --git a/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java b/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java index 63edf84b..0501bc5b 100644 --- a/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java +++ b/src/test/java/until/the/eternity/auctionhistory/application/service/persister/AuctionHistoryPersisterTest.java @@ -1,5 +1,11 @@ package until.the.eternity.auctionhistory.application.service.persister; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -13,13 +19,6 @@ import until.the.eternity.auctionhistory.interfaces.external.dto.OpenApiAuctionHistoryResponse; import until.the.eternity.common.enums.ItemCategory; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class AuctionHistoryPersisterTest {