From 07f4f864b7079775a4b872d41ad0e254682fd2ba Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:41:54 +0900 Subject: [PATCH 001/157] refactor(Item): GetItemQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 단일 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../domain/item/application/port/in/GetItemQuery.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/in/GetItemQuery.java diff --git a/src/main/java/com/space/server/domain/item/application/port/in/GetItemQuery.java b/src/main/java/com/space/server/domain/item/application/port/in/GetItemQuery.java new file mode 100644 index 00000000..02350c44 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/in/GetItemQuery.java @@ -0,0 +1,8 @@ +package com.space.server.domain.item.application.port.in; + +import com.space.server.domain.item.domain.Item; + +public interface GetItemQuery { + + Item getItem(Long id); +} From 02419ab61e5b1af5a404ba8dc65ab583dcb90bcb Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:42:21 +0900 Subject: [PATCH 002/157] refactor(Item): LoadItemPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 단일 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../domain/item/application/port/out/LoadItemPort.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/out/LoadItemPort.java diff --git a/src/main/java/com/space/server/domain/item/application/port/out/LoadItemPort.java b/src/main/java/com/space/server/domain/item/application/port/out/LoadItemPort.java new file mode 100644 index 00000000..2ae1a9f4 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/out/LoadItemPort.java @@ -0,0 +1,8 @@ +package com.space.server.domain.item.application.port.out; + +import com.space.server.domain.item.domain.Item; + +public interface LoadItemPort { + + Item loadItem(Long id); +} From dcd161d67f536bc18953aef77b3bf069c2a8a2ff Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:43:34 +0900 Subject: [PATCH 003/157] refactor(Item): SpringDataItemRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도메인 아이템 엔티티와 JPA 아이템 엔티티 분리 --- .../out/persistence/SpringDataItemRepository.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java new file mode 100644 index 00000000..6be63f1c --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java @@ -0,0 +1,11 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.item.domain.value.Category; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface SpringDataItemRepository extends JpaRepository { + List findByCategory(Category category); + +} From 8d43dc07e1ae46d3de242a3380f1f5ed6966272b Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:43:44 +0900 Subject: [PATCH 004/157] refactor(Item): ItemJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도메인 아이템 엔티티와 JPA 아이템 엔티티 분리 --- .../out/persistence/ItemJpaEntity.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java new file mode 100644 index 00000000..e1c745af --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java @@ -0,0 +1,32 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.item.domain.value.Category; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "item") +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class ItemJpaEntity { + + @Id + @GeneratedValue + private Long id; + + @Column + private String name; + + @Column + private Integer price; + + @Column + private String image; + + @Enumerated(EnumType.STRING) + @Column + private Category category; +} From 5f54950eb26b5f814f2f82d9677c70717a6abda9 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:44:00 +0900 Subject: [PATCH 005/157] refactor(Item): Item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도메인 아이템 엔티티와 JPA 아이템 엔티티 분리 --- .../space/server/domain/item/domain/Item.java | 49 +++++++------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/domain/Item.java b/src/main/java/com/space/server/domain/item/domain/Item.java index a18ed52d..bbc76f8b 100644 --- a/src/main/java/com/space/server/domain/item/domain/Item.java +++ b/src/main/java/com/space/server/domain/item/domain/Item.java @@ -1,53 +1,42 @@ package com.space.server.domain.item.domain; import com.space.server.domain.item.domain.value.Category; -import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.*; +import java.util.Optional; + @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity -@Schema(description = "아이템 Entity") +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class Item { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Schema(description = "아이템 ID") - private Long id; + private final ItemId id; - @Column(length = 10) @NotNull - @Schema(description = "아이템 이름") - private String name; + private final String name; @NotNull - @Schema(description = "아이템 가격") - private Integer price; + private final Integer price; - @Column(name = "item_image", length = 100) @NotNull - @Schema(description = "아이템 이미지 URL") - private String image; + private final String image; @Enumerated(EnumType.STRING) @NotNull - @Schema(description = "아이템 카테고리") - private Category category; - - @Builder - public Item(String name, int price, String image, Category category) { - this.name = name; - this.price = price; - this.image = image; - this.category = category; + private final Category category; + + public static Item create(ItemId id, String name, Integer price, String image, Category category) { + return new Item(id, name, price, image, category); + } + + + public Optional getId(){ + return Optional.ofNullable(this.id); } - public void update(Item item) { - this.name = item.getName(); - this.price = item.getPrice(); - this.image = item.getImage(); - this.category = item.getCategory(); + @Value + public static class ItemId { + private final Long value; } } From b0e0f69c55e5fe83762f2e18f647657287927dfd Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:44:42 +0900 Subject: [PATCH 006/157] refactor(Item): ItemGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 단일 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../in/web/converter/CategoryConverter.java | 11 ++++++++++ .../in/web/dto/response/ItemResponse.java | 22 +++++++++++++++++++ .../out/persistence/ItemGetAdapter.java | 22 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/in/web/converter/CategoryConverter.java create mode 100644 src/main/java/com/space/server/domain/item/adapter/in/web/dto/response/ItemResponse.java create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/converter/CategoryConverter.java b/src/main/java/com/space/server/domain/item/adapter/in/web/converter/CategoryConverter.java new file mode 100644 index 00000000..8cf088d8 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/converter/CategoryConverter.java @@ -0,0 +1,11 @@ +package com.space.server.domain.item.adapter.in.web.converter; + +import com.space.server.domain.item.domain.value.Category; +import org.springframework.stereotype.Component; + +@Component +public class CategoryConverter { + public Category convert(String category) { + return Category.valueOf(category.toUpperCase()); + } +} diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/dto/response/ItemResponse.java b/src/main/java/com/space/server/domain/item/adapter/in/web/dto/response/ItemResponse.java new file mode 100644 index 00000000..f84a7231 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/dto/response/ItemResponse.java @@ -0,0 +1,22 @@ +package com.space.server.domain.item.adapter.in.web.dto.response; + +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.item.domain.value.Category; +import lombok.Builder; + +@Builder +public record ItemResponse( + String name, + Integer price, + String image, + Category category +) { + public static ItemResponse from(Item item) { + return ItemResponse.builder() + .name(item.getName()) + .price(item.getPrice()) + .image(item.getImage()) + .category(item.getCategory()) + .build(); + } +} diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java new file mode 100644 index 00000000..a961692c --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java @@ -0,0 +1,22 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.item.application.port.out.LoadItemPort; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.item.exception.ItemNotFoundException; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class ItemGetAdapter implements LoadItemPort { + + private final SpringDataItemRepository itemRepository; + private final ItemMapper itemMapper; + + @Override + public Item loadItem(Long id) { + return itemRepository.findById(id) + .map(itemMapper::mapToDomainEntity) + .orElseThrow(ItemNotFoundException::new); + } +} From a17df1835662c4bf9e705d1826746f3fe1ef0031 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:47:49 +0900 Subject: [PATCH 007/157] feat(architecture): UseCase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 의존성 주입 및 계층 분할 --- .../space/server/domain/common/UseCase.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/com/space/server/domain/common/UseCase.java diff --git a/src/main/java/com/space/server/domain/common/UseCase.java b/src/main/java/com/space/server/domain/common/UseCase.java new file mode 100644 index 00000000..4b558356 --- /dev/null +++ b/src/main/java/com/space/server/domain/common/UseCase.java @@ -0,0 +1,22 @@ +package com.space.server.domain.common; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface UseCase { + + @AliasFor(annotation = Component.class) + String value() default ""; + +} + From c879553e27a739cf183909ab982e70a4af481317 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:48:03 +0900 Subject: [PATCH 008/157] feat(architecture): WebAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 의존성 주입 및 계층 분할 --- .../server/domain/common/WebAdapter.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/common/WebAdapter.java diff --git a/src/main/java/com/space/server/domain/common/WebAdapter.java b/src/main/java/com/space/server/domain/common/WebAdapter.java new file mode 100644 index 00000000..46027680 --- /dev/null +++ b/src/main/java/com/space/server/domain/common/WebAdapter.java @@ -0,0 +1,21 @@ +package com.space.server.domain.common; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface WebAdapter { + + @AliasFor(annotation = Component.class) + String value() default ""; + +} From e86c37cb00faeae1981c7186be6264d59236fe67 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:48:14 +0900 Subject: [PATCH 009/157] feat(architecture): PersistenceAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 의존성 주입 및 계층 분할 --- .../domain/common/PersistenceAdapter.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/common/PersistenceAdapter.java diff --git a/src/main/java/com/space/server/domain/common/PersistenceAdapter.java b/src/main/java/com/space/server/domain/common/PersistenceAdapter.java new file mode 100644 index 00000000..a1831d48 --- /dev/null +++ b/src/main/java/com/space/server/domain/common/PersistenceAdapter.java @@ -0,0 +1,21 @@ +package com.space.server.domain.common; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Component +public @interface PersistenceAdapter { + + @AliasFor(annotation = Component.class) + String value() default ""; + +} From 7ae6e5fa92836cb8221f23d93818512c534f2dfe Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:49:09 +0900 Subject: [PATCH 010/157] refactor(Item): GetItemService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 단일 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../application/service/GetItemService.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/service/GetItemService.java diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemService.java new file mode 100644 index 00000000..298dc5a8 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemService.java @@ -0,0 +1,19 @@ +package com.space.server.domain.item.application.service; + +import com.space.server.domain.item.application.port.in.GetItemQuery; +import com.space.server.domain.item.application.port.out.LoadItemPort; +import com.space.server.domain.common.UseCase; +import com.space.server.domain.item.domain.Item; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class GetItemService implements GetItemQuery { + + private final LoadItemPort loadItemPort; + + @Override + public Item getItem(Long id) { + return loadItemPort.loadItem(id); + } +} From 1cf31cfb4d5b1d6c0eb4b2dbfb6f5b951f014211 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:49:53 +0900 Subject: [PATCH 011/157] feat(Item): ItemMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Item 도메인 엔티티와 Item Jpa 엔티티 변환용 --- .../adapter/out/persistence/ItemMapper.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java new file mode 100644 index 00000000..f9303684 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java @@ -0,0 +1,18 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.item.domain.Item; +import org.springframework.stereotype.Component; + +@Component +public class ItemMapper { + + Item mapToDomainEntity(ItemJpaEntity item) { + return Item.create( + new Item.ItemId(item.getId()), + item.getName(), + item.getPrice(), + item.getImage(), + item.getCategory() + ); + } +} From e8558acc50db00bfdd8d44fea10cc3891a909e24 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:50:39 +0900 Subject: [PATCH 012/157] refactor(Item): ItemController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 Controller --- .../item/adapter/in/web/ItemController.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java new file mode 100644 index 00000000..303a5435 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java @@ -0,0 +1,48 @@ +package com.space.server.domain.item.adapter.in.web; + +import com.space.server.domain.item.adapter.in.web.converter.CategoryConverter; +import com.space.server.domain.item.adapter.in.web.dto.response.ItemResponse; +import com.space.server.domain.item.application.port.in.GetItemQuery; +import com.space.server.domain.common.WebAdapter; +import com.space.server.domain.item.application.port.in.GetItemsByCategoryQuery; +import com.space.server.domain.item.application.port.in.GetItemsQuery; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@WebAdapter +@RestController +@RequiredArgsConstructor +@RequestMapping("/stores/items") +public class ItemController { + + private final GetItemQuery getItemQuery; + private final GetItemsQuery getItemsQuery; + private final GetItemsByCategoryQuery getItemsByCategoryQuery; + private final CategoryConverter converter; + + //아이템 구매 + + @GetMapping("/{item-id}") + public ItemResponse readOne(@PathVariable("item-id") Long itemId) { + return ItemResponse.from(getItemQuery.getItem(itemId)); + } + + @GetMapping() + public List readAll() { + return getItemsQuery.getItems().stream() + .map(ItemResponse::from) + .toList(); + } + + @GetMapping("/categories/{category}") + public List readAllByCategory(@PathVariable("category") String category) { + return getItemsByCategoryQuery.retrieveItemsByCategory(converter.convert(category)).stream() + .map((ItemResponse::from)) + .toList(); + } +} From e4791138c9e53e3b79d0f746ef01afdccc79a250 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:51:14 +0900 Subject: [PATCH 013/157] refactor(Item): GetItemsQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../domain/item/application/port/in/GetItemsQuery.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/in/GetItemsQuery.java diff --git a/src/main/java/com/space/server/domain/item/application/port/in/GetItemsQuery.java b/src/main/java/com/space/server/domain/item/application/port/in/GetItemsQuery.java new file mode 100644 index 00000000..92665c41 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/in/GetItemsQuery.java @@ -0,0 +1,10 @@ +package com.space.server.domain.item.application.port.in; + +import com.space.server.domain.item.domain.Item; + +import java.util.List; + +public interface GetItemsQuery { + + List getItems(); +} From fe73ac2c82fd3e7bb0d3b5c768aa778d7bdc797c Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:51:39 +0900 Subject: [PATCH 014/157] refactor(Item): LoadItemsPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../item/application/port/out/LoadItemsPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/out/LoadItemsPort.java diff --git a/src/main/java/com/space/server/domain/item/application/port/out/LoadItemsPort.java b/src/main/java/com/space/server/domain/item/application/port/out/LoadItemsPort.java new file mode 100644 index 00000000..278b206e --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/out/LoadItemsPort.java @@ -0,0 +1,10 @@ +package com.space.server.domain.item.application.port.out; + +import com.space.server.domain.item.domain.Item; + +import java.util.List; + +public interface LoadItemsPort { + + List loadItems(); +} From 439fc379356817dfe612e8c75a72be4aff29b984 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:52:34 +0900 Subject: [PATCH 015/157] refactor(Item): ItemsGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/ItemsGetAdapter.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java new file mode 100644 index 00000000..06a371fb --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java @@ -0,0 +1,24 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.item.application.port.out.LoadItemsPort; +import com.space.server.domain.item.domain.Item; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class ItemsGetAdapter implements LoadItemsPort { + + private final SpringDataItemRepository itemRepository; + private final ItemMapper itemMapper; + + @Override + public List loadItems() { + return itemRepository.findAll() + .stream() + .map(itemMapper::mapToDomainEntity) + .toList(); + } +} From 5dfc6e9e4f1c99ea3cbc6aac2f1c7ac5140ebd5b Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:52:48 +0900 Subject: [PATCH 016/157] refactor(Item): GetItemsService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../application/service/GetItemsService.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/service/GetItemsService.java diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java new file mode 100644 index 00000000..d3d4a766 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java @@ -0,0 +1,21 @@ +package com.space.server.domain.item.application.service; + +import com.space.server.domain.common.UseCase; +import com.space.server.domain.item.application.port.in.GetItemsQuery; +import com.space.server.domain.item.application.port.out.LoadItemsPort; +import com.space.server.domain.item.domain.Item; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetItemsService implements GetItemsQuery { + + private final LoadItemsPort loadItemsPort; + + @Override + public List getItems() { + return loadItemsPort.loadItems(); + } +} From 898dc7e6e2a3f3477f4a8ff4600d081370844c98 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:53:19 +0900 Subject: [PATCH 017/157] refactor(Item): GetItemsByCategoryQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 카테고리 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../application/port/in/GetItemsByCategoryQuery.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java diff --git a/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java b/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java new file mode 100644 index 00000000..fc11e4e4 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java @@ -0,0 +1,11 @@ +package com.space.server.domain.item.application.port.in; + +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.item.domain.value.Category; + +import java.util.List; + +public interface GetItemsByCategoryQuery { + + List retrieveItemsByCategory(Category category); +} From 13cc57c98db3123ceca45d789f83f7a1ba8cfbfa Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:53:33 +0900 Subject: [PATCH 018/157] refactor(Item): LoadItemsByCategoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 카테고리 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/LoadItemsByCategoryPort.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/out/LoadItemsByCategoryPort.java diff --git a/src/main/java/com/space/server/domain/item/application/port/out/LoadItemsByCategoryPort.java b/src/main/java/com/space/server/domain/item/application/port/out/LoadItemsByCategoryPort.java new file mode 100644 index 00000000..4da0a656 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/out/LoadItemsByCategoryPort.java @@ -0,0 +1,11 @@ +package com.space.server.domain.item.application.port.out; + +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.item.domain.value.Category; + +import java.util.List; + +public interface LoadItemsByCategoryPort { + + List loadItemsByCategory(Category category); +} From d48d95025b20c7b40a2d3822fcbd47b5cacf69d2 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:53:48 +0900 Subject: [PATCH 019/157] refactor(Item): ItemByCategoryGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 카테고리 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../persistence/ItemByCategoryGetAdapter.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java new file mode 100644 index 00000000..88dc61a9 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java @@ -0,0 +1,25 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.item.application.port.out.LoadItemsByCategoryPort; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.item.domain.value.Category; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class ItemByCategoryGetAdapter implements LoadItemsByCategoryPort { + private final SpringDataItemRepository itemRepository; + private final ItemMapper itemMapper; + + + @Override + public List loadItemsByCategory(Category category) { + return itemRepository.findByCategory(category) + .stream() + .map(itemMapper::mapToDomainEntity) + .toList(); + } +} From ea6ab90f6dbe81950a7b18804b8663c24a69d646 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:53:58 +0900 Subject: [PATCH 020/157] refactor(Item): GetItemsByCategoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 카테고리 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/GetItemsByCategoryService.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java new file mode 100644 index 00000000..a4ceb4be --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java @@ -0,0 +1,22 @@ +package com.space.server.domain.item.application.service; + +import com.space.server.domain.common.UseCase; +import com.space.server.domain.item.application.port.in.GetItemsByCategoryQuery; +import com.space.server.domain.item.application.port.out.LoadItemsByCategoryPort; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.item.domain.value.Category; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetItemsByCategoryService implements GetItemsByCategoryQuery { + + private final LoadItemsByCategoryPort loadItemsByCategoryPort; + + @Override + public List retrieveItemsByCategory(Category category) { + return loadItemsByCategoryPort.loadItemsByCategory(category); + } +} From e80cd1e5eb781061ba6e1a03f86015599395f2b9 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:55:41 +0900 Subject: [PATCH 021/157] refactor(Item): CategoryConverter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용을 위해 구조 변경 --- .../presentation/converter/CategoryConverter.java | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/presentation/converter/CategoryConverter.java diff --git a/src/main/java/com/space/server/domain/item/presentation/converter/CategoryConverter.java b/src/main/java/com/space/server/domain/item/presentation/converter/CategoryConverter.java deleted file mode 100644 index 3653cab8..00000000 --- a/src/main/java/com/space/server/domain/item/presentation/converter/CategoryConverter.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.space.server.domain.item.presentation.converter; - -import com.space.server.domain.item.domain.value.Category; -import org.springframework.stereotype.Component; - -@Component -public class CategoryConverter { - public Category convert(String category) { - return Category.valueOf(category.toUpperCase()); - } -} From 283d56720d01e37d84daa2df49395c2b8b03547f Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:56:50 +0900 Subject: [PATCH 022/157] remove(Item): ItemController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../item/presentation/ItemController.java | 54 ------------------- 1 file changed, 54 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/presentation/ItemController.java diff --git a/src/main/java/com/space/server/domain/item/presentation/ItemController.java b/src/main/java/com/space/server/domain/item/presentation/ItemController.java deleted file mode 100644 index f9720163..00000000 --- a/src/main/java/com/space/server/domain/item/presentation/ItemController.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.space.server.domain.item.presentation; - -import com.space.server.domain.inventory.service.CommandInventoryService; -import com.space.server.domain.item.presentation.converter.CategoryConverter; -import com.space.server.domain.item.presentation.dto.response.ItemResponse; -import com.space.server.domain.item.service.QueryItemService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static com.space.server.common.jwt.util.AuthenticationUtil.getMemberId; - -@RestController -@RequiredArgsConstructor -@RequestMapping("/stores/items") -@Tag(name = "Item", description = "아이템 API") -public class ItemController { - - private final QueryItemService queryItemService; - private final CommandInventoryService commandInventoryService; - private final CategoryConverter categoryConverter; - - @PostMapping("/{item-id}") - @Operation(summary = "아이템 구매", description = "해당 아이템을 구매합니다.") - public void buyItem(@PathVariable("item-id") @Parameter(description = "구매할 아이템 ID") Long itemId) { - commandInventoryService.buyItem(itemId, getMemberId()); - } - - @GetMapping("/{item-id}") - @Operation(summary = "아이템 조회", description = "해당 아이템을 조회합니다.") - public ItemResponse readOne(@PathVariable("item-id") @Parameter(description = "조회할 아이템 ID") Long itemId) { - return ItemResponse.from(queryItemService.readOne(itemId)); - } - - @GetMapping - @Operation(summary = "아이템 전체 조회", description = "전체 아이템을 조회합니다.") - public List readAll() { - return queryItemService.readAll().stream() - .map(ItemResponse::from) - .toList(); - } - - @GetMapping("/categories/{category}") - @Operation(summary = "카테고리별 아이템 조회", description = "카테고리별 아이템을 조회합니다.") - public List findByCategory(@PathVariable("category") @Parameter(description = "조회할 카테고리") String category) { - return queryItemService.findAllByCategory(categoryConverter.convert(category)).stream() - .map(ItemResponse::from) - .toList(); - } -} From 9af8c1c5d9ab6f4f92291f8b8feba3695c9fd392 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:57:01 +0900 Subject: [PATCH 023/157] remove(Item): ItemCreator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../service/implementation/ItemCreator.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/service/implementation/ItemCreator.java diff --git a/src/main/java/com/space/server/domain/item/service/implementation/ItemCreator.java b/src/main/java/com/space/server/domain/item/service/implementation/ItemCreator.java deleted file mode 100644 index b562094e..00000000 --- a/src/main/java/com/space/server/domain/item/service/implementation/ItemCreator.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.item.service.implementation; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.repository.ItemRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ItemCreator { - - private final ItemRepository itemRepository; - - public void create(Item item) { - itemRepository.save(item); - } -} From 4b32e90834f073f4e90ccd722595425069999297 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:57:11 +0900 Subject: [PATCH 024/157] remove(Item): ItemDeleter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../service/implementation/ItemDeleter.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/service/implementation/ItemDeleter.java diff --git a/src/main/java/com/space/server/domain/item/service/implementation/ItemDeleter.java b/src/main/java/com/space/server/domain/item/service/implementation/ItemDeleter.java deleted file mode 100644 index 575f6686..00000000 --- a/src/main/java/com/space/server/domain/item/service/implementation/ItemDeleter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.item.service.implementation; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.repository.ItemRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ItemDeleter { - - private final ItemRepository itemRepository; - - public void delete(Item item) { - itemRepository.delete(item); - } -} \ No newline at end of file From 91917b9c4f942260ea83331f837323fbf1dfb3d3 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:57:18 +0900 Subject: [PATCH 025/157] remove(Item): ItemReader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../service/implementation/ItemReader.java | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/service/implementation/ItemReader.java diff --git a/src/main/java/com/space/server/domain/item/service/implementation/ItemReader.java b/src/main/java/com/space/server/domain/item/service/implementation/ItemReader.java deleted file mode 100644 index 70f6a2e0..00000000 --- a/src/main/java/com/space/server/domain/item/service/implementation/ItemReader.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.space.server.domain.item.service.implementation; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.value.Category; -import com.space.server.domain.item.domain.repository.ItemRepository; -import com.space.server.domain.item.exception.ItemNotFoundException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class ItemReader { - - private final ItemRepository itemRepository; - - public Item findById(Long itemId) { - return itemRepository.findById(itemId) - .orElseThrow(ItemNotFoundException::new); - } - - public List findAll() { - return itemRepository.findAll(); - } - - public List findAllByCategory(Category category) { - return itemRepository.findByCategory(category); - } -} From 65a43a4fa166609e62ed42d78bf5df40f8855d10 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:57:28 +0900 Subject: [PATCH 026/157] remove(Item): ItemRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../item/domain/repository/ItemRepository.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/domain/repository/ItemRepository.java diff --git a/src/main/java/com/space/server/domain/item/domain/repository/ItemRepository.java b/src/main/java/com/space/server/domain/item/domain/repository/ItemRepository.java deleted file mode 100644 index 7a7ceee2..00000000 --- a/src/main/java/com/space/server/domain/item/domain/repository/ItemRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.space.server.domain.item.domain.repository; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.value.Category; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface ItemRepository extends JpaRepository { - List findByCategory(Category category); -} From 28e6f9a32350568287e082043a8b0e2b1db0add3 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:57:52 +0900 Subject: [PATCH 027/157] remove(Item): ItemResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 위치 변경 --- .../dto/response/ItemResponse.java | 34 ------------------- 1 file changed, 34 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/presentation/dto/response/ItemResponse.java diff --git a/src/main/java/com/space/server/domain/item/presentation/dto/response/ItemResponse.java b/src/main/java/com/space/server/domain/item/presentation/dto/response/ItemResponse.java deleted file mode 100644 index 29b8e89e..00000000 --- a/src/main/java/com/space/server/domain/item/presentation/dto/response/ItemResponse.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.space.server.domain.item.presentation.dto.response; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.value.Category; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Builder; - -@Builder -public record ItemResponse( - @Schema(description = "아이템 ID", example = "1") - Long id, - - @Schema(description = "아이템 이름", example = "모자") - String name, - - @Schema(description = "아이템 가격", example = "100") - Integer price, - - @Schema(description = "아이템 이미지 URL", example = "http://example.com/image.png") - String image, - - @Schema(description = "아이템 카테고리", example = "HEAD") - Category category -) { - public static ItemResponse from(Item item) { - return ItemResponse.builder() - .id(item.getId()) - .name(item.getName()) - .price(item.getPrice()) - .image(item.getImage()) - .category(item.getCategory()) - .build(); - } -} From 33460f7648500d19b0885dbce01efc87ad0fcf22 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:58:05 +0900 Subject: [PATCH 028/157] remove(Item): CommandItemService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../item/service/CommandItemService.java | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/service/CommandItemService.java diff --git a/src/main/java/com/space/server/domain/item/service/CommandItemService.java b/src/main/java/com/space/server/domain/item/service/CommandItemService.java deleted file mode 100644 index e3a17329..00000000 --- a/src/main/java/com/space/server/domain/item/service/CommandItemService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.space.server.domain.item.service; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.service.implementation.ItemCreator; -import com.space.server.domain.item.service.implementation.ItemDeleter; -import com.space.server.domain.item.service.implementation.ItemReader; -import com.space.server.domain.item.service.implementation.ItemUpdater; -import org.springframework.transaction.annotation.Transactional; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -@Transactional -public class CommandItemService { - - private final ItemCreator itemCreator; - private final ItemDeleter itemDeleter; - private final ItemUpdater itemUpdater; - private final ItemReader itemReader; - - public void createItem(Item item) { - itemCreator.create(item); - } - - public void updateItem(Long itemId, Item item) { - Item updatableItem = itemReader.findById(itemId); - itemUpdater.update(updatableItem, item); - } - - public void deleteItem(Long itemId) { - Item item = itemReader.findById(itemId); - itemDeleter.delete(item); - } -} From af70721261d5324a8feee160b4c921dcc536d291 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sat, 16 Nov 2024 17:58:12 +0900 Subject: [PATCH 029/157] remove(Item): ItemUpdater MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용 버전으로 변경 --- .../item/service/implementation/ItemUpdater.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/service/implementation/ItemUpdater.java diff --git a/src/main/java/com/space/server/domain/item/service/implementation/ItemUpdater.java b/src/main/java/com/space/server/domain/item/service/implementation/ItemUpdater.java deleted file mode 100644 index 2929f85e..00000000 --- a/src/main/java/com/space/server/domain/item/service/implementation/ItemUpdater.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.space.server.domain.item.service.implementation; - -import com.space.server.domain.item.domain.Item; -import org.springframework.stereotype.Service; - -@Service -public class ItemUpdater { - - public void update(Item updatableItem, Item item) { - updatableItem.update(item); - } -} \ No newline at end of file From 4d300b535d643fa3138e3e3a401db4e447b1387a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 21:50:39 +0900 Subject: [PATCH 030/157] refactor(Item): InventoryJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용을 위해 Domain Entity와 Jpa Entity 분리 --- .../out/persistence/InventoryJpaEntity.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java new file mode 100644 index 00000000..f3523082 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java @@ -0,0 +1,30 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.item.adapter.out.persistence.ItemJpaEntity; +import com.space.server.domain.user.domain.Users; +import jakarta.persistence.*; +import lombok.*; + +@Builder +@Entity +@Table(name = "inventory") +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class InventoryJpaEntity { + + @Id + @GeneratedValue + private Long id; + + @ManyToOne + @JoinColumn(name = "user_id") + private Users user; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "item_id") + private ItemJpaEntity item; + + @Column + private boolean isEquipped; +} From c000eef9981ea68aede039cc313e6347174d0a55 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 21:50:51 +0900 Subject: [PATCH 031/157] refactor(Inventory): Inventory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용을 위해 Domain Entity와 Jpa Entity 분리 --- .../adapter/in/web/InventoryController.java | 42 +++++++++++++ .../web}/dto/response/InventoryResponse.java | 9 ++- .../persistence/EquipInventoryAdapter.java | 43 +++++++++++++ .../out/persistence/InventoryRepository.java | 20 +++++++ .../domain/inventory/domain/Inventory.java | 37 ++++-------- .../repository/InventoryRepository.java | 22 ------- .../presentation/InventoryController.java | 56 ----------------- .../service/CommandInventoryService.java | 60 ------------------- .../service/QueryInventoryService.java | 36 ----------- .../implementation/InventoryCreator.java | 17 ------ .../implementation/InventoryDeleter.java | 17 ------ .../implementation/InventoryReader.java | 35 ----------- .../implementation/InventoryUpdater.java | 16 ----- .../implementation/InventoryValidator.java | 28 --------- ...temRepository.java => ItemRepository.java} | 2 +- 15 files changed, 124 insertions(+), 316 deletions(-) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java rename src/main/java/com/space/server/domain/inventory/{presentation => adapter/in/web}/dto/response/InventoryResponse.java (77%) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java delete mode 100644 src/main/java/com/space/server/domain/inventory/domain/repository/InventoryRepository.java delete mode 100644 src/main/java/com/space/server/domain/inventory/presentation/InventoryController.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/CommandInventoryService.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/QueryInventoryService.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/implementation/InventoryCreator.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/implementation/InventoryDeleter.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/implementation/InventoryReader.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/implementation/InventoryUpdater.java delete mode 100644 src/main/java/com/space/server/domain/inventory/service/implementation/InventoryValidator.java rename src/main/java/com/space/server/domain/item/adapter/out/persistence/{SpringDataItemRepository.java => ItemRepository.java} (75%) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java b/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java new file mode 100644 index 00000000..1d080e08 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java @@ -0,0 +1,42 @@ +package com.space.server.domain.inventory.adapter.in.web; + +import com.space.server.domain.inventory.adapter.in.web.dto.response.InventoryResponse; +import com.space.server.domain.inventory.application.port.in.EquipInventoryUseCase; +import com.space.server.domain.inventory.application.port.in.GetInventoriesByIsEquippedQuery; +import com.space.server.domain.inventory.application.port.in.GetInventoriesQuery; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.space.server.common.jwt.util.AuthenticationUtil.getMemberId; + + +@RestController +@RequiredArgsConstructor +@RequestMapping("/inventories") +public class InventoryController { + + private final GetInventoriesQuery getInventoriesQuery; + private final GetInventoriesByIsEquippedQuery getInventoriesByIsEquippedQuery; + private final EquipInventoryUseCase equipInventoryUseCase; + + @GetMapping + public List readAll() { + return getInventoriesQuery.getInventories(getMemberId()).stream() + .map(InventoryResponse::from) + .toList(); + } + + @GetMapping("/equip") + public List readIsEquipped() { + return getInventoriesByIsEquippedQuery.getInventoriesByIsEquippedQuery(getMemberId()).stream() + .map(InventoryResponse::from) + .toList(); + } + + @PutMapping("/{inventory-id}") + public void equipItem(@PathVariable(name = "inventory-id") Long inventoryId) { + equipInventoryUseCase.equipInventory(getMemberId(), inventoryId); + } +} diff --git a/src/main/java/com/space/server/domain/inventory/presentation/dto/response/InventoryResponse.java b/src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java similarity index 77% rename from src/main/java/com/space/server/domain/inventory/presentation/dto/response/InventoryResponse.java rename to src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java index 9be46a8f..d50cc98d 100644 --- a/src/main/java/com/space/server/domain/inventory/presentation/dto/response/InventoryResponse.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java @@ -1,4 +1,4 @@ -package com.space.server.domain.inventory.presentation.dto.response; +package com.space.server.domain.inventory.adapter.in.web.dto.response; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.item.domain.value.Category; @@ -11,6 +11,8 @@ public record InventoryResponse( @Schema(description = "인벤토리 ID", example = "1") Long id, + String name, + @Schema(description = "아이템 ID", example = "10") Long itemId, @@ -22,8 +24,9 @@ public record InventoryResponse( ) { public static InventoryResponse from(Inventory inventory) { return InventoryResponse.builder() - .id(inventory.getId()) - .itemId(inventory.getItem().getId()) + .id(inventory.getId().getValue()) + .name(inventory.getItem().getName()) + .itemId(inventory.getItem().getId().get().getValue()) .category(inventory.getItem().getCategory()) .isEquipped(inventory.isEquipped()) .build(); diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java new file mode 100644 index 00000000..3173e105 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java @@ -0,0 +1,43 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.domain.value.Category; +import com.space.server.domain.user.domain.Users; +import com.space.server.domain.user.domain.repository.UserRepository; +import com.space.server.domain.user.exception.UserNotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +@PersistenceAdapter +@RequiredArgsConstructor +public class EquipInventoryAdapter implements EquipInventoryPort { + + private final InventoryRepository inventoryRepository; + private final InventoryMapper inventoryMapper; + private final UserRepository userRepository; + + @Override + public Inventory findEquippedInventoryByCategoryAndUser(Category category, Long userId) { + Users user = userRepository.findById(userId) + .orElseThrow(UserNotFoundException::new); + + InventoryJpaEntity equippedByCategoryInventory = inventoryRepository.findByCategoryAndUserAndIsEquipped(category, user); + return inventoryMapper.mapToInventory(equippedByCategoryInventory); + } + @Override + public void equipInventory(Inventory inventory) { + inventory.equip(); + InventoryJpaEntity inventoryJpaEntity = inventoryMapper.mapToInventoryJpaEntity(inventory); + inventoryRepository.save(inventoryJpaEntity); + } + + @Override + public void unEquipInventory(Inventory inventory) { + inventory.unEquip(); + InventoryJpaEntity inventoryJpaEntity = inventoryMapper.mapToInventoryJpaEntity(inventory); + inventoryRepository.save(inventoryJpaEntity); + } +} diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java new file mode 100644 index 00000000..9bd79650 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java @@ -0,0 +1,20 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.item.domain.value.Category; +import com.space.server.domain.user.domain.Users; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface InventoryRepository extends JpaRepository { + List findByUser(Users user); + @Query("SELECT i FROM InventoryJpaEntity i WHERE i.user = :user AND i.isEquipped = true") + List findByIsEquippedAndUser(@Param("user") Users user); + @Query("SELECT i FROM InventoryJpaEntity i WHERE i.user = :user AND i.item.category = :category AND i.isEquipped = true") + InventoryJpaEntity findByCategoryAndUserAndIsEquipped(@Param("category") Category category, @Param("user") Users user); + +} diff --git a/src/main/java/com/space/server/domain/inventory/domain/Inventory.java b/src/main/java/com/space/server/domain/inventory/domain/Inventory.java index cdb15601..628ed49c 100644 --- a/src/main/java/com/space/server/domain/inventory/domain/Inventory.java +++ b/src/main/java/com/space/server/domain/inventory/domain/Inventory.java @@ -2,44 +2,26 @@ import com.space.server.domain.item.domain.Item; import com.space.server.domain.user.domain.Users; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.*; @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity -@Schema(description = "인벤토리 Entity") +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class Inventory { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Schema(description = "인벤토리 ID") - private Long id; + @NotNull + private final InventoryId id; - @ManyToOne - @JoinColumn(name = "user_id") @NotNull - @Schema(description = "사용자 정보") - private Users user; + private final Users user; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "item_id") @NotNull - @Schema(description = "아이템 정보") - private Item item; + private final Item item; - @Schema(description = "아이템 장착 여부", example = "false") + @NotNull private boolean isEquipped; - - @Builder - public Inventory(Item item, Users user) { - this.item = item; - this.user = user; - } - public void equip() { isEquipped = true; } @@ -47,4 +29,9 @@ public void equip() { public void unEquip() { isEquipped = false; } + + @Value + public static class InventoryId { + private final Long value; + } } diff --git a/src/main/java/com/space/server/domain/inventory/domain/repository/InventoryRepository.java b/src/main/java/com/space/server/domain/inventory/domain/repository/InventoryRepository.java deleted file mode 100644 index 5de6a2fd..00000000 --- a/src/main/java/com/space/server/domain/inventory/domain/repository/InventoryRepository.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.space.server.domain.inventory.domain.repository; - -import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.value.Category; -import com.space.server.domain.user.domain.Users; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface InventoryRepository extends JpaRepository { - List findByUser(Users user); - Boolean existsByItemAndUser(Item item, Users user); - @Query("SELECT i FROM Inventory i WHERE i.user = :user AND i.isEquipped = true") - List findByIsEquippedAndUser(@Param("user") Users user); - @Query("SELECT i FROM Inventory i WHERE i.user = :user AND i.item.category = :category AND i.isEquipped = true") - Inventory findByCategoryAndUserAndIsEquipped(@Param("category") Category category, @Param("user") Users user); -} diff --git a/src/main/java/com/space/server/domain/inventory/presentation/InventoryController.java b/src/main/java/com/space/server/domain/inventory/presentation/InventoryController.java deleted file mode 100644 index 7e11475a..00000000 --- a/src/main/java/com/space/server/domain/inventory/presentation/InventoryController.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.space.server.domain.inventory.presentation; - -import com.space.server.domain.inventory.presentation.dto.response.InventoryResponse; -import com.space.server.domain.inventory.service.CommandInventoryService; -import com.space.server.domain.inventory.service.QueryInventoryService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import jakarta.servlet.http.HttpServletRequest; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -import static com.space.server.common.jwt.util.AuthenticationUtil.getMemberId; - -@Slf4j -@RestController -@RequiredArgsConstructor -@RequestMapping("/inventories") -@Tag(name = "Inventory", description = "인벤토리 API") -public class InventoryController { - - private final CommandInventoryService commandInventoryService; - private final QueryInventoryService queryInventoryService; - - @GetMapping - @Operation(summary = "전체 인벤토리 조회", description = "전체 구매한 아이템을 조회합니다.") - public List readAll(HttpServletRequest request) { - log.warn("인벤토리 조회 로그(MemberId) : " + getMemberId()); - log.warn("인벤토리 조회 로그(HttpServletRequest,cookie) : " + request.getCookies()); - log.warn("인벤토리 조회 로그(HttpServletRequest,cookie) : " + request.getRequestURI()); - log.warn("인벤토리 조회 로그(HttpServletRequest,cookie) : " + request.getUserPrincipal()); - log.warn("인벤토리 조회 로그(HttpServletRequest,cookie) : " + request.getMethod()); - log.warn("인벤토리 조회 로그(HttpServletRequest,cookie) : " + request.getServletPath()); - return queryInventoryService.readMine(getMemberId()).stream() - .map(InventoryResponse::from) - .toList(); - } - - @GetMapping("/equip") - @Operation(summary = "장착 인벤토리 조회", description = "장착된 아이템을 조회합니다.") - public List readIsEquipped() { - return queryInventoryService.readIsEquipped(getMemberId()).stream() - .map(InventoryResponse::from) - .toList(); - } - - @PutMapping("/{inventory-id}") - @Operation(summary = "아이템 장착", description = "해당 구매한 아이템을 장착합니다.") - public void equipItem( - @Parameter(description = "장착할 인벤토리 ID", required = true) @PathVariable(name = "inventory-id") Long inventoryId) { - commandInventoryService.equipInventory(inventoryId, getMemberId()); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/CommandInventoryService.java b/src/main/java/com/space/server/domain/inventory/service/CommandInventoryService.java deleted file mode 100644 index 393b2393..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/CommandInventoryService.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.space.server.domain.inventory.service; - -import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.value.Category; -import com.space.server.domain.item.service.implementation.ItemReader; -import com.space.server.domain.inventory.service.implementation.*; -import com.space.server.domain.user.domain.Users; -import com.space.server.domain.user.domain.repository.UserRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Transactional -public class CommandInventoryService { - - private final InventoryCreator inventoryCreator; - private final InventoryReader inventoryReader; - private final InventoryUpdater inventoryUpdater; - private final InventoryDeleter inventoryDeleter; - private final InventoryValidator inventoryValidator; - private final ItemReader itemReader; - private final UserRepository userRepository; - - public void createInventory(Long itemId, Long userId) { - Users user = userRepository.findById(userId) - .orElse(null); - Item item = itemReader.findById(itemId); - Inventory inventory = new Inventory(item, user); - inventoryUpdater.equip(inventory); - inventoryCreator.create(inventory); - } - - public void buyItem(Long itemId, Long userId) { - Users user = userRepository.findById(userId) - .orElse(null); - Item item = itemReader.findById(itemId); - inventoryValidator.hasItem(item, user); - inventoryValidator.buyItem(item, user); - Inventory inventory = new Inventory(item, user); - inventoryCreator.create(inventory); - } - - public void equipInventory(Long inventoryId, Long userId) { - Users user = userRepository.findById(userId) - .orElse(null); - Inventory inventory = inventoryReader.findById(inventoryId); - Category category = inventory.getItem().getCategory(); - Inventory unequipInventory = inventoryReader.findByCategoryAndUserAndIsEquipped(category, user); - inventoryUpdater.unEquip(unequipInventory); - inventoryUpdater.equip(inventory); - } - - public void deleteInventory(Long inventoryId) { - Inventory inventory = inventoryReader.findById(inventoryId); - inventoryDeleter.delete(inventory); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/QueryInventoryService.java b/src/main/java/com/space/server/domain/inventory/service/QueryInventoryService.java deleted file mode 100644 index cc42f8ae..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/QueryInventoryService.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.space.server.domain.inventory.service; - -import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.inventory.service.implementation.InventoryReader; -import com.space.server.domain.user.domain.Users; -import com.space.server.domain.user.domain.repository.UserRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class QueryInventoryService { - - private final InventoryReader inventoryReader; - private final UserRepository userRepository; - - public Inventory readOne(Long inventoryId) { - return inventoryReader.findById(inventoryId); - } - - public List readMine(Long userId) { - Users user = userRepository.findById(userId) - .orElse(null); - return inventoryReader.findByUser(user); - } - - public List readIsEquipped(Long userId) { - Users user = userRepository.findById(userId) - .orElse(null); - return inventoryReader.findByIsEquippedAndUser(user); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryCreator.java b/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryCreator.java deleted file mode 100644 index 4d8b3489..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryCreator.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.inventory.service.implementation; - -import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.inventory.domain.repository.InventoryRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class InventoryCreator { - - private final InventoryRepository inventoryRepository; - - public void create(Inventory inventory) { - inventoryRepository.save(inventory); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryDeleter.java b/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryDeleter.java deleted file mode 100644 index 8539050a..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryDeleter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.inventory.service.implementation; - -import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.inventory.domain.repository.InventoryRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class InventoryDeleter { - - private final InventoryRepository inventoryRepository; - - public void delete(Inventory inventory) { - inventoryRepository.delete(inventory); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryReader.java b/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryReader.java deleted file mode 100644 index 3339b25e..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryReader.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.space.server.domain.inventory.service.implementation; - -import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.inventory.domain.repository.InventoryRepository; -import com.space.server.domain.inventory.exception.InventoryNotFoundException; -import com.space.server.domain.item.domain.value.Category; -import com.space.server.domain.user.domain.Users; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class InventoryReader { - - private final InventoryRepository inventoryRepository; - - public Inventory findById(Long inventoryId) { - return inventoryRepository.findById(inventoryId) - .orElseThrow(InventoryNotFoundException::new); - } - - public List findByUser(Users user) { - return inventoryRepository.findByUser(user); - } - - public List findByIsEquippedAndUser(Users user) { - return inventoryRepository.findByIsEquippedAndUser(user); - } - - public Inventory findByCategoryAndUserAndIsEquipped(Category category, Users user) { - return inventoryRepository.findByCategoryAndUserAndIsEquipped(category, user); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryUpdater.java b/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryUpdater.java deleted file mode 100644 index 10f19229..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryUpdater.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.space.server.domain.inventory.service.implementation; - -import com.space.server.domain.inventory.domain.Inventory; -import org.springframework.stereotype.Service; - -@Service -public class InventoryUpdater { - - public void equip(Inventory inventory) { - inventory.equip(); - } - - public void unEquip(Inventory inventory) { - inventory.unEquip(); - } -} diff --git a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryValidator.java b/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryValidator.java deleted file mode 100644 index 463ca773..00000000 --- a/src/main/java/com/space/server/domain/inventory/service/implementation/InventoryValidator.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.space.server.domain.inventory.service.implementation; - -import com.space.server.domain.inventory.domain.repository.InventoryRepository; -import com.space.server.domain.inventory.exception.InventoryItemExistedException; -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.user.domain.Users; -import com.space.server.domain.user.exception.InsufficientPointsException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class InventoryValidator { - private final InventoryRepository inventoryRepository; - - public void hasItem(Item item, Users user) { - if(inventoryRepository.existsByItemAndUser(item, user)) { - throw new InventoryItemExistedException(); - } - } - - public void buyItem(Item item, Users user) { - if(item.getPrice() > user.getPoint()) { - throw new InsufficientPointsException(); - } - else user.payPoint(item.getPrice()); - } -} diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java similarity index 75% rename from src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java rename to src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java index 6be63f1c..44c68a8d 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/SpringDataItemRepository.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java @@ -5,7 +5,7 @@ import java.util.List; -public interface SpringDataItemRepository extends JpaRepository { +public interface ItemRepository extends JpaRepository { List findByCategory(Category category); } From 9dd89aac01cb4f37da7b832b6d5a5bda3644f3e2 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 21:55:58 +0900 Subject: [PATCH 032/157] refactor(Inventory): InventoryRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용을 위해 Jpa Entity로 변경 --- .../inventory/adapter/out/persistence/InventoryRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java index 9bd79650..aed6d0ce 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java @@ -16,5 +16,4 @@ public interface InventoryRepository extends JpaRepository findByIsEquippedAndUser(@Param("user") Users user); @Query("SELECT i FROM InventoryJpaEntity i WHERE i.user = :user AND i.item.category = :category AND i.isEquipped = true") InventoryJpaEntity findByCategoryAndUserAndIsEquipped(@Param("category") Category category, @Param("user") Users user); - } From bc6f6471659e6180621bb6626568ae0c5d384b29 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:04:15 +0900 Subject: [PATCH 033/157] refactor(Item): BuyItemUseCase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 구매를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../domain/item/application/port/in/BuyItemUseCase.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/in/BuyItemUseCase.java diff --git a/src/main/java/com/space/server/domain/item/application/port/in/BuyItemUseCase.java b/src/main/java/com/space/server/domain/item/application/port/in/BuyItemUseCase.java new file mode 100644 index 00000000..e91b6b1c --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/in/BuyItemUseCase.java @@ -0,0 +1,7 @@ +package com.space.server.domain.item.application.port.in; + +public interface BuyItemUseCase { + + void buyItem(Long itemId, Long userId); +} + From b66ac1a174e2bc20587c210448ee121fd9f2a4da Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:04:32 +0900 Subject: [PATCH 034/157] refactor(Item): BuyItemPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 구매를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../domain/item/application/port/out/BuyItemPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/port/out/BuyItemPort.java diff --git a/src/main/java/com/space/server/domain/item/application/port/out/BuyItemPort.java b/src/main/java/com/space/server/domain/item/application/port/out/BuyItemPort.java new file mode 100644 index 00000000..ab979367 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/port/out/BuyItemPort.java @@ -0,0 +1,10 @@ + +package com.space.server.domain.item.application.port.out; + +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; + +public interface BuyItemPort { + + void buyItemPort(Item item, Users user); +} From 4732da03f86c907d21ffbbc06b6e52e14e8a57fe Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:04:43 +0900 Subject: [PATCH 035/157] refactor(Item): BuyItemService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 구매를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../application/service/BuyItemService.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/application/service/BuyItemService.java diff --git a/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java b/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java new file mode 100644 index 00000000..7464a16c --- /dev/null +++ b/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java @@ -0,0 +1,31 @@ +package com.space.server.domain.item.application.service; + +import com.space.server.domain.common.UseCase; +import com.space.server.domain.item.application.port.in.BuyItemUseCase; +import com.space.server.domain.item.application.port.out.BuyItemPort; +import com.space.server.domain.item.application.port.out.LoadItemPort; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; +import com.space.server.domain.user.domain.repository.UserRepository; +import com.space.server.domain.user.exception.UserNotFoundException; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class BuyItemService implements BuyItemUseCase { + + private final BuyItemPort buyItemPort; + private final LoadItemPort loadItemPort; + private final UserRepository userRepository; + + @Override + public void buyItem(Long itemId, Long userId) { + Item item = loadItemPort.loadItem(itemId); + Users user = userRepository.findById(userId) + .orElseThrow(UserNotFoundException::new); + + //구매 가능 여부 로직 + + buyItemPort.buyItemPort(item, user); + } +} From 92c1d883586723a13d76a20d87ccfdbe0562f3a8 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:04:56 +0900 Subject: [PATCH 036/157] refactor(Item): BuyItemAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 구매를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/BuyItemAdapter.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java new file mode 100644 index 00000000..bd5d0a26 --- /dev/null +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java @@ -0,0 +1,28 @@ +package com.space.server.domain.item.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.adapter.out.persistence.InventoryJpaEntity; +import com.space.server.domain.inventory.adapter.out.persistence.InventoryMapper; +import com.space.server.domain.inventory.adapter.out.persistence.InventoryRepository; +import com.space.server.domain.inventory.application.port.out.CreateInventoryPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.application.port.out.BuyItemPort; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class BuyItemAdapter implements BuyItemPort { + + private final InventoryRepository inventoryRepository; + private final InventoryMapper inventoryMapper; + private final CreateInventoryPort createInventoryPort; + + @Override + public void buyItemPort(Item item, Users user) { + Inventory inventory = createInventoryPort.create(item, user); + InventoryJpaEntity itemJpaEntity = inventoryMapper.mapToInventoryJpaEntity(inventory); + inventoryRepository.save(itemJpaEntity); + } +} From 275b508fabb2b29c73de91c41d21857108071e1f Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:05:18 +0900 Subject: [PATCH 037/157] refactor(Inventory): EquipInventoryUseCase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 장착을 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../application/port/in/EquipInventoryUseCase.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java b/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java new file mode 100644 index 00000000..7b727113 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java @@ -0,0 +1,6 @@ +package com.space.server.domain.inventory.application.port.in; + +public interface EquipInventoryUseCase { + + void equipInventory(Long userId, Long InventoryId); +} From 52276abb3e1611e29b2de05409fef202b5820a53 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:05:35 +0900 Subject: [PATCH 038/157] refactor(Inventory): EquipInventoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 장착을 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/EquipInventoryPort.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java new file mode 100644 index 00000000..8b4c8d6b --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java @@ -0,0 +1,13 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.domain.value.Category; + +public interface EquipInventoryPort { + + Inventory findEquippedInventoryByCategoryAndUser(Category category, Long userId); + + void equipInventory(Inventory inventory); + + void unEquipInventory(Inventory inventory); +} From e09097a360cee4a70a15368d1928811f662d0f43 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:07:11 +0900 Subject: [PATCH 039/157] refactor(Inventory): GetInventoriesByIsEquippedQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 장착된 아이템들 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../port/in/GetInventoriesByIsEquippedQuery.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesByIsEquippedQuery.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesByIsEquippedQuery.java b/src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesByIsEquippedQuery.java new file mode 100644 index 00000000..35de6675 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesByIsEquippedQuery.java @@ -0,0 +1,10 @@ +package com.space.server.domain.inventory.application.port.in; + +import com.space.server.domain.inventory.domain.Inventory; + +import java.util.List; + +public interface GetInventoriesByIsEquippedQuery { + + List getInventoriesByIsEquippedQuery(Long userId); +} From d89b47b10029f8c614581660f587caf912bbfe6e Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:07:23 +0900 Subject: [PATCH 040/157] refactor(Inventory): LoadInventoriesByIsEquippedPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 장착된 아이템들 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../port/out/LoadInventoriesByIsEquippedPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesByIsEquippedPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesByIsEquippedPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesByIsEquippedPort.java new file mode 100644 index 00000000..4502bb7b --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesByIsEquippedPort.java @@ -0,0 +1,10 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.inventory.domain.Inventory; + +import java.util.List; + +public interface LoadInventoriesByIsEquippedPort { + + List loadInventoriesByIsEquippedPort(Long userId); +} From a7077cbd5c08669ec1bbb3fcee7caf70dc684b00 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:07:39 +0900 Subject: [PATCH 041/157] refactor(Inventory): GetInventoriesByIsEquippedService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 장착된 아이템들 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../GetInventoriesByIsEquippedService.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java diff --git a/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java new file mode 100644 index 00000000..10525d33 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java @@ -0,0 +1,21 @@ +package com.space.server.domain.inventory.application.service; + +import com.space.server.domain.common.UseCase; +import com.space.server.domain.inventory.application.port.in.GetInventoriesByIsEquippedQuery; +import com.space.server.domain.inventory.application.port.out.LoadInventoriesByIsEquippedPort; +import com.space.server.domain.inventory.domain.Inventory; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetInventoriesByIsEquippedService implements GetInventoriesByIsEquippedQuery { + + private final LoadInventoriesByIsEquippedPort loadInventoriesByIsEquippedPort; + + @Override + public List getInventoriesByIsEquippedQuery(Long userId) { + return loadInventoriesByIsEquippedPort.loadInventoriesByIsEquippedPort(userId); + } +} From 092081daa05f2f4d131c1a00c7c2eaec19455e32 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:07:55 +0900 Subject: [PATCH 042/157] refactor(Inventory): InventoriesByIsEquippedGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 장착된 아이템들 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../InventoriesByIsEquippedGetAdapter.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java new file mode 100644 index 00000000..1fd2e399 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java @@ -0,0 +1,26 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.LoadInventoriesByIsEquippedPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.user.domain.repository.UserRepository; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class InventoriesByIsEquippedGetAdapter implements LoadInventoriesByIsEquippedPort { + + private final InventoryRepository inventoryRepository; + private final InventoryMapper inventoryMapper; + private final UserRepository userRepository; + + + @Override + public List loadInventoriesByIsEquippedPort(Long userId) { + return inventoryRepository.findByIsEquippedAndUser(userRepository.findById(userId).get()).stream() + .map(inventoryMapper::mapToInventory) + .toList(); + } +} From b4eddcb4f5e6cade7fd56c7040ca114694ad15d1 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:09:28 +0900 Subject: [PATCH 043/157] refactor(Inventory): GetInventoriesQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../application/port/in/GetInventoriesQuery.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesQuery.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesQuery.java b/src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesQuery.java new file mode 100644 index 00000000..a5ecd1b2 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/in/GetInventoriesQuery.java @@ -0,0 +1,10 @@ +package com.space.server.domain.inventory.application.port.in; + +import com.space.server.domain.inventory.domain.Inventory; + +import java.util.List; + +public interface GetInventoriesQuery { + + List getInventories(Long userId); +} From ac4fe72b9995d33cd0d44b02c7a4fe369c50b539 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:09:46 +0900 Subject: [PATCH 044/157] refactor(Inventory): LoadInventoriesPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/LoadInventoriesPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesPort.java new file mode 100644 index 00000000..e97d2894 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoriesPort.java @@ -0,0 +1,10 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.inventory.domain.Inventory; + +import java.util.List; + +public interface LoadInventoriesPort { + + List loadInventories(Long userid); +} From 92a9f10da3228f999b51a78786d58352f5d320bf Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:10:00 +0900 Subject: [PATCH 045/157] refactor(Inventory): GetInventoriesService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/GetInventoriesService.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java diff --git a/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java new file mode 100644 index 00000000..511c8c29 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java @@ -0,0 +1,21 @@ +package com.space.server.domain.inventory.application.service; + +import com.space.server.domain.common.UseCase; +import com.space.server.domain.inventory.application.port.in.GetInventoriesQuery; +import com.space.server.domain.inventory.application.port.out.LoadInventoriesPort; +import com.space.server.domain.inventory.domain.Inventory; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetInventoriesService implements GetInventoriesQuery { + + private final LoadInventoriesPort loadInventoriesPort; + + @Override + public List getInventories(Long userId) { + return loadInventoriesPort.loadInventories(userId); + } +} From 493a67cc2197956a03ad43c2786d65d11441cb5a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:10:13 +0900 Subject: [PATCH 046/157] refactor(Inventory): InventoriesGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../persistence/InventoriesGetAdapter.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java new file mode 100644 index 00000000..bda9cdc5 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java @@ -0,0 +1,25 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.LoadInventoriesPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.user.domain.repository.UserRepository; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class InventoriesGetAdapter implements LoadInventoriesPort { + + private final InventoryRepository inventoryRepository; + private final InventoryMapper inventoryMapper; + private final UserRepository userRepository; + + @Override + public List loadInventories(Long userId) { + return inventoryRepository.findByUser(userRepository.findById(userId).get()).stream() + .map(inventoryMapper::mapToInventory) + .toList(); + } +} From 7641e4c83177ca49c944824ce0be70cf5f16045c Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:10:44 +0900 Subject: [PATCH 047/157] refactor(Inventory): EquipInventoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 장착을 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/EquipInventoryService.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java new file mode 100644 index 00000000..54bb7cbc --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -0,0 +1,29 @@ +package com.space.server.domain.inventory.application.service; + +import com.space.server.domain.common.UseCase; +import com.space.server.domain.inventory.application.port.in.EquipInventoryUseCase; +import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; +import com.space.server.domain.inventory.application.port.out.LoadInventoryPort; +import com.space.server.domain.inventory.domain.Inventory; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class EquipInventoryService implements EquipInventoryUseCase { + + private final EquipInventoryPort equipInventoryPort; + private final LoadInventoryPort loadInventoryPort; + + @Override + public void equipInventory(Long userId, Long inventoryId) { + Inventory inventory = loadInventoryPort.loadInventory(inventoryId); + + Inventory equippedInventory = equipInventoryPort.findEquippedInventoryByCategoryAndUser( + inventory.getItem().getCategory(), + userId + ); + + equipInventoryPort.unEquipInventory(equippedInventory); + equipInventoryPort.equipInventory(inventory); + } +} From a8039fe3573539e575fd0ae18532f8c08f9209c2 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:13:14 +0900 Subject: [PATCH 048/157] feat(Inventory): InventoryMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용을 위한 인벤토리 Domain Entity와 Jpa Entity 변환용 --- .../out/persistence/InventoryMapper.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java new file mode 100644 index 00000000..c5a4eaa1 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java @@ -0,0 +1,33 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.adapter.out.persistence.ItemMapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class InventoryMapper { + + private final ItemMapper itemMapper; + + public Inventory mapToInventory( + InventoryJpaEntity inventory + ) { + return Inventory.builder() + .id(new Inventory.InventoryId(inventory.getId())) + .user(inventory.getUser()) + .item(itemMapper.mapToItem(inventory.getItem())) + .isEquipped(inventory.isEquipped()) + .build(); + } + + public InventoryJpaEntity mapToInventoryJpaEntity(Inventory inventory) { + return InventoryJpaEntity.builder() + .id(inventory.getId() == null ? null : inventory.getId().getValue()) + .user(inventory.getUser()) + .item(itemMapper.mapToItemJpaEntity(inventory.getItem())) + .isEquipped(inventory.isEquipped()) + .build(); + } +} From 8f71684d64191171d59aef672b53635be46fda7d Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:13:48 +0900 Subject: [PATCH 049/157] refactor(Inventory): LoadInventoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/LoadInventoryPort.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java new file mode 100644 index 00000000..90c82d6d --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java @@ -0,0 +1,9 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.inventory.domain.Inventory; + +public interface LoadInventoryPort { + + Inventory loadInventory(Long inventoryId); + +} From a9d9c1c9790f32c2265c1e893a7e0a9cf86caff7 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:13:59 +0900 Subject: [PATCH 050/157] refactor(Inventory): InventoryGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/InventoryGetAdapter.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java new file mode 100644 index 00000000..eb4c5fd0 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java @@ -0,0 +1,21 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.LoadInventoryPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.inventory.exception.InventoryNotFoundException; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class InventoryGetAdapter implements LoadInventoryPort { + + private final InventoryRepository inventoryRepository; + private final InventoryMapper inventoryMapper; + + @Override + public Inventory loadInventory(Long inventoryId) { + return inventoryMapper.mapToInventory(inventoryRepository.findById(inventoryId) + .orElseThrow(InventoryNotFoundException::new)); + } +} From 978d644620d07a52b15f6ffadbf69be7b41525fb Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:14:13 +0900 Subject: [PATCH 051/157] refactor(Inventory): CreateInventoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 생성을 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/CreateInventoryPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/CreateInventoryPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/CreateInventoryPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/CreateInventoryPort.java new file mode 100644 index 00000000..7d71a1eb --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/CreateInventoryPort.java @@ -0,0 +1,10 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; + +public interface CreateInventoryPort { + + Inventory create(Item item, Users user); +} From ef6a8c9cfa0dd4f60decfceaa18d28ee5abcad70 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:14:23 +0900 Subject: [PATCH 052/157] refactor(Inventory): CreateInventoryAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 인벤토리 생성을 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../persistence/CreateInventoryAdapter.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java new file mode 100644 index 00000000..849c84c1 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java @@ -0,0 +1,24 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.CreateInventoryPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +@PersistenceAdapter +@RequiredArgsConstructor +public class CreateInventoryAdapter implements CreateInventoryPort { + + @Override + public Inventory create(Item item, Users user) { + return Inventory.builder() + .item(item) + .user(user) + .isEquipped(false) + .build(); + }; +} From 099c872fc8b9d9471a009035a21b8d5738e40555 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:14:58 +0900 Subject: [PATCH 053/157] refactor(Item): Item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 편리한 객체 생성을 위해 Builder 패턴 도입 --- src/main/java/com/space/server/domain/item/domain/Item.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/domain/Item.java b/src/main/java/com/space/server/domain/item/domain/Item.java index bbc76f8b..b096a3e8 100644 --- a/src/main/java/com/space/server/domain/item/domain/Item.java +++ b/src/main/java/com/space/server/domain/item/domain/Item.java @@ -8,6 +8,7 @@ import java.util.Optional; @Getter +@Builder @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Item { @@ -30,7 +31,6 @@ public static Item create(ItemId id, String name, Integer price, String image, C return new Item(id, name, price, image, category); } - public Optional getId(){ return Optional.ofNullable(this.id); } From e28f094827c6fcf004e5ff07ad045fceb553e575 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:15:11 +0900 Subject: [PATCH 054/157] refactor(Item): ItemJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 편리한 객체 생성을 위해 Builder 패턴 도입 --- .../domain/item/adapter/out/persistence/ItemJpaEntity.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java index e1c745af..c7ef2aba 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java @@ -3,9 +3,11 @@ import com.space.server.domain.item.domain.value.Category; import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +@Builder @Entity @Table(name = "item") @Getter From b982aab4e36c731e91d2f7a4180d1d527b858652 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:16:18 +0900 Subject: [PATCH 055/157] feat(Item): ItemMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jpa Entity에서 Domain Entity로 변환하는 기능 추가 --- .../adapter/out/persistence/ItemMapper.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java index f9303684..7131d682 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java @@ -6,13 +6,23 @@ @Component public class ItemMapper { - Item mapToDomainEntity(ItemJpaEntity item) { - return Item.create( - new Item.ItemId(item.getId()), - item.getName(), - item.getPrice(), - item.getImage(), - item.getCategory() - ); + public Item mapToItem(ItemJpaEntity item) { + return Item.builder() + .id(new Item.ItemId(item.getId())) + .name(item.getName()) + .price(item.getPrice()) + .image(item.getImage()) + .category(item.getCategory()) + .build(); + } + + public ItemJpaEntity mapToItemJpaEntity(Item item) { + return ItemJpaEntity.builder() + .id(item.getId().get().getValue()) + .name(item.getName()) + .price(item.getPrice()) + .image(item.getImage()) + .category(item.getCategory()) + .build(); } } From bcc0f4e833d0c44853b096d9a81cef63cf14d581 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:16:48 +0900 Subject: [PATCH 056/157] refactor(Item): ItemsGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 좀 더 명확한 명명 적용 --- .../domain/item/adapter/out/persistence/ItemsGetAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java index 06a371fb..0daf86c3 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java @@ -11,14 +11,14 @@ @RequiredArgsConstructor public class ItemsGetAdapter implements LoadItemsPort { - private final SpringDataItemRepository itemRepository; + private final ItemRepository itemRepository; private final ItemMapper itemMapper; @Override public List loadItems() { return itemRepository.findAll() .stream() - .map(itemMapper::mapToDomainEntity) + .map(itemMapper::mapToItem) .toList(); } } From 0c3c92c5420c91b6fa028da3cfdaee42ffe394b7 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:17:20 +0900 Subject: [PATCH 057/157] refactor(Item): QueryItemService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 적용된 버전으로 Service 변경 --- .../domain/item/service/QueryItemService.java | 30 ------------------- 1 file changed, 30 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/item/service/QueryItemService.java diff --git a/src/main/java/com/space/server/domain/item/service/QueryItemService.java b/src/main/java/com/space/server/domain/item/service/QueryItemService.java deleted file mode 100644 index e7286bcc..00000000 --- a/src/main/java/com/space/server/domain/item/service/QueryItemService.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.space.server.domain.item.service; - -import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.domain.value.Category; -import com.space.server.domain.item.service.implementation.ItemReader; -import org.springframework.transaction.annotation.Transactional; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class QueryItemService { - - private final ItemReader itemReader; - - public List findAllByCategory(Category category) { - return itemReader.findAllByCategory(category); - } - - public List readAll() { - return itemReader.findAll(); - } - - public Item readOne(Long itemId) { - return itemReader.findById(itemId); - } -} From ea1c0104fa2e56812d38875e1a399b07bb4e9e85 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:17:38 +0900 Subject: [PATCH 058/157] refactor(Item): ItemGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 좀 더 명확한 명명 적용 --- .../domain/item/adapter/out/persistence/ItemGetAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java index a961692c..cd15ece0 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java @@ -10,13 +10,13 @@ @RequiredArgsConstructor public class ItemGetAdapter implements LoadItemPort { - private final SpringDataItemRepository itemRepository; + private final ItemRepository itemRepository; private final ItemMapper itemMapper; @Override public Item loadItem(Long id) { return itemRepository.findById(id) - .map(itemMapper::mapToDomainEntity) + .map(itemMapper::mapToItem) .orElseThrow(ItemNotFoundException::new); } } From 10eaeb2519ea2ac56d38f487a12c38bc79df8f3d Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:17:48 +0900 Subject: [PATCH 059/157] refactor(Item): ItemByCategoryGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 좀 더 명확한 명명 적용 --- .../adapter/out/persistence/ItemByCategoryGetAdapter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java index 88dc61a9..2104d1a6 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java @@ -11,15 +11,15 @@ @PersistenceAdapter @RequiredArgsConstructor public class ItemByCategoryGetAdapter implements LoadItemsByCategoryPort { - private final SpringDataItemRepository itemRepository; - private final ItemMapper itemMapper; + private final ItemRepository itemRepository; + private final ItemMapper itemMapper; @Override public List loadItemsByCategory(Category category) { return itemRepository.findByCategory(category) .stream() - .map(itemMapper::mapToDomainEntity) + .map(itemMapper::mapToItem) .toList(); } } From 8cc9e11ccd4c58e9a93e9d73f97d72f2d52bc607 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 22:18:27 +0900 Subject: [PATCH 060/157] refactor(Item): ItemController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 구매를 위한 단일 책임 적용 및 클린 아키텍처 적용 Controller --- .../domain/item/adapter/in/web/ItemController.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java index 303a5435..075bda66 100644 --- a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java @@ -2,18 +2,18 @@ import com.space.server.domain.item.adapter.in.web.converter.CategoryConverter; import com.space.server.domain.item.adapter.in.web.dto.response.ItemResponse; +import com.space.server.domain.item.application.port.in.BuyItemUseCase; import com.space.server.domain.item.application.port.in.GetItemQuery; import com.space.server.domain.common.WebAdapter; import com.space.server.domain.item.application.port.in.GetItemsByCategoryQuery; import com.space.server.domain.item.application.port.in.GetItemsQuery; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; +import static com.space.server.common.jwt.util.AuthenticationUtil.getMemberId; + @WebAdapter @RestController @RequiredArgsConstructor @@ -23,9 +23,13 @@ public class ItemController { private final GetItemQuery getItemQuery; private final GetItemsQuery getItemsQuery; private final GetItemsByCategoryQuery getItemsByCategoryQuery; + private final BuyItemUseCase buyItemUseCase; private final CategoryConverter converter; - //아이템 구매 + @PostMapping("/{item-id}") + public void buyItem(@PathVariable("item-id") Long itemId) { + buyItemUseCase.buyItem(itemId, getMemberId()); + } @GetMapping("/{item-id}") public ItemResponse readOne(@PathVariable("item-id") Long itemId) { From e6ffbc061b48e96a2bcba87befb4837ed543c4c1 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:48:02 +0900 Subject: [PATCH 061/157] refactor(Inventory): CheckHaveItemPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 이미 구매했는지 확인을 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/CheckHaveItemPort.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/CheckHaveItemPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/CheckHaveItemPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/CheckHaveItemPort.java new file mode 100644 index 00000000..2678c8c9 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/CheckHaveItemPort.java @@ -0,0 +1,9 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; + +public interface CheckHaveItemPort { + + Boolean checkHaveItem(Item item, Users user); +} From 49f2e546db63e942ba30f58777c7e06bc50de044 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:48:13 +0900 Subject: [PATCH 062/157] refactor(Inventory): CheckHaveItemAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 이미 구매했는지 확인을 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/CheckHaveItemAdapter.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java new file mode 100644 index 00000000..4c2b7500 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java @@ -0,0 +1,23 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.CheckHaveItemPort; +import com.space.server.domain.item.adapter.out.persistence.ItemJpaEntity; +import com.space.server.domain.item.adapter.out.persistence.ItemMapper; +import com.space.server.domain.item.domain.Item; +import com.space.server.domain.user.domain.Users; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class CheckHaveItemAdapter implements CheckHaveItemPort { + + private final InventoryRepository inventoryRepository; + private final ItemMapper itemMapper; + + @Override + public Boolean checkHaveItem(Item item, Users user) { + ItemJpaEntity itemJpaEntity = itemMapper.mapToItemJpaEntity(item); + return inventoryRepository.existsByItemAndUser(itemJpaEntity, user); + } +} From da4b590ff6daac9f3f8b845ab7b54d6990057e65 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:49:23 +0900 Subject: [PATCH 063/157] refactor(Inventory): CheckHaveItemAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 이미 구매했는지 확인을 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../domain/item/application/service/BuyItemService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java b/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java index 7464a16c..a3b0d1fe 100644 --- a/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java +++ b/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java @@ -1,6 +1,8 @@ package com.space.server.domain.item.application.service; import com.space.server.domain.common.UseCase; +import com.space.server.domain.inventory.application.port.out.CheckHaveItemPort; +import com.space.server.domain.inventory.exception.InventoryItemExistedException; import com.space.server.domain.item.application.port.in.BuyItemUseCase; import com.space.server.domain.item.application.port.out.BuyItemPort; import com.space.server.domain.item.application.port.out.LoadItemPort; @@ -16,6 +18,7 @@ public class BuyItemService implements BuyItemUseCase { private final BuyItemPort buyItemPort; private final LoadItemPort loadItemPort; + private final CheckHaveItemPort checkHaveItemPort; private final UserRepository userRepository; @Override @@ -24,7 +27,7 @@ public void buyItem(Long itemId, Long userId) { Users user = userRepository.findById(userId) .orElseThrow(UserNotFoundException::new); - //구매 가능 여부 로직 + if(checkHaveItemPort.checkHaveItem(item, user)) throw new InventoryItemExistedException(); buyItemPort.buyItemPort(item, user); } From ca22b7a61da8cdba10367f2cccd0bb99a491d28a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:49:46 +0900 Subject: [PATCH 064/157] remove(Inventory): CreateInventoryAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 세미콜론 제거 --- .../adapter/out/persistence/CreateInventoryAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java index 849c84c1..b216cf1d 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java @@ -20,5 +20,5 @@ public Inventory create(Item item, Users user) { .user(user) .isEquipped(false) .build(); - }; + } } From eeeb264734caad87f01a3ffe7d2ad51b4bfc3df2 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:51:02 +0900 Subject: [PATCH 065/157] refactor(Inventory): EquipInventoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 인벤토리를 가지고 있는지 확인을 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../inventory/application/service/EquipInventoryService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java index 54bb7cbc..283d3244 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -5,6 +5,7 @@ import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; import com.space.server.domain.inventory.application.port.out.LoadInventoryPort; import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.inventory.exception.InventoryNotFoundException; import lombok.RequiredArgsConstructor; @UseCase @@ -18,6 +19,8 @@ public class EquipInventoryService implements EquipInventoryUseCase { public void equipInventory(Long userId, Long inventoryId) { Inventory inventory = loadInventoryPort.loadInventory(inventoryId); + if(inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); + Inventory equippedInventory = equipInventoryPort.findEquippedInventoryByCategoryAndUser( inventory.getItem().getCategory(), userId From baffadbd8244f233d9b0cd726c5ea23dbcca24dc Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:51:42 +0900 Subject: [PATCH 066/157] remove(Inventory): InventoriesByIsEquippedGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 줄 띄움 제거 --- .../out/persistence/InventoriesByIsEquippedGetAdapter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java index 1fd2e399..ec6667a7 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java @@ -16,7 +16,6 @@ public class InventoriesByIsEquippedGetAdapter implements LoadInventoriesByIsEqu private final InventoryMapper inventoryMapper; private final UserRepository userRepository; - @Override public List loadInventoriesByIsEquippedPort(Long userId) { return inventoryRepository.findByIsEquippedAndUser(userRepository.findById(userId).get()).stream() From a74bc78cd511476100c9a7ad4537c98d49e0ab66 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:52:03 +0900 Subject: [PATCH 067/157] refactor(Inventory): InventoryRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이템 이미 구매했는지 확인을 위한 단일 책임 적용 및 클린 아키텍처 적용 Repository --- .../inventory/adapter/out/persistence/InventoryRepository.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java index aed6d0ce..0aa592e1 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryRepository.java @@ -1,5 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; +import com.space.server.domain.item.adapter.out.persistence.ItemJpaEntity; import com.space.server.domain.item.domain.value.Category; import com.space.server.domain.user.domain.Users; import org.springframework.data.jpa.repository.JpaRepository; @@ -12,6 +13,7 @@ @Repository public interface InventoryRepository extends JpaRepository { List findByUser(Users user); + Boolean existsByItemAndUser(ItemJpaEntity item, Users user); @Query("SELECT i FROM InventoryJpaEntity i WHERE i.user = :user AND i.isEquipped = true") List findByIsEquippedAndUser(@Param("user") Users user); @Query("SELECT i FROM InventoryJpaEntity i WHERE i.user = :user AND i.item.category = :category AND i.isEquipped = true") From e4bfe862975ad9a5e3932ca7f36bbcb711246147 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:52:13 +0900 Subject: [PATCH 068/157] remove(Inventory): LoadInventoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 줄 띄움 제거 --- .../domain/inventory/application/port/out/LoadInventoryPort.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java index 90c82d6d..c4058937 100644 --- a/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadInventoryPort.java @@ -5,5 +5,4 @@ public interface LoadInventoryPort { Inventory loadInventory(Long inventoryId); - } From 811f3d3a1b5f267f44af96af49af9400ffcd2b7a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Sun, 17 Nov 2024 23:53:45 +0900 Subject: [PATCH 069/157] refactor(User): UserJoiner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 유저 생성시 기본 머리와 테마를 가지는 것을 위한 클린 아키텍처 적용 Service --- .../service/implementation/UserJoiner.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/space/server/common/auth/service/implementation/UserJoiner.java b/src/main/java/com/space/server/common/auth/service/implementation/UserJoiner.java index 5af7a81e..823690fa 100644 --- a/src/main/java/com/space/server/common/auth/service/implementation/UserJoiner.java +++ b/src/main/java/com/space/server/common/auth/service/implementation/UserJoiner.java @@ -1,11 +1,11 @@ package com.space.server.common.auth.service.implementation; import com.space.server.common.auth.presentation.dto.request.JoinUserRequest; +import com.space.server.domain.inventory.adapter.out.persistence.EquipInventoryAdapter; +import com.space.server.domain.inventory.application.port.out.CreateInventoryPort; import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.inventory.service.implementation.InventoryCreator; -import com.space.server.domain.inventory.service.implementation.InventoryUpdater; +import com.space.server.domain.item.application.port.in.GetItemQuery; import com.space.server.domain.item.domain.Item; -import com.space.server.domain.item.service.implementation.ItemReader; import com.space.server.domain.user.domain.Users; import com.space.server.domain.user.domain.repository.UserRepository; import com.space.server.domain.user.domain.value.Role; @@ -21,9 +21,9 @@ public class UserJoiner { private final UserRepository userRepository; private final BCryptPasswordEncoder passwordEncoder; - private final InventoryCreator inventoryCreator; - private final InventoryUpdater inventoryUpdater; - private final ItemReader itemReader; + private final CreateInventoryPort createInventoryPort; + private final GetItemQuery getItemQuery; + private final EquipInventoryAdapter equipInventoryAdapter; @Transactional public void joinProcess(JoinUserRequest joinUserRequest) { @@ -48,16 +48,13 @@ public void joinProcess(JoinUserRequest joinUserRequest) { userRepository.save(user); - Item head = itemReader.findById(1L); - Item theme = itemReader.findById(2L); + Item head = getItemQuery.getItem(1L); + Item theme = getItemQuery.getItem(2L); - Inventory In_head = new Inventory(head, user); - Inventory In_theme = new Inventory(theme, user); + Inventory In_head = createInventoryPort.create(head, user); + Inventory In_theme = createInventoryPort.create(theme, user); - inventoryCreator.create(In_head); - inventoryCreator.create(In_theme); - - inventoryUpdater.equip(In_head); - inventoryUpdater.equip(In_theme); + equipInventoryAdapter.equipInventory(In_head); + equipInventoryAdapter.equipInventory(In_theme); } } From 8ee41b797a55384a44a267962029bfe00678b696 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 00:06:55 +0900 Subject: [PATCH 070/157] fix(User): EquipInventoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 인벤토리를 가지고 있는지 판별하는 것이 반대로 되어있어서 수정 --- .../inventory/application/service/EquipInventoryService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java index 283d3244..b0238aae 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -19,7 +19,7 @@ public class EquipInventoryService implements EquipInventoryUseCase { public void equipInventory(Long userId, Long inventoryId) { Inventory inventory = loadInventoryPort.loadInventory(inventoryId); - if(inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); + if(!inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); Inventory equippedInventory = equipInventoryPort.findEquippedInventoryByCategoryAndUser( inventory.getItem().getCategory(), From b6aeb95941e90f7d7411ee3637dcda23aafbfb39 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 00:06:55 +0900 Subject: [PATCH 071/157] fix(Inventory): EquipInventoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 인벤토리를 가지고 있는지 판별하는 것이 반대로 되어있어서 수정 --- .../inventory/application/service/EquipInventoryService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java index 283d3244..b0238aae 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -19,7 +19,7 @@ public class EquipInventoryService implements EquipInventoryUseCase { public void equipInventory(Long userId, Long inventoryId) { Inventory inventory = loadInventoryPort.loadInventory(inventoryId); - if(inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); + if(!inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); Inventory equippedInventory = equipInventoryPort.findEquippedInventoryByCategoryAndUser( inventory.getItem().getCategory(), From 0ca4dff4331941dd7ad7676fdbba2edad627a70b Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 00:24:48 +0900 Subject: [PATCH 072/157] remove(Item): ItemRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 줄 띄움 제거 --- .../domain/item/adapter/out/persistence/ItemRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java index 44c68a8d..ebf6686b 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemRepository.java @@ -7,5 +7,4 @@ public interface ItemRepository extends JpaRepository { List findByCategory(Category category); - } From bd19b26ae3d3a6c748a36709347dfd08c1bb8bb3 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 01:12:55 +0900 Subject: [PATCH 073/157] fix(Inventory): EquipInventoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit userId와 inventoryId가 반대로 되어 있던 것을 수정하였습니다. --- .../inventory/application/service/EquipInventoryService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java index b0238aae..3d43b435 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -16,7 +16,7 @@ public class EquipInventoryService implements EquipInventoryUseCase { private final LoadInventoryPort loadInventoryPort; @Override - public void equipInventory(Long userId, Long inventoryId) { + public void equipInventory(Long inventoryId, Long userId) { Inventory inventory = loadInventoryPort.loadInventory(inventoryId); if(!inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); From 0a128e9dd7402792d645c9ec6d85304613e2a13e Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 01:13:01 +0900 Subject: [PATCH 074/157] fix(Inventory): EquipInventoryUseCase MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit userId와 inventoryId가 반대로 되어 있던 것을 수정하였습니다. --- .../inventory/application/port/in/EquipInventoryUseCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java b/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java index 7b727113..025144d1 100644 --- a/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java +++ b/src/main/java/com/space/server/domain/inventory/application/port/in/EquipInventoryUseCase.java @@ -2,5 +2,5 @@ public interface EquipInventoryUseCase { - void equipInventory(Long userId, Long InventoryId); + void equipInventory(Long InventoryId, Long userId); } From 48b91876e723c883aef01c6498b89d7b334a0787 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 01:13:11 +0900 Subject: [PATCH 075/157] fix(Inventory): InventoryController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit userId와 inventoryId가 반대로 되어 있던 것을 수정하였습니다. --- .../domain/inventory/adapter/in/web/InventoryController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java b/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java index 1d080e08..ebca5cdd 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java @@ -37,6 +37,6 @@ public List readIsEquipped() { @PutMapping("/{inventory-id}") public void equipItem(@PathVariable(name = "inventory-id") Long inventoryId) { - equipInventoryUseCase.equipInventory(getMemberId(), inventoryId); + equipInventoryUseCase.equipInventory(inventoryId, getMemberId()); } } From 861260bc0207d438c43bafddf083a9b2112872e2 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 08:05:52 +0900 Subject: [PATCH 076/157] remove(Inventory): CreateInventoryAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 어노테이션을 제거하였습니다. --- .../adapter/out/persistence/CreateInventoryAdapter.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java index b216cf1d..a50c6242 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java @@ -6,9 +6,7 @@ import com.space.server.domain.item.domain.Item; import com.space.server.domain.user.domain.Users; import lombok.RequiredArgsConstructor; -import org.springframework.transaction.annotation.Transactional; -@Transactional @PersistenceAdapter @RequiredArgsConstructor public class CreateInventoryAdapter implements CreateInventoryPort { From f87eea3348a00cab17c9786f4ab074eeb495b9a6 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 08:07:00 +0900 Subject: [PATCH 077/157] refactor(Item): GetItemsByCategoryQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클래스 이름을 더 자연스럽게 수정하였습니다. --- .../item/application/port/in/GetItemsByCategoryQuery.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java b/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java index fc11e4e4..8d9647b1 100644 --- a/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java +++ b/src/main/java/com/space/server/domain/item/application/port/in/GetItemsByCategoryQuery.java @@ -7,5 +7,5 @@ public interface GetItemsByCategoryQuery { - List retrieveItemsByCategory(Category category); + List getItemsByCategory(Category category); } From 74383b7e06d4a86202be8da46d22b332a623b03a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 08:07:11 +0900 Subject: [PATCH 078/157] refactor(Item): GetItemsByCategoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클래스 이름을 더 자연스럽게 수정하였습니다. --- .../item/application/service/GetItemsByCategoryService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java index a4ceb4be..4d67f46c 100644 --- a/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java @@ -16,7 +16,7 @@ public class GetItemsByCategoryService implements GetItemsByCategoryQuery { private final LoadItemsByCategoryPort loadItemsByCategoryPort; @Override - public List retrieveItemsByCategory(Category category) { + public List getItemsByCategory(Category category) { return loadItemsByCategoryPort.loadItemsByCategory(category); } } From 78a43793c6abfea5957ae08f45b6437b6fd5cb89 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 08:08:48 +0900 Subject: [PATCH 079/157] fix(Inventory): InventoryJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Postgresql에서는 auto로 설정할 시 SEQUENCE로 되어 제대로 값이 할당 안 되던 문제를 해결하였습니다. --- .../inventory/adapter/out/persistence/InventoryJpaEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java index f3523082..39253666 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryJpaEntity.java @@ -14,7 +14,7 @@ public class InventoryJpaEntity { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne From d80070598a47655c5bc94b53981e4afbbd6a16a6 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 08:09:01 +0900 Subject: [PATCH 080/157] fix(Item): ItemJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Postgresql에서는 auto로 설정할 시 SEQUENCE로 되어 제대로 값이 할당 안 되던 문제를 해결하였습니다. --- .../domain/item/adapter/out/persistence/ItemJpaEntity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java index c7ef2aba..d9095563 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemJpaEntity.java @@ -16,7 +16,7 @@ public class ItemJpaEntity { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column From d46d6f690b74618c46a7b5d8323d66672d383c43 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 08:09:15 +0900 Subject: [PATCH 081/157] refactor(Item): ItemController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클래스 이름을 더 자연스럽게 수정하였습니다. --- .../space/server/domain/item/adapter/in/web/ItemController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java index 075bda66..88ecde89 100644 --- a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java @@ -45,7 +45,7 @@ public List readAll() { @GetMapping("/categories/{category}") public List readAllByCategory(@PathVariable("category") String category) { - return getItemsByCategoryQuery.retrieveItemsByCategory(converter.convert(category)).stream() + return getItemsByCategoryQuery.getItemsByCategory(converter.convert(category)).stream() .map((ItemResponse::from)) .toList(); } From 181076aa06e68dd124c04d1806b8fd7b306de5aa Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 17:11:22 +0900 Subject: [PATCH 082/157] refactor(annotation): annotation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit domain 폴더 내부에 있던 크린 아키텍처의 의미를 명확하게 해주는 어노테이션 모음을 common으로 이동하였습니다. --- .../common => common/annotation}/PersistenceAdapter.java | 2 +- .../server/{domain/common => common/annotation}/UseCase.java | 2 +- .../server/{domain/common => common/annotation}/WebAdapter.java | 2 +- .../inventory/adapter/out/persistence/CheckHaveItemAdapter.java | 2 +- .../adapter/out/persistence/CreateInventoryAdapter.java | 2 +- .../adapter/out/persistence/EquipInventoryAdapter.java | 2 +- .../out/persistence/InventoriesByIsEquippedGetAdapter.java | 2 +- .../adapter/out/persistence/InventoriesGetAdapter.java | 2 +- .../inventory/adapter/out/persistence/InventoryGetAdapter.java | 2 +- .../inventory/application/service/EquipInventoryService.java | 2 +- .../application/service/GetInventoriesByIsEquippedService.java | 2 +- .../inventory/application/service/GetInventoriesService.java | 2 +- .../space/server/domain/item/adapter/in/web/ItemController.java | 2 +- .../domain/item/adapter/out/persistence/BuyItemAdapter.java | 2 +- .../item/adapter/out/persistence/ItemByCategoryGetAdapter.java | 2 +- .../domain/item/adapter/out/persistence/ItemGetAdapter.java | 2 +- .../domain/item/adapter/out/persistence/ItemsGetAdapter.java | 2 +- .../server/domain/item/application/service/BuyItemService.java | 2 +- .../server/domain/item/application/service/GetItemService.java | 2 +- .../item/application/service/GetItemsByCategoryService.java | 2 +- .../server/domain/item/application/service/GetItemsService.java | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) rename src/main/java/com/space/server/{domain/common => common/annotation}/PersistenceAdapter.java (92%) rename src/main/java/com/space/server/{domain/common => common/annotation}/UseCase.java (91%) rename src/main/java/com/space/server/{domain/common => common/annotation}/WebAdapter.java (91%) diff --git a/src/main/java/com/space/server/domain/common/PersistenceAdapter.java b/src/main/java/com/space/server/common/annotation/PersistenceAdapter.java similarity index 92% rename from src/main/java/com/space/server/domain/common/PersistenceAdapter.java rename to src/main/java/com/space/server/common/annotation/PersistenceAdapter.java index a1831d48..bd1d27ed 100644 --- a/src/main/java/com/space/server/domain/common/PersistenceAdapter.java +++ b/src/main/java/com/space/server/common/annotation/PersistenceAdapter.java @@ -1,4 +1,4 @@ -package com.space.server.domain.common; +package com.space.server.common.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/src/main/java/com/space/server/domain/common/UseCase.java b/src/main/java/com/space/server/common/annotation/UseCase.java similarity index 91% rename from src/main/java/com/space/server/domain/common/UseCase.java rename to src/main/java/com/space/server/common/annotation/UseCase.java index 4b558356..0ad639cd 100644 --- a/src/main/java/com/space/server/domain/common/UseCase.java +++ b/src/main/java/com/space/server/common/annotation/UseCase.java @@ -1,4 +1,4 @@ -package com.space.server.domain.common; +package com.space.server.common.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; diff --git a/src/main/java/com/space/server/domain/common/WebAdapter.java b/src/main/java/com/space/server/common/annotation/WebAdapter.java similarity index 91% rename from src/main/java/com/space/server/domain/common/WebAdapter.java rename to src/main/java/com/space/server/common/annotation/WebAdapter.java index 46027680..d5840445 100644 --- a/src/main/java/com/space/server/domain/common/WebAdapter.java +++ b/src/main/java/com/space/server/common/annotation/WebAdapter.java @@ -1,4 +1,4 @@ -package com.space.server.domain.common; +package com.space.server.common.annotation; import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java index 4c2b7500..03c25778 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CheckHaveItemAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.CheckHaveItemPort; import com.space.server.domain.item.adapter.out.persistence.ItemJpaEntity; import com.space.server.domain.item.adapter.out.persistence.ItemMapper; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java index a50c6242..33fe2ed8 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/CreateInventoryAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.CreateInventoryPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.item.domain.Item; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java index 3173e105..1094d567 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.item.domain.value.Category; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java index ec6667a7..d188145a 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.LoadInventoriesByIsEquippedPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.user.domain.repository.UserRepository; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java index bda9cdc5..a1c9b095 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.LoadInventoriesPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.user.domain.repository.UserRepository; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java index eb4c5fd0..15ccad33 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryGetAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.LoadInventoryPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.inventory.exception.InventoryNotFoundException; diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java index 3d43b435..b2c3d35f 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.application.service; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.inventory.application.port.in.EquipInventoryUseCase; import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; import com.space.server.domain.inventory.application.port.out.LoadInventoryPort; diff --git a/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java index 10525d33..519abacb 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesByIsEquippedService.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.application.service; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.inventory.application.port.in.GetInventoriesByIsEquippedQuery; import com.space.server.domain.inventory.application.port.out.LoadInventoriesByIsEquippedPort; import com.space.server.domain.inventory.domain.Inventory; diff --git a/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java index 511c8c29..ce228f11 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/GetInventoriesService.java @@ -1,6 +1,6 @@ package com.space.server.domain.inventory.application.service; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.inventory.application.port.in.GetInventoriesQuery; import com.space.server.domain.inventory.application.port.out.LoadInventoriesPort; import com.space.server.domain.inventory.domain.Inventory; diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java index 88ecde89..52641741 100644 --- a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java @@ -4,7 +4,7 @@ import com.space.server.domain.item.adapter.in.web.dto.response.ItemResponse; import com.space.server.domain.item.application.port.in.BuyItemUseCase; import com.space.server.domain.item.application.port.in.GetItemQuery; -import com.space.server.domain.common.WebAdapter; +import com.space.server.common.annotation.WebAdapter; import com.space.server.domain.item.application.port.in.GetItemsByCategoryQuery; import com.space.server.domain.item.application.port.in.GetItemsQuery; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java index bd5d0a26..bf148164 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/BuyItemAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.adapter.out.persistence.InventoryJpaEntity; import com.space.server.domain.inventory.adapter.out.persistence.InventoryMapper; import com.space.server.domain.inventory.adapter.out.persistence.InventoryRepository; diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java index 2104d1a6..859b30b0 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemByCategoryGetAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.item.application.port.out.LoadItemsByCategoryPort; import com.space.server.domain.item.domain.Item; import com.space.server.domain.item.domain.value.Category; diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java index cd15ece0..a21b2482 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.item.application.port.out.LoadItemPort; import com.space.server.domain.item.domain.Item; import com.space.server.domain.item.exception.ItemNotFoundException; diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java index 0daf86c3..f0b12474 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.adapter.out.persistence; -import com.space.server.domain.common.PersistenceAdapter; +import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.item.application.port.out.LoadItemsPort; import com.space.server.domain.item.domain.Item; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java b/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java index a3b0d1fe..ba201d30 100644 --- a/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java +++ b/src/main/java/com/space/server/domain/item/application/service/BuyItemService.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.application.service; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.inventory.application.port.out.CheckHaveItemPort; import com.space.server.domain.inventory.exception.InventoryItemExistedException; import com.space.server.domain.item.application.port.in.BuyItemUseCase; diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemService.java index 298dc5a8..9bf2f32f 100644 --- a/src/main/java/com/space/server/domain/item/application/service/GetItemService.java +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemService.java @@ -2,7 +2,7 @@ import com.space.server.domain.item.application.port.in.GetItemQuery; import com.space.server.domain.item.application.port.out.LoadItemPort; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.item.domain.Item; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java index 4d67f46c..c8f5ae34 100644 --- a/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemsByCategoryService.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.application.service; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.item.application.port.in.GetItemsByCategoryQuery; import com.space.server.domain.item.application.port.out.LoadItemsByCategoryPort; import com.space.server.domain.item.domain.Item; diff --git a/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java b/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java index d3d4a766..a97b3fc7 100644 --- a/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java +++ b/src/main/java/com/space/server/domain/item/application/service/GetItemsService.java @@ -1,6 +1,6 @@ package com.space.server.domain.item.application.service; -import com.space.server.domain.common.UseCase; +import com.space.server.common.annotation.UseCase; import com.space.server.domain.item.application.port.in.GetItemsQuery; import com.space.server.domain.item.application.port.out.LoadItemsPort; import com.space.server.domain.item.domain.Item; From bf7c43d030cd82d59368fb0abeb7b0f92025b7a8 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 17:23:34 +0900 Subject: [PATCH 083/157] feat(Item): ItemController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 스웨거를 추가하였습니다. --- .../domain/item/adapter/in/web/ItemController.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java index 52641741..031b8efa 100644 --- a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java @@ -7,6 +7,9 @@ import com.space.server.common.annotation.WebAdapter; import com.space.server.domain.item.application.port.in.GetItemsByCategoryQuery; import com.space.server.domain.item.application.port.in.GetItemsQuery; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -18,6 +21,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/stores/items") +@Tag(name = "item", description = "아이템 API") public class ItemController { private final GetItemQuery getItemQuery; @@ -27,16 +31,19 @@ public class ItemController { private final CategoryConverter converter; @PostMapping("/{item-id}") - public void buyItem(@PathVariable("item-id") Long itemId) { + @Operation(summary = "해당 아이템 구매", description = "해당 아이템을 구매합니다.") + public void buyItem(@PathVariable("item-id") @Parameter(description = "아이템 ID") Long itemId) { buyItemUseCase.buyItem(itemId, getMemberId()); } @GetMapping("/{item-id}") - public ItemResponse readOne(@PathVariable("item-id") Long itemId) { + @Operation(summary = "해당 아이템 조회", description = "해당 아이템을 조회합니다.") + public ItemResponse readOne(@PathVariable("item-id") @Parameter(description = "아이템 ID") Long itemId) { return ItemResponse.from(getItemQuery.getItem(itemId)); } @GetMapping() + @Operation(summary = "전체 아이템 조회", description = "전체 아이템을 조회합니다.") public List readAll() { return getItemsQuery.getItems().stream() .map(ItemResponse::from) @@ -44,7 +51,8 @@ public List readAll() { } @GetMapping("/categories/{category}") - public List readAllByCategory(@PathVariable("category") String category) { + @Operation(summary = "카테고리별 아이템 전체 조회", description = "해당 카테고리의 아이템들을 조회합니다.") + public List readAllByCategory(@PathVariable("category") @Parameter(description = "아이템 카테고리") String category) { return getItemsByCategoryQuery.getItemsByCategory(converter.convert(category)).stream() .map((ItemResponse::from)) .toList(); From ce448d1bb6141b49997586db3590fbb5f5e51811 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 17:25:52 +0900 Subject: [PATCH 084/157] refactor(Item): ItemController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 스웨거 컨트롤러 명의 첫글자를 대문자로 수정하였습니다. --- .../space/server/domain/item/adapter/in/web/ItemController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java index 031b8efa..2b6dde3c 100644 --- a/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java +++ b/src/main/java/com/space/server/domain/item/adapter/in/web/ItemController.java @@ -21,7 +21,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/stores/items") -@Tag(name = "item", description = "아이템 API") +@Tag(name = "Item", description = "아이템 API") public class ItemController { private final GetItemQuery getItemQuery; From f09bc053f3cfc28e46c47c77a10b54e1bf69c273 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 17:30:18 +0900 Subject: [PATCH 085/157] feat(Inventory): InventoryController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 스웨거를 추가하였습니다. --- .../inventory/adapter/in/web/InventoryController.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java b/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java index ebca5cdd..4a3aed9a 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/in/web/InventoryController.java @@ -4,6 +4,9 @@ import com.space.server.domain.inventory.application.port.in.EquipInventoryUseCase; import com.space.server.domain.inventory.application.port.in.GetInventoriesByIsEquippedQuery; import com.space.server.domain.inventory.application.port.in.GetInventoriesQuery; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; @@ -11,10 +14,10 @@ import static com.space.server.common.jwt.util.AuthenticationUtil.getMemberId; - @RestController @RequiredArgsConstructor @RequestMapping("/inventories") +@Tag(name = "Inventory", description = "인벤토리 API") public class InventoryController { private final GetInventoriesQuery getInventoriesQuery; @@ -22,6 +25,7 @@ public class InventoryController { private final EquipInventoryUseCase equipInventoryUseCase; @GetMapping + @Operation(summary = "전체 인벤토리 조회", description = "해당 유저의 전체 인벤토리를 조회합니다.") public List readAll() { return getInventoriesQuery.getInventories(getMemberId()).stream() .map(InventoryResponse::from) @@ -29,6 +33,7 @@ public List readAll() { } @GetMapping("/equip") + @Operation(summary = "장착된 인벤토리 조회", description = "해당 유저의 장착된 인벤토리를 조회합니다.") public List readIsEquipped() { return getInventoriesByIsEquippedQuery.getInventoriesByIsEquippedQuery(getMemberId()).stream() .map(InventoryResponse::from) @@ -36,7 +41,8 @@ public List readIsEquipped() { } @PutMapping("/{inventory-id}") - public void equipItem(@PathVariable(name = "inventory-id") Long inventoryId) { + @Operation(summary = "인벤토리 장착", description = "해당 인벤토리를 장착합니다.") + public void equipItem(@PathVariable(name = "inventory-id") @Parameter(description = "인벤토리 ID") Long inventoryId) { equipInventoryUseCase.equipInventory(inventoryId, getMemberId()); } } From ad4d1274cc704fc17f9500cd0fccce25a34a238a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 19:27:53 +0900 Subject: [PATCH 086/157] refactor(Checklist): ChecklistJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity 분리 --- .../out/persistence/ChecklistJpaEntity.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java new file mode 100644 index 00000000..a0ad0f7b --- /dev/null +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java @@ -0,0 +1,33 @@ +package com.space.server.domain.checklist.adapter.out.persistence; + +import com.space.server.domain.chapter.domain.Chapter; +import com.space.server.domain.quiz.domain.Quiz; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Builder +@Entity +@Table(name = "checklist") +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class ChecklistJpaEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @JoinColumn + @ManyToOne(fetch = FetchType.LAZY) + private Quiz quiz; + + @JoinColumn + @ManyToOne(fetch = FetchType.LAZY) + private Chapter chapter; + + @Column + private String content; +} From f974daee5a8986c2a4be261af5d2e4fcf541fb2e Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 19:27:59 +0900 Subject: [PATCH 087/157] refactor(Checklist): ChecklistJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity 분리 --- .../domain/checklist/domain/Checklist.java | 35 +++++-------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/space/server/domain/checklist/domain/Checklist.java b/src/main/java/com/space/server/domain/checklist/domain/Checklist.java index 4ebc7b88..26aba7d1 100644 --- a/src/main/java/com/space/server/domain/checklist/domain/Checklist.java +++ b/src/main/java/com/space/server/domain/checklist/domain/Checklist.java @@ -2,47 +2,28 @@ import com.space.server.domain.chapter.domain.Chapter; import com.space.server.domain.quiz.domain.Quiz; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity -@Schema(description = "체크리스트 Entity") +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class Checklist { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Schema(description = "체크리스트 ID") - private Long id; + @NotNull + private ChecklistId id; - @ManyToOne(fetch = FetchType.LAZY) @NotNull - @Schema(description = "퀴즈", required = true) private Quiz quiz; - @ManyToOne(fetch = FetchType.LAZY) @NotNull - @Schema(description = "챕터", required = true) private Chapter chapter; @NotNull - @Schema(description = "체크리스트 내용") private String content; - @Builder - public Checklist(Quiz quiz, Chapter chapter, String content) { - this.quiz = quiz; - this.chapter = chapter; - this.content = content; - } - - public void update(Checklist checklist) { - this.content = checklist.getContent(); + @Value + public static class ChecklistId { + private final Long value; } } From 228dfc24e37edb55767591d991a49b9daac0ab50 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Mon, 18 Nov 2024 23:39:43 +0900 Subject: [PATCH 088/157] refactor(Checklist): ChecklistRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jpa Entity로 수정 --- .../out/persistence}/ChecklistRepository.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) rename src/main/java/com/space/server/domain/checklist/{domain/repository => adapter/out/persistence}/ChecklistRepository.java (60%) diff --git a/src/main/java/com/space/server/domain/checklist/domain/repository/ChecklistRepository.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java similarity index 60% rename from src/main/java/com/space/server/domain/checklist/domain/repository/ChecklistRepository.java rename to src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java index 7199f1b2..6bbe6ce4 100644 --- a/src/main/java/com/space/server/domain/checklist/domain/repository/ChecklistRepository.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java @@ -1,6 +1,5 @@ -package com.space.server.domain.checklist.domain.repository; +package com.space.server.domain.checklist.adapter.out.persistence; -import com.space.server.domain.checklist.domain.Checklist; import com.space.server.domain.quiz.domain.Quiz; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -8,6 +7,6 @@ import java.util.List; @Repository -public interface ChecklistRepository extends JpaRepository { - List findByQuiz(Quiz quiz); +public interface ChecklistRepository extends JpaRepository { + List findByQuiz(Quiz quiz); } From f9b4ad4179000260330585f357138eb924c816f5 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:24:13 +0900 Subject: [PATCH 089/157] refactor(Checklist): GetChecklistsQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 퀴즈의 전체 체크리스트 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../in/web}/ChecklistController.java | 11 +++--- .../web}/dto/response/ChecklistResponse.java | 4 +-- .../port/in/GetChecklistsByQuizQuery.java | 9 +++++ .../service/CommandChecklistService.java | 35 ------------------- .../service/QueryChecklistService.java | 33 ----------------- .../implementation/ChecklistCreator.java | 17 --------- .../implementation/ChecklistDeleter.java | 17 --------- .../implementation/ChecklistReader.java | 30 ---------------- .../implementation/ChecklistUpdater.java | 12 ------- 9 files changed, 17 insertions(+), 151 deletions(-) rename src/main/java/com/space/server/domain/checklist/{presentation => adapter/in/web}/ChecklistController.java (68%) rename src/main/java/com/space/server/domain/checklist/{presentation => adapter/in/web}/dto/response/ChecklistResponse.java (86%) create mode 100644 src/main/java/com/space/server/domain/checklist/application/port/in/GetChecklistsByQuizQuery.java delete mode 100644 src/main/java/com/space/server/domain/checklist/service/CommandChecklistService.java delete mode 100644 src/main/java/com/space/server/domain/checklist/service/QueryChecklistService.java delete mode 100644 src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistCreator.java delete mode 100644 src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistDeleter.java delete mode 100644 src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistReader.java delete mode 100644 src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistUpdater.java diff --git a/src/main/java/com/space/server/domain/checklist/presentation/ChecklistController.java b/src/main/java/com/space/server/domain/checklist/adapter/in/web/ChecklistController.java similarity index 68% rename from src/main/java/com/space/server/domain/checklist/presentation/ChecklistController.java rename to src/main/java/com/space/server/domain/checklist/adapter/in/web/ChecklistController.java index 7762231d..06130c82 100644 --- a/src/main/java/com/space/server/domain/checklist/presentation/ChecklistController.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/in/web/ChecklistController.java @@ -1,7 +1,7 @@ -package com.space.server.domain.checklist.presentation; +package com.space.server.domain.checklist.adapter.in.web; -import com.space.server.domain.checklist.presentation.dto.response.ChecklistResponse; -import com.space.server.domain.checklist.service.QueryChecklistService; +import com.space.server.domain.checklist.adapter.in.web.dto.response.ChecklistResponse; +import com.space.server.domain.checklist.application.port.in.GetChecklistsByQuizQuery; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,12 +16,13 @@ @Tag(name = "Checklist", description = "체크리스트 API") public class ChecklistController { - private final QueryChecklistService queryChecklistService; + private final GetChecklistsByQuizQuery getChecklistsByQuizQuery; + @GetMapping("/quiz/{quiz-id}") @Operation(summary = "퀴즈 내 모든 체크리스트 조회", description = "해당 퀴즈의 전체 체크리스트를 조회합니다.") public List findByQuiz(@PathVariable(name = "quiz-id") @Parameter(description = "퀴즈 ID") Long quizId) { - return queryChecklistService.findByQuiz(quizId).stream() + return getChecklistsByQuizQuery.getChecklistsByQuiz(quizId).stream() .map(ChecklistResponse::from) .toList(); } diff --git a/src/main/java/com/space/server/domain/checklist/presentation/dto/response/ChecklistResponse.java b/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java similarity index 86% rename from src/main/java/com/space/server/domain/checklist/presentation/dto/response/ChecklistResponse.java rename to src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java index e1e164e6..90805f0c 100644 --- a/src/main/java/com/space/server/domain/checklist/presentation/dto/response/ChecklistResponse.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java @@ -1,4 +1,4 @@ -package com.space.server.domain.checklist.presentation.dto.response; +package com.space.server.domain.checklist.adapter.in.web.dto.response; import com.space.server.domain.checklist.domain.Checklist; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,7 +19,7 @@ public record ChecklistResponse( ) { public static ChecklistResponse from(Checklist checklist) { return new ChecklistResponse( - checklist.getId(), + checklist.getId().getValue(), checklist.getQuiz().getId(), checklist.getChapter().getId(), checklist.getContent() diff --git a/src/main/java/com/space/server/domain/checklist/application/port/in/GetChecklistsByQuizQuery.java b/src/main/java/com/space/server/domain/checklist/application/port/in/GetChecklistsByQuizQuery.java new file mode 100644 index 00000000..60bb8e23 --- /dev/null +++ b/src/main/java/com/space/server/domain/checklist/application/port/in/GetChecklistsByQuizQuery.java @@ -0,0 +1,9 @@ +package com.space.server.domain.checklist.application.port.in; + +import com.space.server.domain.checklist.domain.Checklist; + +import java.util.List; + +public interface GetChecklistsByQuizQuery { + List getChecklistsByQuiz(Long quizId); +} diff --git a/src/main/java/com/space/server/domain/checklist/service/CommandChecklistService.java b/src/main/java/com/space/server/domain/checklist/service/CommandChecklistService.java deleted file mode 100644 index 71fe62a9..00000000 --- a/src/main/java/com/space/server/domain/checklist/service/CommandChecklistService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.space.server.domain.checklist.service; - -import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.checklist.service.implementation.ChecklistCreator; -import com.space.server.domain.checklist.service.implementation.ChecklistDeleter; -import com.space.server.domain.checklist.service.implementation.ChecklistReader; -import com.space.server.domain.checklist.service.implementation.ChecklistUpdater; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Transactional -public class CommandChecklistService { - - private final ChecklistCreator checklistCreator; - private final ChecklistReader checklistReader; - private final ChecklistUpdater checklistUpdater; - private final ChecklistDeleter checklistDeleter; - - public void createChecklist(Checklist checklist) { - checklistCreator.create(checklist); - } - - public void updateChecklist(Long checklistId, Checklist checklist) { - Checklist updatablechecklist = checklistReader.readOne(checklistId); - checklistUpdater.update(updatablechecklist, checklist); - } - - public void deleteChecklist(Long checklistId) { - Checklist checklist = checklistReader.readOne(checklistId); - checklistDeleter.delete(checklist); - } -} diff --git a/src/main/java/com/space/server/domain/checklist/service/QueryChecklistService.java b/src/main/java/com/space/server/domain/checklist/service/QueryChecklistService.java deleted file mode 100644 index d0801f7a..00000000 --- a/src/main/java/com/space/server/domain/checklist/service/QueryChecklistService.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.space.server.domain.checklist.service; - -import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.checklist.service.implementation.ChecklistReader; -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.service.implementation.QuizReader; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class QueryChecklistService { - - private final ChecklistReader checklistReader; - private final QuizReader quizReader; - - public Checklist readOne(Long checklistId) { - return checklistReader.readOne(checklistId); - } - - public List readAll() { - return checklistReader.readALL(); - } - - public List findByQuiz(Long quizId) { - Quiz quiz = quizReader.findById(quizId); - return checklistReader.findByQuiz(quiz); - } -} diff --git a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistCreator.java b/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistCreator.java deleted file mode 100644 index 71586d7d..00000000 --- a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistCreator.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.checklist.service.implementation; - -import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.checklist.domain.repository.ChecklistRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ChecklistCreator { - - private final ChecklistRepository checklistRepository; - - public void create(Checklist checklist) { - checklistRepository.save(checklist); - } -} diff --git a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistDeleter.java b/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistDeleter.java deleted file mode 100644 index 15a397d4..00000000 --- a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistDeleter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.checklist.service.implementation; - -import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.checklist.domain.repository.ChecklistRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ChecklistDeleter { - - private final ChecklistRepository checklistRepository; - - public void delete(Checklist checklist) { - checklistRepository.delete(checklist); - } -} diff --git a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistReader.java b/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistReader.java deleted file mode 100644 index 96601600..00000000 --- a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistReader.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.space.server.domain.checklist.service.implementation; - -import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.checklist.domain.repository.ChecklistRepository; -import com.space.server.domain.checklist.exception.ChecklistNotFoundException; -import com.space.server.domain.quiz.domain.Quiz; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class ChecklistReader { - - private final ChecklistRepository repository; - - public Checklist readOne(Long checklistId) { - return repository.findById(checklistId) - .orElseThrow(ChecklistNotFoundException::new); - } - - public List readALL() { - return repository.findAll(); - } - - public List findByQuiz(Quiz quiz) { - return repository.findByQuiz(quiz); - } -} diff --git a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistUpdater.java b/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistUpdater.java deleted file mode 100644 index 2a4d8568..00000000 --- a/src/main/java/com/space/server/domain/checklist/service/implementation/ChecklistUpdater.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.space.server.domain.checklist.service.implementation; - -import com.space.server.domain.checklist.domain.Checklist; -import org.springframework.stereotype.Service; - -@Service -public class ChecklistUpdater { - - public void update(Checklist updatableChecklist, Checklist checklist) { - updatableChecklist.update(checklist); - } -} From 3f1a3ef98bd0001e035ffdffc1b96645ac8294ee Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:25:46 +0900 Subject: [PATCH 090/157] refactor(Checklist): GetChecklistsByQuizService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 퀴즈의 전체 체크리스트 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/GetChecklistsByQuizService.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/checklist/application/service/GetChecklistsByQuizService.java diff --git a/src/main/java/com/space/server/domain/checklist/application/service/GetChecklistsByQuizService.java b/src/main/java/com/space/server/domain/checklist/application/service/GetChecklistsByQuizService.java new file mode 100644 index 00000000..1f50dd0a --- /dev/null +++ b/src/main/java/com/space/server/domain/checklist/application/service/GetChecklistsByQuizService.java @@ -0,0 +1,21 @@ +package com.space.server.domain.checklist.application.service; + +import com.space.server.common.annotation.UseCase; +import com.space.server.domain.checklist.application.port.in.GetChecklistsByQuizQuery; +import com.space.server.domain.checklist.application.port.out.LoadChecklistsByQuizPort; +import com.space.server.domain.checklist.domain.Checklist; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetChecklistsByQuizService implements GetChecklistsByQuizQuery { + + private final LoadChecklistsByQuizPort loadChecklistsByQuizPort; + + @Override + public List getChecklistsByQuiz(Long quizId) { + return loadChecklistsByQuizPort.loadChecklistsByQuiz(quizId); + } +} From 8f605f73ac6ec1a160633d8bebe217b1c5e4ea95 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:25:59 +0900 Subject: [PATCH 091/157] refactor(Checklist): LoadChecklistsByQuizPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 퀴즈의 전체 체크리스트 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/LoadChecklistsByQuizPort.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/com/space/server/domain/checklist/application/port/out/LoadChecklistsByQuizPort.java diff --git a/src/main/java/com/space/server/domain/checklist/application/port/out/LoadChecklistsByQuizPort.java b/src/main/java/com/space/server/domain/checklist/application/port/out/LoadChecklistsByQuizPort.java new file mode 100644 index 00000000..0eb64853 --- /dev/null +++ b/src/main/java/com/space/server/domain/checklist/application/port/out/LoadChecklistsByQuizPort.java @@ -0,0 +1,9 @@ +package com.space.server.domain.checklist.application.port.out; + +import com.space.server.domain.checklist.domain.Checklist; + +import java.util.List; + +public interface LoadChecklistsByQuizPort { + List loadChecklistsByQuiz(Long quizId); +} From 4a85ba20da4df38e58482ed792d4e442d2fdfffe Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:26:13 +0900 Subject: [PATCH 092/157] refactor(Checklist): ChecklistsByQuizGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 퀴즈의 전체 체크리스트 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../ChecklistsByQuizGetAdapter.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java new file mode 100644 index 00000000..8e0343ef --- /dev/null +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java @@ -0,0 +1,27 @@ +package com.space.server.domain.checklist.adapter.out.persistence; + +import com.space.server.common.annotation.PersistenceAdapter; +import com.space.server.domain.checklist.application.port.out.LoadChecklistsByQuizPort; +import com.space.server.domain.checklist.domain.Checklist; +import com.space.server.domain.quiz.domain.Quiz; +import com.space.server.domain.quiz.service.implementation.QuizReader; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class ChecklistsByQuizGetAdapter implements LoadChecklistsByQuizPort { + + private final ChecklistRepository checklistRepository; + private final ChecklistMapper checklistMapper; + private final QuizReader quizReader; + + @Override + public List loadChecklistsByQuiz(Long quizId) { + Quiz quiz = quizReader.findById(quizId); + return checklistRepository.findByQuiz(quiz).stream() + .map(checklistMapper::mapToChecklist) + .toList(); + } +} From 733caa70c298ed3f680e041602cf2757d37954c7 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:26:27 +0900 Subject: [PATCH 093/157] refactor(Checklist): ChecklistMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 해당 퀴즈의 전체 체크리스트 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Mapper --- .../out/persistence/ChecklistMapper.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java new file mode 100644 index 00000000..5a0dcaa8 --- /dev/null +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java @@ -0,0 +1,17 @@ +package com.space.server.domain.checklist.adapter.out.persistence; + +import com.space.server.domain.checklist.domain.Checklist; +import org.springframework.stereotype.Component; + +@Component +public class ChecklistMapper { + + public Checklist mapToChecklist(ChecklistJpaEntity checklist) { + return Checklist.builder() + .id(new Checklist.ChecklistId(checklist.getId())) + .quiz(checklist.getQuiz()) + .chapter(checklist.getChapter()) + .content(checklist.getContent()) + .build(); + } +} From e13919e140cbf52b8892f255a089589dc2c39730 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:27:14 +0900 Subject: [PATCH 094/157] refactor(Chat): CommandChatService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 수정된 체크리스트 조회로 변경 --- .../server/domain/chat/service/CommandChatService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java index 91268c39..e038952b 100644 --- a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java +++ b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java @@ -17,8 +17,8 @@ import com.space.server.domain.chat.service.implementation.ChatValidator; import com.space.server.domain.chapter.domain.Chapter; import com.space.server.domain.chapter.service.implementation.ChapterReader; +import com.space.server.domain.checklist.application.port.in.GetChecklistsByQuizQuery; import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.checklist.service.implementation.ChecklistReader; import com.space.server.domain.quiz.domain.Quiz; import com.space.server.domain.quiz.service.implementation.QuizReader; import com.space.server.domain.state.domain.State; @@ -48,7 +48,7 @@ public class CommandChatService { private final ChatReader chatReader; private final ChatCreator chatCreator; private final ChatValidator chatValidator; - private final ChecklistReader checklistReader; + private final GetChecklistsByQuizQuery getChecklistsByQuizQuery; private final ChapterReader chapterReader; private final ChatCompleter chatCompleter; private final StateUpdater stateUpdater; @@ -57,7 +57,7 @@ public class CommandChatService { public AiResponse create(Long quizId, CreateChatRequest request, Long userId) { Quiz quiz = quizReader.findById(quizId); Users user = userReader.findById(userId); - List checklists = checklistReader.findByQuiz(quiz); + List checklists = getChecklistsByQuizQuery.getChecklistsByQuiz(quizId); Chapter chapter = chapterReader.findById(quiz.getChapter().getId()); Optional state = stateReader.findByQuizIdAndUserId(quiz, user); From 3cc22069fec31ff2693bac3ab6586e3ec12930b2 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:27:44 +0900 Subject: [PATCH 095/157] remove(Inventory): InventoryMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 줄 띄움 제거 --- .../inventory/adapter/out/persistence/InventoryMapper.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java index c5a4eaa1..3df1f34f 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoryMapper.java @@ -11,9 +11,7 @@ public class InventoryMapper { private final ItemMapper itemMapper; - public Inventory mapToInventory( - InventoryJpaEntity inventory - ) { + public Inventory mapToInventory(InventoryJpaEntity inventory) { return Inventory.builder() .id(new Inventory.InventoryId(inventory.getId())) .user(inventory.getUser()) From c4d93e60a21cfb8b90f45f4b67af93433749abe1 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:37:21 +0900 Subject: [PATCH 096/157] refactor(Inventory): LoadEquippedInventoryByCategoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다중 책임 분리 --- .../port/out/LoadEquippedInventoryByCategoryPort.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/application/port/out/LoadEquippedInventoryByCategoryPort.java diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/LoadEquippedInventoryByCategoryPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadEquippedInventoryByCategoryPort.java new file mode 100644 index 00000000..46be8589 --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/LoadEquippedInventoryByCategoryPort.java @@ -0,0 +1,9 @@ +package com.space.server.domain.inventory.application.port.out; + +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.domain.value.Category; + +public interface LoadEquippedInventoryByCategoryPort { + + Inventory findEquippedInventoryByCategoryAndUser(Category category, Long userId); +} From b9873aca762ca01ea766a2440f9276048beda4df Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:37:32 +0900 Subject: [PATCH 097/157] refactor(Inventory): EquippedInventoryByCategoryGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다중 책임 분리 --- ...EquippedInventoryByCategoryGetAdapter.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquippedInventoryByCategoryGetAdapter.java diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquippedInventoryByCategoryGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquippedInventoryByCategoryGetAdapter.java new file mode 100644 index 00000000..847442dc --- /dev/null +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquippedInventoryByCategoryGetAdapter.java @@ -0,0 +1,28 @@ +package com.space.server.domain.inventory.adapter.out.persistence; + +import com.space.server.common.annotation.PersistenceAdapter; +import com.space.server.domain.inventory.application.port.out.LoadEquippedInventoryByCategoryPort; +import com.space.server.domain.inventory.domain.Inventory; +import com.space.server.domain.item.domain.value.Category; +import com.space.server.domain.user.domain.Users; +import com.space.server.domain.user.domain.repository.UserRepository; +import com.space.server.domain.user.exception.UserNotFoundException; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class EquippedInventoryByCategoryGetAdapter implements LoadEquippedInventoryByCategoryPort { + + private final InventoryRepository inventoryRepository; + private final UserRepository userRepository; + private final InventoryMapper inventoryMapper; + + @Override + public Inventory findEquippedInventoryByCategoryAndUser(Category category, Long userId) { + Users user = userRepository.findById(userId) + .orElseThrow(UserNotFoundException::new); + + InventoryJpaEntity equippedByCategoryInventory = inventoryRepository.findByCategoryAndUserAndIsEquipped(category, user); + return inventoryMapper.mapToInventory(equippedByCategoryInventory); + } +} From 791e97d24613cb7cef965fe529b464056bceca6d Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:37:49 +0900 Subject: [PATCH 098/157] remove(Inventory): EquipInventoryPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다중 책임 분리 --- .../inventory/application/port/out/EquipInventoryPort.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java b/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java index 8b4c8d6b..d020c941 100644 --- a/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java +++ b/src/main/java/com/space/server/domain/inventory/application/port/out/EquipInventoryPort.java @@ -1,12 +1,9 @@ package com.space.server.domain.inventory.application.port.out; import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.item.domain.value.Category; public interface EquipInventoryPort { - Inventory findEquippedInventoryByCategoryAndUser(Category category, Long userId); - void equipInventory(Inventory inventory); void unEquipInventory(Inventory inventory); From 9e2a88f3a0f09e6655a7d52cc027e63806d5e0b7 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:38:00 +0900 Subject: [PATCH 099/157] remove(Inventory): EquipInventoryAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다중 책임 분리 --- .../out/persistence/EquipInventoryAdapter.java | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java index 1094d567..c4bb6a12 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/EquipInventoryAdapter.java @@ -3,10 +3,6 @@ import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; import com.space.server.domain.inventory.domain.Inventory; -import com.space.server.domain.item.domain.value.Category; -import com.space.server.domain.user.domain.Users; -import com.space.server.domain.user.domain.repository.UserRepository; -import com.space.server.domain.user.exception.UserNotFoundException; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -17,16 +13,7 @@ public class EquipInventoryAdapter implements EquipInventoryPort { private final InventoryRepository inventoryRepository; private final InventoryMapper inventoryMapper; - private final UserRepository userRepository; - @Override - public Inventory findEquippedInventoryByCategoryAndUser(Category category, Long userId) { - Users user = userRepository.findById(userId) - .orElseThrow(UserNotFoundException::new); - - InventoryJpaEntity equippedByCategoryInventory = inventoryRepository.findByCategoryAndUserAndIsEquipped(category, user); - return inventoryMapper.mapToInventory(equippedByCategoryInventory); - } @Override public void equipInventory(Inventory inventory) { inventory.equip(); From fa0c7fb0beae2f61a8780f83769737c602d04a23 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 01:38:13 +0900 Subject: [PATCH 100/157] refactor(Inventory): EquipInventoryService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다중 책임 분리 --- .../application/service/EquipInventoryService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java index b2c3d35f..1c3e5b11 100644 --- a/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java +++ b/src/main/java/com/space/server/domain/inventory/application/service/EquipInventoryService.java @@ -3,6 +3,7 @@ import com.space.server.common.annotation.UseCase; import com.space.server.domain.inventory.application.port.in.EquipInventoryUseCase; import com.space.server.domain.inventory.application.port.out.EquipInventoryPort; +import com.space.server.domain.inventory.application.port.out.LoadEquippedInventoryByCategoryPort; import com.space.server.domain.inventory.application.port.out.LoadInventoryPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.inventory.exception.InventoryNotFoundException; @@ -12,8 +13,9 @@ @RequiredArgsConstructor public class EquipInventoryService implements EquipInventoryUseCase { - private final EquipInventoryPort equipInventoryPort; + private final LoadEquippedInventoryByCategoryPort loadEquippedInventoryByCategoryPort; private final LoadInventoryPort loadInventoryPort; + private final EquipInventoryPort equipInventoryPort; @Override public void equipInventory(Long inventoryId, Long userId) { @@ -21,7 +23,7 @@ public void equipInventory(Long inventoryId, Long userId) { if(!inventory.getUser().getId().equals(userId)) throw new InventoryNotFoundException(); - Inventory equippedInventory = equipInventoryPort.findEquippedInventoryByCategoryAndUser( + Inventory equippedInventory = loadEquippedInventoryByCategoryPort.findEquippedInventoryByCategoryAndUser( inventory.getItem().getCategory(), userId ); From 3f34e2f0154086f2b0dcc4142536dbc2b1c916ba Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 13:39:57 +0900 Subject: [PATCH 101/157] fix(Item): Item MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 잘못된 Id 요청 메서드를 제거하였습니다. --- src/main/java/com/space/server/domain/item/domain/Item.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/domain/Item.java b/src/main/java/com/space/server/domain/item/domain/Item.java index b096a3e8..23141a3e 100644 --- a/src/main/java/com/space/server/domain/item/domain/Item.java +++ b/src/main/java/com/space/server/domain/item/domain/Item.java @@ -31,10 +31,6 @@ public static Item create(ItemId id, String name, Integer price, String image, C return new Item(id, name, price, image, category); } - public Optional getId(){ - return Optional.ofNullable(this.id); - } - @Value public static class ItemId { private final Long value; From 4ca28f14068aad5cd530da530ace787ef4c3ce6e Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 13:40:15 +0900 Subject: [PATCH 102/157] fix(Item): ItemMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 메서드를 제거하였습니다. --- .../server/domain/item/adapter/out/persistence/ItemMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java index 7131d682..ed1d614e 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemMapper.java @@ -18,7 +18,7 @@ public Item mapToItem(ItemJpaEntity item) { public ItemJpaEntity mapToItemJpaEntity(Item item) { return ItemJpaEntity.builder() - .id(item.getId().get().getValue()) + .id(item.getId().getValue()) .name(item.getName()) .price(item.getPrice()) .image(item.getImage()) From 6f3293d0b8529ada053e049d1fd324c72772bdfe Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 13:40:38 +0900 Subject: [PATCH 103/157] fix(Inventory): InventoryResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 메서드를 제거하였습니다. --- .../adapter/in/web/dto/response/InventoryResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java b/src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java index d50cc98d..2f532e2e 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/in/web/dto/response/InventoryResponse.java @@ -26,7 +26,7 @@ public static InventoryResponse from(Inventory inventory) { return InventoryResponse.builder() .id(inventory.getId().getValue()) .name(inventory.getItem().getName()) - .itemId(inventory.getItem().getId().get().getValue()) + .itemId(inventory.getItem().getId().getValue()) .category(inventory.getItem().getCategory()) .isEquipped(inventory.isEquipped()) .build(); From c6e1b0f79a35096bfa59aadfcdbe5665fa8ca923 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:07:15 +0900 Subject: [PATCH 104/157] refactor(Chapter): Chapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity 분리 --- .../server/domain/chapter/domain/Chapter.java | 39 ++++--------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/space/server/domain/chapter/domain/Chapter.java b/src/main/java/com/space/server/domain/chapter/domain/Chapter.java index a6dfeeba..047665f0 100644 --- a/src/main/java/com/space/server/domain/chapter/domain/Chapter.java +++ b/src/main/java/com/space/server/domain/chapter/domain/Chapter.java @@ -1,53 +1,28 @@ package com.space.server.domain.chapter.domain; -import io.hypersistence.utils.hibernate.type.basic.PostgreSQLHStoreType; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Type; +import lombok.*; import java.util.Map; @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity -@Schema(description = "챕터 Entity") +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class Chapter { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Schema(description = "챕터 ID") - private Long id; + private ChapterId id; @NotNull - @Schema(description = "챕터 설명") private String explanation; - @Type(PostgreSQLHStoreType.class) - @Column(columnDefinition = "hstore") @NotNull - @Schema(description = "맵오브젝트") private Map mapObject; - @Type(PostgreSQLHStoreType.class) - @Column(columnDefinition = "hstore") @NotNull - @Schema(description = "맵오브젝트 이미지") private Map mapObjectImage; - @Builder - public Chapter(String explanation, Map mapObject, Map mapObjectImage) { - this.explanation = explanation; - this.mapObject = mapObject; - this.mapObjectImage = mapObjectImage; - } - - public void update(Chapter chapter) { - this.explanation = chapter.getExplanation(); - this.mapObject = chapter.getMapObject(); + @Value + public static class ChapterId { + private final Long value; } } From c2ac8a7af680c8368e47ca539006274ed00fe73a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:07:26 +0900 Subject: [PATCH 105/157] refactor(Chapter): Chapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity 분리 --- .../out/persistence/ChapterJpaEntity.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java new file mode 100644 index 00000000..d2af9c17 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java @@ -0,0 +1,39 @@ +package com.space.server.domain.chapter.adapter.out.persistence; + +import io.hypersistence.utils.hibernate.type.basic.PostgreSQLHStoreType; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.Type; + +import java.util.Map; + +@Builder +@Entity +@Table(name = "chapter") +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class ChapterJpaEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column + private String explanation; + + @Type(PostgreSQLHStoreType.class) + @Column(columnDefinition = "hstore") + @NotNull + private Map mapObject; + + @Type(PostgreSQLHStoreType.class) + @Column(columnDefinition = "hstore") + @NotNull + private Map mapObjectImage; + +} From 05b98e1f0fd92f31d837cc7b3eeffaa24679d650 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:07:51 +0900 Subject: [PATCH 106/157] refactor(Chapter): ChapterRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jpa Entity로 수정 --- .../out/persistence}/ChapterRepository.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) rename src/main/java/com/space/server/domain/chapter/{domain/repository => adapter/out/persistence}/ChapterRepository.java (57%) diff --git a/src/main/java/com/space/server/domain/chapter/domain/repository/ChapterRepository.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java similarity index 57% rename from src/main/java/com/space/server/domain/chapter/domain/repository/ChapterRepository.java rename to src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java index 7725a3ff..b9557f99 100644 --- a/src/main/java/com/space/server/domain/chapter/domain/repository/ChapterRepository.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java @@ -1,12 +1,11 @@ -package com.space.server.domain.chapter.domain.repository; +package com.space.server.domain.chapter.adapter.out.persistence; -import com.space.server.domain.chapter.domain.Chapter; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; @Repository -public interface ChapterRepository extends JpaRepository { - List findAllByOrderById(); +public interface ChapterRepository extends JpaRepository { + List findAllByOrderById(Long chapterId); } From 2a66048d49ff7053aa8a6bb92b1407a41251e2f9 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:09:09 +0900 Subject: [PATCH 107/157] refactor(Chapter): GetChapterQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../chapter/application/port/in/GetChapterQuery.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/application/port/in/GetChapterQuery.java diff --git a/src/main/java/com/space/server/domain/chapter/application/port/in/GetChapterQuery.java b/src/main/java/com/space/server/domain/chapter/application/port/in/GetChapterQuery.java new file mode 100644 index 00000000..27634c43 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/application/port/in/GetChapterQuery.java @@ -0,0 +1,8 @@ +package com.space.server.domain.chapter.application.port.in; + +import com.space.server.domain.chapter.domain.Chapter; + +public interface GetChapterQuery { + + Chapter getChapter(Long id); +} From 2c0089ece6a678e54e2d404c924de3dbe326e796 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:09:19 +0900 Subject: [PATCH 108/157] refactor(Chapter): GetChapterService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/GetChapterService.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/application/service/GetChapterService.java diff --git a/src/main/java/com/space/server/domain/chapter/application/service/GetChapterService.java b/src/main/java/com/space/server/domain/chapter/application/service/GetChapterService.java new file mode 100644 index 00000000..d61288c0 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/application/service/GetChapterService.java @@ -0,0 +1,19 @@ +package com.space.server.domain.chapter.application.service; + +import com.space.server.common.annotation.UseCase; +import com.space.server.domain.chapter.application.port.in.GetChapterQuery; +import com.space.server.domain.chapter.application.port.out.LoadChapterPort; +import com.space.server.domain.chapter.domain.Chapter; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class GetChapterService implements GetChapterQuery { + + private final LoadChapterPort loadChapterPort; + + @Override + public Chapter getChapter(Long chapterId) { + return loadChapterPort.loadChapter(chapterId); + } +} From 863bc68e905aa1e3212f87c07c36588d3757776e Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:11:48 +0900 Subject: [PATCH 109/157] refactor(Chapter): LoadChapterPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../chapter/application/port/out/LoadChapterPort.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/application/port/out/LoadChapterPort.java diff --git a/src/main/java/com/space/server/domain/chapter/application/port/out/LoadChapterPort.java b/src/main/java/com/space/server/domain/chapter/application/port/out/LoadChapterPort.java new file mode 100644 index 00000000..26350244 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/application/port/out/LoadChapterPort.java @@ -0,0 +1,8 @@ +package com.space.server.domain.chapter.application.port.out; + +import com.space.server.domain.chapter.domain.Chapter; + +public interface LoadChapterPort { + + Chapter loadChapter(Long chapterId); +} From 1826b89af40922f913e8d8df8b1595082a5ead1b Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:11:58 +0900 Subject: [PATCH 110/157] refactor(Chapter): ChapterGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/ChapterGetAdapter.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterGetAdapter.java diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterGetAdapter.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterGetAdapter.java new file mode 100644 index 00000000..72074586 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterGetAdapter.java @@ -0,0 +1,22 @@ +package com.space.server.domain.chapter.adapter.out.persistence; + +import com.space.server.common.annotation.PersistenceAdapter; +import com.space.server.domain.chapter.application.port.out.LoadChapterPort; +import com.space.server.domain.chapter.domain.Chapter; +import com.space.server.domain.chapter.exception.ChapterNotFoundException; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class ChapterGetAdapter implements LoadChapterPort { + + private final ChapterRepository chapterRepository; + private final ChapterMapper chapterMapper; + + @Override + public Chapter loadChapter(Long chapterId) { + return chapterRepository.findById(chapterId) + .map(chapterMapper::mapToChapter) + .orElseThrow(ChapterNotFoundException::new); + } +} From 4c557dff700ab871c8be63c9dc995c605ed6369c Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:12:24 +0900 Subject: [PATCH 111/157] refactor(Chapter): ChapterMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity 간 변환 --- .../adapter/out/persistence/ChapterMapper.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java new file mode 100644 index 00000000..5526eb57 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java @@ -0,0 +1,17 @@ +package com.space.server.domain.chapter.adapter.out.persistence; + +import com.space.server.domain.chapter.domain.Chapter; +import org.springframework.stereotype.Component; + +@Component +public class ChapterMapper { + + public Chapter mapToChapter(ChapterJpaEntity chapter) { + return Chapter.builder() + .id(new Chapter.ChapterId(chapter.getId())) + .explanation(chapter.getExplanation()) + .mapObject(chapter.getMapObject()) + .mapObjectImage(chapter.getMapObjectImage()) + .build(); + } +} From fdde470930c11531a768b5291ce262cfeb7c3ef0 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:12:46 +0900 Subject: [PATCH 112/157] refactor(Chapter): ChapterResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity 속 Id 가져오기 수정 --- .../in/web}/dto/response/ChapterResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/com/space/server/domain/chapter/{presentation => adapter/in/web}/dto/response/ChapterResponse.java (77%) diff --git a/src/main/java/com/space/server/domain/chapter/presentation/dto/response/ChapterResponse.java b/src/main/java/com/space/server/domain/chapter/adapter/in/web/dto/response/ChapterResponse.java similarity index 77% rename from src/main/java/com/space/server/domain/chapter/presentation/dto/response/ChapterResponse.java rename to src/main/java/com/space/server/domain/chapter/adapter/in/web/dto/response/ChapterResponse.java index bb8be53d..e1eca6aa 100644 --- a/src/main/java/com/space/server/domain/chapter/presentation/dto/response/ChapterResponse.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/in/web/dto/response/ChapterResponse.java @@ -1,4 +1,4 @@ -package com.space.server.domain.chapter.presentation.dto.response; +package com.space.server.domain.chapter.adapter.in.web.dto.response; import com.space.server.domain.chapter.domain.Chapter; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,6 +19,6 @@ public record ChapterResponse( Map mapObjectImage ) { public static ChapterResponse from(Chapter chapter) { - return new ChapterResponse(chapter.getId(), chapter.getExplanation(), chapter.getMapObject(), chapter.getMapObjectImage()); + return new ChapterResponse(chapter.getId().getValue(), chapter.getExplanation(), chapter.getMapObject(), chapter.getMapObjectImage()); } } From 19b6a7fb1525212d8085e49f9d80be9586d717c7 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:13:33 +0900 Subject: [PATCH 113/157] refactor(Chapter): ChapterCreator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 모듈 변경 --- .../service/implementation/ChapterCreator.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/chapter/service/implementation/ChapterCreator.java diff --git a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterCreator.java b/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterCreator.java deleted file mode 100644 index 83e01a28..00000000 --- a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterCreator.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.chapter.service.implementation; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.domain.repository.ChapterRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ChapterCreator { - - private final ChapterRepository chapterRepository; - - public void create(Chapter chapter) { - chapterRepository.save(chapter); - } -} From bd8c10596d94acaf672e5eca791fb0a698e284f3 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:13:41 +0900 Subject: [PATCH 114/157] refactor(Chapter): ChapterDeleter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 모듈 변경 --- .../service/implementation/ChapterDeleter.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/chapter/service/implementation/ChapterDeleter.java diff --git a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterDeleter.java b/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterDeleter.java deleted file mode 100644 index f5fe0c72..00000000 --- a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterDeleter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.chapter.service.implementation; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.domain.repository.ChapterRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class ChapterDeleter { - - private final ChapterRepository chapterRepository; - - public void delete(Chapter chapter) { - chapterRepository.delete(chapter); - } -} From e3003fdbb9e4c5fc971d4a09d2380d7ea54fa2c1 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:13:52 +0900 Subject: [PATCH 115/157] refactor(Chapter): ChapterReader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 모듈 변경 --- .../service/implementation/ChapterReader.java | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/chapter/service/implementation/ChapterReader.java diff --git a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterReader.java b/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterReader.java deleted file mode 100644 index c3e3e0b9..00000000 --- a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterReader.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.space.server.domain.chapter.service.implementation; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.domain.repository.ChapterRepository; -import com.space.server.domain.chapter.exception.ChapterNotFoundException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class ChapterReader { - - private final ChapterRepository chapterRepository; - - public Chapter findById(Long id) { - return chapterRepository.findById(id) - .orElseThrow(ChapterNotFoundException::new); - } - - public List findAll() { - return chapterRepository.findAllByOrderById(); - } -} From b88b44402e3b2bf32465c797c2135c39a5e3b22b Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:14:03 +0900 Subject: [PATCH 116/157] refactor(Chapter): ChapterUpdater MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 모듈 변경 --- .../service/implementation/ChapterUpdater.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/chapter/service/implementation/ChapterUpdater.java diff --git a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterUpdater.java b/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterUpdater.java deleted file mode 100644 index a3c37751..00000000 --- a/src/main/java/com/space/server/domain/chapter/service/implementation/ChapterUpdater.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.space.server.domain.chapter.service.implementation; - -import com.space.server.domain.chapter.domain.Chapter; -import org.springframework.stereotype.Service; - -@Service -public class ChapterUpdater { - - public void update(Chapter updatableChapter, Chapter chapter) { - updatableChapter.update(chapter); - } -} From 28d23162e5e1c15e59764ebd42e43dfc485b98d1 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:14:12 +0900 Subject: [PATCH 117/157] refactor(Chapter): CommandChapterService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 모듈 변경 --- .../service/CommandChapterService.java | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/chapter/service/CommandChapterService.java diff --git a/src/main/java/com/space/server/domain/chapter/service/CommandChapterService.java b/src/main/java/com/space/server/domain/chapter/service/CommandChapterService.java deleted file mode 100644 index 88fced89..00000000 --- a/src/main/java/com/space/server/domain/chapter/service/CommandChapterService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.space.server.domain.chapter.service; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.service.implementation.ChapterCreator; -import com.space.server.domain.chapter.service.implementation.ChapterDeleter; -import com.space.server.domain.chapter.service.implementation.ChapterReader; -import com.space.server.domain.chapter.service.implementation.ChapterUpdater; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Transactional -public class CommandChapterService { - - private final ChapterCreator chapterCreator; - private final ChapterReader chapterReader; - private final ChapterUpdater chapterUpdater; - private final ChapterDeleter chapterDeleter; - - public void createChapter(Chapter chapter) { - chapterCreator.create(chapter); - } - - public void updateChapter(Long chapterId, Chapter chapter) { - Chapter updatableChapter = chapterReader.findById(chapterId); - chapterUpdater.update(updatableChapter, chapter); - } - - public void deleteChapter(Long chapterId) { - Chapter chapter = chapterReader.findById(chapterId); - chapterDeleter.delete(chapter); - } -} From 44a57b9899267efb99e9a817b1d9992d26e36012 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:14:20 +0900 Subject: [PATCH 118/157] refactor(Chapter): QueryChapterService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 모듈 변경 --- .../chapter/service/QueryChapterService.java | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/chapter/service/QueryChapterService.java diff --git a/src/main/java/com/space/server/domain/chapter/service/QueryChapterService.java b/src/main/java/com/space/server/domain/chapter/service/QueryChapterService.java deleted file mode 100644 index 7895ca92..00000000 --- a/src/main/java/com/space/server/domain/chapter/service/QueryChapterService.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.space.server.domain.chapter.service; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.service.implementation.ChapterReader; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class QueryChapterService { - - private final ChapterReader chapterReader; - - public Chapter readOne(Long chapterId) { - return chapterReader.findById(chapterId); - } - - public List readAll() { - return chapterReader.findAll(); - } -} From 0112ef5185a5db0638fd05053fb8485675047a6c Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 14:14:49 +0900 Subject: [PATCH 119/157] refactor(Chapter): ChapterRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jpa Entity로 수정 --- .../chapter/adapter/out/persistence/ChapterRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java index b9557f99..d6b116da 100644 --- a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterRepository.java @@ -7,5 +7,5 @@ @Repository public interface ChapterRepository extends JpaRepository { - List findAllByOrderById(Long chapterId); + List findAllByOrderById(); } From e091fede5e9b04e5e384980983a8384d5c78e78f Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 15:22:06 +0900 Subject: [PATCH 120/157] rename(Quiz): QuizResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 구조로 이동 --- .../in/web}/ChapterController.java | 24 +++++++++---------- .../chat/service/CommandChatService.java | 1 - .../InventoriesByIsEquippedGetAdapter.java | 4 +++- .../out/persistence/ItemGetAdapter.java | 4 ++-- .../dto/response/QuizResponse.java | 2 +- .../quiz/service/CommandQuizService.java | 1 - .../domain/quiz/service/QueryQuizService.java | 1 - 7 files changed, 18 insertions(+), 19 deletions(-) rename src/main/java/com/space/server/domain/chapter/{presentation => adapter/in/web}/ChapterController.java (52%) diff --git a/src/main/java/com/space/server/domain/chapter/presentation/ChapterController.java b/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java similarity index 52% rename from src/main/java/com/space/server/domain/chapter/presentation/ChapterController.java rename to src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java index 47c602dd..1d2fb8db 100644 --- a/src/main/java/com/space/server/domain/chapter/presentation/ChapterController.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java @@ -1,7 +1,7 @@ -package com.space.server.domain.chapter.presentation; +package com.space.server.domain.chapter.adapter.in.web; -import com.space.server.domain.chapter.presentation.dto.response.ChapterResponse; -import com.space.server.domain.chapter.service.QueryChapterService; +import com.space.server.domain.chapter.adapter.in.web.dto.response.ChapterResponse; +import com.space.server.domain.chapter.application.port.in.GetChapterQuery; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,20 +16,20 @@ @Tag(name = "Chapter", description = "챕터 API") public class ChapterController { - private final QueryChapterService queryChapterService; + private final GetChapterQuery getChapterQuery; @GetMapping("{chapter-id}") @Operation(summary = "챕터 조회", description = "해당 챕터를 조회합니다.") public ChapterResponse readOne( @Parameter(description = "챕터 ID", required = true) @PathVariable(name = "chapter-id") Long chapterId) { - return ChapterResponse.from(queryChapterService.readOne(chapterId)); + return ChapterResponse.from(getChapterQuery.getChapter(chapterId)); } - @GetMapping - @Operation(summary = "모든 챕터 조회", description = "모든 챕터를 조회합니다.") - public List readAll() { - return queryChapterService.readAll().stream() - .map(ChapterResponse::from) - .toList(); - } +// @GetMapping +// @Operation(summary = "모든 챕터 조회", description = "모든 챕터를 조회합니다.") +// public List readAll() { +// return queryChapterService.readAll().stream() +// .map(ChapterResponse::from) +// .toList(); +// } } diff --git a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java index e038952b..57af88e5 100644 --- a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java +++ b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java @@ -16,7 +16,6 @@ import com.space.server.domain.chat.service.implementation.AiResponseJsonParsing; import com.space.server.domain.chat.service.implementation.ChatValidator; import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.service.implementation.ChapterReader; import com.space.server.domain.checklist.application.port.in.GetChecklistsByQuizQuery; import com.space.server.domain.checklist.domain.Checklist; import com.space.server.domain.quiz.domain.Quiz; diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java index d188145a..cdf93bcc 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesByIsEquippedGetAdapter.java @@ -4,6 +4,7 @@ import com.space.server.domain.inventory.application.port.out.LoadInventoriesByIsEquippedPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.user.domain.repository.UserRepository; +import com.space.server.domain.user.exception.UserNotFoundException; import lombok.RequiredArgsConstructor; import java.util.List; @@ -18,7 +19,8 @@ public class InventoriesByIsEquippedGetAdapter implements LoadInventoriesByIsEqu @Override public List loadInventoriesByIsEquippedPort(Long userId) { - return inventoryRepository.findByIsEquippedAndUser(userRepository.findById(userId).get()).stream() + return inventoryRepository.findByIsEquippedAndUser(userRepository.findById(userId) + .orElseThrow(UserNotFoundException::new)).stream() .map(inventoryMapper::mapToInventory) .toList(); } diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java index a21b2482..a87aeaea 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemGetAdapter.java @@ -14,8 +14,8 @@ public class ItemGetAdapter implements LoadItemPort { private final ItemMapper itemMapper; @Override - public Item loadItem(Long id) { - return itemRepository.findById(id) + public Item loadItem(Long itemId) { + return itemRepository.findById(itemId) .map(itemMapper::mapToItem) .orElseThrow(ItemNotFoundException::new); } diff --git a/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java b/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java index 033da9d5..e79ec36b 100644 --- a/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java +++ b/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java @@ -1,6 +1,6 @@ package com.space.server.domain.quiz.presentation.dto.response; -import com.space.server.domain.chapter.presentation.dto.response.ChapterResponse; +import com.space.server.domain.chapter.adapter.in.web.dto.response.ChapterResponse; import com.space.server.domain.quiz.domain.Quiz; import com.space.server.domain.quiz.domain.value.CharacterDirection; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java b/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java index 7564bd08..b54d91ea 100644 --- a/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java +++ b/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java @@ -1,6 +1,5 @@ package com.space.server.domain.quiz.service; -import com.space.server.domain.chapter.service.implementation.ChapterReader; import com.space.server.domain.quiz.domain.Quiz; import com.space.server.domain.quiz.service.implementation.QuizCreator; import com.space.server.domain.quiz.service.implementation.QuizDeleter; diff --git a/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java b/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java index 5a37781b..4efdf9ed 100644 --- a/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java +++ b/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java @@ -1,7 +1,6 @@ package com.space.server.domain.quiz.service; import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.chapter.service.implementation.ChapterReader; import com.space.server.domain.quiz.domain.Quiz; import com.space.server.domain.quiz.service.implementation.QuizReader; import lombok.RequiredArgsConstructor; From 96525835f0a999b81fcbd1e3342bb03569e27601 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 15:34:33 +0900 Subject: [PATCH 121/157] fix(Checklist): ChecklistResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 변견된 Domain Entity에서 Id 값 가져오는 방법으로 고쳤습니다. --- .../adapter/in/web/dto/response/ChecklistResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java b/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java index 90805f0c..665f8ea3 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java @@ -21,7 +21,7 @@ public static ChecklistResponse from(Checklist checklist) { return new ChecklistResponse( checklist.getId().getValue(), checklist.getQuiz().getId(), - checklist.getChapter().getId(), + checklist.getChapter().getId().getValue(), checklist.getContent() ); } From 764d06d54dafde8d86beadca3b96dc31fabca9a6 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 15:42:28 +0900 Subject: [PATCH 122/157] fix(Chat): CommandQuizService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ChapterReader를 더 이상 사용하지 않아 삭제하여 주입 받지 못하던 문제를 해결하였습니다. --- .../com/space/server/domain/quiz/service/CommandQuizService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java b/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java index b54d91ea..c47d4b76 100644 --- a/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java +++ b/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java @@ -18,7 +18,6 @@ public class CommandQuizService { private final QuizReader quizReader; private final QuizUpdater quizUpdater; private final QuizDeleter quizDeleter; - private final ChapterReader chapterReader; public void create(Quiz quiz) { quizCreator.create(quiz); From e8411e612116bc168b5e971cf1f5494078b859f8 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 15:43:14 +0900 Subject: [PATCH 123/157] fix(Chat): InventoriesGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User를 찾지 못한 경우 null을 반환하던 문제를 해결하였습니다. --- .../adapter/out/persistence/InventoriesGetAdapter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java index a1c9b095..6f664714 100644 --- a/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java +++ b/src/main/java/com/space/server/domain/inventory/adapter/out/persistence/InventoriesGetAdapter.java @@ -4,6 +4,7 @@ import com.space.server.domain.inventory.application.port.out.LoadInventoriesPort; import com.space.server.domain.inventory.domain.Inventory; import com.space.server.domain.user.domain.repository.UserRepository; +import com.space.server.domain.user.exception.UserExistedException; import lombok.RequiredArgsConstructor; import java.util.List; @@ -18,7 +19,8 @@ public class InventoriesGetAdapter implements LoadInventoriesPort { @Override public List loadInventories(Long userId) { - return inventoryRepository.findByUser(userRepository.findById(userId).get()).stream() + return inventoryRepository.findByUser(userRepository.findById(userId) + .orElseThrow(UserExistedException::new)).stream() .map(inventoryMapper::mapToInventory) .toList(); } From a77fbccc3f9e87f964bd2d206cf6a1742b8c09d0 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 19:08:06 +0900 Subject: [PATCH 124/157] refactor(Chapter): ChapterController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 줄 띄움 제거 --- .../domain/chapter/adapter/in/web/ChapterController.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java b/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java index 1d2fb8db..7a0d0105 100644 --- a/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java @@ -20,8 +20,7 @@ public class ChapterController { @GetMapping("{chapter-id}") @Operation(summary = "챕터 조회", description = "해당 챕터를 조회합니다.") - public ChapterResponse readOne( - @Parameter(description = "챕터 ID", required = true) @PathVariable(name = "chapter-id") Long chapterId) { + public ChapterResponse readOne(@Parameter(description = "챕터 ID", required = true) @PathVariable(name = "chapter-id") Long chapterId) { return ChapterResponse.from(getChapterQuery.getChapter(chapterId)); } From 219a1ed09b1e85fb2e3b75870ba4b57b38a6ef61 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 19:21:26 +0900 Subject: [PATCH 125/157] refactor(Chapter): ChapterJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 어노테이션 제거 --- .../chapter/adapter/out/persistence/ChapterJpaEntity.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java index d2af9c17..23a9cea5 100644 --- a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterJpaEntity.java @@ -2,7 +2,6 @@ import io.hypersistence.utils.hibernate.type.basic.PostgreSQLHStoreType; import jakarta.persistence.*; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -28,12 +27,10 @@ public class ChapterJpaEntity { @Type(PostgreSQLHStoreType.class) @Column(columnDefinition = "hstore") - @NotNull private Map mapObject; @Type(PostgreSQLHStoreType.class) @Column(columnDefinition = "hstore") - @NotNull private Map mapObjectImage; } From 260465b0084d0b13c37b281501dce5073cc47e74 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 19:23:02 +0900 Subject: [PATCH 126/157] refactor(Item): ItemsGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다른 Adapter와 형식에 맞게 수정하였습니다. --- .../domain/item/adapter/out/persistence/ItemsGetAdapter.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java index f0b12474..d80976d2 100644 --- a/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java +++ b/src/main/java/com/space/server/domain/item/adapter/out/persistence/ItemsGetAdapter.java @@ -16,8 +16,7 @@ public class ItemsGetAdapter implements LoadItemsPort { @Override public List loadItems() { - return itemRepository.findAll() - .stream() + return itemRepository.findAll().stream() .map(itemMapper::mapToItem) .toList(); } From 1c09adf1b98cf63c00946f59d9eb53f333921663 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 19:24:20 +0900 Subject: [PATCH 127/157] refactor(Item): ChecklistMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chapter 구현하여 클린 아키텍처 버전으로 수정하였습니다. --- .../adapter/out/persistence/ChecklistMapper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java index 5a0dcaa8..34e148fd 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java @@ -1,16 +1,22 @@ package com.space.server.domain.checklist.adapter.out.persistence; +import com.space.server.domain.chapter.adapter.out.persistence.ChapterMapper; import com.space.server.domain.checklist.domain.Checklist; +import com.space.server.domain.item.adapter.out.persistence.ItemMapper; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component +@RequiredArgsConstructor public class ChecklistMapper { + private final ChapterMapper chapterMapper; + public Checklist mapToChecklist(ChecklistJpaEntity checklist) { return Checklist.builder() .id(new Checklist.ChecklistId(checklist.getId())) .quiz(checklist.getQuiz()) - .chapter(checklist.getChapter()) + .chapter(chapterMapper.mapToChapter(checklist.getChapter())) .content(checklist.getContent()) .build(); } From 76161df3c57276ba2efa324626cd975c590b45bf Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 19:25:16 +0900 Subject: [PATCH 128/157] refactor(Checklist): ChecklistJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chapter 구현하여 클린 아키텍처 버전으로 수정하였습니다. --- .../checklist/adapter/out/persistence/ChecklistJpaEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java index a0ad0f7b..79326849 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java @@ -1,6 +1,6 @@ package com.space.server.domain.checklist.adapter.out.persistence; -import com.space.server.domain.chapter.domain.Chapter; +import com.space.server.domain.chapter.adapter.out.persistence.ChapterJpaEntity; import com.space.server.domain.quiz.domain.Quiz; import jakarta.persistence.*; import lombok.AllArgsConstructor; @@ -26,7 +26,7 @@ public class ChecklistJpaEntity { @JoinColumn @ManyToOne(fetch = FetchType.LAZY) - private Chapter chapter; + private ChapterJpaEntity chapter; @Column private String content; From 3d793b4c47ba145db2581d1cb4b7ab95d6e42662 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Tue, 19 Nov 2024 19:25:39 +0900 Subject: [PATCH 129/157] refactor(Chat): CommandChatService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chapter 구현하여 클린 아키텍처 버전으로 수정하였습니다. --- .../space/server/domain/chat/service/CommandChatService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java index 57af88e5..2575bf45 100644 --- a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java +++ b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java @@ -8,6 +8,7 @@ import com.space.server.domain.ai.service.dto.response.gpt.AiThreadResponse; import com.space.server.domain.ai.service.implementation.ChatCompleter; import com.space.server.domain.ai.service.implementation.PromptCreator; +import com.space.server.domain.chapter.application.port.in.GetChapterQuery; import com.space.server.domain.chat.domain.Chat; import com.space.server.domain.chat.domain.value.Type; import com.space.server.domain.chat.presentation.dto.request.CreateChatRequest; @@ -43,12 +44,12 @@ public class CommandChatService { private final StateReader stateReader; private final StateCreator stateCreator; private final QuizReader quizReader; + private final GetChapterQuery getChapterQuery; private final UserReader userReader; private final ChatReader chatReader; private final ChatCreator chatCreator; private final ChatValidator chatValidator; private final GetChecklistsByQuizQuery getChecklistsByQuizQuery; - private final ChapterReader chapterReader; private final ChatCompleter chatCompleter; private final StateUpdater stateUpdater; private final AiResponseJsonParsing aiResponseJsonParsing; @@ -57,7 +58,7 @@ public AiResponse create(Long quizId, CreateChatRequest request, Long userId) { Quiz quiz = quizReader.findById(quizId); Users user = userReader.findById(userId); List checklists = getChecklistsByQuizQuery.getChecklistsByQuiz(quizId); - Chapter chapter = chapterReader.findById(quiz.getChapter().getId()); + Chapter chapter = getChapterQuery.getChapter(quiz.getChapter().getId()); Optional state = stateReader.findByQuizIdAndUserId(quiz, user); From c4e928ca6049d7107306f2fae09d6fe84bd9691d Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:09:20 +0900 Subject: [PATCH 130/157] refactor(Chapter): GetChaptersQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../chapter/application/port/in/GetChaptersQuery.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/application/port/in/GetChaptersQuery.java diff --git a/src/main/java/com/space/server/domain/chapter/application/port/in/GetChaptersQuery.java b/src/main/java/com/space/server/domain/chapter/application/port/in/GetChaptersQuery.java new file mode 100644 index 00000000..0b7ab229 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/application/port/in/GetChaptersQuery.java @@ -0,0 +1,10 @@ +package com.space.server.domain.chapter.application.port.in; + +import com.space.server.domain.chapter.domain.Chapter; + +import java.util.List; + +public interface GetChaptersQuery { + + List getChapters(); +} From 61937aee98d85a0735ba11603933abe09d14ab26 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:13:24 +0900 Subject: [PATCH 131/157] refactor(Chapter): GetChaptersQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/GetChaptersService.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/application/service/GetChaptersService.java diff --git a/src/main/java/com/space/server/domain/chapter/application/service/GetChaptersService.java b/src/main/java/com/space/server/domain/chapter/application/service/GetChaptersService.java new file mode 100644 index 00000000..fb429148 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/application/service/GetChaptersService.java @@ -0,0 +1,21 @@ +package com.space.server.domain.chapter.application.service; + +import com.space.server.common.annotation.UseCase; +import com.space.server.domain.chapter.application.port.in.GetChaptersQuery; +import com.space.server.domain.chapter.application.port.out.LoadChaptersPort; +import com.space.server.domain.chapter.domain.Chapter; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetChaptersService implements GetChaptersQuery { + + private final LoadChaptersPort loadChaptersPort; + + @Override + public List getChapters() { + return loadChaptersPort.loadChapters(); + } +} From 64cabdfbb85b2e07191055780c05e55f1a7bf226 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:13:43 +0900 Subject: [PATCH 132/157] refactor(Chapter): GetChaptersQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../chapter/application/port/out/LoadChaptersPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/chapter/application/port/out/LoadChaptersPort.java diff --git a/src/main/java/com/space/server/domain/chapter/application/port/out/LoadChaptersPort.java b/src/main/java/com/space/server/domain/chapter/application/port/out/LoadChaptersPort.java new file mode 100644 index 00000000..c12d2154 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/application/port/out/LoadChaptersPort.java @@ -0,0 +1,10 @@ +package com.space.server.domain.chapter.application.port.out; + +import com.space.server.domain.chapter.domain.Chapter; + +import java.util.List; + +public interface LoadChaptersPort { + + List loadChapters(); +} From 76e8991ef8f420328631fe9ca9927c97921ce29a Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:13:53 +0900 Subject: [PATCH 133/157] refactor(Chapter): ChaptersGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/ChaptersGetAdapter.java | 23 ++++++++++++ .../in/web}/QuizController.java | 19 ++++++---- .../in/web}/dto/response/QuizAllResponse.java | 4 +- .../in/web}/dto/response/QuizResponse.java | 4 +- .../out/persistence/QuizRepository.java | 12 ++++++ .../domain/repository/QuizRepository.java | 14 ------- .../presentation/dto/request/QuizRequest.java | 0 .../quiz/service/CommandQuizService.java | 35 ------------------ .../domain/quiz/service/QueryQuizService.java | 37 ------------------- .../service/implementation/QuizCreator.java | 17 --------- .../service/implementation/QuizDeleter.java | 17 --------- .../service/implementation/QuizReader.java | 34 ----------------- .../service/implementation/QuizUpdater.java | 12 ------ 13 files changed, 51 insertions(+), 177 deletions(-) create mode 100644 src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChaptersGetAdapter.java rename src/main/java/com/space/server/domain/quiz/{presentation => adapter/in/web}/QuizController.java (58%) rename src/main/java/com/space/server/domain/quiz/{presentation => adapter/in/web}/dto/response/QuizAllResponse.java (68%) rename src/main/java/com/space/server/domain/quiz/{presentation => adapter/in/web}/dto/response/QuizResponse.java (94%) create mode 100644 src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizRepository.java delete mode 100644 src/main/java/com/space/server/domain/quiz/domain/repository/QuizRepository.java delete mode 100644 src/main/java/com/space/server/domain/quiz/presentation/dto/request/QuizRequest.java delete mode 100644 src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java delete mode 100644 src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java delete mode 100644 src/main/java/com/space/server/domain/quiz/service/implementation/QuizCreator.java delete mode 100644 src/main/java/com/space/server/domain/quiz/service/implementation/QuizDeleter.java delete mode 100644 src/main/java/com/space/server/domain/quiz/service/implementation/QuizReader.java delete mode 100644 src/main/java/com/space/server/domain/quiz/service/implementation/QuizUpdater.java diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChaptersGetAdapter.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChaptersGetAdapter.java new file mode 100644 index 00000000..ebb7fd38 --- /dev/null +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChaptersGetAdapter.java @@ -0,0 +1,23 @@ +package com.space.server.domain.chapter.adapter.out.persistence; + +import com.space.server.common.annotation.PersistenceAdapter; +import com.space.server.domain.chapter.application.port.out.LoadChaptersPort; +import com.space.server.domain.chapter.domain.Chapter; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class ChaptersGetAdapter implements LoadChaptersPort { + + private final ChapterRepository chapterRepository; + private final ChapterMapper chapterMapper; + + @Override + public List loadChapters() { + return chapterRepository.findAll().stream() + .map(chapterMapper::mapToChapter) + .toList(); + } +} diff --git a/src/main/java/com/space/server/domain/quiz/presentation/QuizController.java b/src/main/java/com/space/server/domain/quiz/adapter/in/web/QuizController.java similarity index 58% rename from src/main/java/com/space/server/domain/quiz/presentation/QuizController.java rename to src/main/java/com/space/server/domain/quiz/adapter/in/web/QuizController.java index ed63b4db..f58592e5 100644 --- a/src/main/java/com/space/server/domain/quiz/presentation/QuizController.java +++ b/src/main/java/com/space/server/domain/quiz/adapter/in/web/QuizController.java @@ -1,8 +1,10 @@ -package com.space.server.domain.quiz.presentation; +package com.space.server.domain.quiz.adapter.in.web; -import com.space.server.domain.quiz.presentation.dto.response.QuizAllResponse; -import com.space.server.domain.quiz.presentation.dto.response.QuizResponse; -import com.space.server.domain.quiz.service.QueryQuizService; +import com.space.server.common.annotation.WebAdapter; +import com.space.server.domain.quiz.adapter.in.web.dto.response.QuizResponse; +import com.space.server.domain.quiz.adapter.in.web.dto.response.QuizAllResponse; +import com.space.server.domain.quiz.application.port.in.GetQuizQuery; +import com.space.server.domain.quiz.application.port.in.GetQuizzesByChapterQuery; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -11,16 +13,19 @@ import java.util.List; +@WebAdapter @RestController @RequiredArgsConstructor @Tag(name = "Quiz", description = "퀴즈 API") public class QuizController { - private final QueryQuizService queryQuizService; + + private final GetQuizzesByChapterQuery getQuizzesByChapterQuery; + private final GetQuizQuery getQuizQuery; @GetMapping("/quizzes/{quiz-id}") @Operation(summary = "퀴즈 조회", description = "해당 퀴즈를 조회합니다.") public QuizResponse getQuiz(@PathVariable("quiz-id") long quizId) { - return QuizResponse.from(queryQuizService.readOne(quizId)); + return QuizResponse.from(getQuizQuery.getQuiz(quizId)); } @GetMapping("/chapters/{chapter-id}/quizzes") @@ -28,7 +33,7 @@ public QuizResponse getQuiz(@PathVariable("quiz-id") long quizId) { public List findAll( @Parameter(description = "챕터 ID", required = true) @PathVariable("chapter-id") Long chapterId ) { - return queryQuizService.findAll(chapterId).stream() + return getQuizzesByChapterQuery.getQuizzesByChapter(chapterId).stream() .map(QuizAllResponse::from) .toList(); } diff --git a/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizAllResponse.java b/src/main/java/com/space/server/domain/quiz/adapter/in/web/dto/response/QuizAllResponse.java similarity index 68% rename from src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizAllResponse.java rename to src/main/java/com/space/server/domain/quiz/adapter/in/web/dto/response/QuizAllResponse.java index dc99abda..5a6503ff 100644 --- a/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizAllResponse.java +++ b/src/main/java/com/space/server/domain/quiz/adapter/in/web/dto/response/QuizAllResponse.java @@ -1,4 +1,4 @@ -package com.space.server.domain.quiz.presentation.dto.response; +package com.space.server.domain.quiz.adapter.in.web.dto.response; import com.space.server.domain.quiz.domain.Quiz; import io.swagger.v3.oas.annotations.media.Schema; @@ -9,6 +9,6 @@ public record QuizAllResponse( Long id ) { public static QuizAllResponse from(Quiz quiz) { - return new QuizAllResponse(quiz.getId()); + return new QuizAllResponse(quiz.getId().getValue()); } } diff --git a/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java b/src/main/java/com/space/server/domain/quiz/adapter/in/web/dto/response/QuizResponse.java similarity index 94% rename from src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java rename to src/main/java/com/space/server/domain/quiz/adapter/in/web/dto/response/QuizResponse.java index e79ec36b..0d05d190 100644 --- a/src/main/java/com/space/server/domain/quiz/presentation/dto/response/QuizResponse.java +++ b/src/main/java/com/space/server/domain/quiz/adapter/in/web/dto/response/QuizResponse.java @@ -1,4 +1,4 @@ -package com.space.server.domain.quiz.presentation.dto.response; +package com.space.server.domain.quiz.adapter.in.web.dto.response; import com.space.server.domain.chapter.adapter.in.web.dto.response.ChapterResponse; import com.space.server.domain.quiz.domain.Quiz; @@ -36,7 +36,7 @@ public record QuizResponse( ) { public static QuizResponse from(Quiz quiz) { return new QuizResponse( - quiz.getId(), + quiz.getId().getValue(), ChapterResponse.from(quiz.getChapter()), quiz.getTitle(), quiz.getContent(), diff --git a/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizRepository.java b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizRepository.java new file mode 100644 index 00000000..46373576 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizRepository.java @@ -0,0 +1,12 @@ +package com.space.server.domain.quiz.adapter.out.persistence; + +import com.space.server.domain.chapter.adapter.out.persistence.ChapterJpaEntity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface QuizRepository extends JpaRepository { + List findAllByChapterOrderByStepId(ChapterJpaEntity chapter); +} diff --git a/src/main/java/com/space/server/domain/quiz/domain/repository/QuizRepository.java b/src/main/java/com/space/server/domain/quiz/domain/repository/QuizRepository.java deleted file mode 100644 index 89e73849..00000000 --- a/src/main/java/com/space/server/domain/quiz/domain/repository/QuizRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.space.server.domain.quiz.domain.repository; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.quiz.domain.Quiz; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface QuizRepository extends JpaRepository { - Quiz findByChapterAndStepId(Chapter chapter, Long stepId); - List findAllByChapterOrderByStepId(Chapter chapter); -} diff --git a/src/main/java/com/space/server/domain/quiz/presentation/dto/request/QuizRequest.java b/src/main/java/com/space/server/domain/quiz/presentation/dto/request/QuizRequest.java deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java b/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java deleted file mode 100644 index c47d4b76..00000000 --- a/src/main/java/com/space/server/domain/quiz/service/CommandQuizService.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.space.server.domain.quiz.service; - -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.service.implementation.QuizCreator; -import com.space.server.domain.quiz.service.implementation.QuizDeleter; -import com.space.server.domain.quiz.service.implementation.QuizReader; -import com.space.server.domain.quiz.service.implementation.QuizUpdater; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -@Transactional -public class CommandQuizService { - - private final QuizCreator quizCreator; - private final QuizReader quizReader; - private final QuizUpdater quizUpdater; - private final QuizDeleter quizDeleter; - - public void create(Quiz quiz) { - quizCreator.create(quiz); - } - - public void update(Long quizId, Quiz quiz) { - Quiz updatableQuiz = quizReader.findById(quizId); - quizUpdater.update(updatableQuiz, quiz); - } - - public void delete(Long quizId) { - Quiz quiz = quizReader.findById(quizId); - quizDeleter.delete(quiz); - } -} diff --git a/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java b/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java deleted file mode 100644 index 4efdf9ed..00000000 --- a/src/main/java/com/space/server/domain/quiz/service/QueryQuizService.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.space.server.domain.quiz.service; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.service.implementation.QuizReader; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Service -@RequiredArgsConstructor -@Transactional(readOnly = true) -public class QueryQuizService { - - private final QuizReader quizReader; - private final ChapterReader chapterReader; - - public Quiz readOne(Long quizId) { - return quizReader.findById(quizId); - } - - public List readAll() { - return quizReader.findAll(); - } - - public Quiz findOne(Long chapterId, Long stepId) { - Chapter chapter = chapterReader.findById(chapterId); - return quizReader.findByChapterAndStepId(chapter, stepId); - } - - public List findAll(Long chapterId) { - Chapter chapter = chapterReader.findById(chapterId); - return quizReader.findAll(chapter); - } -} diff --git a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizCreator.java b/src/main/java/com/space/server/domain/quiz/service/implementation/QuizCreator.java deleted file mode 100644 index a365b07f..00000000 --- a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizCreator.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.quiz.service.implementation; - -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.domain.repository.QuizRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class QuizCreator { - - private final QuizRepository quizRepository; - - public void create(Quiz quiz) { - quizRepository.save(quiz); - } -} diff --git a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizDeleter.java b/src/main/java/com/space/server/domain/quiz/service/implementation/QuizDeleter.java deleted file mode 100644 index 85ceb3d3..00000000 --- a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizDeleter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.space.server.domain.quiz.service.implementation; - -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.domain.repository.QuizRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class QuizDeleter { - - private final QuizRepository quizRepository; - - public void delete(Quiz quiz) { - quizRepository.delete(quiz); - } -} diff --git a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizReader.java b/src/main/java/com/space/server/domain/quiz/service/implementation/QuizReader.java deleted file mode 100644 index 55c4c71f..00000000 --- a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizReader.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.space.server.domain.quiz.service.implementation; - -import com.space.server.domain.chapter.domain.Chapter; -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.domain.repository.QuizRepository; -import com.space.server.domain.quiz.exception.QuizNotFoundException; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class QuizReader { - - private final QuizRepository quizRepository; - - public Quiz findById(Long quizId) { - return quizRepository.findById(quizId) - .orElseThrow(QuizNotFoundException::new); - } - - public List findAll() { - return quizRepository.findAll(); - } - - public List findAll(Chapter chapter) { - return quizRepository.findAllByChapterOrderByStepId(chapter); - } - - public Quiz findByChapterAndStepId(Chapter chapter, Long stepId) { - return quizRepository.findByChapterAndStepId(chapter, stepId); - } -} diff --git a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizUpdater.java b/src/main/java/com/space/server/domain/quiz/service/implementation/QuizUpdater.java deleted file mode 100644 index 99606e4a..00000000 --- a/src/main/java/com/space/server/domain/quiz/service/implementation/QuizUpdater.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.space.server.domain.quiz.service.implementation; - -import com.space.server.domain.quiz.domain.Quiz; -import org.springframework.stereotype.Service; - -@Service -public class QuizUpdater { - - public void update(Quiz updatableQuiz, Quiz quiz) { - updatableQuiz.update(quiz); - } -} From af77cc2cf1ecf84f7217e0e97a6f2b693292b3cd Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:17:13 +0900 Subject: [PATCH 134/157] refactor(Chapter): ChapterController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처 버전으로 수정하였습니다. --- .../adapter/in/web/ChapterController.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java b/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java index 7a0d0105..86b13d4a 100644 --- a/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/in/web/ChapterController.java @@ -2,6 +2,7 @@ import com.space.server.domain.chapter.adapter.in.web.dto.response.ChapterResponse; import com.space.server.domain.chapter.application.port.in.GetChapterQuery; +import com.space.server.domain.chapter.application.port.in.GetChaptersQuery; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,6 +17,7 @@ @Tag(name = "Chapter", description = "챕터 API") public class ChapterController { + private final GetChaptersQuery getChaptersQuery; private final GetChapterQuery getChapterQuery; @GetMapping("{chapter-id}") @@ -24,11 +26,11 @@ public ChapterResponse readOne(@Parameter(description = "챕터 ID", required = return ChapterResponse.from(getChapterQuery.getChapter(chapterId)); } -// @GetMapping -// @Operation(summary = "모든 챕터 조회", description = "모든 챕터를 조회합니다.") -// public List readAll() { -// return queryChapterService.readAll().stream() -// .map(ChapterResponse::from) -// .toList(); -// } + @GetMapping + @Operation(summary = "모든 챕터 조회", description = "모든 챕터를 조회합니다.") + public List readAll() { + return getChaptersQuery.getChapters().stream() + .map(ChapterResponse::from) + .toList(); + } } From 0c9c8c2d5aef0da81110fe12ecf2f372f44e4007 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:18:20 +0900 Subject: [PATCH 135/157] feat(Chapter): ChapterMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jpa Entity에서 Domain Entity로 변환하는 기능을 구현하였습니다. --- .../chapter/adapter/out/persistence/ChapterMapper.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java index 5526eb57..0db43d7e 100644 --- a/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java +++ b/src/main/java/com/space/server/domain/chapter/adapter/out/persistence/ChapterMapper.java @@ -14,4 +14,13 @@ public Chapter mapToChapter(ChapterJpaEntity chapter) { .mapObjectImage(chapter.getMapObjectImage()) .build(); } + + public ChapterJpaEntity mapToChapterJpaEntity(Chapter chapter) { + return ChapterJpaEntity.builder() + .id(chapter.getId() == null ? null : chapter.getId().getValue()) + .explanation(chapter.getExplanation()) + .mapObject(chapter.getMapObject()) + .mapObjectImage(chapter.getMapObjectImage()) + .build(); + } } From d9f1f591b3b5639515fb3de73b8eb1933c0b2320 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:19:22 +0900 Subject: [PATCH 136/157] refactor(Quiz): Quiz MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity를 분리하였습니다. --- .../space/server/domain/quiz/domain/Quiz.java | 65 ++----------------- 1 file changed, 7 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/space/server/domain/quiz/domain/Quiz.java b/src/main/java/com/space/server/domain/quiz/domain/Quiz.java index 552b0d3d..efffb272 100644 --- a/src/main/java/com/space/server/domain/quiz/domain/Quiz.java +++ b/src/main/java/com/space/server/domain/quiz/domain/Quiz.java @@ -2,95 +2,44 @@ import com.space.server.domain.chapter.domain.Chapter; import com.space.server.domain.quiz.domain.value.CharacterDirection; -import io.hypersistence.utils.hibernate.type.array.IntArrayType; -import io.hypersistence.utils.hibernate.type.basic.PostgreSQLHStoreType; -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; -import lombok.AccessLevel; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.annotations.Type; +import lombok.*; import java.util.Map; @Getter -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Entity -@Schema(description = "퀴즈 Entity") +@Builder +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class Quiz { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Schema(description = "퀴즈 ID") - private Long id; + private QuizId id; - @ManyToOne(fetch = FetchType.LAZY) @NotNull - @Schema(description = "챕터 정보") private Chapter chapter; @NotNull - @Schema(description = "스텝 ID") private Long stepId; @NotNull - @Schema(description = "퀴즈 제목") private String title; @NotNull - @Schema(description = "퀴즈 내용") private String content; - @Type(IntArrayType.class) - @Column(columnDefinition = "int[][]") @NotNull - @Schema(description = "퀴즈 맵 (7x7)") private Integer[][] map; - @Enumerated(EnumType.STRING) @NotNull - @Schema(description = "캐릭터 방향") private CharacterDirection characterDirection; - @Type(PostgreSQLHStoreType.class) - @Column(columnDefinition = "hstore") @NotNull - @Schema(description = "맵 오브젝트 정보") private Map mapObject; - @Type(PostgreSQLHStoreType.class) - @Column(columnDefinition = "hstore") @NotNull - @Schema(description = "맵 오브젝트 이미지 정보") private Map mapObjectImage; - @Builder - public Quiz(Chapter chapter, Long stepId, String title, String content, Integer[][] map, CharacterDirection characterDirection, Map mapObject, Map mapObjectImage) { - this.chapter = chapter; - this.stepId = stepId; - this.title = title; - this.content = content; - this.map = map; - this.characterDirection = characterDirection; - this.mapObject = mapObject; - this.mapObjectImage = mapObjectImage; - } - - @Builder - public Quiz(Integer[][] map, CharacterDirection characterDirection) { - this.map = map; - this.characterDirection = characterDirection; - } - - public void update(Quiz quiz) { - if (quiz.getMap() != null) { - this.map = new Integer[7][7]; - for (int i = 0; i < 7; i++) { - System.arraycopy(quiz.getMap()[i], 0, this.map[i], 0, 7); - } - } - this.characterDirection = quiz.getCharacterDirection(); + @Value + public static class QuizId { + private final Long value; } } From 496d7f5d4368cd2ead58f040af9cb796674ca717 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:19:29 +0900 Subject: [PATCH 137/157] refactor(Quiz): QuizJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity를 분리하였습니다. --- .../out/persistence/QuizJpaEntity.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizJpaEntity.java diff --git a/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizJpaEntity.java b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizJpaEntity.java new file mode 100644 index 00000000..7b56c8eb --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizJpaEntity.java @@ -0,0 +1,54 @@ +package com.space.server.domain.quiz.adapter.out.persistence; + +import com.space.server.domain.chapter.adapter.out.persistence.ChapterJpaEntity; +import com.space.server.domain.quiz.domain.value.CharacterDirection; +import io.hypersistence.utils.hibernate.type.array.IntArrayType; +import io.hypersistence.utils.hibernate.type.basic.PostgreSQLHStoreType; +import jakarta.persistence.*; +import lombok.*; +import org.hibernate.annotations.Type; + +import java.util.Map; + +@Builder +@Entity +@Table(name = "quiz") +@Getter +@AllArgsConstructor +@NoArgsConstructor +public class QuizJpaEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @JoinColumn + @ManyToOne(fetch = FetchType.LAZY) + private ChapterJpaEntity chapter; + + @Column + private Long stepId; + + @Column + private String title; + + @Column + private String content; + + + @Type(IntArrayType.class) + @Column(columnDefinition = "int[][]") + private Integer[][] map; + + @Column + @Enumerated(EnumType.STRING) + private CharacterDirection characterDirection; + + @Type(PostgreSQLHStoreType.class) + @Column(columnDefinition = "hstore") + private Map mapObject; + + @Type(PostgreSQLHStoreType.class) + @Column(columnDefinition = "hstore") + private Map mapObjectImage; +} From 3020d4b32184a6023024a2d5326c2e7a6145d361 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:20:13 +0900 Subject: [PATCH 138/157] feat(Quiz): QuizMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Domain Entity와 Jpa Entity 변환을 구현하였습니다. --- .../adapter/out/persistence/QuizMapper.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizMapper.java diff --git a/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizMapper.java b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizMapper.java new file mode 100644 index 00000000..8d6ca9e1 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizMapper.java @@ -0,0 +1,41 @@ +package com.space.server.domain.quiz.adapter.out.persistence; + +import com.space.server.domain.chapter.adapter.out.persistence.ChapterMapper; +import com.space.server.domain.quiz.domain.Quiz; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class QuizMapper { + + private final ChapterMapper chapterMapper; + + public Quiz mapToQuiz(QuizJpaEntity quiz) { + return Quiz.builder() + .id(new Quiz.QuizId(quiz.getId())) + .chapter(chapterMapper.mapToChapter(quiz.getChapter())) + .stepId(quiz.getStepId()) + .title(quiz.getTitle()) + .content(quiz.getContent()) + .map(quiz.getMap()) + .characterDirection(quiz.getCharacterDirection()) + .mapObject(quiz.getMapObject()) + .mapObjectImage(quiz.getMapObjectImage()) + .build(); + } + + public QuizJpaEntity mapToQuizJpaEntity(Quiz quiz) { + return QuizJpaEntity.builder() + .id(quiz.getId() == null ? null : quiz.getId().getValue()) + .chapter(chapterMapper.mapToChapterJpaEntity(quiz.getChapter())) + .stepId(quiz.getStepId()) + .title(quiz.getTitle()) + .content(quiz.getContent()) + .map(quiz.getMap()) + .characterDirection(quiz.getCharacterDirection()) + .mapObject(quiz.getMapObject()) + .mapObjectImage(quiz.getMapObjectImage()) + .build(); + } +} From 9ab377e83fede834047b5394962e3b19a0866af9 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:21:13 +0900 Subject: [PATCH 139/157] refactor(Quiz): GetQuizQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../domain/quiz/application/port/in/GetQuizQuery.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizQuery.java diff --git a/src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizQuery.java b/src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizQuery.java new file mode 100644 index 00000000..f4ae4149 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizQuery.java @@ -0,0 +1,8 @@ +package com.space.server.domain.quiz.application.port.in; + +import com.space.server.domain.quiz.domain.Quiz; + +public interface GetQuizQuery { + + Quiz getQuiz(Long quizId); +} From c1c9e55a4f0b00e78e20d280c84ab3d7706a88c6 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:21:46 +0900 Subject: [PATCH 140/157] refactor(Quiz): LoadQuizPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/LoadQuizPort.java | 8 ++++++++ .../application/service/GetQuizService.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java create mode 100644 src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java diff --git a/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java new file mode 100644 index 00000000..55f91f90 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java @@ -0,0 +1,8 @@ +package com.space.server.domain.quiz.application.port.out; + +import com.space.server.domain.quiz.domain.Quiz; + +public interface LoadQuizPort { + + Quiz loadQuiz(Long quizId); +} diff --git a/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java new file mode 100644 index 00000000..f345a865 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java @@ -0,0 +1,19 @@ +package com.space.server.domain.quiz.application.service; + +import com.space.server.common.annotation.UseCase; +import com.space.server.domain.quiz.application.port.in.GetQuizQuery; +import com.space.server.domain.quiz.application.port.out.LoadQuizPort; +import com.space.server.domain.quiz.domain.Quiz; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class GetQuizService implements GetQuizQuery { + + private final LoadQuizPort loadQuizPort; + + @Override + public Quiz getQuiz(Long quizId) { + return loadQuizPort.loadQuiz(quizId); + } +} From 4a004042b77b0c9390b3d931f3b2322eeaeeb5b5 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:23:15 +0900 Subject: [PATCH 141/157] Revert "refactor(Quiz): LoadQuizPort" This reverts commit c1c9e55a4f0b00e78e20d280c84ab3d7706a88c6. --- .../application/port/out/LoadQuizPort.java | 8 -------- .../application/service/GetQuizService.java | 19 ------------------- 2 files changed, 27 deletions(-) delete mode 100644 src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java delete mode 100644 src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java diff --git a/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java deleted file mode 100644 index 55f91f90..00000000 --- a/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.space.server.domain.quiz.application.port.out; - -import com.space.server.domain.quiz.domain.Quiz; - -public interface LoadQuizPort { - - Quiz loadQuiz(Long quizId); -} diff --git a/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java deleted file mode 100644 index f345a865..00000000 --- a/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.space.server.domain.quiz.application.service; - -import com.space.server.common.annotation.UseCase; -import com.space.server.domain.quiz.application.port.in.GetQuizQuery; -import com.space.server.domain.quiz.application.port.out.LoadQuizPort; -import com.space.server.domain.quiz.domain.Quiz; -import lombok.RequiredArgsConstructor; - -@UseCase -@RequiredArgsConstructor -public class GetQuizService implements GetQuizQuery { - - private final LoadQuizPort loadQuizPort; - - @Override - public Quiz getQuiz(Long quizId) { - return loadQuizPort.loadQuiz(quizId); - } -} From 0336be1b02de461972ed37e0f347f1d627b3bdd8 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:27:27 +0900 Subject: [PATCH 142/157] refactor(Quiz): LoadQuizPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../domain/quiz/application/port/out/LoadQuizPort.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java diff --git a/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java new file mode 100644 index 00000000..55f91f90 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizPort.java @@ -0,0 +1,8 @@ +package com.space.server.domain.quiz.application.port.out; + +import com.space.server.domain.quiz.domain.Quiz; + +public interface LoadQuizPort { + + Quiz loadQuiz(Long quizId); +} From 805e16bbc847edcfdc8ad11c19de1befbcbfbcdd Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:27:40 +0900 Subject: [PATCH 143/157] refactor(Quiz): GetQuizService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../application/service/GetQuizService.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java diff --git a/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java new file mode 100644 index 00000000..0c6a3fb5 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizService.java @@ -0,0 +1,20 @@ +package com.space.server.domain.quiz.application.service; + +import com.space.server.common.annotation.UseCase; +import com.space.server.domain.quiz.application.port.in.GetQuizQuery; +import com.space.server.domain.quiz.application.port.out.LoadQuizPort; +import com.space.server.domain.quiz.domain.Quiz; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class GetQuizService implements GetQuizQuery { + + private final LoadQuizPort loadQuizPort; + + @Override + public Quiz getQuiz(Long quizId) { + return loadQuizPort.loadQuiz(quizId); + } + +} From a4fe274e9aa0fb71f6ae7b3b0995af79ab0ee64e Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:28:39 +0900 Subject: [PATCH 144/157] refactor(Quiz): GetQuizzesByChapterQuery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 내 퀴즈 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 UseCase --- .../application/port/in/GetQuizzesByChapterQuery.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizzesByChapterQuery.java diff --git a/src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizzesByChapterQuery.java b/src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizzesByChapterQuery.java new file mode 100644 index 00000000..3dee50c3 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/port/in/GetQuizzesByChapterQuery.java @@ -0,0 +1,10 @@ +package com.space.server.domain.quiz.application.port.in; + +import com.space.server.domain.quiz.domain.Quiz; + +import java.util.List; + +public interface GetQuizzesByChapterQuery { + + List getQuizzesByChapter(Long chapterId); +} From 8d72dba224fd68712c2ca366b5cc21b3690a4bf6 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:28:52 +0900 Subject: [PATCH 145/157] refactor(Quiz): LoadQuizzesByChapterPort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 내 퀴즈 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Port --- .../application/port/out/LoadQuizzesByChapterPort.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizzesByChapterPort.java diff --git a/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizzesByChapterPort.java b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizzesByChapterPort.java new file mode 100644 index 00000000..bbbf0749 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/port/out/LoadQuizzesByChapterPort.java @@ -0,0 +1,10 @@ +package com.space.server.domain.quiz.application.port.out; + +import com.space.server.domain.quiz.domain.Quiz; + +import java.util.List; + +public interface LoadQuizzesByChapterPort { + + List loadQuizzesByChapter(Long chapterId); +} From fc8ccb93521b502aacd4b70c88a9b6eb52822199 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:29:14 +0900 Subject: [PATCH 146/157] refactor(Quiz): QuizGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 퀴즈 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../out/persistence/QuizGetAdapter.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizGetAdapter.java diff --git a/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizGetAdapter.java b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizGetAdapter.java new file mode 100644 index 00000000..c321ed0c --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizGetAdapter.java @@ -0,0 +1,22 @@ +package com.space.server.domain.quiz.adapter.out.persistence; + +import com.space.server.common.annotation.PersistenceAdapter; +import com.space.server.domain.quiz.application.port.out.LoadQuizPort; +import com.space.server.domain.quiz.domain.Quiz; +import com.space.server.domain.quiz.exception.QuizNotFoundException; +import lombok.RequiredArgsConstructor; + +@PersistenceAdapter +@RequiredArgsConstructor +public class QuizGetAdapter implements LoadQuizPort { + + private final QuizRepository quizRepository; + private final QuizMapper quizMapper; + + @Override + public Quiz loadQuiz(Long quizId) { + return quizRepository.findById(quizId) + .map(quizMapper::mapToQuiz) + .orElseThrow(QuizNotFoundException::new); + } +} From 20238fbf2b2024f26db4409d8cf7d828882f59a4 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:29:31 +0900 Subject: [PATCH 147/157] refactor(Quiz): QuizzesByChapterGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 내 퀴즈 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Adapter --- .../QuizzesByChapterGetAdapter.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizzesByChapterGetAdapter.java diff --git a/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizzesByChapterGetAdapter.java b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizzesByChapterGetAdapter.java new file mode 100644 index 00000000..ce655cc0 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/adapter/out/persistence/QuizzesByChapterGetAdapter.java @@ -0,0 +1,30 @@ +package com.space.server.domain.quiz.adapter.out.persistence; + +import com.space.server.common.annotation.PersistenceAdapter; +import com.space.server.domain.chapter.adapter.out.persistence.ChapterJpaEntity; +import com.space.server.domain.chapter.adapter.out.persistence.ChapterRepository; +import com.space.server.domain.chapter.exception.ChapterNotFoundException; +import com.space.server.domain.quiz.application.port.out.LoadQuizzesByChapterPort; +import com.space.server.domain.quiz.domain.Quiz; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@PersistenceAdapter +@RequiredArgsConstructor +public class QuizzesByChapterGetAdapter implements LoadQuizzesByChapterPort { + + private final ChapterRepository chapterRepository; + private final QuizRepository quizRepository; + private final QuizMapper quizMapper; + + @Override + public List loadQuizzesByChapter(Long chapterId) { + ChapterJpaEntity chapter = chapterRepository.findById(chapterId) + .orElseThrow(ChapterNotFoundException::new); + + return quizRepository.findAllByChapterOrderByStepId(chapter).stream() + .map(quizMapper::mapToQuiz) + .toList(); + } +} From 9a4110e0f6c28a6adac8c85e66c11ddec48496c6 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:29:41 +0900 Subject: [PATCH 148/157] refactor(Quiz): GetQuizzesByChapterService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 챕터 내 퀴즈 전체 조회를 위한 단일 책임 적용 및 클린 아키텍처 적용 Service --- .../service/GetQuizzesByChapterService.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/space/server/domain/quiz/application/service/GetQuizzesByChapterService.java diff --git a/src/main/java/com/space/server/domain/quiz/application/service/GetQuizzesByChapterService.java b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizzesByChapterService.java new file mode 100644 index 00000000..31b796a4 --- /dev/null +++ b/src/main/java/com/space/server/domain/quiz/application/service/GetQuizzesByChapterService.java @@ -0,0 +1,21 @@ +package com.space.server.domain.quiz.application.service; + +import com.space.server.common.annotation.UseCase; +import com.space.server.domain.quiz.application.port.in.GetQuizzesByChapterQuery; +import com.space.server.domain.quiz.application.port.out.LoadQuizzesByChapterPort; +import com.space.server.domain.quiz.domain.Quiz; +import lombok.RequiredArgsConstructor; + +import java.util.List; + +@UseCase +@RequiredArgsConstructor +public class GetQuizzesByChapterService implements GetQuizzesByChapterQuery { + + private final LoadQuizzesByChapterPort loadQuizzesByChapterPort; + + @Override + public List getQuizzesByChapter(Long chapterId) { + return loadQuizzesByChapterPort.loadQuizzesByChapter(chapterId); + } +} From 1aba722488908766dbd7abd7779dac628083cf2f Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:30:32 +0900 Subject: [PATCH 149/157] refactor(Checklist): ChecklistJpaEntity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../checklist/adapter/out/persistence/ChecklistJpaEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java index 79326849..e1d16e5b 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistJpaEntity.java @@ -1,7 +1,7 @@ package com.space.server.domain.checklist.adapter.out.persistence; import com.space.server.domain.chapter.adapter.out.persistence.ChapterJpaEntity; -import com.space.server.domain.quiz.domain.Quiz; +import com.space.server.domain.quiz.adapter.out.persistence.QuizJpaEntity; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; @@ -22,7 +22,7 @@ public class ChecklistJpaEntity { @JoinColumn @ManyToOne(fetch = FetchType.LAZY) - private Quiz quiz; + private QuizJpaEntity quiz; @JoinColumn @ManyToOne(fetch = FetchType.LAZY) From d0211c2c1b8e72c6bceaf442c606b365ac6a2852 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:30:46 +0900 Subject: [PATCH 150/157] refactor(Checklist): ChecklistMapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../checklist/adapter/out/persistence/ChecklistMapper.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java index 34e148fd..068a38d0 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistMapper.java @@ -2,7 +2,7 @@ import com.space.server.domain.chapter.adapter.out.persistence.ChapterMapper; import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.item.adapter.out.persistence.ItemMapper; +import com.space.server.domain.quiz.adapter.out.persistence.QuizMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -11,11 +11,12 @@ public class ChecklistMapper { private final ChapterMapper chapterMapper; + private final QuizMapper quizMapper; public Checklist mapToChecklist(ChecklistJpaEntity checklist) { return Checklist.builder() .id(new Checklist.ChecklistId(checklist.getId())) - .quiz(checklist.getQuiz()) + .quiz(quizMapper.mapToQuiz(checklist.getQuiz())) .chapter(chapterMapper.mapToChapter(checklist.getChapter())) .content(checklist.getContent()) .build(); From c3f465407072b993feab1e18615bb029dfb918e4 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:30:54 +0900 Subject: [PATCH 151/157] refactor(Checklist): ChecklistRepository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../adapter/out/persistence/ChecklistRepository.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java index 6bbe6ce4..35bc18b8 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistRepository.java @@ -1,6 +1,6 @@ package com.space.server.domain.checklist.adapter.out.persistence; -import com.space.server.domain.quiz.domain.Quiz; +import com.space.server.domain.quiz.adapter.out.persistence.QuizJpaEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -8,5 +8,5 @@ @Repository public interface ChecklistRepository extends JpaRepository { - List findByQuiz(Quiz quiz); + List findByQuiz(QuizJpaEntity quiz); } From 1b789a4582acf2988bb32d940c01dcbebb6f3e46 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:31:19 +0900 Subject: [PATCH 152/157] refactor(Checklist): ChecklistResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../adapter/in/web/dto/response/ChecklistResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java b/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java index 665f8ea3..f0e8d6fd 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/in/web/dto/response/ChecklistResponse.java @@ -20,7 +20,7 @@ public record ChecklistResponse( public static ChecklistResponse from(Checklist checklist) { return new ChecklistResponse( checklist.getId().getValue(), - checklist.getQuiz().getId(), + checklist.getQuiz().getId().getValue(), checklist.getChapter().getId().getValue(), checklist.getContent() ); From 7f2490cfdf831fe3bb83ecbcf99708f99326070c Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:31:34 +0900 Subject: [PATCH 153/157] refactor(Checklist): ChecklistsByQuizGetAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../out/persistence/ChecklistsByQuizGetAdapter.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java index 8e0343ef..385a8503 100644 --- a/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java +++ b/src/main/java/com/space/server/domain/checklist/adapter/out/persistence/ChecklistsByQuizGetAdapter.java @@ -3,8 +3,9 @@ import com.space.server.common.annotation.PersistenceAdapter; import com.space.server.domain.checklist.application.port.out.LoadChecklistsByQuizPort; import com.space.server.domain.checklist.domain.Checklist; -import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.service.implementation.QuizReader; +import com.space.server.domain.quiz.adapter.out.persistence.QuizJpaEntity; +import com.space.server.domain.quiz.adapter.out.persistence.QuizRepository; +import com.space.server.domain.quiz.exception.QuizNotFoundException; import lombok.RequiredArgsConstructor; import java.util.List; @@ -15,11 +16,13 @@ public class ChecklistsByQuizGetAdapter implements LoadChecklistsByQuizPort { private final ChecklistRepository checklistRepository; private final ChecklistMapper checklistMapper; - private final QuizReader quizReader; + private final QuizRepository quizRepository; @Override public List loadChecklistsByQuiz(Long quizId) { - Quiz quiz = quizReader.findById(quizId); + QuizJpaEntity quiz = quizRepository.findById(quizId) + .orElseThrow(QuizNotFoundException::new); + return checklistRepository.findByQuiz(quiz).stream() .map(checklistMapper::mapToChecklist) .toList(); From c7d14e88c1b1fae0ad8256ebc8c348f221f4bcf3 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:31:53 +0900 Subject: [PATCH 154/157] refactor(Chat): CommandChatService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처가 적용된 클래스로 수정하였습니다. --- .../domain/chat/service/CommandChatService.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java index 2575bf45..d638eb98 100644 --- a/src/main/java/com/space/server/domain/chat/service/CommandChatService.java +++ b/src/main/java/com/space/server/domain/chat/service/CommandChatService.java @@ -19,8 +19,9 @@ import com.space.server.domain.chapter.domain.Chapter; import com.space.server.domain.checklist.application.port.in.GetChecklistsByQuizQuery; import com.space.server.domain.checklist.domain.Checklist; +import com.space.server.domain.quiz.adapter.out.persistence.QuizMapper; +import com.space.server.domain.quiz.application.port.in.GetQuizQuery; import com.space.server.domain.quiz.domain.Quiz; -import com.space.server.domain.quiz.service.implementation.QuizReader; import com.space.server.domain.state.domain.State; import com.space.server.domain.state.domain.value.Status; import com.space.server.domain.state.service.implementation.StateCreator; @@ -43,7 +44,7 @@ public class CommandChatService { private final StateReader stateReader; private final StateCreator stateCreator; - private final QuizReader quizReader; + private final GetQuizQuery getQuizQuery; private final GetChapterQuery getChapterQuery; private final UserReader userReader; private final ChatReader chatReader; @@ -53,12 +54,13 @@ public class CommandChatService { private final ChatCompleter chatCompleter; private final StateUpdater stateUpdater; private final AiResponseJsonParsing aiResponseJsonParsing; + private final QuizMapper quizMapper; public AiResponse create(Long quizId, CreateChatRequest request, Long userId) { - Quiz quiz = quizReader.findById(quizId); + Quiz quiz = getQuizQuery.getQuiz(quizId); Users user = userReader.findById(userId); List checklists = getChecklistsByQuizQuery.getChecklistsByQuiz(quizId); - Chapter chapter = getChapterQuery.getChapter(quiz.getChapter().getId()); + Chapter chapter = getChapterQuery.getChapter(quiz.getChapter().getId().getValue()); Optional state = stateReader.findByQuizIdAndUserId(quiz, user); @@ -139,7 +141,7 @@ public AiResponse create(Long quizId, CreateChatRequest request, Long userId) { stateCreator.create(State.createBuilder() .user(user) - .quiz(quiz) + .quiz(quizMapper.mapToQuizJpaEntity(quiz)) .status(botChat.isSuccess() == true ? Status.SUCCESS : Status.FAIL) .move(botChat.move()) .score(botChat.score()) From 9b0b870678a87e258f732e7fa23371fe355c85ed Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:32:53 +0900 Subject: [PATCH 155/157] refactor(Chat): QueryChatService MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처가 적용된 클래스로 수정하였습니다. --- .../space/server/domain/chat/service/QueryChatService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/chat/service/QueryChatService.java b/src/main/java/com/space/server/domain/chat/service/QueryChatService.java index 98ade3dd..1350f638 100644 --- a/src/main/java/com/space/server/domain/chat/service/QueryChatService.java +++ b/src/main/java/com/space/server/domain/chat/service/QueryChatService.java @@ -3,7 +3,7 @@ import com.space.server.domain.chat.domain.Chat; import com.space.server.domain.chat.presentation.dto.response.ChatResponse; import com.space.server.domain.chat.service.implementation.ChatReader; -import com.space.server.domain.quiz.service.implementation.QuizReader; +import com.space.server.domain.quiz.application.port.in.GetQuizQuery; import com.space.server.domain.state.service.implementation.StateReader; import com.space.server.domain.user.service.implementation.UserReader; import lombok.RequiredArgsConstructor; @@ -20,12 +20,12 @@ public class QueryChatService { private final ChatReader chatReader; private final StateReader stateReader; - private final QuizReader quizReader; + private final GetQuizQuery getQuizQuery; private final UserReader userReader; public List readChats(Long quizId, Long userId){ List chatList = chatReader.findAllChatByState(stateReader.findByQuizIdAndUserId( - quizReader.findById(quizId), + getQuizQuery.getQuiz(quizId), userReader.findById(userId) ).get()); List chatResponseList = new ArrayList<>(); From 31606d21d2c1cddbf885851d80dbddad5965ca75 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:33:17 +0900 Subject: [PATCH 156/157] refactor(State): State MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../java/com/space/server/domain/state/domain/State.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/space/server/domain/state/domain/State.java b/src/main/java/com/space/server/domain/state/domain/State.java index 4fee9a0f..b9375781 100644 --- a/src/main/java/com/space/server/domain/state/domain/State.java +++ b/src/main/java/com/space/server/domain/state/domain/State.java @@ -1,6 +1,6 @@ package com.space.server.domain.state.domain; -import com.space.server.domain.quiz.domain.Quiz; +import com.space.server.domain.quiz.adapter.out.persistence.QuizJpaEntity; import com.space.server.domain.state.domain.value.Status; import com.space.server.domain.user.domain.Users; import io.hypersistence.utils.hibernate.type.array.IntArrayType; @@ -27,7 +27,7 @@ public class State { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "quiz_id") - private Quiz quiz; + private QuizJpaEntity quiz; @Enumerated(EnumType.STRING) private Status status; @@ -43,7 +43,7 @@ public class State { private String threadId; @Builder(builderMethodName = "createBuilder") - public State(Users user, Quiz quiz, Status status, String[] move, Long[] score, String threadId) { + public State(Users user, QuizJpaEntity quiz, Status status, String[] move, Long[] score, String threadId) { this.user = user; this.quiz = quiz; this.status = status; From c6c22ba0ce7e9409cff92d629fae9276f30ebd39 Mon Sep 17 00:00:00 2001 From: GSB0203 Date: Wed, 20 Nov 2024 19:33:28 +0900 Subject: [PATCH 157/157] refactor(State): StateResponse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 클린 아키텍처로 변경된 Jpa Entity 퀴즈로 수정하였습니다. --- .../domain/state/presentation/dto/response/StateResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/space/server/domain/state/presentation/dto/response/StateResponse.java b/src/main/java/com/space/server/domain/state/presentation/dto/response/StateResponse.java index 7741a63d..3cc6be48 100644 --- a/src/main/java/com/space/server/domain/state/presentation/dto/response/StateResponse.java +++ b/src/main/java/com/space/server/domain/state/presentation/dto/response/StateResponse.java @@ -1,6 +1,6 @@ package com.space.server.domain.state.presentation.dto.response; -import com.space.server.domain.quiz.domain.Quiz; +import com.space.server.domain.quiz.adapter.out.persistence.QuizJpaEntity; import com.space.server.domain.state.domain.value.Status; import com.space.server.domain.state.domain.State; import com.space.server.domain.user.domain.Users; @@ -8,7 +8,7 @@ public record StateResponse( Long stateId, Users userId, - Quiz quizId, + QuizJpaEntity quizId, Status status, Long[] score ) {