public async Task <Result <UserLogin> > Login(Request <UserLogin> request)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(request.Model.Username))
                {
                    return(new Result <UserLogin>("Username is required"));
                }
                if (string.IsNullOrWhiteSpace(request.Model.Password))
                {
                    return(new Result <UserLogin>("Password is required"));
                }

                var searchUserLoginRes = new UserLoginDataRepository().Search(new SearchRequest <UserLoginData>()
                {
                    Filter = f => f.Username == request.Model.Username && f.Password == request.Model.Password
                });

                if (searchUserLoginRes.SearchTotal <= 0)
                {
                    return(new Result <UserLogin>("Invalid Credentials"));
                }

                if (searchUserLoginRes.Items.FirstOrDefault().Attempt > 3)
                {
                    return(new Result <UserLogin>("Account is locked"));
                }

                var data = searchUserLoginRes.Items.FirstOrDefault();

                data.AuthCode = "at_" + RandomString().ToLower();

                data.LastSuccessfulLogin = DateTime.Now;


                var updateUserLoginRes = new UserLoginDataRepository().Update(data);

                var searchUserInfo = new UserInfoDataRepository().GetById(data.UserInfoId);

                UserLogin result = new UserLogin();
                result          = Mapper.Map <UserLogin>(data);
                result.UserInfo = Mapper.Map <UserInfo>(searchUserInfo);

                return(new Result <UserLogin>()
                {
                    Successful = true, Message = "Successfully Logged In", Model = result
                });
            }
            catch (Exception e)
            {
                return(new Result <UserLogin>(e.Message)
                {
                    ResultCode = ErrorCodes.Exception_Error
                });
            }
        }
        public async Task <Result <UserLogin> > CreateUser(Request <UserInfo> request)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(request.Model.FirstName))
                {
                    return new Result <UserLogin>("First Name is required")
                           {
                               ResultCode = ErrorCodes.Field_value_Is_Required_Error
                           }
                }
                ;

                if (string.IsNullOrWhiteSpace(request.Model.LastName))
                {
                    return new Result <UserLogin>("Last Name is required")
                           {
                               ResultCode = ErrorCodes.Field_value_Is_Required_Error
                           }
                }
                ;

                if (string.IsNullOrWhiteSpace(request.Model.Email))
                {
                    return new Result <UserLogin>("Email is required")
                           {
                               ResultCode = ErrorCodes.Field_value_Is_Required_Error
                           }
                }
                ;

                var searchUser = new UserInfoDataRepository().Search(new SearchRequest <UserInfoData>()
                {
                    Filter = f => (f.FirstName == request.Model.FirstName && f.LastName == request.Model.LastName) || f.Email == request.Model.Email
                });

                if (searchUser.SearchTotal > 0)
                {
                    return(new Result <UserLogin>("User is already have a record"));
                }

                request.Model.DateCreated = DateTime.Now;

                var data = Mapper.Map <UserInfoData>(request.Model);

                var createRes = new UserInfoDataRepository().Insert(data);

                if (!createRes)
                {
                    return(new Result <UserLogin>("User can not be inserted."));
                }

                var searchuserdata = new UserInfoDataRepository().Search(new SearchRequest <UserInfoData>());

                var userdata = searchuserdata.Items.OrderByDescending(x => x.Id).FirstOrDefault();

                var userlogin = new UserLoginData()
                {
                    UserInfoId = userdata.Id,
                    Username   = request.Model.Email,
                    Password   = request.Model.FirstName
                };

                var createUserLoginRes = new UserLoginDataRepository().Insert(Mapper.Map <UserLoginData>(userlogin));

                if (!createUserLoginRes)
                {
                    return(new Result <UserLogin>("Unable to create user login"));
                }

                return(new Result <UserLogin> {
                    Successful = true, Message = "Successfully created user"
                });
            }
            catch (Exception e)
            {
                return(new Result <UserLogin>(e.Message)
                {
                    Successful = false, ResultCode = ErrorCodes.Exception_Error
                });
            }
        }