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