Thursday 21 September 2017

Parse server backup from heroku


/**********************************************************************************
//Installation parse server
install nodejs above 4.3
install mongodb


Heroku install on local
//install heroku
gem install heroku
//login to terminal enter email id and password
heroku login


//clone app on local machine
heroku git:clone -a your_app_name

//run parse server
cd app_direc >> run npm install commond >> npm start

besic git commond


//for initilize git
git init
git pull
git push
git commit -m "enter message"
git add .
git checkout filename
git status //for check status
git branch // check current branch
git clone git url // get clone from server
git checkout master //change branch
//check remote directory
git remote -v
//if you have not cloned an existing repository and want to connect your
git remote add origin <server>
//add brnach merge
 git merge <branch>
//diffence file
git diff file name filename
//replace local chenges
git checkout
 git fetch origin
If you instead want to drop all your local changes and commits, fetch the latest history from the server and point your local master branch at it like this
git fetch origin
git reset --hard origin/master

Wednesday 6 September 2017

Nodejs chat with mongooes

/********server.js***********/

/*
 * @author Anil Yadav * @Description Create server and implemnt route front and socket for chat server
 * @create-date 28-09-2017 12:12pm
 */
var express = require('express');
var path = require('path');
require('dotenv').load();
var app = express();

// allow CORS
app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
  if (req.method == 'OPTIONS') {
    res.status(200).end();
  } else {
    next();
  }
});

app.use(express.static(__dirname + '/uploads'))
app.use('/uploads', express.static(path.join(__dirname, '/uploads')));
var httpServer = require('http').createServer(app);
var io = require('socket.io').listen(httpServer)
var ss = require('socket.io-stream');

var routes = require('./chat-server/routes');

//front end routes
app.use('/', routes);
//implement chat server
require('./chat-server/controller/socketController')(io)
//require('./chat-server/controller/socketGroupController')(io)

//assign port
var port = process.env.PORT || 8888;
httpServer.listen(port, function() {
    console.log('Chat Server running on port ' + port + '.');
});
/************************models.js****************/
/*
 * Use : Model Logic
 * @author Anil Yadav<ayadav@clavax.us>
 * @create-date 03-10-2017 06:42pm
 */
//create model for room
var Room = require('./../include/roomSchema')
var config = require('./../include/config');
var notification = require('./../include/pushnotification');

var customJs = require('./../include/custom');

//create model for user
var User = require('./../include/userSchema')
var RoomUser = require('./../include/roomUserSchema')
var Chat = require('./../include/chatSchema')
var DeviceToken = require('./../include/deviceToken')

//define schema
var Schema = require('./getSchema')

//get user schema
var userget = Schema.users;
//get group list data
var grouplist = Schema.grouplist;
//get group user list data
var groupuserlist = Schema.groupuserlist;
//get default api response
var apiResponse = Schema.apiResponse;
var Promise = require('bluebird');
var fs = require('fs');
var formidable = require('formidable');
var multer = require('multer');


exports.addDeviceToken = function addDeviceToken(request, callback) {
    /*
     * Use : Save device token for push notification
     * Description : Save device token for push notification
     */
    var user_id = request.user_id;
    var device_token = request.device_token;
    var token_type = request.token_type;
    DeviceToken.findOne({user_id: user_id, }, function (err, data) {
        if (err) {
            apiResponse.data = [];
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.message = "Error!";
        } else if (data) {
            data.device_token = device_token;
            data.save(function (err1, data1) {
//                console.log("device token update successfully");
                apiResponse.data = [];
                apiResponse.error = 0;
                apiResponse.status = 200;
                apiResponse.message = "device token update successfully";
                callback(apiResponse)
            })
        } else {
            var insertData = {'user_id': user_id, device_token: device_token, token_type: token_type};
            var saveDeviceToken = new DeviceToken(insertData);
            saveDeviceToken.save(function (err, data) {
                apiResponse.data = [];
                apiResponse.error = 0;
                apiResponse.status = 200;
                apiResponse.message = "device token insert successfully";
                callback(apiResponse)
//                console.log("device token saved successfully");
            });
        }
    })


};


exports.removeDeviceToken = function removeDeviceToken(request, callback) {
    /*
     * Use : Save device token for push notification
     * Description : Save device token for push notification
     */
    var user_id = request.user_id;
    var device_token = request.device_token;
    DeviceToken.findOne({user_id: user_id, device_token: device_token}, function (err, data) {
        data.remove(function (err, data) {

            callback("success")
        });
    })


};


exports.addRoom = function addRoom(request, callback) {
    /*
     * Use : Add room for chat
     * Description : Add room  for chat create room code for chat user.    
     */
    genCode(function (data) {
        try {
            //get user request
            var randomcode = data;
            var code_type = request.code_type || 1;
            var userid = request.user_id;
            var language = request.language;
//            console.log("=======send data for get user details======")
            getUserData(userid, function (userData) {
//                console.log("=====after get user data ===========")
                if (userData) {
                    var userid = userData._id;
                    //change title according to language when it create
                    var suffix = (language === "fr") ? "Groupe " : " Group";
                    var title = (language === "fr") ? suffix + userData.firstName : userData.firstName + suffix;

                    Room.find({}, function (err, dd) {
                        var gsno = dd.length + 1;

                        var data = {gsno: gsno, code: randomcode, valid: 1, code_type: code_type, creator: userid, title: title}
                        var saveCode = new Room(data);
                        saveCode.save(function (err) {
                            var roomId = saveCode._id
                            if (err) {
                                apiResponse.error = 1;
                                apiResponse.status = 200;
                                apiResponse.data = [];
                                apiResponse.message = "got error " + err;
                                callback(apiResponse)
                            } else {
                                var nickname = userData.nickname;
                                //save user to room

                                var dataRoomUser = {user_id: userid, group_id: roomId, nickname: nickname};
                                saveUserRoom(dataRoomUser, function (data) {
                                    getGroupDetails(roomId, function (gdata) {
                                        var groupData = {};

                                        groupData['room_code'] = randomcode;
                                        groupData['group_id'] = roomId;
                                        groupData['user_id'] = userid;
                                        groupData['members'] = gdata.members;
                                        groupData['group_details'] = gdata.group_details;
                                        apiResponse.data = groupData;
                                        apiResponse.error = 0;
                                        apiResponse.status = 200;
                                        apiResponse.message = "Group Created SuccessFully";
                                        callback(apiResponse)
                                    })
                                });




                            }
                        });
                        //call back to socket

                    })
                } else {
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.data = [];
                    apiResponse.message = "user not found";
                }
            });

        } catch (e) {
            callback(apiResponse)
        }
    });
};

