public async Task <IActionResult> GenerateObservers([FromForm] int count)
        {
            if (!ControllerExtensions.ValidateGenerateObserversNumber(count))
            {
                return(BadRequest("Incorrect parameter supplied, please check that paramter is between boundaries: "
                                  + ControllerExtensions.LOWER_OBS_VALUE + " - " + ControllerExtensions.UPPER_OBS_VALUE));
            }

            var command = new ObserverGenerateCommand(count, NgoId);

            var result = await _mediator.Send(command);

            return(Ok(result));
        }
        public async Task <IAsyncResult> GenerateObservers([FromForm] int count)
        {
            if (!ControllerExtensions.ValidateGenerateObserversNumber(count))
            {
                return(Task.FromResult(new BadRequestObjectResult("Incorrect parameter supplied, please check that paramter is between boundaries: "
                                                                  + ControllerExtensions.LOWER_OBS_VALUE + " - " + ControllerExtensions.UPPER_OBS_VALUE)));
            }

            ObserverGenerateCommand command = new ObserverGenerateCommand(count,
                                                                          ControllerExtensions.GetIdOngOrDefault(this, 0));

            var result = _mediator.Send(command);

            return(Task.FromResult(new OkObjectResult(result.Result)));
        }
        public async Task <List <GeneratedObserver> > Handle(ObserverGenerateCommand request, CancellationToken cancellationToken)
        {
            List <Entities.Observer> dbObservers        = new List <Entities.Observer>();
            List <GeneratedObserver> generatedObservers = new List <GeneratedObserver>();


            for (int i = 0; i < request.NrObservers; ++i)
            {
                dbObservers.Add(RandomObserverBuilder.Instance(_hashService).Build(request.IdNgo));
            }

            try
            {
                using (var tran = await _voteMonitorContext.Database.BeginTransactionAsync(cancellationToken))
                {
                    int latestId = _voteMonitorContext.Observers
                                   .OrderByDescending(o => o.Id)
                                   .First()
                                   .Id;

                    dbObservers = dbObservers
                                  .Select(o => { o.Id = ++latestId; return(o); })
                                  .ToList();

                    _voteMonitorContext.Observers.AddRange(dbObservers.ToArray());
                    await _voteMonitorContext.SaveChangesAsync(cancellationToken);

                    tran.Commit();

                    return(dbObservers
                           .Select(o => _mapper.Map <GeneratedObserver>(o))
                           .ToList());
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("Error during generation of random observers", ex, ex.Message);
            }

            return(await Task.FromResult(generatedObservers));
        }