49 lines
1.7 KiB
Java
49 lines
1.7 KiB
Java
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<DashboardStats> 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;
|
|
}
|
|
}
|