public AuthenticateResponse Authenticate(AuthenticateRequest model)
        {
            DateTime currentDate = DateTime.UtcNow.AddHours(8);
            var      token       = "";

            model.Password = EncryptAndDecrypt.ConvertToEncrypt(model.Password);

            _oUser = new Users()
            {
                Username      = model.Username,
                Password      = model.Password,
                LastLoginDate = currentDate
            };

            try
            {
                int operationType = Convert.ToInt32(OperationType.Login);

                using (IDbConnection con = new SqlConnection(AppSettings.ConnectionStrings))
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }

                    var oUsers = con.Query <Users>("sp_Users",
                                                   _oUser.SetParameters(_oUser, operationType),
                                                   commandType: CommandType.StoredProcedure).ToList();

                    if (oUsers != null && oUsers.Count() > 0)
                    {
                        _oUser = oUsers.SingleOrDefault(x => x.Username == model.Username && x.Password == model.Password);


                        // authentication successful so generate jwt token
                        token = GenerateJWTToken(_oUser);
                    }
                }

                // return null if user not found
                if (_oUser == null)
                {
                    return(null);
                }
                ;
            }
            catch (Exception)
            {
                throw;
            }

            return(new AuthenticateResponse(_oUser, token));
        }
        public Users AddUser(Users users)
        {
            _oUser = new Users();
            DateTime aDate     = DateTime.Now;
            var      birthDate = users.BirthDate;

            users.Password    = EncryptAndDecrypt.ConvertToEncrypt(users.Password);
            users.DateCreated = aDate;

            try
            {
                int operationType = Convert.ToInt32(users.UserId == 0 ? OperationType.Insert : OperationType.Update);

                using (IDbConnection con = new SqlConnection(AppSettings.ConnectionStrings))
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }

                    var oUsers = con.Query <Users>("sp_Users",
                                                   _oUser.SetParameters(users, operationType),
                                                   commandType: CommandType.StoredProcedure);

                    if (oUsers != null && oUsers.Count() > 0)
                    {
                        _oUser = oUsers.FirstOrDefault();
                    }
                }
            }
            catch (Exception ex)
            {
                _oUser.Message = ex.Message;
            }

            return(_oUser);
        }