package com.flower.admin; import com.flower.common.ApiResponse; import com.flower.order.OrderRepository; import com.flower.security.AdminOnly; import com.flower.user.UserRepository; import lombok.Data; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; @RestController @RequestMapping("/api/admin/dashboard") @AdminOnly public class AdminDashboardController { private final OrderRepository orderRepository; private final UserRepository userRepository; public AdminDashboardController(OrderRepository orderRepository, UserRepository userRepository) { this.orderRepository = orderRepository; this.userRepository = userRepository; } @GetMapping public ApiResponse stats() { long totalOrders = orderRepository.count(); long totalUsers = userRepository.count(); BigDecimal totalSales = orderRepository.findAll().stream() .filter(order -> "PAID".equals(order.getStatus()) || "SHIPPED".equals(order.getStatus()) || "COMPLETED".equals(order.getStatus())) .map(order -> order.getTotalAmount() == null ? BigDecimal.ZERO : order.getTotalAmount()) .reduce(BigDecimal.ZERO, BigDecimal::add); DashboardStats stats = new DashboardStats(); stats.setTotalOrders(totalOrders); stats.setTotalUsers(totalUsers); stats.setTotalSales(totalSales); return ApiResponse.ok(stats); } @Data public static class DashboardStats { private long totalOrders; private long totalUsers; private BigDecimal totalSales; } }