Skip to content
Snippets Groups Projects
routes.js 11 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');        
        
        // ====================== SERVER ROUTES ============================
adyanf's avatar
adyanf committed
        // FOR HANDLING DRIVER STATUS
        Driver.remove({},function(err,some) {
            if (err) return console.error;
        });

        app.get('/availabledriver', function(req, res){
            Driver.find({"status" : "available"}, function(err, foundDriver){
                res.json(foundDriver);
            });
        });
        
        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);
            });
        });

        // 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, "status" : "available"}, 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"};
                        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);
                }
            });
        });

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();
                                                res.json({'status' : 200, 'message' : 'chat history created and message sent.'});
                                            }
                                        });
                                    }
                                    else {
                                        chat.history.push({'from' : senderId.id, 'to' : receiverId, 'message' : message});
                                        chat.save();
                                        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();
                                                res.json({'status' : 200, 'message' : 'chat history created and message sent.'});
                                            }
                                        });
                                    }
                                    else {
                                        chat.history.push({'from' : senderId.id, 'to' : receiverId, 'message' : message});
                                        chat.save();
                                        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');
        });
    
};