function getGroupDetails(group_id, callback) {
    var groupdetails = Schema.groupdetails;
    var members = [];
    var groupDetails = {};
    Room.findOne({_id: group_id, is_deleted: 0}, groupdetails, function (err, data) {
        if (data && data.length != 0) {
            groupDetails['group_details'] = data;
            RoomUser.find({group_id: group_id, is_deleted: 0, }, groupuserlist).sort('-created_at').limit(5).exec(function (err, data2) {
                var count = data2.length;
                var countInc = 0;
                data2.forEach(function (value) {
                    getUserData(value.user_id, function (userData) {
                        var temp_obj = {};
                        temp_obj['room_user_id'] = value._id;
                        temp_obj['user_id'] = value.user_id;
                        temp_obj['nickname'] = value.nickname;
                        temp_obj['user_image'] = (userData.imageFile) ? userData.imageFile : "";
                        members.push(temp_obj);
                        countInc++;
                        if (count == countInc) {
                            groupDetails['members'] = members;
                            callback(groupDetails)
                        }
                    })

                });
            });
        } else {
            callback([]);
        }

    })

}

exports.checkCode = function checkCode(request, callback) {
    /*
     * Use : Check Code
     * Description : check code vailid or not.    
     */
    var userid = request.user_id;
    var code = request.code;
//    console.log("=======send data for get user details======")
    getUserData(userid, function (userData) {
//        console.log("=====after get user data ===========")
        Room.findOne({code: code, valid: 1, is_deleted: 0}, function (err, data) {
            if (data) {
                var checkCode = 0;
                var code_type = data.code_type;
                var createdDate = data.created_at;
                var roomcode = data.code;
                var creator = data.creator;
                if (code_type == 1) {
                    var gettime = new Date(createdDate);
                    var curtime = new Date();
                    gettime.setSeconds(gettime.getSeconds() + 25);
                    if (curtime > gettime) {
                        //store status
                        checkCode = 1;
                    }
                } else {
                    var curtime = new Date();
                    var newDate = addDays(new Date(), 5);
                    if (curtime > newDate) {
                        //store status
                        checkCode = 1;
                    }
                }
                //check code active or not
                if (checkCode) {
                    data.valid = 0;
                    data.save();
                    apiResponse.data = {user_id: userid}
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.data = [];
                    apiResponse.message = "Invalid code or Expired";
                    callback(apiResponse)
                } else {
                    var nickname = userData.nickname;
                    //save user to room
                    var group_id = data._id;
                    //action if code is active
                    var dataRoomUser = {user_id: userid, group_id: group_id, nickname: nickname};
//                    console.log("////checkkkkkkkcodeeeee")
                    saveUserRoom(dataRoomUser, function (data) {
                        getGroupDetails(group_id, function (gdata) {
                            var groupData = {};

                            groupData['room_code'] = roomcode;
                            groupData['group_id'] = group_id;
                            groupData['exist'] = data;
                            groupData['user_id'] = creator;
                            groupData['members'] = gdata.members;
                            groupData['group_details'] = gdata.group_details;
                            apiResponse.data = groupData;
                            apiResponse.error = 0;
                            apiResponse.status = 200;
                            apiResponse.message = "Check code SuccessFully";
                            callback(apiResponse)
                        })


                    });
                }
            } else {
                apiResponse.data = {user_id: userid}
                apiResponse.error = 1;
                apiResponse.status = 200;
                apiResponse.message = "Invalid code or Expired";
                //return to call back socket
                callback(apiResponse)
            }

        });
    });
};


exports.getCode = function getCode(request, callback) {
    /*
     * Use : getCode
     * Description : getCode.    
     */
    var group_id = request.group_id;
    groupdetails = Schema.groupdetails;
//    console.log("=====after get user data ===========")
    Room.findOne({_id: group_id}, groupdetails, function (err, data) {
        if (data) {
            apiResponse.data = data;
            apiResponse.error = 0;
            apiResponse.status = 200;
            apiResponse.message = "Success";
//            console.log(apiResponse)
            callback(apiResponse)
        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "Error Group id not found";
//            console.log(apiResponse)
            callback(apiResponse)
        }
    });
};


exports.updateCode = function updateCode(request, callback) {
    /*
     * Use :updateCode
     * Description :updateCode.    
     */

    groupdetails = Schema.groupdetails;
//    console.log("=====after get user data ===========")
    genCode(function (data) {
        try {
            //get user request
            var group_id = request.group_id;
            var randomcode = data;
            var code_type = request.code_type || 1;
            Room.findOne({_id: group_id}, groupdetails, function (err, data) {
                if (data) {
                    data.code = randomcode;
                    data.code_type = code_type;
                    data.code_date = new Date();
                    data.save(function (err, dataCode) {
//                        console.log(err)
                        if (err) {
                            apiResponse.error = 1;
                            apiResponse.status = 200;
                            apiResponse.data = [];
                            apiResponse.message = "Got an issue please try after some time";
//                            console.log(apiResponse)
                            callback(apiResponse)

                        } else {
                            getGroupDetails(group_id, function (gdata) {
                                var groupData = {};

                                groupData['room_code'] = randomcode;
                                groupData['exist'] = "1";
                                groupData['group_id'] = group_id;
                                groupData['user_id'] = data.creator;
                                groupData['members'] = gdata.members;
                                groupData['group_details'] = gdata.group_details;
                                apiResponse.data = groupData;
                                apiResponse.error = 0;
                                apiResponse.status = 200;
                                apiResponse.message = "Group Created SuccessFully";
                                callback(apiResponse)
                            })
                        }
                    })
                } else {

                }
            });
        } catch (e) {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "error!!!";
//            console.log(apiResponse)
            callback(apiResponse)
        }
    });

};



exports.deleteCode = function deleteCode(request, callback) {
    /*
     * Use :deleteCode
     * Description :deleteCode.    
     */
    var group_id = request.group_id;
    groupdetails = Schema.groupdetails;
//    console.log("=====after get user data ===========")
    Room.findOne({_id: group_id}, groupdetails, function (err, data) {
//        console.log(data);
//        console.log(err)
        if (data) {
            data.code = -1;
            data.code_type = -1;
            data.valid = 0;
            data.save(function (err, dataCode) {
//                console.log(err);
//                console.log(dataCode)
                if (err) {
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.data = [];
                    apiResponse.message = "Got an issue please try after some time";
//                    console.log(apiResponse)
                    callback(apiResponse)

                } else {
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
//                    console.log(apiResponse)
                    callback(apiResponse)
                }
            })
        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "Error Group id not found";
//            console.log(apiResponse)
            callback(apiResponse)
        }
    });
};





