From 0e546813ae6521209b059fd78f4884fe12aa91ab Mon Sep 17 00:00:00 2001 From: anuradhya Date: Wed, 26 Mar 2025 17:12:55 +0530 Subject: [PATCH 1/3] created analytics.controller.js --- .../v1/controllers/analytics.controller.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/api/v1/controllers/analytics.controller.js diff --git a/src/api/v1/controllers/analytics.controller.js b/src/api/v1/controllers/analytics.controller.js new file mode 100644 index 0000000..3aefd16 --- /dev/null +++ b/src/api/v1/controllers/analytics.controller.js @@ -0,0 +1,26 @@ +import { errorHandler } from "@/lib/error-handler"; +import * as analyticsService from "../services/analytics.service"; + +export const getRestaurantAnalytics = async (req, res) => { + try { + const { restaurantId } = req.params; + const { startDate, endDate } = req.query; + + const [userAnalytics, orderAnalytics, staffAnalytics, customerBehavior] = + await Promise.all([ + analyticsService.getUserAnalytics(restaurantId), + analyticsService.getOrderAnalytics(restaurantId, startDate, endDate), + analyticsService.getStaffAnalytics(restaurantId), + analyticsService.getCustomerBehaviorAnalytics(restaurantId), + ]); + + res.json({ + ...userAnalytics, + ...orderAnalytics, + ...staffAnalytics, + ...customerBehavior, + }); + } catch (error) { + errorHandler(error, res); + } +}; \ No newline at end of file From e594b43200ab917ecee027cf08085b3dda9aaf05 Mon Sep 17 00:00:00 2001 From: anuradhya Date: Wed, 26 Mar 2025 17:17:39 +0530 Subject: [PATCH 2/3] created analytics.routes.js --- src/api/v1/routes/analytics.routes.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/api/v1/routes/analytics.routes.js diff --git a/src/api/v1/routes/analytics.routes.js b/src/api/v1/routes/analytics.routes.js new file mode 100644 index 0000000..171ec44 --- /dev/null +++ b/src/api/v1/routes/analytics.routes.js @@ -0,0 +1,20 @@ +import express from "express"; +import { + authenticateStaff, + authorizeRestaurantRole, +} from "../middlewares/auth.middleware"; +import { validate } from "../middlewares/validate.middleware"; +import { analyticsQuerySchema } from "../schemas/analytics.schema"; +import * as analyticsController from "../controllers/analytics.controller"; + +const router = express.Router({ mergeParams: true }); + +router.get( + "/", + authenticateStaff, + authorizeRestaurantRole(["OWNER", "MANAGER"]), + validate(analyticsQuerySchema), + analyticsController.getRestaurantAnalytics +); + +export const analyticsRouter = router; \ No newline at end of file From 07e30122ef612b3383551d1e3a98c2a2b13e6cbf Mon Sep 17 00:00:00 2001 From: anuradhya Date: Wed, 26 Mar 2025 17:19:50 +0530 Subject: [PATCH 3/3] created analytics.schema.js --- src/api/v1/schemas/analytics.schema.js | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/api/v1/schemas/analytics.schema.js diff --git a/src/api/v1/schemas/analytics.schema.js b/src/api/v1/schemas/analytics.schema.js new file mode 100644 index 0000000..3778293 --- /dev/null +++ b/src/api/v1/schemas/analytics.schema.js @@ -0,0 +1,7 @@ +import { z } from "zod"; + +export const analyticsQuerySchema = z.object({ + startDate: z.string().optional(), + endDate: z.string().optional(), + interval: z.enum(["daily", "weekly", "monthly", "yearly"]).optional(), +}); \ No newline at end of file