Your IP : 216.73.216.91


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

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


export default function makeChatEndpointHandler({ chatList }) {
    return {
        getAllMessages ,
        getAllUsersChatList
        // updaterating : updaterating,
        // deleterating : deleterating
    }

    // todo

    async function getAllMessages(req, res){
        try{
            let { from, to , order_id } = req.query;
            if(!from || !to || !order_id){
              return  res.status(400).json({status: false , msg : "from ,  to and order id are required"})
            }
            let room = await chatList.getItems({from: from, to: to , order_id : order_id});
            // res.status(200).json(room)
            if(!room || !room._id){
                return res.status(200).json({message: 'No messages', msgs: []});
            }
            let messages = await chatList.findById({roomId : room._id})
            // find({'roomId': room._id}).sort({date: -1}).populate({path : "from" ,select: ['full_name' , "avatar"], }).populate("business_id")
            let updateMessages=[];
            //console.log('length',messages)
            // messages.map(item=>{
            //     let dummy = {
            //         _id: item.to,
            //         text: item.message,
            //         createdAt: item.date,
            //         user:item.from,
            //         sent:true,
            //         recieve:false,
            //         audio: item.audio ? item.audio : '',
            //         image: item.image ? item.image : '',
            //         video: item.video ? item.video : '',
            //         business_id : item.business_id ? item.business_id : "",
            //         business_name : item.business_name ? item.business_name : "",
            //         business_avatar : item.business_avatar ? item.business_avatar : "",  
            //       }
            //       updateMessages.push(dummy);
                  
            //     })
                
           
            return res.status(200).json({status: true, data: messages.reverse()});
        }catch (error){
            //console.log(error);
            return res.status(500).json({message: 'Unexpected error', error: error});
        }
    }
    

    async function getAllUsersChatList(req, res){
        try{
            //console.log("user" , req.query);
            
            let chatRooms = await chatList.getChatRooms(req.query.userId);
            let { start, rows } = req.query;
            if(!chatRooms || chatRooms.length == 0){
                return res.status(200).json({message: 'No messages', data: []});
            }

            let finalResult = [];
            for(var i = 0; i < chatRooms.length; i++){
            
                let result = await chatList.findById({'roomId': chatRooms[i]._id});
                finalResult = [...finalResult , ...result]
            }

            //console.log(finalResult);
            return res.status(200).json({status: true, data: finalResult});
        }catch (error){//console.log(error);
            return res.status(500).json({status: false, error: error});
        }
    }
    

    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 postrating(req , res) {
        let ratingInfo = req.body
        //console.log("ratingInfo" ,ratingInfo , req.body);
        if (!ratingInfo) {
            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.'
                })
            }
        }
        
        try {
            let check_ratings = await ratingList.getItems({userId : ratingInfo.userId , objectId : ratingInfo.objectId}) ;

            //console.log("check_ratings", check_ratings);
            if(check_ratings && check_ratings.length > 0){
                throw `You have already rated this ${ratingInfo.type}`
            }
            const rating =  makeRating(ratingInfo)
            const result = await ratingList.add(rating)

            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 , ratingType : ratingInfo.type ,items : {ratingAverage : final_rating , ratingCount :cal_ratings.length }  }) ;
            
            res.json({
                headers: config.app.headers,
                statusCode: 201,
                data: result
            })
            //console.log("rating" , rating);
        } 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
        })
    }

}