diff --git a/src/app/modules/order/order.route.ts b/src/app/modules/order/order.route.ts index d0d162e..d002096 100644 --- a/src/app/modules/order/order.route.ts +++ b/src/app/modules/order/order.route.ts @@ -3,6 +3,7 @@ import RequestValidator from "../../middlewares/request_validator"; import { order_controller } from "./order.controller"; import { order_validations } from "./order.validation"; +import auth from "../../middlewares/auth"; const router = Router(); @@ -14,7 +15,7 @@ router.post( ); router.get("/:id", order_controller.get_single_order); router.patch( - "/:id", + "/:id",auth("ADMIN"), RequestValidator(order_validations.update_order), order_controller.update_order, ); diff --git a/src/app/modules/order/order.service.ts b/src/app/modules/order/order.service.ts index 3063531..0b492fe 100644 --- a/src/app/modules/order/order.service.ts +++ b/src/app/modules/order/order.service.ts @@ -2,6 +2,7 @@ import { Request } from "express"; import { configs } from "../../configs"; import { prisma } from "../../lib/prisma"; import { orderEmailQueue } from "../../queues/email/order/order.email.queue"; +import { AppError } from "../../utils/app_error"; import paginationHelper from "../../utils/pagination_helper"; const get_all_order_from_db = async (req: Request) => { @@ -9,6 +10,12 @@ const get_all_order_from_db = async (req: Request) => { const search = req.query.search as string; const customerName = req.query.customerName as string; const productName = req.query.productName as string; + + // for date filter + + const startDate = req.query.startDate as string; + const endDate = req.query.endDate as string; + const status = (req.query.status as string) || undefined; const { page, limit, skip, sortBy, sortOrder } = paginationHelper(req.query); @@ -62,6 +69,24 @@ const get_all_order_from_db = async (req: Request) => { }); } + // for date filter + const dateFilter: any = {}; + if (startDate) { + const start = new Date(startDate); + start.setHours(0, 0, 0, 0); + dateFilter.gte = start; + } + if (endDate) { + const end = new Date(endDate); + end.setHours(23, 59, 59, 999); + dateFilter.lte = end; + } + if (Object.keys(dateFilter).length > 0) { + andCondition.push({ + createdAt: dateFilter, + }); + } + const getAllOrders = await prisma.order.findMany({ take: limit, skip, @@ -77,7 +102,6 @@ const get_all_order_from_db = async (req: Request) => { AND: andCondition, }, }); - console.log(status); return { data: getAllOrders, pagination: { @@ -120,7 +144,16 @@ const create_order_into_db = async (req: Request) => { const update_order_into_db = async (req: Request) => { // define your own login here + const user = req.user; + console.log(user); + if (user?.role !== "ADMIN") { + throw new AppError("You are not authorized to perform this action", 403); + } const { id } = req.params as { id: string }; + const isProductExist = await prisma.order.findUnique({ where: { id } }); + if (!isProductExist) { + throw new AppError("Order is not found", 404); + } const result = await prisma.order.update({ where: { id }, data: req.body }); return result; }; diff --git a/src/app/modules/order/order.swagger.ts b/src/app/modules/order/order.swagger.ts index 927705d..d17fd4a 100644 --- a/src/app/modules/order/order.swagger.ts +++ b/src/app/modules/order/order.swagger.ts @@ -68,6 +68,26 @@ export const orderSwaggerDocs = { required: false, schema: { type: "string" }, }, + { + name: "date", + in: "query", + required: false, + schema: { type: "string" }, + }, + { + name: "startDate", + in: "query", + required: false, + schema: { type: "string", format: "date" }, + example: "2026-04-01", + }, + { + name: "endDate", + in: "query", + required: false, + schema: { type: "string", format: "date" }, + example: "2026-04-31", + }, ], responses: { 200: { description: "order fetched successfully" }, @@ -111,14 +131,7 @@ export const orderSwaggerDocs = { content: { "application/json": { example: JSON.stringify({ - shopAccountId: "", - productPrice: 1500, - productQuantity: 2, - productName: "Wireless Mouse", - customerName: "Rahim Uddin", - customerPhone: "+8801712345678", - customerAddress: "Rangpur, Bangladesh", - customerNote: "Please deliver between 3-5 PM", + status: "INITIATED", }), // put your request body }, },