Ejemplo n.º 1
0
        public IActionResult GetContactsByTag(string tag)
        {
            var listOfContacts = _contactListRepository.GetContactsByTag(tag);

            if (listOfContacts == null)
            {
                return(NoContent());
            }

            var result    = new List <ContactDto>();
            var tagDto    = new TagDto();
            var numberDto = new NumberDto();
            var emailDto  = new EmailDto();

            foreach (var contact in listOfContacts)
            {
                result.Add(
                    new ContactDto
                {
                    Id         = contact.Id,
                    FirstName  = contact.FirstName,
                    LastName   = contact.LastName,
                    Address    = contact.Address,
                    Bookmarked = contact.Bookmarked,
                    Emails     = emailDto.ListToDtos(contact.Emails),
                    Numbers    = numberDto.ListToDtos(contact.Numbers),
                    Tags       = tagDto.ListToDtos(contact.Tags)
                }
                    );
            }

            return(Ok(result));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <NumberDto> > Post(NumberDto dto)
        {
            if (dto == null || dto.Number < 0)
            {
                return(BadRequest());
            }

            _logger.LogDebug($"{nameof(Post)} mesasage number {dto.Number}, Id {dto.Id} received ");

            #region Test Retry

            //int x = 800;
            //if (dto.Number >= x)
            //    return Problem($"fake error for value {dto.Number}");

            #endregion

            _semaphore.Wait();
            var dtos = _cacheProvider.GetFromCache <List <NumberDto> >(cacheKey);
            if (dtos == null)
            {
                dtos = new List <NumberDto>();
            }

            dtos.Insert(0, dto);
            _cacheProvider.SetCache(cacheKey, dtos);
            _semaphore.Release();
            return(dto);
        }
        private async void OnNumberGenerated(object sender, NumberGeneratedEventArgs e)
        {
            try
            {
                _logger.LogDebug($"{nameof(OnNumberGenerated)}: {e.Number}");
                var repo = new RandomNumber(e.Number);

                _repository.Add(repo);
                if (await _repository.SaveChangesAsync())
                {
                    _logger.LogDebug($"{nameof(OnNumberGenerated)}: {e.Number} saved to DB");
                }
                else
                {
                    _logger.LogWarning($"Failed to save to DB {nameof(OnNumberGenerated)}");
                }

                if (e.Number > 800)
                {
                    CancellationToken cts = new CancellationTokenSource().Token;

                    //post to endpoint
                    var dto = new NumberDto
                    {
                        Id        = repo.RandomNumberId,
                        Number    = repo.Number,
                        CreatedAt = repo.CreatedAt
                    };
                    var json = JsonConvert.SerializeObject(dto);
                    var data = new StringContent(json, Encoding.UTF8, "application/json");

                    var response = await _clientLocal.PostAsync("api/numbers", data, cts).ConfigureAwait(false);

                    if (response.IsSuccessStatusCode)
                    {
                        //may be log
                    }
                    else
                    {
                        _logger.LogDebug($"StatusCode {response.StatusCode.ToString()} during posting message {dto.ToString()}");
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Error in {nameof(OnNumberGenerated)}");
            }
        }