/var/www/verywell.gr/server/delivery/api/controllers
Edit: /var/www/verywell.gr/server/delivery/api/controllers/driver.controller.js (4603B)
const logger = require('../../logger')({ service: 'api' })
const { Op } = require('sequelize')
const { NotFound, BadRequest, ApiError } = require('../responseModels/errors')
const { isSet, isEmpty, isArray } = require('../utils/validator.util')
const checkPermission = require('../utils/checkPermission.util')
module.exports = function ({ db }) {
this.List = async (req, res, next) => {
logger.child({ path: req.path, request: req.query }).info()
try {
const t1 = performance.now()
const { branchId, companyId, phone, email, name, limit, page } = req.query
let required = {
phones: false,
companies: false,
branches: false
}
let whereUser = {}
if (isSet(name)) {
whereUser['name'] = { [Op.like]: `%${name}%` }
}
if (isSet(email)) {
whereUser['email'] = { [Op.like]: `%${email}%` }
}
let whereBranch = {}
if (isSet(branchId)) {
whereBranch['id'] = parseInt(branchId)
required.branches = true
}
let whereCompany = {}
if (isSet(companyId)) {
whereCompany['id'] = parseInt(companyId)
required.companies = true
}
let wherePhone = {}
if (isSet(phone)) {
wherePhone['phone'] = {
[Op.like]: `%${phone}%`
}
required.phones = true
}
let offset = page ? (page - 1) * (limit || 10) : 0
const drivers = await db.driver.findAll({
include: [
{
model: db.user,
where: whereUser,
include: [
{
model: db.userPhone,
required: required.phones,
as: 'userPhones',
where: wherePhone
},
{
model: db.branch,
required: required.branches,
as: 'branches',
through: { attributes: [] },
where: whereBranch
},
{
model: db.company,
required: required.companies,
as: 'companies',
through: { attributes: [] },
where: whereCompany
}
]
}
],
offset,
limit: parseInt(limit) || 10
})
if (!drivers || drivers.length == 0) {
throw new NotFound({ lang: req.user?.languageCode })
}
const time = performance.now() - t1
return res.status(200).json({ drivers, page, time })
} catch (err) {
next(err)
}
}
this.Details = async (req, res, next) => {
try {
const t1 = performance.now()
const { uid } = req.params
if (!isSet(uid) || isEmpty(uid)) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
const driver = await db.driver.findOne({
include: [{ model: db.user }],
where: uid
})
if (!driver) {
throw new NotFound({ lang: req.user?.languageCode })
}
const time = performance.now() - t1
return res.status(200).json(driver)
} catch (err) {
next(err)
}
}
this.Create = async (req, res, next) => {
try {
let { userUid, description } = req.body
if (!userUid) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
if (!description) {
description = ''
}
const user = await db.user.findOne({where: {uid: userUid}})
if(!user){
throw new BadRequest({ code: 404, lang: req.user?.languageCode })
}
const driver = await db.driver.create({ userId: user.id, description })
return res.status(200).json({ status: 'success', uid: driver.uid })
} catch (err) {
next(err)
}
}
this.Edit = async (req, res, next) => {
try {
const { uid, status, description } = req.body
if (!isSet(uid) || isEmpty(uid)) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
if (!isSet(status) || isEmpty(status)) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
if (!isSet(description) || isEmpty(description)) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
const driver = await db.driver.findOne({ where: {uid} })
if (!driver) {
throw new BadRequest({ code: 404, lang: req.user?.languageCode })
}
driver.status = status
driver.description = description
driver.save()
return res.status(200).json(driver)
} catch (err) {
next(err)
}
}
this.Delete = async (req, res, next) => {
try {
const { uid } = req.body
if (!isSet(uid) || isEmpty(uid)) {
throw new BadRequest({ code: 400, lang: req.user?.languageCode })
}
const driver = await db.driver.findOne({
where: { uid: uid }
})
if (!driver) {
throw new NotFound({ lang: req.user?.languageCode })
}
await db.driver.destroy({ where: { uid: uid } })
return res.status(200).json({ status: 'success', uid: driver.uid })
} catch (err) {
next(err)
}
}
}