From de1ee6016900b9b8dc0029cfea83b89df412bc70 Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 13:38:54 +0900 Subject: [PATCH 01/10] =?UTF-8?q?FEAT:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EA=B3=84=EC=A0=95=EC=97=90=EC=84=9C=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=ED=85=9C=20=EC=A7=80=EA=B8=89=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EB=B0=8F=20?= =?UTF-8?q?dto=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/controller/AdminItemController.java | 18 ++++++++++++++---- .../cabinet/dto/ItemAssignPaginationDto.java | 10 ++++++++++ ...ssignDto.java => ItemAssignRequestDto.java} | 2 +- .../cabinet/dto/ItemAssignResponseDto.java | 13 +++++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java rename backend/src/main/java/org/ftclub/cabinet/dto/{ItemAssignDto.java => ItemAssignRequestDto.java} (90%) create mode 100644 backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java index 3f040ecbe..4d9348158 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java @@ -4,9 +4,12 @@ import org.ftclub.cabinet.admin.item.service.AdminItemFacadeService; import org.ftclub.cabinet.auth.domain.AuthGuard; import org.ftclub.cabinet.auth.domain.AuthLevel; -import org.ftclub.cabinet.dto.ItemAssignDto; +import org.ftclub.cabinet.dto.ItemAssignPaginationDto; +import org.ftclub.cabinet.dto.ItemAssignRequestDto; import org.ftclub.cabinet.dto.ItemCreateDto; import org.ftclub.cabinet.log.Logging; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,12 +28,19 @@ public class AdminItemController { @AuthGuard(level = AuthLevel.ADMIN_ONLY) public void createItem(@RequestBody ItemCreateDto itemCreateDto) { adminItemFacadeService.createItem(itemCreateDto.getPrice(), - itemCreateDto.getSku(), itemCreateDto.getType()); + itemCreateDto.getSku(), itemCreateDto.getType()); } @PostMapping("/assign") @AuthGuard(level = AuthLevel.ADMIN_ONLY) - public void assignItem(@RequestBody ItemAssignDto itemAssignDto) { - adminItemFacadeService.assignItem(itemAssignDto.getUserIds(), itemAssignDto.getItemSku()); + public void assignItem(@RequestBody ItemAssignRequestDto itemAssignRequestDto) { + adminItemFacadeService.assignItem(itemAssignRequestDto.getUserIds(), + itemAssignRequestDto.getItemSku()); + } + + @GetMapping("/assign") + @AuthGuard(level = AuthLevel.ADMIN_ONLY) + public ItemAssignPaginationDto getAssignedItems(Pageable pageable) { + return adminItemFacadeService.getAssignedItems(pageable); } } diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java new file mode 100644 index 000000000..f42d0d062 --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java @@ -0,0 +1,10 @@ +package org.ftclub.cabinet.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class ItemAssignPaginationDto { + +} diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignRequestDto.java similarity index 90% rename from backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignDto.java rename to backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignRequestDto.java index 296ba3ad8..20770c617 100644 --- a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignDto.java +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignRequestDto.java @@ -11,7 +11,7 @@ @ToString @NoArgsConstructor @AllArgsConstructor -public class ItemAssignDto { +public class ItemAssignRequestDto { private Sku itemSku; private List userIds; diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java new file mode 100644 index 000000000..155a61a19 --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java @@ -0,0 +1,13 @@ +package org.ftclub.cabinet.dto; + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class ItemAssignResponseDto { + + Long total; + private List items; +} From 6ff3caa71c2a3adb660e7b8eb4ba28494d7eedb1 Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 13:58:01 +0900 Subject: [PATCH 02/10] =?UTF-8?q?FEAT:=20ItemAssignResponseDto=20mapper=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ftclub/cabinet/dto/ItemAssignPaginationDto.java | 3 +++ .../org/ftclub/cabinet/dto/ItemAssignResponseDto.java | 9 ++++++--- .../java/org/ftclub/cabinet/mapper/ItemMapper.java | 10 ++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java index f42d0d062..a441b91d2 100644 --- a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignPaginationDto.java @@ -1,5 +1,6 @@ package org.ftclub.cabinet.dto; +import java.util.List; import lombok.AllArgsConstructor; import lombok.Getter; @@ -7,4 +8,6 @@ @AllArgsConstructor public class ItemAssignPaginationDto { + Long total; + private List items; } diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java index 155a61a19..d1b104750 100644 --- a/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemAssignResponseDto.java @@ -1,13 +1,16 @@ package org.ftclub.cabinet.dto; -import java.util.List; +import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Getter; +import org.ftclub.cabinet.item.domain.Sku; @Getter @AllArgsConstructor public class ItemAssignResponseDto { - Long total; - private List items; + private Sku itemSku; // sku + private String itemName; // itemType + private String itemDetails; // sku.description + private LocalDateTime issuedDate; // itemHistory -> purchasedAt } diff --git a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java index 0d5c6b997..aa8236689 100644 --- a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java +++ b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java @@ -2,10 +2,12 @@ import static org.mapstruct.NullValueMappingStrategy.RETURN_DEFAULT; +import java.time.LocalDateTime; import java.util.List; import org.ftclub.cabinet.dto.CoinHistoryDto; import org.ftclub.cabinet.dto.CoinHistoryPaginationDto; import org.ftclub.cabinet.dto.CoinMonthlyCollectionDto; +import org.ftclub.cabinet.dto.ItemAssignResponseDto; import org.ftclub.cabinet.dto.ItemDetailsDto; import org.ftclub.cabinet.dto.ItemDto; import org.ftclub.cabinet.dto.ItemHistoryDto; @@ -15,6 +17,7 @@ import org.ftclub.cabinet.item.domain.Item; import org.ftclub.cabinet.item.domain.ItemHistory; import org.ftclub.cabinet.item.domain.ItemType; +import org.ftclub.cabinet.item.domain.Sku; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -67,4 +70,11 @@ CoinHistoryPaginationDto toCoinHistoryPaginationDto(List result, CoinMonthlyCollectionDto toCoinMonthlyCollectionDto(Long monthlyCoinCount, boolean todayCoinCollection); + + @Mapping(target = "itemSku", source = "sku") + @Mapping(target = "itemDetails", source = "sku.details") + @Mapping(target = "itemName", source = "itemType.name") + ItemAssignResponseDto toItemAssignResponseDto(Sku sku, ItemType itemType, + LocalDateTime issuedDate); + } From c78b064b65b0c2babcfccb4ccaeaa45cf8b48950 Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 15:00:18 +0900 Subject: [PATCH 03/10] =?UTF-8?q?FEAT:=20=ED=8A=B9=EC=A0=95=20=EC=9C=A0?= =?UTF-8?q?=EC=A0=80=EC=9D=98=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=A0=A5=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/dto/AdminItemHistoryDto.java | 15 +++++++++++++ .../dto/AdminItemHistoryPaginationDto.java | 13 +++++++++++ .../item/controller/AdminItemController.java | 10 +++++---- .../item/service/AdminItemFacadeService.java | 22 +++++++++++++++++++ .../item/service/ItemCommandService.java | 6 ----- .../org/ftclub/cabinet/mapper/ItemMapper.java | 5 +++++ 6 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java create mode 100644 backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryPaginationDto.java diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java b/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java new file mode 100644 index 000000000..5e6662d7d --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java @@ -0,0 +1,15 @@ +package org.ftclub.cabinet.admin.dto; + +import java.time.LocalDateTime; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AdminItemHistoryDto { + + private LocalDateTime purchasedAt; + private LocalDateTime usedAt; + private String itemName; + private String itemDetails; +} diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryPaginationDto.java b/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryPaginationDto.java new file mode 100644 index 000000000..e5710392e --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryPaginationDto.java @@ -0,0 +1,13 @@ +package org.ftclub.cabinet.admin.dto; + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class AdminItemHistoryPaginationDto { + + private List itemHistories; + private Long totalLength; +} diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java index 4d9348158..6032a8f4d 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java @@ -1,15 +1,16 @@ package org.ftclub.cabinet.admin.item.controller; import lombok.RequiredArgsConstructor; +import org.ftclub.cabinet.admin.dto.AdminItemHistoryPaginationDto; import org.ftclub.cabinet.admin.item.service.AdminItemFacadeService; import org.ftclub.cabinet.auth.domain.AuthGuard; import org.ftclub.cabinet.auth.domain.AuthLevel; -import org.ftclub.cabinet.dto.ItemAssignPaginationDto; import org.ftclub.cabinet.dto.ItemAssignRequestDto; import org.ftclub.cabinet.dto.ItemCreateDto; import org.ftclub.cabinet.log.Logging; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -38,9 +39,10 @@ public void assignItem(@RequestBody ItemAssignRequestDto itemAssignRequestDto) { itemAssignRequestDto.getItemSku()); } - @GetMapping("/assign") + @GetMapping("/users/{userId}") @AuthGuard(level = AuthLevel.ADMIN_ONLY) - public ItemAssignPaginationDto getAssignedItems(Pageable pageable) { - return adminItemFacadeService.getAssignedItems(pageable); + public AdminItemHistoryPaginationDto getUserItemHistoryPagination( + @PathVariable(value = "userId") Long userId, Pageable pageable) { + return adminItemFacadeService.getUserItemHistories(userId, pageable); } } diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java index 74aced7c6..0c4b5b918 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java @@ -2,13 +2,21 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; +import org.ftclub.cabinet.admin.dto.AdminItemHistoryDto; +import org.ftclub.cabinet.admin.dto.AdminItemHistoryPaginationDto; import org.ftclub.cabinet.item.domain.Item; +import org.ftclub.cabinet.item.domain.ItemHistory; import org.ftclub.cabinet.item.domain.ItemType; import org.ftclub.cabinet.item.domain.Sku; import org.ftclub.cabinet.item.service.ItemCommandService; import org.ftclub.cabinet.item.service.ItemHistoryCommandService; +import org.ftclub.cabinet.item.service.ItemHistoryQueryService; import org.ftclub.cabinet.item.service.ItemQueryService; +import org.ftclub.cabinet.mapper.ItemMapper; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -19,6 +27,8 @@ public class AdminItemFacadeService { private final ItemQueryService itemQueryService; private final ItemCommandService itemCommandService; private final ItemHistoryCommandService itemHistoryCommandService; + private final ItemHistoryQueryService itemHistoryQueryService; + private final ItemMapper itemMapper; @Transactional public void createItem(Integer Price, Sku sku, ItemType type) { @@ -34,4 +44,16 @@ public void assignItem(List userIds, Sku sku) { } itemHistoryCommandService.purchaseItem(userIds, item.getId(), now); } + + public AdminItemHistoryPaginationDto getUserItemHistories(Long userId, Pageable pageable) { + Page itemHistoryWithItem = + itemHistoryQueryService.getItemHistoryWithItem(userId, pageable); + + List result = itemHistoryWithItem.stream() + .map(ih -> itemMapper.toAdminItemHistoryDto(ih, ih.getItem())) + .collect(Collectors.toList()); + + return new AdminItemHistoryPaginationDto(result, itemHistoryWithItem.getTotalElements()); + } + } diff --git a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemCommandService.java b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemCommandService.java index d7c179bb1..360ba83b4 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemCommandService.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemCommandService.java @@ -1,12 +1,6 @@ package org.ftclub.cabinet.item.service; import lombok.RequiredArgsConstructor; -import org.ftclub.cabinet.dto.ItemAssignDto; -import org.ftclub.cabinet.dto.ItemCreateDto; -import org.ftclub.cabinet.exception.ExceptionStatus; -import org.ftclub.cabinet.item.domain.Item; -import org.ftclub.cabinet.item.domain.ItemHistory; -import org.ftclub.cabinet.item.repository.ItemHistoryRepository; import org.ftclub.cabinet.item.domain.Item; import org.ftclub.cabinet.item.domain.ItemType; import org.ftclub.cabinet.item.domain.Sku; diff --git a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java index aa8236689..dc1be793d 100644 --- a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java +++ b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java @@ -4,6 +4,7 @@ import java.time.LocalDateTime; import java.util.List; +import org.ftclub.cabinet.admin.dto.AdminItemHistoryDto; import org.ftclub.cabinet.dto.CoinHistoryDto; import org.ftclub.cabinet.dto.CoinHistoryPaginationDto; import org.ftclub.cabinet.dto.CoinMonthlyCollectionDto; @@ -45,6 +46,10 @@ public interface ItemMapper { @Mapping(target = "itemDetails", source = "item.sku.details") ItemDto toItemDto(Item item); + @Mapping(target = "itemName", source = "item.type.name") + @Mapping(target = "itemDetail", source = "item.sku.details") + AdminItemHistoryDto toAdminItemHistoryDto(ItemHistory itemHistory, Item item); + @Mapping(target = "itemSku", source = "item.sku") @Mapping(target = "itemPrice", source = "item.price") @Mapping(target = "itemDetails", source = "item.sku.details") From b430386fcff0e0e54ebab83fd63690630f23b184 Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 15:51:27 +0900 Subject: [PATCH 04/10] =?UTF-8?q?FIX:=20=EC=9D=8C=EC=88=98=20=EA=B0=80?= =?UTF-8?q?=EA=B2=A9=EC=9D=98=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EC=96=91=EC=88=98=20=EA=B0=80=EA=B2=A9=EC=9D=98=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=ED=85=9C=20=EB=AA=A8=EB=91=90=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java | 2 +- .../cabinet/admin/item/service/AdminItemFacadeService.java | 2 +- .../ftclub/cabinet/item/repository/ItemHistoryRepository.java | 4 ++++ .../ftclub/cabinet/item/service/ItemHistoryQueryService.java | 4 ++++ .../src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java | 2 +- 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java b/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java index 5e6662d7d..99bab75df 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/dto/AdminItemHistoryDto.java @@ -8,7 +8,7 @@ @AllArgsConstructor public class AdminItemHistoryDto { - private LocalDateTime purchasedAt; + private LocalDateTime purchaseAt; private LocalDateTime usedAt; private String itemName; private String itemDetails; diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java index 0c4b5b918..26b05bec3 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java @@ -47,7 +47,7 @@ public void assignItem(List userIds, Sku sku) { public AdminItemHistoryPaginationDto getUserItemHistories(Long userId, Pageable pageable) { Page itemHistoryWithItem = - itemHistoryQueryService.getItemHistoryWithItem(userId, pageable); + itemHistoryQueryService.getItemHistoriesByUserIdWithItem(userId, pageable); List result = itemHistoryWithItem.stream() .map(ih -> itemMapper.toAdminItemHistoryDto(ih, ih.getItem())) diff --git a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java index e647e8e04..46eea327d 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java @@ -4,6 +4,7 @@ import org.ftclub.cabinet.item.domain.ItemHistory; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.EntityGraph; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -39,6 +40,9 @@ Page findAllByUserIdAndItemIdIn(@Param("userId") Long userId, Page findAllByUserIdOnMinusPriceItemsWithSubQuery( @Param("userId") Long userId, Pageable pageable); + @EntityGraph(attributePaths = "item") + Page findAllByUserId(Long userId, Pageable pageable); + @Query("SELECT ih " + "FROM ItemHistory ih " + "JOIN FETCH ih.item " diff --git a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java index 24f1488a0..3588bc7df 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java @@ -25,6 +25,10 @@ public Page getItemHistoryWithItem(Long userId, Pageable pageable) return itemHistoryRepository.findAllByUserIdOnMinusPriceItemsWithSubQuery(userId, pageable); } + public Page getItemHistoriesByUserIdWithItem(Long userId, Pageable pageable) { + return itemHistoryRepository.findAllByUserId(userId, pageable); + } + public Page getCoinHistory(Long userId, Pageable pageable, List itemIds) { return itemHistoryRepository.findAllByUserIdAndItemIdIn(userId, pageable, itemIds); } diff --git a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java index dc1be793d..5fa750a94 100644 --- a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java +++ b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java @@ -47,7 +47,7 @@ public interface ItemMapper { ItemDto toItemDto(Item item); @Mapping(target = "itemName", source = "item.type.name") - @Mapping(target = "itemDetail", source = "item.sku.details") + @Mapping(target = "itemDetails", source = "item.sku.details") AdminItemHistoryDto toAdminItemHistoryDto(ItemHistory itemHistory, Item item); @Mapping(target = "itemSku", source = "item.sku") From 5527ec5cba685e99ef44ca2446b840c5d88c1b08 Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 17:18:44 +0900 Subject: [PATCH 05/10] =?UTF-8?q?FEAT:=20=EC=95=84=EC=9D=B4=ED=85=9C?= =?UTF-8?q?=EB=B3=84=20=EA=B5=AC=EB=A7=A4=20=EC=9D=B8=EC=9B=90=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/controller/AdminItemController.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java index 6032a8f4d..5d496a71b 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java @@ -7,6 +7,7 @@ import org.ftclub.cabinet.auth.domain.AuthLevel; import org.ftclub.cabinet.dto.ItemAssignRequestDto; import org.ftclub.cabinet.dto.ItemCreateDto; +import org.ftclub.cabinet.dto.ItemStatisticsDto; import org.ftclub.cabinet.log.Logging; import org.springframework.data.domain.Pageable; import org.springframework.web.bind.annotation.GetMapping; @@ -39,10 +40,28 @@ public void assignItem(@RequestBody ItemAssignRequestDto itemAssignRequestDto) { itemAssignRequestDto.getItemSku()); } + /** + * 특정 유저의 아이템 history 조회 + * + * @param userId + * @param pageable + * @return + */ @GetMapping("/users/{userId}") @AuthGuard(level = AuthLevel.ADMIN_ONLY) public AdminItemHistoryPaginationDto getUserItemHistoryPagination( @PathVariable(value = "userId") Long userId, Pageable pageable) { return adminItemFacadeService.getUserItemHistories(userId, pageable); } + + /** + * 아이템별 구매 인원 조회 + * + * @return + */ + @GetMapping("/statistics/items") + @AuthGuard(level = AuthLevel.ADMIN_ONLY) + public ItemStatisticsDto getItemPurchaseStatistics() { + return adminItemFacadeService.getItemPurchaseStatistics(); + } } From 5163b641d7c35df10f8d72bb1db6fe28d02e2d1d Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 17:20:43 +0900 Subject: [PATCH 06/10] =?UTF-8?q?FEAT:=20=EC=95=84=EC=9D=B4=ED=85=9C=20id?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=9C=20=EA=B5=AC=EB=A7=A4=20=ED=9A=9F?= =?UTF-8?q?=EC=88=98=20=EB=B0=98=ED=99=98=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/service/AdminItemFacadeService.java | 16 ++++++++++++++++ .../ftclub/cabinet/dto/ItemPurchaseCountDto.java | 13 +++++++++++++ .../ftclub/cabinet/dto/ItemStatisticsDto.java | 13 +++++++++++++ .../item/repository/ItemHistoryRepository.java | 5 +++++ .../item/service/ItemHistoryQueryService.java | 4 ++++ .../org/ftclub/cabinet/mapper/ItemMapper.java | 4 ++++ 6 files changed, 55 insertions(+) create mode 100644 backend/src/main/java/org/ftclub/cabinet/dto/ItemPurchaseCountDto.java create mode 100644 backend/src/main/java/org/ftclub/cabinet/dto/ItemStatisticsDto.java diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java index 26b05bec3..d9159569a 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/service/AdminItemFacadeService.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import org.ftclub.cabinet.admin.dto.AdminItemHistoryDto; import org.ftclub.cabinet.admin.dto.AdminItemHistoryPaginationDto; +import org.ftclub.cabinet.dto.ItemPurchaseCountDto; +import org.ftclub.cabinet.dto.ItemStatisticsDto; import org.ftclub.cabinet.item.domain.Item; import org.ftclub.cabinet.item.domain.ItemHistory; import org.ftclub.cabinet.item.domain.ItemType; @@ -13,6 +15,7 @@ import org.ftclub.cabinet.item.service.ItemCommandService; import org.ftclub.cabinet.item.service.ItemHistoryCommandService; import org.ftclub.cabinet.item.service.ItemHistoryQueryService; +import org.ftclub.cabinet.item.service.ItemPolicyService; import org.ftclub.cabinet.item.service.ItemQueryService; import org.ftclub.cabinet.mapper.ItemMapper; import org.springframework.data.domain.Page; @@ -28,6 +31,7 @@ public class AdminItemFacadeService { private final ItemCommandService itemCommandService; private final ItemHistoryCommandService itemHistoryCommandService; private final ItemHistoryQueryService itemHistoryQueryService; + private final ItemPolicyService itemPolicyService; private final ItemMapper itemMapper; @Transactional @@ -45,6 +49,7 @@ public void assignItem(List userIds, Sku sku) { itemHistoryCommandService.purchaseItem(userIds, item.getId(), now); } + @Transactional(readOnly = true) public AdminItemHistoryPaginationDto getUserItemHistories(Long userId, Pageable pageable) { Page itemHistoryWithItem = itemHistoryQueryService.getItemHistoriesByUserIdWithItem(userId, pageable); @@ -56,4 +61,15 @@ public AdminItemHistoryPaginationDto getUserItemHistories(Long userId, Pageable return new AdminItemHistoryPaginationDto(result, itemHistoryWithItem.getTotalElements()); } + @Transactional(readOnly = true) + public ItemStatisticsDto getItemPurchaseStatistics() { + List itemsOnSale = itemQueryService.getUseItemIds(); + List result = itemsOnSale.stream() + .map(item -> { + int userCount = itemHistoryQueryService.getPurchaseCountByItemId(item.getId()); + return itemMapper.toItemPurchaseCountDto(item, userCount); + }).collect(Collectors.toList()); + + return new ItemStatisticsDto(result); + } } diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemPurchaseCountDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemPurchaseCountDto.java new file mode 100644 index 000000000..7dc75c7c3 --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemPurchaseCountDto.java @@ -0,0 +1,13 @@ +package org.ftclub.cabinet.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class ItemPurchaseCountDto { + + private String itemName; + private String itemDetails; + private int userCount; +} diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/ItemStatisticsDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/ItemStatisticsDto.java new file mode 100644 index 000000000..da2dbce66 --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/dto/ItemStatisticsDto.java @@ -0,0 +1,13 @@ +package org.ftclub.cabinet.dto; + + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class ItemStatisticsDto { + + private List items; +} diff --git a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java index 46eea327d..abeccc9bb 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java @@ -59,4 +59,9 @@ Page findAllByUserIdOnMinusPriceItemsWithSubQuery( List getAllUnusedItemHistoryByUser(@Param("userId") Long userId); List findAllByUserIdAndItemIdAndUsedAtIsNull(Long userId, Long itemId); + + @Query("SELECT COUNT(ih) " + + "FROM ItemHistory ih " + + "WHERE ih.itemId = :itemId") + int getCountByItemIds(@Param("itemId") Long itemId); } diff --git a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java index 3588bc7df..fa0ef3f65 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java @@ -36,4 +36,8 @@ public Page getCoinHistory(Long userId, Pageable pageable, List getUnusedItemsInUserInventory(Long userId, Long itemId) { return itemHistoryRepository.findAllByUserIdAndItemIdAndUsedAtIsNull(userId, itemId); } + + public int getPurchaseCountByItemId(Long itemId) { + return itemHistoryRepository.getCountByItemIds(itemId); + } } diff --git a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java index 5fa750a94..570e5bb76 100644 --- a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java +++ b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java @@ -13,6 +13,7 @@ import org.ftclub.cabinet.dto.ItemDto; import org.ftclub.cabinet.dto.ItemHistoryDto; import org.ftclub.cabinet.dto.ItemHistoryPaginationDto; +import org.ftclub.cabinet.dto.ItemPurchaseCountDto; import org.ftclub.cabinet.dto.ItemStoreDto; import org.ftclub.cabinet.dto.MyItemResponseDto; import org.ftclub.cabinet.item.domain.Item; @@ -82,4 +83,7 @@ CoinMonthlyCollectionDto toCoinMonthlyCollectionDto(Long monthlyCoinCount, ItemAssignResponseDto toItemAssignResponseDto(Sku sku, ItemType itemType, LocalDateTime issuedDate); + @Mapping(target = "itemName", source = "item.type.name") + @Mapping(target = "itemDetails", source = "item.sku.details") + ItemPurchaseCountDto toItemPurchaseCountDto(Item item, int userCount); } From 03fb96d12adb3659a9ecd0055409534ca098d700 Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 20:27:10 +0900 Subject: [PATCH 07/10] =?UTF-8?q?FEAT:=20=EB=82=A0=EC=A7=9C=EB=B3=84=20?= =?UTF-8?q?=EC=BD=94=EC=9D=B8=20=EC=82=AC=EC=9A=A9=EB=9F=89=20=EC=BB=A8?= =?UTF-8?q?=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/controller/AdminItemController.java | 17 +++++++++++++++++ .../org/ftclub/cabinet/dto/CoinAmountDto.java | 13 +++++++++++++ .../org/ftclub/cabinet/dto/CoinStaticsDto.java | 13 +++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 backend/src/main/java/org/ftclub/cabinet/dto/CoinAmountDto.java create mode 100644 backend/src/main/java/org/ftclub/cabinet/dto/CoinStaticsDto.java diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java index 5d496a71b..991bc234e 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/item/controller/AdminItemController.java @@ -1,20 +1,26 @@ package org.ftclub.cabinet.admin.item.controller; +import java.time.LocalDateTime; import lombok.RequiredArgsConstructor; import org.ftclub.cabinet.admin.dto.AdminItemHistoryPaginationDto; import org.ftclub.cabinet.admin.item.service.AdminItemFacadeService; +import org.ftclub.cabinet.admin.statistics.service.AdminStatisticsFacadeService; import org.ftclub.cabinet.auth.domain.AuthGuard; import org.ftclub.cabinet.auth.domain.AuthLevel; +import org.ftclub.cabinet.dto.CoinStaticsDto; import org.ftclub.cabinet.dto.ItemAssignRequestDto; import org.ftclub.cabinet.dto.ItemCreateDto; import org.ftclub.cabinet.dto.ItemStatisticsDto; import org.ftclub.cabinet.log.Logging; import org.springframework.data.domain.Pageable; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.format.annotation.DateTimeFormat.ISO; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RequestMapping("/v5/admin/items") @@ -24,6 +30,7 @@ public class AdminItemController { private final AdminItemFacadeService adminItemFacadeService; + private final AdminStatisticsFacadeService adminStatisticsFacadeService; @PostMapping("") @@ -64,4 +71,14 @@ public AdminItemHistoryPaginationDto getUserItemHistoryPagination( public ItemStatisticsDto getItemPurchaseStatistics() { return adminItemFacadeService.getItemPurchaseStatistics(); } + + @GetMapping("/statistics/coins/use") + @AuthGuard(level = AuthLevel.ADMIN_ONLY) + public CoinStaticsDto getCoinStaticsDto( + @RequestParam("startDate") @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime startDate, + @RequestParam("endDate") @DateTimeFormat(iso = ISO.DATE_TIME) LocalDateTime endDate) { + return adminStatisticsFacadeService.getCoinStaticsDto(startDate.toLocalDate(), + endDate.toLocalDate()); + + } } diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/CoinAmountDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/CoinAmountDto.java new file mode 100644 index 000000000..ecc45f449 --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/dto/CoinAmountDto.java @@ -0,0 +1,13 @@ +package org.ftclub.cabinet.dto; + +import java.time.LocalDate; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CoinAmountDto { + + private LocalDate date; + private Long amount; +} diff --git a/backend/src/main/java/org/ftclub/cabinet/dto/CoinStaticsDto.java b/backend/src/main/java/org/ftclub/cabinet/dto/CoinStaticsDto.java new file mode 100644 index 000000000..beef66087 --- /dev/null +++ b/backend/src/main/java/org/ftclub/cabinet/dto/CoinStaticsDto.java @@ -0,0 +1,13 @@ +package org.ftclub.cabinet.dto; + +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CoinStaticsDto { + + private List issuedCoin; + private List usedCoin; +} From 588e839b02cb04ad381c584e52ccb4299c7a5def Mon Sep 17 00:00:00 2001 From: saewoo1 Date: Fri, 31 May 2024 20:27:35 +0900 Subject: [PATCH 08/10] =?UTF-8?q?FEAT:=20=EB=82=A0=EC=A7=9C=EB=B3=84=20?= =?UTF-8?q?=EC=BD=94=EC=9D=B8=20=EC=82=AC=EC=9A=A9=EB=9F=89=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AdminStatisticsFacadeService.java | 50 +++++++++++++++++++ .../repository/ItemHistoryRepository.java | 12 +++++ .../item/service/ItemHistoryQueryService.java | 7 +++ .../org/ftclub/cabinet/mapper/ItemMapper.java | 4 ++ 4 files changed, 73 insertions(+) diff --git a/backend/src/main/java/org/ftclub/cabinet/admin/statistics/service/AdminStatisticsFacadeService.java b/backend/src/main/java/org/ftclub/cabinet/admin/statistics/service/AdminStatisticsFacadeService.java index 4add56569..92a948bcb 100644 --- a/backend/src/main/java/org/ftclub/cabinet/admin/statistics/service/AdminStatisticsFacadeService.java +++ b/backend/src/main/java/org/ftclub/cabinet/admin/statistics/service/AdminStatisticsFacadeService.java @@ -5,24 +5,34 @@ import static org.ftclub.cabinet.cabinet.domain.CabinetStatus.FULL; import static org.ftclub.cabinet.cabinet.domain.CabinetStatus.OVERDUE; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.IntStream; import lombok.RequiredArgsConstructor; import org.ftclub.cabinet.cabinet.service.CabinetQueryService; import org.ftclub.cabinet.dto.BlockedUserPaginationDto; import org.ftclub.cabinet.dto.CabinetFloorStatisticsResponseDto; +import org.ftclub.cabinet.dto.CoinAmountDto; +import org.ftclub.cabinet.dto.CoinStaticsDto; import org.ftclub.cabinet.dto.LentsStatisticsResponseDto; import org.ftclub.cabinet.dto.OverdueUserCabinetDto; import org.ftclub.cabinet.dto.OverdueUserCabinetPaginationDto; import org.ftclub.cabinet.dto.UserBlockedInfoDto; import org.ftclub.cabinet.exception.ExceptionStatus; import org.ftclub.cabinet.exception.ServiceException; +import org.ftclub.cabinet.item.domain.ItemHistory; +import org.ftclub.cabinet.item.service.ItemHistoryQueryService; import org.ftclub.cabinet.lent.domain.LentHistory; import org.ftclub.cabinet.lent.service.LentQueryService; import org.ftclub.cabinet.log.LogLevel; import org.ftclub.cabinet.log.Logging; import org.ftclub.cabinet.mapper.CabinetMapper; +import org.ftclub.cabinet.mapper.ItemMapper; import org.ftclub.cabinet.mapper.UserMapper; import org.ftclub.cabinet.user.domain.BanHistory; import org.ftclub.cabinet.user.service.BanHistoryQueryService; @@ -48,6 +58,8 @@ public class AdminStatisticsFacadeService { private final CabinetMapper cabinetMapper; private final UserMapper userMapper; + private final ItemHistoryQueryService itemHistoryQueryService; + private final ItemMapper itemMapper; /** * 현재 가용중인 모든 사물함의 현황을 반환합니다. @@ -114,4 +126,42 @@ public OverdueUserCabinetPaginationDto getOverdueUsers(Pageable pageable) { ).collect(Collectors.toList()); return cabinetMapper.toOverdueUserCabinetPaginationDto(result, (long) lentHistories.size()); } + + public CoinStaticsDto getCoinStaticsDto(LocalDate startDate, LocalDate endDate) { + Map issuedAmount = new LinkedHashMap<>(); + Map usedAmount = new LinkedHashMap<>(); + long dayDifference = ChronoUnit.DAYS.between(startDate, endDate) + 1; + IntStream.range(0, (int) dayDifference) + .mapToObj(startDate::plusDays) + .forEach(date -> { + issuedAmount.put(date, 0L); + usedAmount.put(date, 0L); + }); + + List usedCoins = + itemHistoryQueryService.getUsedCoinHistoryBetween(startDate, + endDate); + + usedCoins.forEach( + ih -> { + Long price = ih.getItem().getPrice(); + LocalDate date = ih.getUsedAt().toLocalDate(); + + if (price > 0) { + issuedAmount.put(date, issuedAmount.get(date) + price); + } else { + usedAmount.put(date, usedAmount.get(date) + price); + } + }); + List issueCoin = convertMapToList(issuedAmount); + List usedCoin = convertMapToList(usedAmount); + + return new CoinStaticsDto(issueCoin, usedCoin); + } + + List convertMapToList(Map map) { + return map.entrySet().stream() + .map(entry -> itemMapper.toCoinAmountDto(entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); + } } diff --git a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java index abeccc9bb..9937f4c2b 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java @@ -1,5 +1,6 @@ package org.ftclub.cabinet.item.repository; +import java.time.LocalDate; import java.util.List; import org.ftclub.cabinet.item.domain.ItemHistory; import org.springframework.data.domain.Page; @@ -64,4 +65,15 @@ Page findAllByUserIdOnMinusPriceItemsWithSubQuery( + "FROM ItemHistory ih " + "WHERE ih.itemId = :itemId") int getCountByItemIds(@Param("itemId") Long itemId); + + @Query("SELECT ih " + + "FROM ItemHistory ih " + + "JOIN FETCH ih.item " + + "WHERE ih.usedAt IS NOT NULL " + + "AND DATE(ih.usedAt) >= DATE(:start) " + + "AND DATE(ih.usedAt) <= DATE(:end)" + ) + List findAllUsedAtIsNotNullBetween( + @Param("start") LocalDate startDate, + @Param("end") LocalDate endDate); } diff --git a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java index fa0ef3f65..fe05d6dd5 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java @@ -1,5 +1,6 @@ package org.ftclub.cabinet.item.service; +import java.time.LocalDate; import java.util.List; import lombok.RequiredArgsConstructor; import org.ftclub.cabinet.item.domain.ItemHistory; @@ -40,4 +41,10 @@ public List getUnusedItemsInUserInventory(Long userId, Long itemId) public int getPurchaseCountByItemId(Long itemId) { return itemHistoryRepository.getCountByItemIds(itemId); } + + public List getUsedCoinHistoryBetween( + LocalDate startDate, + LocalDate endDate) { + return itemHistoryRepository.findAllUsedAtIsNotNullBetween(startDate, endDate); + } } diff --git a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java index 570e5bb76..71939ee98 100644 --- a/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java +++ b/backend/src/main/java/org/ftclub/cabinet/mapper/ItemMapper.java @@ -2,9 +2,11 @@ import static org.mapstruct.NullValueMappingStrategy.RETURN_DEFAULT; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import org.ftclub.cabinet.admin.dto.AdminItemHistoryDto; +import org.ftclub.cabinet.dto.CoinAmountDto; import org.ftclub.cabinet.dto.CoinHistoryDto; import org.ftclub.cabinet.dto.CoinHistoryPaginationDto; import org.ftclub.cabinet.dto.CoinMonthlyCollectionDto; @@ -86,4 +88,6 @@ ItemAssignResponseDto toItemAssignResponseDto(Sku sku, ItemType itemType, @Mapping(target = "itemName", source = "item.type.name") @Mapping(target = "itemDetails", source = "item.sku.details") ItemPurchaseCountDto toItemPurchaseCountDto(Item item, int userCount); + + CoinAmountDto toCoinAmountDto(LocalDate date, Long amount); } From 0c5cc21858792e436786d410f69f2f53dd509853 Mon Sep 17 00:00:00 2001 From: chyo1 Date: Mon, 3 Jun 2024 15:33:54 +0900 Subject: [PATCH 09/10] =?UTF-8?q?[BE]=20FIX:=20=ED=8A=B9=EC=A0=95=20?= =?UTF-8?q?=EA=B8=B0=EA=B0=84=EB=8F=99=EC=95=88=20=EC=9E=AC=ED=99=94=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EB=9F=89=20=EB=B0=98=ED=99=98=EC=8B=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20=EC=8B=9C=EC=A0=90=EC=9D=B4=20=EC=95=84?= =?UTF-8?q?=EB=8B=8C=20=EA=B5=AC=EB=A7=A4=EC=8B=9C=EC=A0=90=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ftclub/cabinet/item/repository/ItemHistoryRepository.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java index c066c7b3e..9172ba997 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java @@ -79,8 +79,7 @@ List findCoinCollectInfoByMonth(@Param("itemId") Long itemId, @Query("SELECT ih " + "FROM ItemHistory ih " + "JOIN FETCH ih.item " - + "WHERE ih.usedAt IS NOT NULL " - + "AND DATE(ih.usedAt) >= DATE(:start) " + + "WHERE DATE(ih.usedAt) >= DATE(:start) " + "AND DATE(ih.usedAt) <= DATE(:end)" ) List findAllUsedAtIsNotNullBetween( From 43d13f25e77c3d4e16b80f58b8e4c3e879c140a0 Mon Sep 17 00:00:00 2001 From: chyo1 Date: Mon, 3 Jun 2024 15:53:16 +0900 Subject: [PATCH 10/10] =?UTF-8?q?[BE]=20FIX:=20=EC=95=84=EC=9D=B4=ED=85=9C?= =?UTF-8?q?=20=ED=9E=88=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EC=8B=9C=20=EA=B5=AC=EB=A7=A4=EC=9D=BC=20=EC=88=9C=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=A0=95=EB=A0=AC=ED=95=B4=EC=84=9C=20=EB=B0=98?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ftclub/cabinet/item/repository/ItemHistoryRepository.java | 2 +- .../ftclub/cabinet/item/service/ItemHistoryQueryService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java index 9172ba997..0241ec214 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/repository/ItemHistoryRepository.java @@ -42,7 +42,7 @@ Page findAllByUserIdOnMinusPriceItemsWithSubQuery( @Param("userId") Long userId, Pageable pageable); @EntityGraph(attributePaths = "item") - Page findAllByUserId(Long userId, Pageable pageable); + Page findAllByUserIdOrderByPurchaseAtDesc(Long userId, Pageable pageable); @Query("SELECT ih " + "FROM ItemHistory ih " diff --git a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java index ffd71eb51..cfbcf0a35 100644 --- a/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java +++ b/backend/src/main/java/org/ftclub/cabinet/item/service/ItemHistoryQueryService.java @@ -27,7 +27,7 @@ public Page getItemHistoryWithItem(Long userId, Pageable pageable) } public Page getItemHistoriesByUserIdWithItem(Long userId, Pageable pageable) { - return itemHistoryRepository.findAllByUserId(userId, pageable); + return itemHistoryRepository.findAllByUserIdOrderByPurchaseAtDesc(userId, pageable); } public Page getCoinHistory(Long userId, Pageable pageable, List itemIds) {