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