exports.changeNickname = function changeNickname(request, callback) {
    /*
     * Use :changeNickname
     * Description :changeNickname.    
     */
    var group_id = request.group_id;
    var user_id = request.user_id;
    var nickname = request.nickname;
    groupdetails = Schema.groupdetails;
//    console.log("=====after get user data ===========")
    RoomUser.findOne({group_id: group_id, user_id: user_id}, groupuserlist, function (err, data) {
        if (data) {
            data.nickname = nickname;
            data.save(function (err, dataCode) {
//                console.log(err)
                if (err) {
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.data = [];
                    apiResponse.message = "Got an issue please try after some time";
//                    console.log(apiResponse)
                    callback(apiResponse)

                } else {
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
//                    console.log(apiResponse)
                    callback(apiResponse)
                }
            })
        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "Error Group id not found";
//            console.log(apiResponse)
            callback(apiResponse)
        }
    });
};



exports.groupDetails = function groupDetails(request, callback) {
    /*
     * Use : groupDetails
     * Description : groupDetails    
     */
    var group_id = request.group_id;
    var userid = request.user_id;
    groupdetails = Schema.groupdetails;

    Room.findOne({_id: group_id, is_deleted: 0}, groupdetails, function (err, data) {
//        console.log("=====room user====")
        if (data) {
            RoomUser.find({group_id: group_id, is_deleted: 0}, function (err1, dataRU) {
                if (dataRU) {
                    var count = dataRU.length;
                    data = data.toObject();
                    data['count'] = count;
//                    getUserData(function(err2,data2){
//                       
//                    })
                    //return to call back socket
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
                    callback(apiResponse)
                } else {
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.data = [];
                    apiResponse.message = "Error Group id not found";
                    callback(apiResponse)
                }
            })
        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "Error Group id not found";
            callback(apiResponse)
        }
    });
};


exports.groupDelete = function groupDelete(request, callback) {
    /*
     * Use : groupDelete
     * Description : groupDelete    
     */
    var group_id = request.group_id;
    var userid = request.user_id;
    groupdetails = Schema.groupdetails;
//    console.log(request)
    Room.findOne({_id: group_id}, function (err, data) {
//        console.log(err)
//        console.log(data)
//        console.log("=====remove room user====")
        if (data && data.creator == userid) {
//            console.log("hello how are you")
            //set delete and disable status
            data.is_deleted = 1;
            data.is_disable = 1;
//            console.log("hello how are you")
            data.save(function (err1, data) {
//                console.log("hellooooo")

                apiResponse.data = data;
                apiResponse.error = 0;
                apiResponse.status = 200;
                apiResponse.message = "Success";
//                console.log(apiResponse)
                callback(apiResponse)
            });

        } else {
//            console.log("as")
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "Invalid user for delete group";
            callback(apiResponse)
        }
    });
};


exports.exitRoom = function exitRoom(request, callback) {
    /*
     * Use : exitRoom
     * Description : exitRoom    
     */
    var group_id = request.group_id;
    var userid = request.user_id;
    groupdetails = Schema.groupdetails;

    RoomUser.findOne({group_id: group_id, user_id: userid}, function (err, data) {
//        console.log("=====remove room user====")
        if (data) {
            //set delete and disable status
            data.is_deleted = 1;
            data.is_disable = 1;
            data.save(function (err1, data) {
                apiResponse.data = data;
                apiResponse.error = 0;
                apiResponse.status = 200;
                apiResponse.message = "Success";
//                console.log(apiResponse)
                callback(apiResponse)
            });

        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "room not found";
            callback(apiResponse)
        }
    });
};


exports.deleteChat = function deleteChat(request, callback) {
    /*
     * Use : exitRoom
     * Description : exitRoom    
     */
    var id = request.chat_id;
    var user_id = request.user_id
    var groupdetails = Schema.groupdetails;

    Chat.findOne({_id: id, user_id: user_id}, function (err, data) {
//        console.log("=====remove chat user====")
        if (data) {
            //set delete and disable status
            data.is_deleted = 1;
            data.is_disable = 1;
            data.save(function (err1, data) {
                Room.findOne({_id: data.group_id}, function (dataGroup) {
                    Chat.find({group_id: data.group_id, is_deleted: 0}).sort('-sno').exec(function (err, dataChat) {
//                        console.log(dataChat)
                        if (dataChat.length) {
                            var dataC = dataChat[0];
                            updateGroupChatMsg(data.group_id, dataC.message, dataC.message_type)
                        } else {
                            updateGroupChatMsg(data.group_id, "", 0)
//                            console.log("77777777888888888888888")
                        }

                    });
                })
                apiResponse.data = data;
                apiResponse.error = 0;
                apiResponse.status = 200;
                apiResponse.message = "Success";
//                console.log(apiResponse)
                callback(apiResponse)
            });

        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "chat not found";
            callback(apiResponse)
        }
    });
};



exports.chatList = function chatList(request, callback) {
    /*
     * Use : chatList
     * Description : chatList    
     */


    var group_id = request.group_id;
    var user_id = request.user_id;
    var page = parseInt(request.page);
    var limit = parseInt(request.limit);
    var user_id = request.user_id;
    var appendData = [];
    var chatlist = Schema.chatlist;
    page = page * limit;
    Chat.find({group_id: group_id, is_deleted: 0}).sort('-sno').limit(5000).exec(chatlist, function (err, data) {
//        console.log("hello")
//        console.log(data)
        if (data && data.length != 0) {
            var count = data.length;
            var countInc = 0;
            data.forEach(function (value) {

                getUserRoomData(value.user_id, value.group_id, function (dataList) {
                    var temp_obj = {};
                    temp_obj['group_id'] = value.group_id;
                    temp_obj['sno'] = value.sno;
                    temp_obj['_id'] = value._id;
                    temp_obj['user_id'] = value.user_id;
                    temp_obj['message'] = value.message;
                    temp_obj['mime_type'] = value.mime_type;
                    temp_obj['thumbnail_key'] = value.thumbnail_key;
                    temp_obj['message_type'] = value.message_type;
                    temp_obj['created_at'] = value.created_at;
                    temp_obj['nickname'] = dataList.nickname;
                    temp_obj['user_image'] = dataList.user_image;

                    appendData.push(temp_obj)
                    countInc++;
                    if (count == countInc) {
                        apiResponse.data = sortBy(appendData, {prop: "sno"});
                        apiResponse.error = 0;
                        apiResponse.status = 200;
                        apiResponse.message = "chat List Success";
                        callback(apiResponse)
                    }
                })
            })

        } else {
            apiResponse.error = 0;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "success";
            callback(apiResponse)
        }
    });

};



function msgCountInc(data) {
    RoomUser.update({group_id: data.group_id}, {$inc: {unread_msg: 1}}, {"multi": true}, function (err, num) {
    });
}
exports.chatTack = function chatTack(data) {
    RoomUser.update({group_id: data.group_id, user_id: data.user_id}, {unread_msg: 0}, function (err, num) {

    });
}


