Skip to content
Snippets Groups Projects
routes.js 14.4 KiB
Newer Older
adyanf's avatar
adyanf committed

        // Load Models
        var Driver         = require('./models/driver');
adyanf's avatar
adyanf committed
        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, codestring) {
            // Build the post string from an object
            var post_data = JSON.stringify({
                "notification": {
                    "title": "ini judul",
                    "body" : codestring,
                    "icon" : "firebase-logo.png",
                    "click-action" : ""
               },
               "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);
                });
            });

        // post the data
        post_req.write(post_data);
        post_req.end();
        }


        // Requirement to post to firebase-admin
        // var admin = require("firebase-admin");
        // var serviceAccount = require("../config/serviceAccountKey.json");
        // console.log(serviceAccount);

        // admin.initializeApp({
        //   credential: admin.credential.cert(serviceAccount),
        //   databaseURL: "https://chatservice-kia.firebaseio.com",
        // });     

        // function sendMessages(to, message){          
        //     var message = { //this may vary according to the message type (single recipient, multicast, topic, et cetera)
        //         // to: to, 
        //         notification: {
        //             title: 'Title of your push notification', 
        //             body: 'Body of your push notification' 
        //         },
        //         data: {  //you can send only notification or only data(or include both)
        //             // to: ro,
        //             message: message
        //         }
        //     };
        //     admin.messaging().sendToDevice(to, message)
        //         .then(function(response) {
        //             console.log("response: ", response);
        //         })
        //         .catch(function(err) {
        //             console.log("error: ", err);
        //         });
        // };

adyanf's avatar
adyanf committed
        // ====================== SERVER ROUTES ============================
adyanf's avatar
adyanf committed
        // FOR HANDLING DRIVER STATUS
        // see available driver
        app.get('/availabledriver', function(req, res){
            Driver.find({"status" : "available"}, function(err, foundDriver){
                res.json(foundDriver);
            });
        });

        // 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"};
                    res.json(response);
                }
                else {
                    if (!foundDriver){
                        Driver.create({"idDriver" : req.body.id, "status" : "available"}, 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);
                    }
                }
            });
        });

        // user select certain driver
        app.post('/selectdriver', function(req, res){
            Driver.findOne({"idDriver" : req.body.id, "status" : "available"}, function(err, foundDriver){
                if (!err && foundDriver){
                    foundDriver["status"] = "acceptorder";
                    foundDriver.save();
                    var response = {"status" : 200, "message" : "Driver has accepted an order"};
                    res.json(response);
                }
                else {
                    var response = {"status" : 503, "message" : "Database error detected"};
                    res.json(response);                     
                }
            });
        });

        // 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["status"] = "available";
                    foundDriver.save();
                    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
        // 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){
adyanf's avatar
adyanf committed
                            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"};
                        res.json(response);
                    }
                }
            });
        });

        // 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);
                }
            });
        })

adyanf's avatar
adyanf committed
        // CHAT SERVICE
        // 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);
                                }
                                else {
                                    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, message);
adyanf's avatar
adyanf committed
                                                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, message);
adyanf's avatar
adyanf committed
                                        res.json({'status' : 200, 'message' : 'message sent.'});
                                    }
                                }
                            });
                        }
                    });
                }
            });
        });
adyanf's avatar
adyanf committed
        // Send message from driver
        app.post('/sendmessagefromdriver', 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' : receiverId.id, 'idDriver' : senderId}, function(err3, chat){
                                if (err3){
                                    var response = {"status" : 503, "message" : "Database error detected 3"};
                                    res.json(response);
                                }
                                else {
                                    if (!chat){
                                        Chat.create({'idUser' : receiverId.id, 'idDriver' : senderId}, 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();
                                                sendMessages(receiverToken.token, message);
adyanf's avatar
adyanf committed
                                                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, message);
adyanf's avatar
adyanf committed
                                        res.json({'status' : 200, 'message' : 'message sent.'});
                                    }
                                }
                            });
                        }
                    });
                }
            });
        });
adyanf's avatar
adyanf committed

        // ====================== FRONTEND ROUTES ============================

        // route to handle all angular requests
        app.get('*', function(req, res) {
            res.send('./public/index.html');
        });
    
};