public GetAddressResponse GetAddress(GetAddressRequest request)
        {
            GetAddressResponse response = new GetAddressResponse();
            Consumer           consumer = null;

            try
            {
                using (UserDao dao = new UserDao())
                {
                    consumer = GetAuthUser(dao, request.user_id, request.auth_token, true);
                    if (consumer == null)
                    {
                        MakeNouserResponse(response);
                        return(response);
                    }
                    ConsumerAddress  consAddr = consumer.ConsumerAddresses.Where(a => a.AddrID == request.address_id).First();
                    UserAddressesDto addrDto  = new UserAddressesDto();
                    UsersHelper.CopyFromEntity(addrDto, consAddr, consumer.Name);
                    response.user_address = addrDto;
                    response.has_resource = 1;
                    response.code         = 0;
                    response.message      = MessagesSource.GetMessage("addr.details");
                    return(response);
                }
            }
            catch (Exception ex)
            {
                response.MakeExceptionResponse(ex);
            }
            return(response);
        }
        public GetAddressesResponse GetAddresses(GetAddressesRequest request)
        {
            GetAddressesResponse response = new GetAddressesResponse();
            Consumer             consumer = null;

            try
            {
                using (UserDao dao = new UserDao())
                {
                    consumer = GetAuthUser(dao, request.user_id, request.auth_token, true);
                    if (consumer == null)
                    {
                        MakeNouserResponse(response);
                        return(response);
                    }
                    if (consumer.ConsumerAddresses.Count <= 0 && consumer.ConsumerAddresses.Where(x => x.StatusID == 1).Count() <= 0)
                    {
                        MakeNoAddressResponse(response);
                        return(response);
                    }
                    UsersHelper.CopyFromEntity(response, consumer);
                    response.has_resource = 1;
                    response.code         = 0;
                    response.message      = MessagesSource.GetMessage("address.details.found");
                    return(response);
                }
            }
            catch (Exception ex)
            {
                response.MakeExceptionResponse(ex);
            }
            return(response);
        }
        public GetUserDetailsResponse GetUserDetails(GetUserDetailsRequest request)
        {
            GetUserDetailsResponse response = new GetUserDetailsResponse();
            Consumer consumer = null;

            try
            {
                using (UserDao dao = new UserDao())
                {
                    consumer = GetAuthUser(dao, request.user_id, request.auth_token, true);
                    if (consumer == null)
                    {
                        MakeNouserResponse(response);
                        return(response);
                    }
                    UsersHelper.CopyFromEntity(response, consumer);
                    response.has_resource = 1;
                    response.code         = 0;
                    response.message      = MessagesSource.GetMessage("user.details");
                    return(response);
                }
            }
            catch (Exception ex)
            {
                response.MakeExceptionResponse(ex);
                return(response);
            }
        }
        //public ResendOtpResponse ResendOtp(ResendOtpRequest request)
        //{
        //    ResendOtpResponse response = new ResendOtpResponse();
        //    response.otp_details = new OtpDetailsDto();
        //    Consumer consumer = null;
        //    try
        //    {
        //        using (UserDao userDao = new UserDao())
        //        {
        //            consumer = GetAuthUser(userDao, request.user_id, request.auth_token);
        //        }
        //        if (consumer == null)
        //        {
        //            MakeNouserResponse(response);
        //            return response;
        //        }
        //        OTPServices.ResendOTP(request.user_id, consumer.PhoneNumber, "C");
        //        response.code = 0;
        //        response.has_resource = 1;
        //        response.message = MessagesSource.GetMessage("otp.resent");
        //        response.otp_details.send_otp = 1;
        //        return response;
        //    }
        //    catch (Exception ex)
        //    {
        //        response.MakeExceptionResponse(ex);
        //        return response;
        //    }
        //}

        public UserExistsResponse CheckUserExists(UserExistsRequest request)
        {
            request.mobile_number = Common.GetStandardMobileNumber(request.mobile_number);
            UserExistsResponse response = new UserExistsResponse();
            Consumer           consumer = null;

            try
            {
                using (UserDao dao = new UserDao())
                {
                    consumer = dao.FindByMobileNumber(request.mobile_number);
                }
                if (consumer == null)
                {
                    MakeNouserResponse(response);
                    return(response);
                }
                UsersHelper.CopyFromEntity(response, consumer);
                response.code         = 0;
                response.has_resource = 1;
                response.message      = MessagesSource.GetMessage("user.found");
                return(response);
            }
            catch (Exception ex)
            {
                response.MakeExceptionResponse(ex);
                return(response);
            }
        }
        public LoginResponse Login(LoginRequest request)
        {
            request.mobile_number = Common.GetStandardMobileNumber(request.mobile_number);
            LoginResponse response     = new LoginResponse();
            Consumer      consumer     = null;
            string        hashPassword = TokenGenerator.GetHashedPassword(request.user_password, 49);

            try
            {
                using (UserDao dao = new UserDao())
                {
                    consumer = dao.FindByMobileNumber(request.mobile_number);
                    if (consumer == null)
                    {
                        MakeNouserResponse(response);
                        return(response);
                    }
                    if (hashPassword == consumer.Password)
                    {
                        response.code         = 1;
                        response.has_resource = 0;
                        if (consumer.ConsBlocked)
                        {
                            response.message = MessagesSource.GetMessage("user.blocked");
                            return(response);
                        }
                        if (!consumer.ConsActivated)
                        {
                            response.message = MessagesSource.GetMessage("user.not.active");
                            return(response);
                        }

                        consumer.AppID     = request.app_id;
                        consumer.AppToken  = request.push_token;
                        consumer.LastLogin = DateTime.Now;
                        consumer.AccToken  = TokenGenerator.GenerateToken(consumer.Name, consumer.Password, consumer.PhoneNumber);
                        dao.Update(consumer);
                        response.code = 0;
                        UsersHelper.CopyFromEntity(response, consumer);
                        response.has_resource = 1;
                        if (response.user_login.allow_login == 1)
                        {
                            response.code    = 0;
                            response.message = MessagesSource.GetMessage("login.ok");
                            return(response);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                response.MakeExceptionResponse(ex);
            }
            return(response);
        }
        /// <summary>
        /// Register a new consumer.
        /// </summary>
        /// <param name="request">The DTO with requst form data parameters.</param>
        /// <returns>The response DTO with result of the operation.</returns>
        public RegisterResponse Register(RegisterRequest request)
        {
            request.mobile_number = Common.GetStandardMobileNumber(request.mobile_number);
            RegisterResponse responseDto = new RegisterResponse();
            Consumer         consumer    = new Consumer();

            //Get posted parameter values into the entity from the DTO
            UsersHelper.CopyToEntity(consumer, request);
            consumer.Password = TokenGenerator.GetHashedPassword(request.user_password, 49);//To fit into the password field of database table

            //Generate unique auth /access token for the user.
            consumer.AccToken      = TokenGenerator.GenerateToken(request.user_name, request.user_password, request.mobile_number);
            consumer.CreatedDate   = DateTime.Now;
            consumer.UpdatedDate   = consumer.CreatedDate;
            consumer.StatusID      = 1;
            consumer.ConsActivated = true;
            try
            {
                using (UserDao dao = new UserDao())
                {
                    // Check if the mobile number is registered
                    if (dao.CheckPhoneExists(request.mobile_number))
                    {
                        responseDto.code         = 1;
                        responseDto.has_resource = 0;
                        responseDto.message      = MessagesSource.GetMessage("cons.reg.dupl");
                    }
                    else
                    {
                        consumer = dao.Insert(consumer);                   // save the entity.
                        UsersHelper.CopyFromEntity(responseDto, consumer); //Copy to the response DTO
                        string otp = OTPServices.GenerateAndSendOTP(request.mobile_number);
                        if (OTPServices.SaveOTP(otp, consumer.ConsID, "C"))
                        {
                            responseDto.new_user.send_otp = 1; // state that OTP has been sent.
                        }
                        responseDto.code         = 0;          // Result OK.
                        responseDto.has_resource = 1;
                        responseDto.message      = MessagesSource.GetMessage("cons.reg.ok");
                    }
                }
            }
            catch (Exception ex)
            {
                responseDto.MakeExceptionResponse(ex);
            }
            return(responseDto);
        }