//sorted list by given data like number string or date
var sortBy = (function () {

    //cached privated objects
    var _toString = Object.prototype.toString,
            //the default parser function
            _parser = function (x) {
                return x;
            },
            //gets the item to be sorted
            _getItem = function (x) {
                return this.parser((x !== null && typeof x === "object" && x[this.prop]) || x);
            };

    // Creates a method for sorting the Array
    // @array: the Array of elements
    // @o.prop: property name (if it is an Array of objects)
    // @o.desc: determines whether the sort is descending
    // @o.parser: function to parse the items to expected type
    return function (array, o) {
        if (!(array instanceof Array) || !array.length)
            return [];
        if (_toString.call(o) !== "[object Object]")
            o = {};
        if (typeof o.parser !== "function")
            o.parser = _parser;
        o.desc = !!o.desc ? -1 : 1;
        return array.sort(function (a, b) {
            a = _getItem.call(o, a);
            b = _getItem.call(o, b);
            return o.desc * (a < b ? -1 : +(a > b));
        });
    };

}());

exports.groupEdit = function groupEdit(request, callback) {
    /*
     * Use : groupEdit
     * Description :groupEdit.    
     */
    var user_id = request.user_id;
    var group_id = request.group_id;
    groupdetails = Schema.groupdetails;
    Room.findOne({_id: group_id, creator: user_id, is_deleted: 0}, function (err, data) {
        //return to call back socket
        if (data) {
            if (request.title) {
                data.title = request.title;
            }

            if (request.description) {
                data.room_description = request.description;
            }

            data.save(function (err, data) {
                if (!err) {
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
//                    console.log(apiResponse)

                }
                callback(apiResponse)
            })
        } else {
            apiResponse.data = [];
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.message = "Error Invalid user";
//            console.log(apiResponse)
            callback(apiResponse)
        }
    });
};



exports.groupEditAll = function groupEditAll(request, callback) {
    /*
     * Use : groupEdit
     * Description :groupEdit.    
     */
    var user_id = request.user_id;
    var group_id = request.group_id;
    groupdetails = Schema.groupdetails;

    try {
        RoomUser.findOne({user_id: user_id, group_id: group_id}, function (err, docs) {

            if (docs) {
//                console.log(request)
                if (request.nickname) {
                    docs.nickname = request.nickname;
                    docs.save();
                }
            }


            Room.findOne({_id: group_id, creator: user_id, is_deleted: 0}, function (err, data) {
                //return to call back socket
                if (data) {
//                    console.log(request)

                    //for seprate save nickname
                    if (request.title) {
                        data.title = request.title;
                    }

                    if (request.description) {
                        data.room_description = request.description;
                    }

                    data.save(function (err, data) {
                        if (!err) {
                            data = data.toObject();
                            data['user_id'] = data.creator;
                            delete data.creator;
                            apiResponse.data = data;
                            apiResponse.is_creator = 1;
                            apiResponse.error = 0;
                            apiResponse.status = 200;
                            apiResponse.message = "Success";
//                            console.log(apiResponse)

                        }
                        callback(apiResponse)
                    })
                } else if (docs) {
                    apiResponse.data = docs;
                    apiResponse.is_creator = 0;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
//                    console.log(apiResponse);
                    callback(apiResponse);
                } else {

                    apiResponse.data = [];
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.message = "Error Invalid user";
//                    console.log(apiResponse)
                    callback(apiResponse)
                }
            });
        });
    } catch (e) {
        console.log(e)

    }
};



exports.groupImageUpdate = function groupImageUpdate(request, callback) {
    /*
     * Use : groupImageUpdate Code
     * Description : groupImageUpdate.    
     */

    var user_id = request.user_id;
    var group_id = request.group_id;
    groupdetails = Schema.groupdetails;

    Room.findOne({_id: group_id, creator: user_id, is_deleted: 0}, function (err, data) {
        if (data) {
            imageUploadGroup(request, function (imagename) {
                data.group_image = imagename;
                data.save(function (err, data) {
//                    console.log(err)
//                    console.log(data)
                    if (!err) {
                        apiResponse.data = data;
                        apiResponse.error = 0;
                        apiResponse.status = 200;
                        apiResponse.message = "Success";
                    }
                    callback(apiResponse)
                })
            })
        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "Invalid user for update group";
            callback(apiResponse)
        }
    });
};


/*
 * @Description Save Room id and user id in callection roomUser
 * @param {type} dataRoomUser
 * @returns {undefined}
 */
function saveUserRoom(dataRoomUser, callback) {
//    console.log("===save record add room before==========")
    var msg = 0
    RoomUser.findOne({user_id: dataRoomUser.user_id, group_id: dataRoomUser.group_id}, function (err, docs) {

        if (docs) {
            if (docs.is_deleted) {
                docs.is_deleted = 0;
                docs.save();
                callback(0)
            } else {
                callback(1)
            }

        } else {
            var saveRoomUser = new RoomUser(dataRoomUser);
            saveRoomUser.save(function (err, data) {
//                console.log(err)
//                console.log(data)
                msg = 0;
                callback(msg)
            });
        }
    });
//    console.log("===save record add room after==========")
}





/*
 * @Description list group
 * @param {type} listGroup
 * @returns {listGroup}
 */
exports.listGroup = function listGroup(request, callback) {
    var userid = request.user_id;
    var appendData = []
    getUserData(userid, function (userData) {
//        console.log("==============================================")
        if (userData) {

            RoomUser.find({user_id: userid, is_deleted: 0, }, groupuserlist).sort('-created_at').limit(5000).exec(function (err, data) {
                if (data && data.length != 0) {
                    var count = data.length;
                    var countInc = 0;
                    data.forEach(function (value) {
//                        console.log("hello")

                        getGroupDetails(value.group_id, function (dataList) {
                            countInc++;
//                            console.log(dataList)
//                            console.log(countInc)
                            var temp_obj = {};
                            try {
                                if (dataList && dataList.length != 0) {
                                    temp_obj['group_id'] = value.group_id;
                                    temp_obj['nickname'] = value.nickname;
                                    temp_obj['unread_msg'] = value.unread_msg;
                                    temp_obj['user_id'] = value.user_id;
                                    temp_obj['user_image'] = userData.imageFile;
                                    temp_obj['group_details'] = dataList.group_details;
                                    temp_obj['created_at'] = dataList.group_details.created_at;
                                    temp_obj['members'] = dataList.members;
                                    appendData.push(temp_obj)
                                }
                            } catch (e) {
                            }
                            if (count == countInc) {

                                apiResponse.data = sortBy(appendData, {prop: "created_at"});
                                apiResponse.error = 0;
                                apiResponse.status = 200;
                                apiResponse.message = "Group List Success";
                                callback(apiResponse)
                            }

                        })
                    })
                } else {
                    apiResponse.data = [];
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.message = "Error";
                    callback(apiResponse)
                }
            })
        }

    });

}
/*
 *
 * @Description Display list group user
 * @returns {listGroupUser}
 */
