/var/www/qr4y.com/server/delivery/api/controllers
Edit: /var/www/qr4y.com/server/delivery/api/controllers/productGroups.controller.js (6538B)
const logger = require('../../logger')({ service: 'ProductGroupsController' })
const checkPermission = require('../utils/checkPermission.util')
const { NotFound, BadRequest } = require('../responseModels/errors')
const { isSet, isEmpty, minLength, isPhone, isEmail } = require('../utils/validator.util')
module.exports = function ({ db }) {
this.List = async (req, res, next) => {
logger.child({ path: req.path, request: req.query }).info()
try {
const { companyId, page, limit } = req.query
let where = {}
if (companyId) {
where['companyId'] = companyId
}
let offset = page > 0 ? (page - 1) * (limit || 10) : 0
const productGroup = await db.productGroup.findAll({
where,
offset,
limit: parseInt(limit) || 10
})
if (!productGroup || productGroup.length == 0) {
throw new NotFound({ lang: req.user?.languageCode })
}
return res.status(200).json(productGroup)
} catch (err) {
next(err)
}
}
this.Details = async (req, res, next) => {
logger.child({ path: req.path, request: req.params }).info()
try {
checkPermission(req, 'product_groups_list')
const { id } = req.params
const productGroup = await db.productGroup.findOne({
include: [
{
model: db.product,
as: 'products'
},
{ model: db.productGroupImage, required: false },
],
where: { id: id }
})
if (!productGroup) {
logger.child({ path: req.path, request: req.params }).info(error(404).message)
return res.status(404).json({ status: 'error', errors: [error(404)] })
}
return res.status(200).json(productGroup)
} catch (err) {
logger.child({ error: err.stack }).error(err.message)
return res.status(500).json({ status: 'error', errors: [err.message] })
}
}
this.Create = async (req, res, next) => {
logger.child({ path: req.path, request: req.body }).info()
try {
checkPermission(req, 'product_groups_edit')
const { name, description, image, filters, companyId, menuAppImage, menuAppView, position } = req.body
const productGroup = await db.productGroup.create({
name,
description,
image,
filters,
companyId,
menuAppImage,
menuAppView,
position
})
return res.status(200).json({
status: 'success',
id: productGroup.id
})
} catch (err) {
logger.child({ error: err.stack }).error(err.message)
return res.status(500).json({ status: 'error', errors: [err.message] })
}
}
this.Edit = async (req, res, next) => {
logger.child({ path: req.path, request: req.body }).info()
try {
checkPermission(req, 'product_groups_edit')
const { id, name, description, image, filters, menuAppImage, menuAppView, position } = req.body
let productGroup = await db.productGroup.findOne({
where: { id: id }
})
if (!productGroup) {
logger.child({ path: req.path, request: req.body }).info(error(404).message)
return res.status(404).json({ status: 'error', errors: [error(404)] })
}
productGroup.name = name
productGroup.position = position
productGroup.description = description
productGroup.image = image
productGroup.filters = filters
productGroup.menuAppImage = menuAppImage ?? ''
productGroup.menuAppView = menuAppView ?? 'horizontal'
await productGroup.save()
return res.status(200).json(productGroup)
} catch (err) {
logger.child({ error: err.stack }).error(err.message)
return res.status(500).json({ status: 'error', errors: [err.message] })
}
}
this.Delete = async (req, res, next) => {
logger.child({ path: req.path, request: req.body }).info()
try {
checkPermission(req, 'product_groups_edit')
const { id } = req.body
const productGroup = await db.productGroup.findOne({ where: { id: id } })
if (!productGroup) {
logger.child({ path: req.path, request: req.body }).info(error(404).message)
return res.status(404).json({ status: 'error', errors: [error(404)] })
}
await db.productGroup.destroy({ where: { id: id } })
return res.status(200).json({ status: 'success', id: productGroup.id })
} catch (err) {
logger.child({ error: err.stack }).error(err.message)
return res.status(500).json({ status: 'error', errors: [err.message] })
}
}
this.AddImage = async (req, res, next) => {
logger.child({ path: req.path, request: req.body }).info()
try {
let t1 = performance.now()
checkPermission(req, 'product_groups_edit')
const { productGroupId, productGroupImage } = req.body
if (!isSet(productGroupId) || isEmpty(productGroupId)) {
throw new BadRequest({ lang: req.user?.languageCode })
}
if (!isSet(productGroupImage) || isEmpty(productGroupImage)) {
throw new BadRequest({ lang: req.user?.languageCode })
}
const productGroup = await db.productGroup.findOne({
where: { id: productGroupId }
})
if (!productGroup) {
throw new NotFound({ lang: req.user?.languageCode })
}
let image = JSON.parse(productGroupImage)
image.productGroupId = productGroup.id
const result = await db.productGroupImage.create(image)
const time = performance.now() - t1
return res.status(200).json({ status: 'success', id: result.id })
} catch (err) {
next(err)
}
}
this.RemoveImage = async (req, res, next) => {
logger.child({ path: req.path, request: req.body }).info()
try {
let t1 = performance.now()
checkPermission(req, 'product_groups_edit')
const { imageId } = req.body
if (!isSet(imageId) || isEmpty(imageId)) {
throw new BadRequest({ lang: req.user?.languageCode })
}
await db.productGroupImage.destroy({ where: { id: imageId } })
const time = performance.now() - t1
return res.status(200).json({ status: 'success', id: imageId })
} catch (err) {
next(err)
}
}
this.SetDefaultImage = async (req, res, next) => {
logger.child({ path: req.path, request: req.body }).info()
try {
let t1 = performance.now()
checkPermission(req, 'product_groups_edit')
const { imageId } = req.body
if (!isSet(imageId) || isEmpty(imageId)) {
throw new BadRequest({ lang: req.user?.languageCode })
}
let product_group_image = await db.productGroupImage.findOne({
where: { id: imageId }
})
await db.productGroupImage.update(
{ isDefault: false },
{ where: { productGroupId: product_group_image.productGroupId } }
)
product_group_image.isDefault = true
product_group_image.save()
const time = performance.now() - t1
return res.status(200).json({ status: 'success', id: imageId })
} catch (err) {
next(err)
}
}
}