| Current Path : /var/node/inatote/Inatote-Backend/vouchers/ |
| Current File : /var/node/inatote/Inatote-Backend/vouchers/vouchers-endpoint.js |
import {
UniqueConstraintError,
InvalidPropertyError,
RequiredParameterError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
import makeVoucher from './vouchers.js'
import validateHeaders from '../helpers/validate-headers.js'
export default function makeVoucherEndPointHandler({ voucherList }) {
return {
postVoucher : postVoucher,
getVoucher : getVoucher,
// deleteOrder : deleteorder,
updateVoucher : updateVoucher,
// calculateCharges : calculateCharges
}
// todo
async function updateVoucher(req , res) {
const { id } = req.params || {}
//console.log(id)
let data = req.body
//console.log(data)
const result = await voucherList.update(id , data)
//console.log("res" , result);
res.status(200).json({
statusCode: 200,
msg: "Voucher has been updated"
})
}
// todo
async function postVoucher(req , res) {
//console.log("req" , req.body , req.user);
let data = req.body
if (!data) {
return res.status(400).json({
statusCode: 400,
errorMessage: 'Bad request. No POST body.'
})
}
if (typeof req.body === 'string') {
try {
data = JSON.parse(data)
} catch {
return res.status(400).json({
statusCode: 400,
errorMessage: 'Bad request. POST body must be valid JSON.'
})
}
}
try {
//console.log("order", data);
data.userId = req.user.userId;
const voucher = makeVoucher(data)
const result = await voucherList.add(voucher)
return res.status(200).json({
headers: {
'Content-Type': 'application/json'
},
statusCode: 201,
data:result.success && result.created
})
} catch (e) {
//console.log("e" , e);
return res.status(400).json({
errorMessage: e.message,
statusCode:
e instanceof UniqueConstraintError
? 409
: e instanceof InvalidPropertyError ||
e instanceof RequiredParameterError
? 400
: 500
})
}
}
// todo
async function getVoucher(req , res) {
const { id } = req.params || {}
const { max, before, after } = req.query || {}
const result = id
? await voucherList.findById(id )
: await voucherList.getItems({ max, before, after })
//console.log(result);
return res.status(200).json({
headers: {
'Content-Type': 'application/json'
},
statusCode: 200,
data: result
})
}
// todo
async function deleteorder(req , res) {
const { id } = req.params || {}
const result = await orderList.remove({orderId : id})
return res.status(200).json({
headers: {
'Content-Type': 'application/json'
},
statusCode: 200,
data: result.n == 1 ? "Order has been deleted": "Something went wrong"
})
}
async function calculateCharges(req , res){
let {distance , itemCount ,total } = req.body;
let response = {};
let configrations = await orderList.configrations();
let deliveryCharges = configrations.deliveryCharges
let deliveryRanges = Object.keys(deliveryCharges).reverse();
if (distance && distance > 0 && itemCount && itemCount > 0){
for (let index = 0; index < deliveryRanges.length; index++) {
if(distance <= (deliveryRanges[index] * 1000) ){
response["deliveryService"] = deliveryCharges[deliveryRanges[index]]
}
}
response["serviceFee"] = configrations.serviceFee;
if(itemCount > 10){
response["heavyOrderFee"] = configrations.heavyOrderFee;
}else if(total < 30){
response["smallOrderFee"] = configrations.smallOrderFee;
}
let dkm = distance / 1000;
let fee = Math.floor(dkm) * configrations.forDriver["km"];
fee += configrations.forDriver["base"];
fee += configrations.forDriver["item"] * itemCount
response["riderCharges"] = fee
res.status(200).json(response)
}
}
}