Skip to content
Snippets Groups Projects
routes.js 15.8 KiB
Newer Older
Irfan Ariq's avatar
Irfan Ariq committed
            // Load Models
            var Driver         = require('./models/driver');
            var FcmToken         = require('./models/fcmtoken');
            var Chat           = require('./models/chat');        
    
    
            // We need this to build our post string
            var querystring = require('querystring');
            var http = require('http');
            var fs = require('fs');
    
            function sendMessages(to, title, message) {
                // Build the post string from an object
                var post_data = JSON.stringify({
                    "notification": {
                        "title": title,
adyanf's avatar
adyanf committed
                        "body" : "You got a message"
                   },
                   "data" : {
                       "message" : message
Irfan Ariq's avatar
Irfan Ariq committed
                   },
                   "to": to
                });
    
                // An object of options to indicate where to post to
                var post_options = {
                    host: 'fcm.googleapis.com',
                    path: '/fcm/send',
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'Authorization' : 'key=AAAAj5zwaR8:APA91bEs0mPlX_EKQFn3hBAkz7bUFJJt-3RW5eZ-EfBr4wHIhcMwRl6ka6COI3qaAU136KLjIC3TDHLS0M3QPbfG-SJLxG5fNACB9srlxViHNZkZ5TBpKNTxVkD5o9czlt0S3xeQZoGF',
                        'Content-Length': Buffer.byteLength(post_data)
                    }
                };
    
                // Set up the request
                var post_req = http.request(post_options, function(res) {
                    res.setEncoding('utf8');
                    res.on('data', function (chunk) {
                        console.log('Response: ' + chunk);
                    });
Irfan Ariq's avatar
Irfan Ariq committed
    
            // post the data
            post_req.write(post_data);
            post_req.end();
            }
    
            // ====================== SERVER ROUTES ============================
    
            // FOR HANDLING DRIVER STATUS
            // see available driver
            Driver.remove({},function(err,some) {
                if (err) return console.error;
Irfan Ariq's avatar
Irfan Ariq committed
    
            app.get('/availabledriver', function(req, res){
                Driver.find({"status" : "available"}, function(err, foundDriver){
                    res.json(foundDriver);
                });
Irfan Ariq's avatar
Irfan Ariq committed
            
            // var someDriver = new Driver({idDriver:7,status:"available"});
            //     someDriver.save(function(err,someDriver) {
            //     if (err) return console.error(err);
            // })
    
            app.get('/alldriver', function(req, res){
                Driver.find({}, function(err, foundDriver){
                    res.json(foundDriver);
                });
Irfan Ariq's avatar
Irfan Ariq committed
    
            // driver want to find order
            app.post('/findorder', function(req, res){
                Driver.findOne({"idDriver" : req.body.id}, function(err, foundDriver){
                    if (err){
                        var response = {"status" : 503, "message" : "Database error detected"};
Irfan Ariq's avatar
Irfan Ariq committed
                    else {
                        if (!foundDriver){
                            Driver.create({"idDriver" : req.body.id, "status" : "available", "pref": req.body.pref}, function(error, addDriver){
                                if(!error && addDriver){
                                    var response = {"status" : 200, "message" : "Driver added to available driver list"};
                                    res.json(response);    
                                }
                            });
                        } else {
                            foundDriver["status"] = "available";
                            foundDriver.save();
                            var response = {"status" : 200, "message" : "Driver status has changed to available"};
                            res.json(response);
                        }
                    }
                });
Irfan Ariq's avatar
Irfan Ariq committed
    
            // user select certain driver
            app.post('/selectdriver', function(req, res){
                Driver.findOne({"idDriver" : req.body.id, "status" : "available"}, function(err, foundDriver){
                    if (!err && foundDriver){
                        FcmToken.findOne({"id" : req.body.id}, function(err1, tokenDriver){
                            if (!err1 && tokenDriver) {
                                foundDriver["status"] = "acceptorder";
                                foundDriver.save();
                                var response = {"status" : 200, "message" : "Driver has accepted an order"};
                                sendMessages(tokenDriver.token, "order", "you get an order");
                                res.json(response);
                            }else{
                                var response = {"status" : 503, "message" : "Database error detected"};
                                res.json(response);                     
Irfan Ariq's avatar
Irfan Ariq committed
                    else {
                        var response = {"status" : 503, "message" : "Database error detected"};
                        res.json(response);                     
                    }
                });
Irfan Ariq's avatar
Irfan Ariq committed
    
            // user finishes their order
            app.post('/finishorder', function(req, res){
                Driver.findOne({"idDriver" : req.body.id, "status" : "acceptorder"}, function(err, foundDriver){
                    if (!err && foundDriver){
                        foundDriver.remove();
                        var response = {"status" : 200, "message" : "Driver has finished the order"};
                        res.json(response);
                    }
                    else {
                        var response = {"status" : 503, "message" : "Database error detected"};
                        res.json(response);                     
                    }
                });
adyanf's avatar
adyanf committed
            });
Irfan Ariq's avatar
Irfan Ariq committed
    
            // FOR HANDLING FCM TOKEN USER
            // add user fcm token
            app.post('/addfcmtoken', function(req, res){
                FcmToken.findOne({"id" : req.body.id}, function(err, foundUser){
                    if (err){
                        var response = {"status" : 503, "message" : "Database error detected"};
                        res.json(response);
                    }
                    else {
                        if (!foundUser){
                            FcmToken.create({"id" : req.body.id, "token" : req.body.token}, function(error, addUser){
                                if(!error && addUser){
                                    var response = {"status" : 200, "message" : "User token has been added to token list"};
                                    res.json(response);    
                                }
                            });
                        } else {
                            foundUser["token"] = req.body.token;
                            foundUser.save();
                            var response = {"status" : 200, "message" : "User token has been updated"};
adyanf's avatar
adyanf committed
                            res.json(response);
                        }
Irfan Ariq's avatar
Irfan Ariq committed
                    }
                });
            });
    
            // delete user fcm token
            app.post('/deletefcmtoken', function(req, res){
                FcmToken.findOne({"id" : req.body.id}, function(err, foundUser){
                    if (err){
                        var response = {"status" : 503, "message" : "Database error detected"};
                        res.json(response);
                    }
                    else {
                        foundUser.remove();
                        var response = {"status" : 200, "message" : "User token has been deleted"};
                        res.json(response);
                    }
                });
            });
    
            app.get('/listfcmtoken',function(req, res){
                FcmToken.find({},function(err, listUser){
                    if (err){
                        var response = {"status" : 503, "message" : "Database error detected"};
                        res.json(response);
                    }
                    else {
                        var response = {"status" : 200, "message" : "User token has been deleted"};
                        res.json(listUser);
                    }
                });
            })
    
            // CHAT SERVICE
adyanf's avatar
adyanf committed
            // Get chat history
            app.get('/chathistory', function(req, res){
                var idUser = Number (req.query.idUser);
                var idDriver = Number (req.query.idDriver);
                Chat.findOne({"idUser" : idUser, "idDriver" : idDriver}, function(err, chat){
                    if(err){
                        res.json({"error" : "yes"});
                    } else {
                        res.json(chat.history);
                    }
                });
            });

Irfan Ariq's avatar
Irfan Ariq committed
            // Send message from passangger
            app.post('/sendmessagefrompassangger', function(req, res){
                var senderToken = req.body.token;
                var receiverId = Number (req.body.id);
                var message = req.body.message;
                FcmToken.findOne({'id' : receiverId}, function(err1, receiverToken){
                    if(err1){
                        var response = {"status" : 503, "message" : "Database error detected 1"};
                        res.json(response);
                    }
                    else {
                        FcmToken.findOne({'token' : senderToken}, function(err2, senderId){
                            if(err2){
                                var response = {"status" : 503, "message" : "Database error detected 2"};
                                res.json(response);
                            }
                            else {
                                Chat.findOne({'idUser' : senderId.id, 'idDriver' : receiverId}, function(err3, chat){
                                    if (err3){
                                        var response = {"status" : 503, "message" : "Database error detected 3"};
                                        res.json(response);
adyanf's avatar
adyanf committed
                                    }
                                    else {
Irfan Ariq's avatar
Irfan Ariq committed
                                        if (!chat){
                                            Chat.create({'idUser' : senderId.id, 'idDriver' : receiverId}, function(err4, newChat){
                                                if (err4){
                                                    var response = {"status" : 503, "message" : "Database error detected 4"};
                                                    res.json(response);
                                                }
                                                else {
                                                    newChat.history = [];
                                                    newChat.history.push({'from' : senderId.id, 'to' : receiverId, 'message' : message});
                                                    newChat.save();
                                                    console.log(receiverToken);
                                                    sendMessages(receiverToken.token, "chat", message);
                                                    res.json({'status' : 200, 'message' : 'chat history created and message sent.'});
                                                }
                                            });
                                        }
                                        else {
                                            chat.history.push({'from' : senderId.id, 'to' : receiverId, 'message' : message});
                                            chat.save();
                                            console.log(receiverToken);
                                            sendMessages(receiverToken.token, "chat", message);
                                            res.json({'status' : 200, 'message' : 'message sent.'});
                                        }
Irfan Ariq's avatar
Irfan Ariq committed
                                });
                            }
                        });
                    }
                });
adyanf's avatar
adyanf committed
            });
Irfan Ariq's avatar
Irfan Ariq committed
    
            // Send message from driver
            app.post('/sendmessagefromdriver', function(req, res){
adyanf's avatar
adyanf committed
                console.log(req.body);
Irfan Ariq's avatar
Irfan Ariq committed
                var senderToken = req.body.token;
                var receiverId = Number (req.body.id);
                var message = req.body.message;
                FcmToken.findOne({'id' : receiverId}, function(err1, receiverToken){
                    if(err1){
                        var response = {"status" : 503, "message" : "Database error detected 1"};
                        res.json(response);
                    }
                    else {
                        FcmToken.findOne({'token' : senderToken}, function(err2, senderId){
                            if(err2){
                                var response = {"status" : 503, "message" : "Database error detected 2"};
                                res.json(response);
                            }
                            else {
adyanf's avatar
adyanf committed
                                Chat.findOne({'idUser' : receiverId, 'idDriver' : senderId.id}, function(err3, chat){
Irfan Ariq's avatar
Irfan Ariq committed
                                    if (err3){
                                        var response = {"status" : 503, "message" : "Database error detected 3"};
                                        res.json(response);
adyanf's avatar
adyanf committed
                                    }
                                    else {
Irfan Ariq's avatar
Irfan Ariq committed
                                        if (!chat){
adyanf's avatar
adyanf committed
                                            Chat.create({'idUser' : receiverId, 'idDriver' : senderId.id}, function(err4, newChat){
Irfan Ariq's avatar
Irfan Ariq committed
                                                if (err4){
                                                    var response = {"status" : 503, "message" : "Database error detected 4"};
                                                    res.json(response);
                                                }
                                                else {
                                                    newChat.history = [];
                                                    newChat.history.push({'from' : senderId.id, 'to' : receiverId, 'message' : message});
                                                    newChat.save();
                                                    sendMessages(receiverToken.token, "chat", message);
                                                    res.json({'status' : 200, 'message' : 'chat history created and message sent.'});
                                                }
                                            });
                                        }
                                        else {
                                            chat.history.push({'from' : senderId.id, 'to' : receiverId, 'message' : message});
                                            chat.save();
                                            sendMessages(receiverToken.token, "chat", message);
                                            res.json({'status' : 200, 'message' : 'message sent.'});
                                        }
Irfan Ariq's avatar
Irfan Ariq committed
                                });
                            }
                        });
                    }
                });
adyanf's avatar
adyanf committed
            });
Irfan Ariq's avatar
Irfan Ariq committed
            // ====================== FRONTEND ROUTES ============================
    
            // route to handle all angular requests
            app.get('*', function(req, res) {
                res.send('./public/index.html');
            });
        
    };