exports.listGroupUser = function listGroupUser(request, callback) {
    var group_id = request.group_id;
    var appendData = []

    groupOrderSet(request, function (onwerData) {
        console.log(onwerData);
        RoomUser.find({group_id: group_id, is_deleted: 0, }, groupuserlist).sort('-created_at').limit(5).exec(function (err, data) {
            if (data && data.length != 0) {
//            console.log(data)
//            console.log(err)
                var count = data.length;
                var countInc = 0;
                data.forEach(function (value) {
                    getUserData(value.user_id, function (userData) {
//                    console.log(userData)
                        getRoomList(value.group_id, function (dataList) {
                            try {
//                            console.log(dataList)
                                var temp_obj = {};
                                temp_obj['group_id'] = value.group_id;
                                temp_obj['nickname'] = value.nickname;
                                temp_obj['user_id'] = value.user_id;
                                temp_obj['user_image'] = (userData.imageFile) ? userData.imageFile : "";
                                temp_obj['group_details'] = dataList;
                                appendData.push(temp_obj)
                            } catch (e) {

                            }
                            countInc++;
                            if (count == countInc) {
                                apiResponse.data = appendData
                                apiResponse.error = 0;
                                apiResponse.status = 200;
                                apiResponse.message = "Group List Success";
                                callback(apiResponse)
                            }

                        })
                    })
                })
            } else {
                apiResponse.data = [];
                apiResponse.error = 1;
                apiResponse.status = 200;
                apiResponse.message = "Error";
                callback(apiResponse)
            }

        })
    });
}

function groupOrderSet(request, callback) {
    /*
     * Yogesh Work on byte array / binary
     */
    var group_id = request.group_id;
    Room.findOne({_id: group_id}, function (err, data) {
        callback(data.creator);
    });

}


/*
 *@description send chat data
 *
 */
exports.chatSend = function chatSend(request, callback) {
    var userid = request.user_id;
    var groupid = request.group_id;
    var message = request.message;
    getUserData(userid, function (userData) {
        saveChat(request, function (data) {
            getUserRoomData(userid, groupid, function (dataList) {
                try {
                    data = data.toObject();
                    data['user_image'] = dataList.user_image;
                    data['nickname'] = dataList.nickname;
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
//                    console.log(apiResponse);
                    callback(apiResponse);
                } catch (e) {
                    callback(apiResponse)
                }
            });
        })
    });

}

/*
 * Use : chatImageSend
 * Description : chatImageSend 
 */
exports.chatImageSend = function chatImageSend(request, callback) {
//    console.log("---------------------------yogesh-----------------");
    imageUpload(request, function (imagename) {
//        console.log(imagename);
        thumbnailCreate(request, function (thumbname) {
//            console.log("---------------------------yogesh thumb-----------------");
//            console.log(thumbname);
            request.message = imagename.url;
            request.mime_type = imagename.mime_type;
            request.thumbnail_key = thumbname;
//            console.log(request);
            var userid = request.user_id;
            var groupid = request.group_id;

            saveChatImage(request, function (data) {
                getUserRoomData(userid, groupid, function (dataList) {
                    try {
                        data = data.toObject();
                        data['user_image'] = dataList.user_image;
                        data['nickname'] = dataList.nickname;
                        apiResponse.data = data;
                        apiResponse.error = 0;
                        apiResponse.status = 200;
                        apiResponse.message = "Success";
//                    console.log(apiResponse)
                        callback(apiResponse)
                    } catch (e) {
                        callback(apiResponse)
                    }
                });
            });

        });
    });
};



/*
 * Use : chatImageSend
 * Description : chatImageSend 
 */
exports.chatImageSendBefore = function chatImageSendBefore(request, callback) {
    thumbnailCreate(request, function (thumbname) {
        var ext = request.image_name.substr(request.image_name.lastIndexOf('.') + 1);
        request.message = "";
        request.mime_type = ext;
        request.thumbnail_key = thumbname;
//    console.log(request);
        var userid = request.user_id;
        var groupid = request.group_id;

        saveChatBeforeImage(request, function (data) {
            getUserRoomData(userid, groupid, function (dataList) {
                try {
                    data = data.toObject();
                    data['user_image'] = dataList.user_image;
                    data['nickname'] = dataList.nickname;
                    data['check'] = request.check;
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
//                    console.log(apiResponse)
                    callback(apiResponse)
                } catch (e) {
                    callback(apiResponse)
                }
            });
        });
    });
};

/*
 *@description  get room user data
 */
function getUserRoomData(user_id, group_id, callback) {

//    console.log(group_id);
//    console.log(user_id);

    RoomUser.findOne({user_id: user_id, group_id: group_id, }, groupuserlist, function (err, data) {
        getUserData(user_id, function (dataArr) {

            data = data.toObject();
            data['user_image'] = dataArr.imageFile;
            callback(data);
        })



    })
}

/*
 * @description save chat data
 * 0 for text
 */
function saveChat(data, callback) {
    var userid = data.user_id;
    var groupid = data.group_id;
    var message = data.message;
    var message_type = 0;
    updateGroupChatMsg(groupid, message, message_type);

    Chat.find({}, function (err, dd) {
        var sno = dd.length + 1;
//        console.log(sno)
        var data = {sno: sno, user_id: userid, group_id: groupid, message: message, message_type: message_type}
        //increment unread message
        msgCountInc(data);
        var saveChat = new Chat(data);
        saveChat.save(function (err, data) {
//            console.log(data)
//            console.log(err)
            sendPushNotification(groupid, data.toObject())
            callback(data)
        })

    });





}



/*
 * @Description update last message in group
 * @param {type} group_id
 * @param {type} message
 * @param {type} message_type
 * @returns NUll
 */
function updateGroupChatMsg(group_id, message, message_type, mime_type, thumbnail_key) {
//    console.log("------------------------mime-----------------------")
//    console.log(mime_type);
    try {
        if (mime_type) {

        } else {
            mime_type = "";
        }
        if (thumbnail_key) {

        } else {
            thumbnail_key = "";
        }

//        console.log(mime_type);
//        console.log(thumbnail_key);
        Room.findOne({_id: group_id}, function (err, data) {
            data.message_type = message_type
            data.mime_type = mime_type
            data.thumbnail_key = thumbnail_key
            data.last_message = message
            data.msg_date = new Date();
            data.save();
        })
    } catch (e) {
        console.log(e)
    }
}



