/var/www/qr4y.com/server/delivery/api/controllers
NameSizeModeActions
account/-0755rm
auth/-0755rm
country_code/-0755rm
delivery_server/-0755rm
iap/-0755rm
order/-0755rm
qr/-0755rm
system/-0755rm
branch.controller.js298690644editdlrm
branchApp.controller.js46860644editdlrm
branchReview.controller.js63210644editdlrm
company.controller.js251110644editdlrm
companyReview.controller.js63680644editdlrm
companyTypes.controller.js31340644editdlrm
delivery.controller.js28270644editdlrm
deliveryTypes.controller.js23820644editdlrm
driver.controller.js45800644editdlrm
gallery.controller.js79290644editdlrm
language.controller.js27090644editdlrm
orderCancelCause.controller.js34420644editdlrm
payTypes.controller.js23140644editdlrm
permission.controller.js25900644editdlrm
plan.controller.js36180644editdlrm
planConfig.controller.js34530644editdlrm
product.controller.js134020644editdlrm
productFilters.controller.js33010644editdlrm
productGroups.controller.js65380644editdlrm
productReview.controller.js61640644editdlrm
productTypeFilters.controller.js29640644editdlrm
productTypeFiltersValues.controller.js31490644editdlrm
productTypes.controller.js26900644editdlrm
role.controller.js39820644editdlrm
room.controller.js34430644editdlrm
table.controller.js154540644editdlrm
user.controller.js255020644editdlrm
userCart.controller.js58270644editdlrm
waiter.controller.js61670644editdlrm
Edit: /var/www/qr4y.com/server/delivery/api/controllers/waiter.controller.js (6167B)
const logger = require('../../logger')({ service: 'api' }) const { NotFound, BadRequest } = require('../responseModels/errors') //const { Op } = require('sequelize') const checkPermission = require('../utils/checkPermission.util') const { performance } = require('perf_hooks') const { getDateByDateRange, hoursList, daysOfWeekList } = require('../utils/date') module.exports = function ({ db }) { this.Statistic = async (req, res, next) => { logger.child({ path: req.path, request: req.query }).info() try { let t1 = performance.now() const { id, range } = req.query if (!id) throw new BadRequest({ lang: req.user?.languageCode }) let date let waiter let list = [] let whereOrders = {} switch (range) { case DATE.RANGE.HOUR: date = getDateByDateRange(DATE.RANGE.HOUR) whereOrders['createdAt'] = { [db.Sequelize.Op.between]: [date.begin, date.end] } waiter = await db.user.findOne({ where: { id }, include: [ { model: db.order, foreginKey: 'userId', as: 'waiterOrders', where: whereOrders } ] }) if (!waiter) throw new NotFound({ lang: req.user?.languageCode }) if (!waiter.waiterOrders || !waiter.waiterOrders.length === 0) throw new NotFound({ lang: req.user?.languageCode }) for (let i = 0; i < 60; i++) { let dt = new Date(date.end) dt.setMinutes(dt.getMinutes() - i) dt.setSeconds(0) dt.setMilliseconds(0) list.push({ idx: 59 - i, name: dt.getMinutes(), date: dt, complete: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.COMPLETE && x.createdAt.getMinutes() == dt.getMinutes() ).length, cancel: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.CANCEL && x.createdAt.getMinutes() == dt.getMinutes() ).length }) } break case DATE.RANGE.DAY: date = getDateByDateRange(DATE.RANGE.DAY) whereOrders['createdAt'] = { [db.Sequelize.Op.between]: [date.begin, date.end] } waiter = await db.user.findOne({ where: { id }, include: [ { model: db.order, foreginKey: 'userId', as: 'waiterOrders', where: whereOrders } ] }) if (!waiter) throw new NotFound({ lang: req.user?.languageCode }) if (!waiter.waiterOrders || !waiter.waiterOrders.length === 0) throw new NotFound({ lang: req.user?.languageCode }) const hours = hoursList(req.user.languageCode) for (let i = 0; i < hours.length; i++) { let dt = new Date(date.end) dt.setHours(dt.getHours() - i) dt.setMinutes(0) dt.setSeconds(0) dt.setMilliseconds(0) list.push({ idx: hours.length - 1 - i, name: hours[dt.getHours()], date: dt, complete: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.COMPLETE && x.createdAt.getUTCHours() == dt.getUTCHours() ).length, cancel: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.CANCEL && x.createdAt.getUTCHours() == dt.getUTCHours() ).length }) } break case DATE.RANGE.WEEK: date = getDateByDateRange(DATE.RANGE.WEEK) whereOrders['createdAt'] = { [db.Sequelize.Op.between]: [date.begin, date.end] } waiter = await db.user.findOne({ where: { id }, include: [ { model: db.order, foreginKey: 'userId', as: 'waiterOrders', where: whereOrders } ] }) if (!waiter) throw new NotFound({ lang: req.user?.languageCode }) if (!waiter.waiterOrders || !waiter.waiterOrders.length === 0) throw new NotFound({ lang: req.user?.languageCode }) const days = daysOfWeekList(req.user.languageCode) for (let i = 0; i < days.length; i++) { let dt = new Date(date.end) dt.setDate(dt.getDate() - i) dt.setMinutes(0) dt.setSeconds(0) dt.setMilliseconds(0) list.push({ idx: days.length - 1 - i, name: days[dt.getDay()], date: dt, complete: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.COMPLETE && x.createdAt.getDate() == dt.getDate() ).length, cancel: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.CANCEL && x.createdAt.getDate() == dt.getDate() ).length }) } break case DATE.RANGE.MONTH: date = getDateByDateRange(DATE.RANGE.MONTH) whereOrders['createdAt'] = { [db.Sequelize.Op.between]: [date.begin, date.end] } waiter = await db.user.findOne({ where: { id }, include: [ { model: db.order, foreginKey: 'userId', as: 'waiterOrders', where: whereOrders } ] }) if (!waiter) throw new NotFound({ lang: req.user?.languageCode }) if (!waiter.waiterOrders || !waiter.waiterOrders.length === 0) throw new NotFound({ lang: req.user?.languageCode }) for (let i = 0; i <= 30; i++) { let dt = new Date(date.end) dt.setDate(dt.getDate() - i) dt.setMinutes(0) dt.setSeconds(0) dt.setMilliseconds(0) list.push({ idx: 30 - i, name: dt.getDate(), date: dt, complete: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.COMPLETE && x.createdAt.getDate() == dt.getDate() ).length, cancel: waiter.waiterOrders.filter( (x) => x.status == ORDER_STATUS.CANCEL && x.createdAt.getDate() == dt.getDate() ).length }) } break } const time = performance.now() - t1 return res.status(200).json({ all: waiter.waiterOrders.length, complete: waiter.waiterOrders.filter((x) => x.status === ORDER_STATUS.COMPLETE) .length, cancel: waiter.waiterOrders.filter((x) => x.status === ORDER_STATUS.CANCEL).length, list, date, range, time }) } catch (err) { next(err) } } }