Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/address/
Upload File :
Current File : /var/node/inatote/Inatote-Backend/address/address-endpoint.js

import {
    UniqueConstraintError,
    InvalidPropertyError,
    RequiredParameterError,
    ApiTokenError,
    AuthorizationTokenError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
import makeAddress from './address.js'
import multer from 'multer'
import validateHeaders from '../helpers/validate-headers.js'
import config from '../config.js'
import { get } from 'http'

var Storage = multer.diskStorage({
    destination: function (httpRequest, file, callback) {
        //console.log("function", httpRequest, file);
        callback(null, "/")
    },

    filename: (req, file, cb) => {
        cb(null, Date.now()+ "-"+ file.originalname)
    },
})

var upload = multer({
    storage: Storage
})
// .single("imageURL")


export default function makeaddressEndpointHandler({ addressList }) {
    //  return async function handle(httpRequest) {
    return {
        postaddress : postaddress,
        getaddress : getaddress,
        updateaddress : updateaddress,
        deleteaddress : deleteaddress,
        defaultaddress : defaultaddress
    }
   
    // todo
    async function updateaddress(req , res) {
        try{
            const { id } = req.params || {}
            //console.log(id)
            let addressInfo = req.body
    
            //console.log(addressInfo)
    
            const result = await addressList.update({ addressId: id, address: addressInfo })
    
            res.status(200).json({
                headers: config.app.headers,
                statusCode: 200,
                data: result
            })
        }catch(err){
            //console.log("err" , err);
            res.status(400).json({
                headers: config.app.headers,
                statusCode: 400,
                errorMessage: err
            })
        }
    
    }

    // todo
    async function defaultaddress(req , res){
        let address = req.params.id;
        if(!address){
            res.status(400).json({
                statusCode: 400,
                errorMessage:  'Bad request. No POST body.'
            })
        }

        let get_address = await addressList.findById({_id : address})
        if(!get_address._id){
            return res.status(400).json({
                statusCode: 400,
                errorMessage: 'Address is not valid.'
            })
        }
        let update_address = await addressList.updateDefaultAddress({user_id :get_address.user_id,_id : get_address._id })
        const address_list = await addressList.getItems({ _id: get_address.user_id });

        res.status(200).json({
            headers: config.app.headers,
            statusCode : 200,
            data : address_list
        })
    }

    // todo
    async function postaddress(req , res) {
        let addressInfo = req.body
        //console.log("MAIN" , addressInfo , req.file);
        if (!addressInfo) {
            return makeHttpError({
                statusCode: 400,
                errorMessage: 'Bad request. No POST body.'
            })
        }

        if (typeof req.body === 'string') {
            try {
                addressInfo = JSON.parse(productInfo)
            } catch {
                return makeHttpError({
                    statusCode: 400,
                    errorMessage: 'Bad request. POST body must be valid JSON.'
                })
            }
        }
        
        try {
            const get_address_list = await addressList.getItems({_id: addressInfo.user_id});
            console.log("get_address_list" , get_address_list);
            if (get_address_list && get_address_list.length >= 5){
                return res.status(400).json({
                    headers: config.app.headers,
                    statusCode: 400,
                    error: "you can not save more than 5 addresses"
                })
            }
            let addressNames = []
            get_address_list.forEach(e=> {
                addressNames = [...addressNames  , e.label.toLowerCase()]
            })
            console.log("ADDRESS" ,addressNames , addressInfo.label );
            if(addressNames.includes(addressInfo.label.toLowerCase())){
                return res.status(400).json({
                    headers: config.app.headers,
                    statusCode: 400,
                    error: `${addressInfo.label} is already exists in your address book`
                })
            } 
            // if(req.file){
            //     addressInfo["imageURL"] = req.file.path;
            // }
            const address = makeAddress(addressInfo)
            const result = await addressList.add(address);
            const address_list = await addressList.getItems({ _id: addressInfo.user_id });
            //console.log("res" , result);
            if(result.created.is_default)
            {
                let update_address = await addressList.updateDefaultAddress({user_id :addressInfo.user_id,_id : result.created._id });
            }

            res.json({
                headers: config.app.headers,
                statusCode: 201,
                data: address_list.reverse()
            })
        } catch (e) {
            //console.log("errs", e);
            return makeHttpError({
                errorMessage: e.message,
                statusCode:
                    e instanceof UniqueConstraintError
                        ? 409
                        : e instanceof InvalidPropertyError ||
                            e instanceof RequiredParameterError
                            ? 400
                            : 500
            })
        }
    }

    // todo
    async function getaddress(req , res) {
       //console.log("req" , req.query);
        const { id } =req.params || {}
        const {  user_id  } = req.query || {}
        const result = id
            ? await addressList.findById({ _id: id })
            : await addressList.getItems({ _id: user_id })

        //console.log("asanjnjn")
        res.status(200).json({
            headers: config.app.headers,
            statusCode: 200,
            data: result
        })
    }

    // todo
    async function deleteaddress(req , res) {
        const { id } = req.params || {}

        const result = await addressList.remove({ _id:  id })
        
        res.status(200).json({
            headers: config.app.headers,
            statusCode: 200,
            msg:result
        })
    }

}