Skip to content

Commit

Permalink
Merge pull request #72 from dnd-side-project/feat/#70-item
Browse files Browse the repository at this point in the history
아이템 엔티티에 추가된 컬럼을 반영한다.
  • Loading branch information
hwangdaesun authored Feb 5, 2025
2 parents ab0b748 + eb004a4 commit 169d770
Show file tree
Hide file tree
Showing 11 changed files with 61 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dnd.sbooky.api.docs.spec;

import com.dnd.sbooky.api.item.response.FindEquippedItemsResponse;
import com.dnd.sbooky.api.item.response.FindItemsResponse;
import com.dnd.sbooky.api.support.response.ApiResponse;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -14,5 +15,5 @@ public interface FindItemsApiSpec {
ApiResponse<FindItemsResponse> findMyItems(UserDetails user);

@Operation(summary = "내가 장착한 아이템 조회", description = "내가 장착한 아이템 정보를 조회한다.")
ApiResponse<FindItemsResponse> findEquippedItems(UserDetails user);
ApiResponse<FindEquippedItemsResponse> findEquippedItems(UserDetails user);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.dnd.sbooky.api.item;

import com.dnd.sbooky.api.item.response.FindItemsResponse;
import com.dnd.sbooky.api.item.response.FindEquippedItemsResponse;
import com.dnd.sbooky.core.item.ItemType;
import com.dnd.sbooky.core.item.MemberItemRepository;
import java.util.List;
Expand All @@ -17,15 +17,15 @@ public class FindEquippedItemUsecase {
private final MemberItemRepository memberItemRepository;

@Transactional(readOnly = true)
public FindItemsResponse findEquippedItems(Long memberId) {
Map<ItemType, List<Long>> equippedItems =
public FindEquippedItemsResponse findEquippedItems(Long memberId) {
Map<ItemType, List<String>> equippedItems =
memberItemRepository.findEquippedItemsByMemberId(memberId).stream()
.collect(
Collectors.groupingBy(
findItemDTO -> findItemDTO.itemType(),
findItemDTO -> findItemDTO.type(),
Collectors.mapping(
findItemDTO -> findItemDTO.itemId(),
findItemDTO -> findItemDTO.code(),
Collectors.toList())));
return FindItemsResponse.from(equippedItems);
return FindEquippedItemsResponse.from(equippedItems);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.dnd.sbooky.api.item;

import com.dnd.sbooky.api.docs.spec.FindItemsApiSpec;
import com.dnd.sbooky.api.item.response.FindEquippedItemsResponse;
import com.dnd.sbooky.api.item.response.FindItemsResponse;
import com.dnd.sbooky.api.support.response.ApiResponse;
import io.swagger.v3.oas.annotations.Parameter;
Expand All @@ -26,7 +27,7 @@ public ApiResponse<FindItemsResponse> findMyItems(
}

@GetMapping("/items/equipped")
public ApiResponse<FindItemsResponse> findEquippedItems(
public ApiResponse<FindEquippedItemsResponse> findEquippedItems(
@Parameter(hidden = true) @AuthenticationPrincipal UserDetails user) {
return ApiResponse.success(
findEquippedItemUsecase.findEquippedItems(extractMemberId(user)));
Expand Down
10 changes: 7 additions & 3 deletions api/src/main/java/com/dnd/sbooky/api/item/FindItemsUseCase.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dnd.sbooky.api.item;

import com.dnd.sbooky.api.item.response.FindItemResponse;
import com.dnd.sbooky.api.item.response.FindItemsResponse;
import com.dnd.sbooky.core.item.ItemType;
import com.dnd.sbooky.core.item.MemberItemRepository;
Expand All @@ -18,13 +19,16 @@ public class FindItemsUseCase {

@Transactional(readOnly = true)
public FindItemsResponse findMyItems(Long memberId) {
Map<ItemType, List<Long>> items =
Map<ItemType, List<FindItemResponse>> items =
memberItemRepository.findItemsByMemberId(memberId).stream()
.collect(
Collectors.groupingBy(
findItemDTO -> findItemDTO.itemType(),
findItemDTO -> findItemDTO.type(),
Collectors.mapping(
findItemDTO -> findItemDTO.itemId(),
findItemDTO ->
FindItemResponse.from(
findItemDTO.name(),
findItemDTO.code()),
Collectors.toList())));
return FindItemsResponse.from(items);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.dnd.sbooky.api.item.response;

import com.dnd.sbooky.core.item.ItemType;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.List;
import java.util.Map;

@Schema(description = "내가 장착한 아이템 조회 응답 DTO")
public record FindEquippedItemsResponse(
@Schema(description = "아이템 타입에 따른 아이템 식별자 모음") Map<ItemType, List<String>> items) {
public static FindEquippedItemsResponse from(Map<ItemType, List<String>> equippedItems) {
return new FindEquippedItemsResponse(equippedItems);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.dnd.sbooky.api.item.response;

import io.swagger.v3.oas.annotations.media.Schema;

public record FindItemResponse(
@Schema(description = "아이템 이름") String name, @Schema(description = "아이템 식별자") String code) {
public static FindItemResponse from(String name, String code) {
return new FindItemResponse(name, code);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

@Schema(description = "내가 보유한 아이템 조회 응답 DTO")
public record FindItemsResponse(
@Schema(description = "아이템 타입에 따른 아이템 식별자 모음") Map<ItemType, List<Long>> items) {
public static FindItemsResponse from(Map<ItemType, List<Long>> items) {
@Schema(description = "아이템 타입에 따른 아이템 모음") Map<ItemType, List<FindItemResponse>> items) {
public static FindItemsResponse from(Map<ItemType, List<FindItemResponse>> items) {
return new FindItemsResponse(items);
}
}
4 changes: 2 additions & 2 deletions core/src/main/java/com/dnd/sbooky/core/Initializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public void init() {
MemberEntity memberEntity =
memberRepository.save(MemberEntity.newInstance("test1", "test1"));
likeRepository.save(LikeEntity.newInstance(memberEntity.getId()));
itemRepository.save(ItemEntity.newInstance(ItemType.CHARACTER));
itemRepository.save(ItemEntity.newInstance(ItemType.CHARACTER));
itemRepository.save(ItemEntity.newInstance(ItemType.CHARACTER, "떠돌이 유령", "mummy_ghost"));
itemRepository.save(ItemEntity.newInstance(ItemType.CHARACTER, "유령", "basic_ghost"));
}
}
16 changes: 13 additions & 3 deletions core/src/main/java/com/dnd/sbooky/core/item/ItemEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.NoArgsConstructor;

@Entity
Expand All @@ -28,11 +29,20 @@ public class ItemEntity extends BaseEntity {
@Column(name = ENTITY_PREFIX + "_type", nullable = false)
private ItemType type;

private ItemEntity(ItemType type) {
@Column(name = ENTITY_PREFIX + "_name", nullable = false)
private String name;

@Column(name = ENTITY_PREFIX + "_code", nullable = false)
private String code;

@Builder
private ItemEntity(ItemType type, String name, String code) {
this.type = type;
this.name = name;
this.code = code;
}

public static ItemEntity newInstance(ItemType type) {
return new ItemEntity(type);
public static ItemEntity newInstance(ItemType type, String name, String code) {
return ItemEntity.builder().type(type).name(name).code(code).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ public class MemberItemRepositoryImpl implements MemberItemRepositoryCustom {

public List<FindItemDTO> findItemsByMemberId(Long memberId) {
return queryFactory
.select(
Projections.constructor(
FindItemDTO.class, memberItem.itemEntity.id, item.type))
.select(Projections.constructor(FindItemDTO.class, item.code, item.name, item.type))
.from(memberItem)
.join(memberItem.itemEntity, item)
.where(memberItem.memberEntity.id.eq(memberId))
Expand All @@ -28,9 +26,7 @@ public List<FindItemDTO> findItemsByMemberId(Long memberId) {
@Override
public List<FindItemDTO> findEquippedItemsByMemberId(Long memberId) {
return queryFactory
.select(
Projections.constructor(
FindItemDTO.class, memberItem.itemEntity.id, item.type))
.select(Projections.constructor(FindItemDTO.class, item.code, item.name, item.type))
.from(memberItem)
.join(memberItem.itemEntity, item)
.where(memberItem.memberEntity.id.eq(memberId), isEquipped())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

import com.dnd.sbooky.core.item.ItemType;

public record FindItemDTO(Long itemId, ItemType itemType) {}
public record FindItemDTO(String code, String name, ItemType type) {}

0 comments on commit 169d770

Please sign in to comment.