Skip to content
Snippets Groups Projects
chatRoutes.js 3.39 KiB
const express = require('express');
const Chat = require('../models/Chat.js');
const chatRouter = express.Router();
const async = require('async');
const messaging = require('../controllers/messaging');
const request = require('request');
const admin = require('firebase-admin');
const getFCMToken = require('../controllers/getFCMToken');
const User = require('../models/User');



chatRouter.route('/').get((req, res) => {
  res.setHeader('Allow-Control-Access-Origin', '*');
  const uCustomer = req.query.customer;
  const uDriver = req.query.driver;
  console.log("masuk");
  Chat.find({ customer : uCustomer, driver : uDriver}, (err, result) => {
    if (err) return console.error(err);
    return res.json({
      'url' : '/chat',
      'desc' : 'get chat history',
      'status' : 200,
      'data' : result[0]
    });
  });
});

chatRouter.route('/send').post((req, res) => {
  res.setHeader('Allow-Control-Access-Origin', '*');
  const data = {};
  console.log(req.body);
  data.uCustomer = req.body.customer;
  data.uDriver = req.body.driver;
  data.chat = {
    sender : req.body.chat.sender,
    message : req.body.chat.message
  }
  const recvUser = req.body.chat.sender == data.uCustomer ? data.uDriver : data.uCustomer;
  // const recvToken = getFCMToken(recvUser);
  // console.log(recvToken);
  const payload = {
    "notification" : {
     "title": "Notif Masuk",
     "body": req.body.chat.message,
   }
  }
  console.log(recvUser);

  User.findOne({ username : recvUser }, (err, result) => {
    if (err) return console.error(err);
    console.log(result);
    const recvToken = result.token;
    console.log(recvToken);
    messaging.sendToDevice(recvToken, payload)
      .then((response) => {
        console.log(response);
        async.waterfall([
          (flowCallback) => {
            Chat.find({ customer : data.uCustomer, driver : data.uDriver}, (err, result) => {
              if (err) return flowCallback(err);
              result.length > 0 ? data.exist = 1 : data.exist = 0;
              return flowCallback();
            });
          },
          (flowCallback) => {
            if (data.exist == 1) {
              Chat.update({ customer : data.uCustomer, driver : data.uDriver},
              { '$push' : { content : data.chat}}, (err, result) => {
                if (err) return flowCallback(err);
                return flowCallback();
              });
            } else {
              Chat.create({
                customer : data.uCustomer,
                driver : data.uDriver,
                content : [data.chat]
              }, (err, result) => {
                if (err) return flowCallback(err);
                return flowCallback();
              });
            }
          }
        ], (err, result) => {
          if (err) {
            console.error(err);
            return res.json({
              url : '/chat/save',
              desc : 'save chat history',
              status : 500,
              data : {}
            });
          } else {
            return res.json({
              url : '/chat/save',
              desc : 'save chat history',
              status : 200,
              data : 'OK'
            });
          }
        });
      })
      .catch((err) => {
        console.error(err);
        return res.json({
          url : '/chat/save',
          desc : 'send chat',
          status : 500,
          data : {}
        });
      });
  });

});


module.exports = chatRouter;