public async Task <ActionResult <List <Person> > > PrepareReport(string location)
        {
            var persons = await _personRepository.GetAllAsync();

            if (!persons.Where(i => i.Addresses.Where(x => x.Location == location).Any()).Any())
            {
                return(BadRequest());
            }
            if (persons == null)
            {
                return(BadRequest());
            }
            var publishModel = new PrepareReportEvent();

            for (int i = 0; i < persons.Count(); i++)
            {
                publishModel.Persons = persons.Select(i => new PersonModel
                {
                    Id        = i.Id,
                    Company   = i.Company,
                    FirstName = i.FirstName,
                    LastName  = i.LastName,
                    Addresses = i.Addresses.Select(x => new AddressModel
                    {
                        Id          = x.Id,
                        AddressType = x.AddressType,
                        Email       = x.Email,
                        Location    = x.Location,
                        Phone       = x.Phone
                    }).ToList()
                }).ToList();
            }

            publishModel.RequestId = Guid.NewGuid();
            publishModel.Location  = location;

            try
            {
                _eventBusRabbitMQProducer.PublishPrepareReport(EventBusConstants.PrepareReportQueue, publishModel);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return(Ok());
        }
        public void PublishPrepareReport(string queueName, PrepareReportEvent publishModel)
        {
            //create channel to perform the queue operations
            using (var channel = _connection.CreateModel())
            {
                channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, null);
                var message = JsonConvert.SerializeObject(publishModel);
                var body    = Encoding.UTF8.GetBytes(message);

                IBasicProperties properties = channel.CreateBasicProperties();
                properties.Persistent   = true;
                properties.DeliveryMode = 2;

                channel.ConfirmSelect();
                channel.BasicPublish(exchange: "", routingKey: queueName, mandatory: true, basicProperties: properties, body: body);
                channel.WaitForConfirmsOrDie();
                channel.ConfirmSelect();
            }
        }