/*
 *
 *@Description Send Push notification
 *@author <ayadav@clavax.us>
 */
function sendPushNotification(groupid, message1) {


    RoomUser.find({group_id: groupid, is_deleted: 0}, groupuserlist, function (err, data) {
        if (data.length) {
//            console.log("---------------send Push Notification-------------------------")

//            console.log("----------------------------------------")
            data.forEach(function (dataVal) {
                User.findOne({_id: dataVal.user_id}, function (errUser, dataUser) {
                    if (!errUser) {
                        dataUser = dataUser.toObject();
//                        console.log("---------------User data list-------------------------")
//                        console.log(dataUser);
                        if (dataUser.enabledNotification) {
                            DeviceToken.findOne({user_id: dataVal.user_id}, function (err, dataDev) {
                                try {

                                    //    delete message1.message_type;
                                    var deviceId = dataDev.device_token;
//                                    message1.user_image = dataUser.imageFile;
//                                    message1.nickname = dataVal.nickname;
//                                    var message = {
//                                        to: deviceId,
//                                        collapse_key: '',
//                                        data: message1,
//                                        notification: message1
//                                    };



                                    var message = {
                                        to: deviceId,
                                        collapse_key: '',
                                        data: {
                                            created_at: '"' + message1.created_at + '"',
                                            sno: message1.sno,
                                            user_id: message1.user_id,
                                            group_id: message1.group_id.toString(),
                                            message: '"' + message1.message + '"',
                                            mime_type: '"' + message1.mime_type + '"',
                                            thumbnail_key: '"' + message1.thumbnail_key + '"',
                                            message_type_id: message1.message_type,
                                            //_id: message1._id,
                                            //user_image: '"' + dataUser.imageFile + '"',
                                            //nickname: '"' + dataVal.nickname + '"',
                                            unread_msg: dataVal.unread_msg

                                        },
                                        notification: {
                                            created_at: '"' + message1.created_at + '"',
                                            sno: message1.sno,
                                            user_id: message1.user_id,
                                            group_id: message1.group_id.toString(),
                                            message: message1.message,
                                            mime_type: '"' + message1.mime_type + '"',
                                            thumbnail_key: '"' + message1.thumbnail_key + '"',
                                            message_type_id: message1.message_type,
                                            // _id: message1._id,
                                            // user_image: '"' + dataUser.imageFile + '"',
                                            //  nickname: '"' + dataVal.nickname + '"',
                                            unread_msg: dataVal.unread_msg
                                        },
                                    };
//                                    console.log(message);
//                                    console.log("---------------Push notific end msg -------------------------")

                                    var notific = notification.Notification(message)
                                } catch (e) {
                                    console.log(e)
                                }
                            });
                        }
                    }
                });
            });

        }

    })


}




/*
 * @description save chat data
 */
function saveChatImageUpdate(data, callback) {
    var userid = data.user_id;
    var groupid = data.group_id;
    var message = data.message;
    var message_type = 1;
    var mime_type = data.mime_type;
    var thumbnail_key = data.thumbnail_key;


    Chat.findOne({_id: data.id}, function (err2, data2) {
        data2.message = message;
        data2.message_type = message_type;
        data2.mime_type = mime_type;
        data2.thumbnail_key = thumbnail_key;
        data2.save(function (err, data) {
//            console.log(data)
//            console.log(err)
            updateGroupChatMsg(groupid, message, message_type, mime_type, thumbnail_key);
            sendPushNotification(groupid, data.toObject())
            callback(data2)
        })


    });
}


/*
 * @description save chat data
 */
function saveChatBeforeImage(data, callback) {
    var userid = data.user_id;
    var groupid = data.group_id;
    var message = data.message;
    var message_type = 1;
    var mime_type = data.mime_type;
    var thumbnail_key = data.thumbnail_key;

    Chat.find({}, function (err, dd) {
        var sno = dd.length + 1;
//        console.log(sno)
        var data = {sno: sno, user_id: userid, group_id: groupid, message: message, message_type: message_type, mime_type: mime_type, thumbnail_key: thumbnail_key, is_deleted: 1}
        //increment unread message
        var saveChat = new Chat(data);
        saveChat.save(function (err, data) {
            callback(data)
        })

    });
}


/*
 * @description save chat data
 */
function saveChatImage(data, callback) {
    var userid = data.user_id;
    var groupid = data.group_id;
    var message = data.message;
    var message_type = 1;
    var mime_type = data.mime_type;
    var thumbnail_key = data.thumbnail_key;
    updateGroupChatMsg(groupid, message, message_type, mime_type, thumbnail_key);

    Chat.find({}, function (err, dd) {
        var sno = dd.length + 1;
//        console.log(sno)
        var data = {sno: sno, user_id: userid, group_id: groupid, message: message, message_type: message_type, mime_type: mime_type, thumbnail_key: thumbnail_key}
        //increment unread message
        msgCountInc(data);
        var saveChat = new Chat(data);
        saveChat.save(function (err, data) {
//            console.log(data)
//            console.log(err)
            sendPushNotification(groupid, data.toObject())
            callback(data)
        })

    });
}

/*
 *@Description Get room user list data single
 */

function getRoomList(roomid, callback) {
    Room.findOne({is_deleted: 0, _id: roomid}, function (err, data) {
        callback(data)
    })
}

/*
 *@Descripiton Add days functionality in current days
 */

function addDays(theDate, days) {
    return new Date(theDate.getTime() + days * 24 * 60 * 60 * 1000);
}

/*
 * Use : Genrate code
 * Description : generate code for group user
 */
function genCode(callback) {
//    console.log("=====genCode()=========")
    var Randdom = Math.floor(Math.random() * 89999 + 10000);
    try {
        //check code exist or not
        Room.find({code: Randdom}, function (err, data) {
            //disable for right now will enable when it required
            if (0) {
                genCode()
            } else {
                callback(Randdom);
            }
        });
    } catch (e) {
        console.log(e)
    }

}

//get user data
function getUserData(userid, callback) {
//    console.log("==========enter user get data getUserData function=========")
    var data = "";
    User.findOne({_id: userid}, userget, function (err, users) {
        data = users;
//        console.log('getuserdata')
//        console.log(users)
        callback(data);
    });


}


/*
 *@Descripiton Image upload with base 64
 */

