public async Task AddAsync(SmsProvider provider, string countryCode, SmsDeliveryStatus status)
        {
            var entity = await _tableStorage.GetDataAsync(SmsProviderInfoEntity.GeneratePartitionKey(provider),
                                                          SmsProviderInfoEntity.GenerateRowKey(countryCode));

            if (entity == null)
            {
                entity = SmsProviderInfoEntity.Create(provider, countryCode, status);
                await _tableStorage.TryInsertAsync(entity);
            }
            else
            {
                await _tableStorage.MergeAsync(SmsProviderInfoEntity.GeneratePartitionKey(provider), SmsProviderInfoEntity.GenerateRowKey(countryCode),
                                               infoEntity =>
                {
                    switch (status)
                    {
                    case SmsDeliveryStatus.Delivered:
                        infoEntity.DeliveredCount++;
                        break;

                    case SmsDeliveryStatus.Failed:
                        infoEntity.DeliveryFailedCount++;
                        break;

                    case SmsDeliveryStatus.Unknown:
                        infoEntity.UnknownCount++;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(status), status, null);
                    }

                    return(infoEntity);
                });
            }
        }
 public async Task <IEnumerable <ISmsProviderInfo> > GetAllByProviderAsync(SmsProvider provider)
 {
     return(await _tableStorage.GetDataAsync(SmsProviderInfoEntity.GeneratePartitionKey(provider)));
 }