Your IP : 216.73.216.91


Current Path : /var/node/inatote/Inatote-Backend/favourite/
Upload File :
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
        })
    }

}