function imageUpload(request, callback) {
    //image upload with binary data
    /*fs.writeFile(request.image, request.image,  "binary", function(err,data){
     console.log(data)
     console.log("hello this is the test message")
     console.log(err)
    
     });*/
    //image upload with base64 data
    /*var ext = request.image_name.substr(request.image_name.lastIndexOf('.') + 1);
     var b64string = request.image;
     if (typeof Buffer.from === "function") {
     // Node 5.10+
     buf = Buffer.from(b64string, 'base64');
     } else {
     // older Node versions
     buf = new Buffer(b64string, 'base64');
     }
    
     var filename = 'img-' + Date.now() + '.' + ext;
     var uploadedImagePath = config.uploadImage + filename;
     try
     {
     fs.writeFile(uploadedImagePath, buf, function (e) {
     callback(imageName = config.showImagePath + filename)
    
     });
     } catch (e) {
     callback(imageName = "")
     }
     */
    /*
     * Yogesh Work on byte array / binary
     */

//    console.log("-------------------------------imageUpload------------------------------------------------------");
//    console.log(request);
//    console.log("-------------------------------end imageUpload------------------------------------------------------");
    var ext = request.image_name.substr(request.image_name.lastIndexOf('.') + 1);
//
//    var filename = 'media-' + Date.now() + '.' + ext;
    var uploadedImagePath = config.uploadImage + request.image_name;
//    var uploadedImagePath = config.uploadImage + filename;
//    console.log(uploadedImagePath);
    try {
        console.log("fgf99999000000000000000000000000000000000000000")
        fs.writeFile(uploadedImagePath, request.image, "binary");
    } catch (e) {
//        console.log("file errror");
//        console.log(e.message);
        callback({"url": "", "mime_type": ""});
    }
}

/*
 *@Descripiton Image upload with base 64
 */

function imageUploadGroup(request, callback) {
    //image upload with binary data
    /*fs.writeFile(request.image, request.image,  "binary", function(err,data){
     console.log(data)
     console.log("hello this is the test message")
     console.log(err)
    
     });*/
    //image upload with base64 data
    var ext = request.image_name.substr(request.image_name.lastIndexOf('.') + 1);
    var b64string = request.image;
    if (typeof Buffer.from === "function") {
        // Node 5.10+
        buf = Buffer.from(b64string, 'base64');
    } else {
        // older Node versions
        buf = new Buffer(b64string, 'base64');
    }

    var filename = 'img-' + Date.now() + '.' + ext;
    var uploadedImagePath = config.uploadImage + filename;
    try
    {
        fs.writeFile(uploadedImagePath, buf, function (e) {
            callback(imageName = config.showImagePath + filename)

        });
    } catch (e) {
        callback(imageName = "")
    }
}




exports.pushtest = function pushtest(request, callback) {
    try {
        var deviceId = 'cDVJ-dc0nxU:APA91bGxXbdm9wPOQvv2mmBkd8xQ5y-TcQRe_UabUu8dFS8MEfhrdOAQ7kPqcL3gBXEKA6yLjzLk35T2Q6SYVR9VT21LZ_RqP3HBnwoNp5Onr0G_jHER2m9uf8SMLKEd9_64mrwPSjcZ';

        var message = {
            to: deviceId,
            collapse_key: 'your_collapse_key',

            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)
                my_key: 'my value',
                my_another_key: 'my another value'
            }
        };
        var notific = notification.Notification(message)

        callback('testy')
    } catch (e) {
        console.log(e)
    }
}




function thumbnailCreate(request, callback) {
    /*
     * Yogesh Work on byte array / binary
     */

    if (!request.thumb_name) {
        callback(thumbName = "")
    } else if (!request.thumb_name.trim()) {
        callback(thumbName = "")
    } else {
        var uploadedImagePath = config.uploadImage + request.thumb_name;
        try {
            fs.writeFile(uploadedImagePath, request.thumb_image, "binary", function (err, data) {
//                console.log(data);
//                console.log("hello this is the Thumbnail create");
//                console.log(err);

                callback(thumbName = config.showImagePath + request.thumb_name)

            });
        } catch (e) {
            callback(thumbName = "")
        }
    }
}


/*
 * Use : chatImageSend
 * Description : chatImageSend 
 */
exports.multiplartFile = function multiplartFile(request, callback) {
//    console.log(request);
    var ext = request.image_name.substr(request.image_name.lastIndexOf('.') + 1);
//    var filename = 'img-' + Date.now() + '.' + ext;
    var uploadedImagePath = config.uploadImage + request.image_name;
//    console.log(uploadedImagePath);
//    imageUpload(request, function (imagename) {
    fs.writeFile(uploadedImagePath, request.image, "binary", function (err, data) {
//            console.log(data);
//            console.log("hello this is the test message");
//            console.log(err);
//        callback(uploadedImagePath);
        callback(imageName = config.showImagePath + request.image_name)

    });
//    });
};




/*
 *@description send chat data
 *
 */
exports.chatSendGlobles = function chatSendGlobles(request, callback) {

    var chat_id = request.chat_id;

    Chat.findOne({_id: chat_id}, function (err, data) {
        if (!err) {

            getUserRoomData(data.user_id, data.group_id, function (dataList) {
                try {
                    data = data.toObject();
                    data['user_image'] = dataList.user_image;
                    data['nickname'] = dataList.nickname;
                    apiResponse.data = data;
                    apiResponse.error = 0;
                    apiResponse.status = 200;
                    apiResponse.message = "Success";
                    sendPushNotification(data.group_id, data)
                    callback(apiResponse);
                } catch (e) {
                    apiResponse.data = [];
                    apiResponse.error = 1;
                    apiResponse.status = 200;
                    apiResponse.message = "Error";
                    callback(apiResponse);
                }
            })
        } else {
            apiResponse.data = [];
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.message = "Error";
            callback(apiResponse);
        }


    })

}



/*
 *@description send chat data
 *
 */
exports.chatSendImageData = function chatSendImageData(request, callback) {
//    console.log("chatSendImageData");
//    console.log(request);
    Chat.findOne({_id: request.chatid}, function (err, data) {
//        console.log("=====remove chat user====")
        if (data) {
            //set delete and disable status
            data.is_deleted = 0;
//            data.mime_type = request.extension;
            data.message = config.showImagePath + "" + request.message;
            data.save(function (err1, data) {

                getUserRoomData(data.user_id, data.group_id, function (dataList) {
                    try {
                        data = data.toObject();
                        data['user_image'] = dataList.user_image;
                        data['nickname'] = dataList.nickname;
                        apiResponse.data = data;
                        apiResponse.error = 0;
                        apiResponse.status = 200;
                        apiResponse.message = "Success";
//                    console.log(apiResponse);
                        callback(apiResponse);
                    } catch (e) {
                        callback(apiResponse)
                    }
                });
            });
        } else {
            apiResponse.error = 1;
            apiResponse.status = 200;
            apiResponse.data = [];
            apiResponse.message = "chat not found";
            callback(apiResponse)
        }
    });


}


