// import { Request } from "express"; // import { prisma } from "../../lib/prisma"; import { prisma } from "../../lib/prisma"; type Range = "7d" | "30d" | "all"; const get_seller_stats_fromDb = async (shopAccountId: string, range: Range) => { let createdAtFilter: any = {}; if (range !== "all") { const days = range === "7d" ? 7 : 30; const from = new Date(); from.setDate(from.getDate() - days); createdAtFilter = { gte: from }; } const baseWhere: any = { shopAccountId, ...(range !== "all" && { createdAt: createdAtFilter }), }; const [ totalOrders, completedOrders, pendingOrders, rejectedOrders, revenueResult, last7DaysRejected, ordersForChart, ] = await Promise.all([ prisma.order.count({ where: baseWhere }), prisma.order.count({ where: { ...baseWhere, status: "DELIVERED" }, }), prisma.order.count({ where: { ...baseWhere, status: { in: ["INITIATED", "CONFIRMED", "ONGOING"] }, }, }), prisma.order.count({ where: { ...baseWhere, status: "CANCELLED" }, }), prisma.order.aggregate({ where: { ...baseWhere, status: "DELIVERED" }, _sum: { productPrice: true }, }), prisma.order.count({ where: { shopAccountId, status: "CANCELLED", createdAt: { gte: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), }, }, }), range !== "all" ? prisma.order.findMany({ where: { shopAccountId, status: "DELIVERED", createdAt: createdAtFilter, }, select: { productPrice: true, createdAt: true, }, }) : Promise.resolve([]), ]); const totalRevenue = revenueResult._sum.productPrice || 0; const avgOrderValue = completedOrders > 0 ? totalRevenue / completedOrders : 0; const dailyMap: Record = {}; for (const o of ordersForChart) { const date = o.createdAt.toISOString().split("T")[0]; if (!dailyMap[date]) dailyMap[date] = 0; dailyMap[date] += o.productPrice; } const dailyRevenue = Object.entries(dailyMap).map(([date, revenue]) => ({ date, revenue, })); return { totalOrders, completedOrders, pendingOrders, rejectedOrders, totalRevenue, avgOrderValue, last7DaysRejected, dailyRevenue, }; }; // const get_all_statictics_from_db = async (req: Request) => { // // define your own login here // const result = await prisma.statictics.findMany(); // return result; // }; // const get_single_statictics_from_db = async (req: Request) => { // // define your own login here // const { id } = req.params; // const result = await prisma.statictics.findUnique({where:{id}}); // return result; // }; // const create_statictics_into_db = async (req: Request) => { // // define your own login here // const result = await prisma.statictics.create({data:req.body}); // return result; // }; // const update_statictics_into_db = async (req: Request) => { // // define your own login here // const { id } = req.params; // const result = await prisma.statictics.update({where:{id},data:req.body}); // return result; // }; // const delete_statictics_from_db = async (req: Request) => { // // define your own login here // const { id } = req.params; // const result = await prisma.statictics.delete({where:{id}}); // return result; // }; export const statictics_service = { get_seller_stats_fromDb, // get_all_statictics_from_db, // get_single_statictics_from_db, // create_statictics_into_db, // update_statictics_into_db, // delete_statictics_from_db, };