Your IP : 216.73.216.91


Current Path : /var/node/inatote/qa_inatote/vouchers/
Upload File :
Current File : /var/node/inatote/qa_inatote/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)


        }
    }

}