/**schema**********/
/*
 * Use : Set Model Schema
 * @author Anil Yadav<ayadav@clavax.us>
 * @create-date 03-10-2017 06:42pm
 */

var dbSchema = {
    users: {
        '_id': 1,
        'email': 1,
        'username': 1,
        'firstName': 1,
        'lastName': 1,
        'imageFile': 1,
        'nickname':1,
    },
    groupuserlist: {
        '_id': 1,
        'user_id':1,
        'group_id':1,
        'nickname':1,
        'unread_msg':1,
    },
    grouplist: {
        '_id': 1,
        'room_description':1,
        'group_image':1,
         'is_deleted':1,
        'title':1,
        'last_message':1,
        'message_type':1,
        'code_type':1,
        'code':1,
        'created_at': 1,
        'updated_at': 1,
        'creator':1,
        //'gsno':1,
    },
    groupdetails: {
        '_id': 1,
        'room_description':1,
        'group_image':1,
         'is_deleted':1,
         'valid':1,
        'title':1,
        'last_message':1,
        'mime_type':1,
        'thumbnail_key':1,
        'message_type':1,
        'code_type':1,
        'code':1,
        'code_date':1,
        'msg_date':1,
        'created_at': 1,
        'updated_at': 1,
        'creator':1,
        //'gsno':1,
    },
    chatlist: {
        '_id': 1,
        'user_id':1,
        'group_id':1,
        'message_type':1,
        'mime_type':1,
        'message':1,      
        'created_at': 1,
        'updated_at': 1,
        'sno':1,
    },
    apiResponse: {
        'error': 1,
        'message': 'Internal server error',
        'data': [],
        'status': 500
    }

    ,
};
module.exports = dbSchema;
/*************************************************************
/*
 * Use : Set Chat Schema
 * @author Anil Yadav<ayadav@clavax.us>
 * @create-date 03-10-2017 06:42pm
 */
// grab the things we need
var db = require('./db')
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// create a schema
var chatSchema = new Schema({
   
    message: String,
   
    user_id: {type: String, required: true},
    group_id: {type: String, required: true},
    message_type: String,
    mime_type : String,
    thumbnail_key : String,
    is_deleted: Number,
    is_disable: Number,
    sno: Number,
    created_at: Date,
    updated_at: Date,
     __v: { type: Number, select: false}
});


//for save date time
chatSchema.pre('save', function (next) {
    now = new Date();
    this.updated_at = now;
    if (!this.created_at) {
        this.created_at = now;
    }

    if (!this.message) {
        this.message = "";
    }

    if (!this.message_type) {
        this.message_type = "1";
    }
     if (!this.mime_type) {
        this.mime_type = "";
    }
     if (!this.thumbnail_key) {
        this.thumbnail_key = "";
    }
    if (!this.is_deleted) {
        this.is_deleted = "0";
    }
    if (!this.is_disable) {
        this.is_disable = "0";
    }

    next();
  
   
});

// the schema is useless so far
// we need to create a model using it
var Chat = mongoose.model('Chat', chatSchema);

// make this available to our Chat in our Node applications
module.exports = Chat;

/*******db config****************/
/*
 * Use : Connect to database
 * @author Anil Yadav<ayadav@clavax.us>
 * @create-date 03-10-2017 06:42pm
 */
var databaseUri = process.env.DATABASE_URI || 'mongodb://localhost:27017/sdsds';
var mongodb = require('mongodb');
var mongoose=require('mongoose');
mongoose.Promise = require('bluebird');
var db = mongoose.connect(databaseUri,{useMongoClient: true },function(error){
    if(error){
        console.log("error"+error);
    }else{
        console.log("open done")
    }
});
module.exports = db;
/**********route*************/
/*
 * @author Anil Yadav<ayadav@clavax.us>
 * @Description Create  route front
 * @create-date 28-09-2017 12:12pm
 */
var express = require('express');
var frontCtrl = require('./controller/frontController');

var router = express.Router();

var roomss = require('./models/Models');
var config = require('./include/config');

router.route('/addgroup').get(frontCtrl.createGroup);
router.route('/checkcode').get(frontCtrl.checkCode);
router.route('/updatecode').get(frontCtrl.updateCode);
router.route('/getlist').get(frontCtrl.getList);
router.route('/getgroupuser').get(frontCtrl.getGroupUser)
router.route('/chat').get(frontCtrl.groupChat);
router.route('/chat1').get(frontCtrl.groupChat1);
router.route('/chat2').get(frontCtrl.groupChat2);

router.route('/chatstart').get(frontCtrl.startChat);
router.route('/updategroup').get(frontCtrl.updateGroup);

router.route('/demo').get(frontCtrl.demoChat);

router.route('/yogesh').get(frontCtrl.yogesh);
router.route('/multipart').get(frontCtrl.filemultipart);
router.route('/multer_upload').get(frontCtrl.multer_upload);
//group chat routes


var multer = require('multer');
//var upload = multer({dest: '/tmp/'});
var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null,  config.uploadImageMultipart )
    },
    filename: function (req, file, cb) {
//         var extension = originalname.split(".");
//    filename = Date.now() + '.' + extension[extension.length-1];
        cb(null, file.originalname)
//        cb(null, Date.now() + '-' + file.originalname)
    }
})
//var upload = multer({storage: storage}).any();
var upload = multer({storage: storage}).single('profileimage');
/* POST saveblog router. */
router.post('/save_file', function (req, res, next) {
    upload(req, res, function (err) {
        var chatid = req.body.chat_id;
//        console.log(req.body, 'Body');
//        console.log(req.file, 'files');
//        console.log(req.file.filename);
        if (err) {
            console.log("errr" + err);
            res.send({error: 1, status: 200, data: []});
        } else {
            console.log("Success");
            console.log(chatid);

            if (req.file) {
                console.log('uploading File...')
                console.log(req.file.path)
                console.log(req.file)


                // File Info
//                var profileImageOriginalName = req.file.originalname;
                var profileImageName = req.file.filename;
//                var profileImageMime = req.file.mimetype;
//                var profileImagePath = req.file.path;
//                var profileImageExt = req.file.extension;
//                var profileImageSize = req.file.size;

                var extension = profileImageName.split(".");
                extension = extension[extension.length - 1];
                request = {};
                request.message = profileImageName;
//                request.extension = extension;
                request.is_deleted = 0;
                request.chatid = chatid;

                roomss.chatSendImageData(request, function (req) {
                    console.log("response -------------------------- chatSendImageData");
                    console.log(req);
                    res.send(req);
                });
                console.log(profileImageName);
            } else {
                res.send({error: 1, status: 200, data: []});
            }


        }
    });

});

router.route('/').get(frontCtrl.startServer);

module.exports = router;