| Current Path : /var/node/inatote/Inatote-Backend/products/ |
| Current File : /var/node/inatote/Inatote-Backend/products/products-endpoint.js |
import {
UniqueConstraintError,
InvalidPropertyError,
RequiredParameterError,
ApiTokenError,
AuthorizationTokenError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
import makeProduct from './product.js'
import multer from 'multer'
import validateHeaders from '../helpers/validate-headers.js'
import config from '../config.js'
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 makeproductsEndpointHandler({ productList }) {
// return async function handle(httpRequest) {
return {
postproduct : postproduct,
getproducts : getproducts,
updateproduct : updateproduct,
deleteproduct : deleteproduct,
updateproductvariants: updateproductvariants
}
// switch (httpRequest.method) {
// case 'POST':
// return postproduct(httpRequest)
// case 'GET':
// return getproducts(httpRequest)
// case 'DELETE':
// return deleteproduct(httpRequest)
// case 'PUT':
// return updateproduct(httpRequest)
// case 'PATCH':
// return replaceproduct(httpRequest)
// default:
// return makeHttpError({
// statusCode: 405,
// errorMessage: `${httpRequest.method} method not allowed.`
// })
// }
// }
// todo
async function updateproductvariants(req , res){
const { value , index } = req.body ;
const { id } = req.params;
let {product , categoryId} = await productList.findOne(id);
product.variants[index].status = value ? "Available" : "Disable";
console.log("categoryId" ,categoryId);
const result = await productList.update({ productId: id, categoryId: categoryId, product: product })
console.log("prod" , result);
res.status(200).json({
headers: config.app.headers,
statusCode: 200,
data: result
})
}
async function updateproduct(req , res) {
const { categoryId, id } = req.params || {}
//console.log("files" , req.files ,req.body)
//console.log(id)
let productInfo = req.body;
let imageArr = []
if(req.files && req.files.length > 0){
for (var i = 0; i < req.files.length; i++) {
var file = req.files[i]
//console.log("files" , file);
imageArr.push(file.path)
}
if(productInfo["images"] && productInfo["images"].length > 0 ){
productInfo['imageURL'] = [...imageArr , ...productInfo["images"]];
}
else{
productInfo['imageURL'] = [...imageArr ];
}
}
if(typeof productInfo.inStock == "string"){
productInfo["inStock"] = productInfo["inStock"] == "true" ? true : false
}
//console.log("FILES agae" , req.files);
if(productInfo.images && productInfo.images.length >0 && req.files.length == 0 ){
productInfo["imageURL"] = productInfo["images"]
}
if(productInfo.variants){
productInfo["variants"] = JSON.parse(productInfo["variants"])
}
//console.log("image---------------" , productInfo );
if(productInfo['colors']){
productInfo["colors"] = productInfo.colors ? JSON.parse(productInfo.colors) : ''
}
if(productInfo["sizes"]){
productInfo["sizes"] = productInfo.sizes ? JSON.parse(productInfo.sizes) : ''
}
productInfo = JSON.parse(JSON.stringify(productInfo));
const result = await productList.update({ productId: id, categoryId: categoryId, product: productInfo })
res.status(200).json({
headers: config.app.headers,
statusCode: 200,
data: result
})
}
// todo
async function replaceproduct(httpRequest) { }
// todo
async function postproduct(req , res) {
let productInfo = req.body
if (!productInfo) {
return makeHttpError({
statusCode: 400,
errorMessage: 'Bad request. No POST body.'
})
}
if (typeof req.body === 'string') {
try {
productInfo = JSON.parse(productInfo)
} catch {
return makeHttpError({
statusCode: 400,
errorMessage: 'Bad request. POST body must be valid JSON.'
})
}
}
try {
if (productInfo.variants)
productInfo.variants = JSON.parse(productInfo.variants);
productInfo.variants = productInfo.variants.map(m=>JSON.parse(m))
if (productInfo.colors)
productInfo.colors = JSON.parse(productInfo.colors)
if(productInfo.isEnabled){
productInfo.isEnabled = productInfo.isEnabled == 'true' || productInfo.isEnabled == true ? true : false
}
if(productInfo.inStock)
{
productInfo.inStock = productInfo.inStock == 'true' || productInfo.inStock == true ? true : false
}
let imageArr = []
var d = Date.now()
for (var i = 0; i < req.files.length; i++) {
var file = req.files[i];
//console.log("FILE" , file)
imageArr.push(file.path)
}
//console.log("productInfo" ,productInfo );
productInfo['imageURL'] = imageArr;
const product = makeProduct(productInfo)
const result = await productList.add(product)
res.json({
headers: config.app.headers,
statusCode: 201,
data: result
})
} catch (e) {
//console.log("errs", e);
return makeHttpError({
errorMessage: e.message ? e.message : e,
statusCode:
e instanceof UniqueConstraintError
? 409
: e instanceof InvalidPropertyError ||
e instanceof RequiredParameterError
? 400
: 500
})
}
}
// todo
async function getproducts(req , res) {
//console.log("req" , req.query);
const { id } =req.params || {}
const { max, page, _id , name , search_by, latitude , longitude } = req.query || {}
const result = id
? await productList.findById({ productId: id , latitude , longitude })
: await productList.getItems({ max, page, _id, name , search_by })
res.status(200).json({
headers: config.app.headers,
statusCode: 200,
data: result
})
}
// todo
async function deleteproduct(req , res) {
const { id } = req.params || {}
let product = {isEnabled : false}
const result = await productList.remove({ productId: id ,product})
res.status(200).json({
headers: config.app.headers,
statusCode: 200,
data: result
})
}
}