diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/PopularMenuDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/PopularMenuDto.java index 828be84a..ebf17cfc 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/PopularMenuDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/dto/PopularMenuDto.java @@ -9,4 +9,5 @@ public class PopularMenuDto { private Long menuId; private String menuName; private Long soldCount; + private String imageUrl; } diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/PopularMenuRedisServiceImpl.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/PopularMenuRedisServiceImpl.java index 01119cbb..e5f43a16 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/PopularMenuRedisServiceImpl.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/statistic/service/impl/PopularMenuRedisServiceImpl.java @@ -13,6 +13,8 @@ import com.nowait.common.enums.Role; import com.nowait.domainadminrdb.statistic.exception.StatisticViewUnauthorizedException; import com.nowait.domaincorerdb.menu.entity.Menu; +import com.nowait.domaincorerdb.menu.entity.MenuImage; +import com.nowait.domaincorerdb.menu.repository.MenuImageRepository; import com.nowait.domaincorerdb.menu.repository.MenuRepository; import com.nowait.domaincorerdb.user.entity.MemberDetails; import com.nowait.domaincorerdb.user.entity.User; @@ -29,6 +31,7 @@ public class PopularMenuRedisServiceImpl implements PopularMenuRedisService { private final MenuCounterService menuCounterService; private final MenuRepository menuRepository; private final UserRepository userRepository; + private final MenuImageRepository menuImageRepository; @Override public List getTodayTop5(MemberDetails memberDetails) { @@ -36,8 +39,8 @@ public List getTodayTop5(MemberDetails memberDetails) { User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); Long storeId = user.getStoreId(); - if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) { - throw new StatisticViewUnauthorizedException(); + if (!Role.SUPER_ADMIN.equals(user.getRole())) { + if (storeId == null) throw new StatisticViewUnauthorizedException(); } Set> tuples = menuCounterService.getTopMenus(storeId, 5); @@ -53,13 +56,22 @@ public List getTodayTop5(MemberDetails memberDetails) { Menu::getName )); + var firstImageByMenu = menuImageRepository.findByMenuIdInOrderByIdAsc(menuIds).stream() + .collect(Collectors.toMap( + menuImage -> menuImage.getMenu().getId(), + MenuImage::getImageUrl, + (existing, replacement) -> existing + )); + return tuples.stream() .map(tuple -> { Long menuId = Long.parseLong(tuple.getValue()); String menuName = menuIdToNameMap.getOrDefault(menuId, "Unknown Menu"); + String imageUrl = firstImageByMenu.get(menuId); + long sold = tuple.getScore().longValue(); - return new PopularMenuDto(menuId, menuName, tuple.getScore().longValue()); + return new PopularMenuDto(menuId, menuName, sold, imageUrl); }) .toList(); } diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java index bcee06b8..560d0abc 100644 --- a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/statistic/repository/StatisticCustomRepositoryImpl.java @@ -1,7 +1,6 @@ package com.nowait.domainadminrdb.statistic.repository; import static com.nowait.domaincorerdb.order.entity.OrderStatus.*; -import static com.nowait.domaincorerdb.store.entity.QStore.*; import java.time.LocalDate; import java.time.LocalDateTime; @@ -50,6 +49,8 @@ public OrderSalesSumDetail findSalesSumByStoreId(Long storeId, LocalDate date) { LocalDateTime start = date.atStartOfDay(); // 해당 날짜의 자정 LocalDateTime end = date.plusDays(1).atStartOfDay(); + LocalDateTime yesterDayStart = start.minusDays(1); // 어제 00:00 + // 2) target 날짜 해당하는 매출 합산 Integer targetSum = queryFactory .select(u.totalPrice.sum()) @@ -68,8 +69,8 @@ public OrderSalesSumDetail findSalesSumByStoreId(Long storeId, LocalDate date) { .from(u) .where( u.store.storeId.eq(storeId), - u.createdAt.goe(start), - u.createdAt.lt(start.minusDays(1)), + u.createdAt.goe(yesterDayStart), + u.createdAt.lt(start), u.status.eq(COOKED) ) .fetchOne(); diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuImageRepository.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuImageRepository.java index 7ad8143a..94a6649c 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuImageRepository.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuImageRepository.java @@ -13,4 +13,5 @@ public interface MenuImageRepository extends JpaRepository { List findByMenu(Menu menu); Optional findByMenuId(Long menuId); + List findByMenuIdInOrderByIdAsc(List menuIds); }