| Current Path : /var/node/inatote/Inatote-Backend/favourite/ |
| Current File : /var/node/inatote/Inatote-Backend/favourite/favourite-endpoints.js |
import {
UniqueConstraintError,
InvalidPropertyError,
RequiredParameterError,
ApiTokenError,
AuthorizationTokenError
} from '../helpers/errors.js'
import makeHttpError from '../helpers/http-error.js'
import makeFavourite from './favourite.js'
import multer from 'multer'
import validateHeaders from '../helpers/validate-headers.js'
import config from '../config.js'
export default function makeFavouriteEndpointHandler({ favouriteList }) {
return {
postFavourite : postFavourite,
// getratings : getratings,
// updaterating : updaterating,
// deleterating : deleterating
}
// todo
async function updateproduct(req , res) {
const { categoryId, id } = req.params || {}
//console.log(categoryId)
//console.log(id)
let ratingInfo = req.body
//console.log(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 postFavourite(req , res) {
let info = req.body
//console.log("ratingInfo" ,info , req.user);
if (!info) {
return res.status(400).json({
headers: config.app.headers,
statusCode: 400,
errorMessage: 'Bad request. POST body must be valid JSON.'
})
}
if (typeof req.body === 'string') {
try {
ratingInfo = JSON.parse(ratingInfo)
} catch {
return res.status(400).json({
headers: config.app.headers,
statusCode: 400,
errorMessage: 'Bad request. POST body must be valid JSON.'
})
}
}
info["userId"] = await favouriteList.makeObjectId(req.user.userId)
info["objectId"] =await favouriteList.makeObjectId(info.objectId);
try {
let check_ratings = await favouriteList.getItems({userId : req.user.userId }) ;
//console.log("check_ratings", check_ratings);
if(check_ratings && check_ratings.length > 0){
// //console.log("done",typeof check_ratings[0][info.type][0],typeof info.objectId ,check_ratings[0][info.type].map(user=>user.toString()).includes(`${info.objectId}`) );
if(check_ratings[0][info.type].map(user=>user.toString()).includes(`${info.objectId}` )&& info.requestType == "favourite"){
return res.status(400).json({
headers: config.app.headers,
statusCode: 400,
errorMessage: 'Already exsists in favourit list'
})
}
// else if(!(check_ratings[0][info.type].map(user=>user.toString()).includes(`${info.objectId}` && info.requestType == "favourite"))){
// return res.status(400).json({
// headers: config.app.headers,
// statusCode: 400,
// errorMessage: 'Not in favourit list'
// })
// }
else{
check_ratings[0]["requestType"] = info.requestType
check_ratings[0]["objectId"] = info.objectId
check_ratings[0]["type"] = info.type
const doc = makeFavourite( check_ratings[0] )
//console.log("info" , info , doc);
const result = await favouriteList.update({userId :doc.userId , data : doc})
res.json({
headers: config.app.headers,
statusCode: 201,
data: result
})
}
}else{
const doc = makeFavourite(info)
//console.log("info" , info , doc);
const result = await favouriteList.add(doc)
res.json({
headers: config.app.headers,
statusCode: 201,
data: result
})
}
// let cal_ratings = await ratingList.getItems({ objectId : ratingInfo.objectId}) ;
// let rating_sum = 0;
// if(cal_ratings && cal_ratings.length > 0){
// cal_ratings.forEach(element => {
// rating_sum = parseInt(element.stars) + rating_sum;
// });
// }
// let final_rating = rating_sum/cal_ratings.length;
// //console.log("rating_sum" , rating_sum ,cal_ratings.length );
// //console.log("final" ,final_rating );
// let update_ratings = await ratingList.updateVendorOrProduct({id : ratingInfo.objectId ,items : {ratingAverage : final_rating , ratingCount :cal_ratings.length } }) ;
} catch (e) {
//console.log("e" , e);
return res.status(400).json({
headers: config.app.headers,
statusCode: 400,
errorMessage: e ? e : e.message
})
}
}
// todo
async function getratings(req , res) {
//console.log("req" , req.params);
const { id } =req.params || {}
const { max, page, objectId } = req.query || {}
const result = id
? await ratingList.findById(id)
: await ratingList.getItems({ max, page , objectId })
//console.log("asanjnjn")
res.status(200).json({
headers: config.app.headers,
statusCode: 200,
data: result
})
}
// todo
async function deleteproduct(req , res) {
const { id } = req.params || {}
const result = await productList.remove({ productId: id })
res.status(200).json({
headers: config.app.headers,
statusCode: 200,
data: result
})
}
}