public RequestConfirmPhoneNumberRespond RequestConfirmPhoneNumber(string userId, string phoneNo)
 {
     var request = new RequestConfirmPhoneNumberRequest
     {
         PhoneNo = phoneNo,
         UserId = userId
     };
     var result = FacadeRepository.Instance.AccountFacade.RequestConfirmPhoneNumber(request);
     return result;
 }
 public void RequestConfirmPhoneNumber(RequestConfirmPhoneNumberRequest request, string verificationCode)
 {
     using (var dctx = new DailySoccer.DAC.EF.DailySoccerModelContainer())
     {
         var newData = new PhoneVerification
         {
             PhoneNumber = request.PhoneNo,
             UserId = request.UserId,
             VerificationCode = verificationCode
         };
         dctx.PhoneVerifications.Add(newData);
         dctx.SaveChanges();
     }
 }
        public RequestConfirmPhoneNumberRespond RequestConfirmPhoneNumber(RequestConfirmPhoneNumberRequest request)
        {
            var invalidDataModel = new RequestConfirmPhoneNumberRespond { IsSuccessed = false };
            var isArgumentValid = request != null
                && !string.IsNullOrEmpty(request.UserId)
                && !string.IsNullOrEmpty(request.PhoneNo);
            if (!isArgumentValid) return invalidDataModel;

            request.PhoneNo = request.PhoneNo.Replace("-", string.Empty);
            if (request.PhoneNo.StartsWith("0", StringComparison.CurrentCultureIgnoreCase))
            {
                request.PhoneNo = string.Format("+66{0}", request.PhoneNo.Substring(1, request.PhoneNo.Length-1));
            }
            const int MinimumPhoneNumberRequired = 6;
            const int MaximumPhoneNumberRequired = 20;
            var isPhoneNumberValid = request.PhoneNo.Length >= MinimumPhoneNumberRequired && request.PhoneNo.Length <= MaximumPhoneNumberRequired;
            if (!isPhoneNumberValid) return invalidDataModel;

            var accountDac = FacadeRepository.Instance.AccountDataAccess;
            var selectedAccount = accountDac.GetAccountBySecrectCode(request.UserId);
            var isAccountValid = selectedAccount != null && string.IsNullOrEmpty(selectedAccount.VerifiedPhoneNumber);
            if (!isAccountValid) return invalidDataModel;

            const int RequiredVerificationDigits = 10;
            var verificationCode = Guid.NewGuid().ToString().Replace("-", string.Empty).Substring(0, RequiredVerificationDigits).ToUpper();
            accountDac.RequestConfirmPhoneNumber(request, verificationCode);
            FacadeRepository.Instance.PhoneVerificationFacade.SendMessage(request.PhoneNo, verificationCode);

            return new RequestConfirmPhoneNumberRespond
            {
                IsSuccessed = true,
                ForPhoneNumber = request.PhoneNo,
                VerificationCode = verificationCode
            };
        }