public async Task <int> Handle(ImportObserversRequest message, CancellationToken token)
        {
            var counter = 0;
            var startId = GetMaxIdObserver();

            using (var reader = new StreamReader(message.File.OpenReadStream()))
            {
                while (reader.Peek() >= 0)
                {
                    var fileContent = reader.ReadLine();
                    var data        = fileContent.Split('\t');
                    var hashed      = _hashService.GetHash(data[1]);

                    var observer = new Entities.Observer
                    {
                        Id    = startId + counter,
                        IdNgo = message.IdOng,
                        Phone = data[0],
                        Name  = data[2],
                        Pin   = hashed
                    };
                    _context.Observers.Add(observer);
                    counter++;
                }
                await _context.SaveChangesAsync();
            }

            return(counter);
        }
Exemplo n.º 2
0
        public async Task <OptionDto> Handle(AddOptionCommand request, CancellationToken cancellationToken)
        {
            var optionEntity = _mapper.Map <Option>(request.Option);

            _context.Options.Add(optionEntity);
            await _context.SaveChangesAsync(cancellationToken);


            return(_mapper.Map <OptionDto>(optionEntity));
        }
Exemplo n.º 3
0
        private async Task <Result> InsertOrUpdateCounties(List <CountyCsvModel> counties, CancellationToken cancellationToken)
        {
            var countiesIdUpdated  = new List <int>();
            var countiesDictionary = counties.ToDictionary(c => c.Id, y => y);

            try
            {
                using var transaction = await _context.Database.BeginTransactionAsync(cancellationToken);

                foreach (var county in _context.Counties)
                {
                    if (countiesDictionary.TryGetValue(county.Id, out var csvModel))
                    {
                        county.Code = csvModel.Code;
                        county.Name = csvModel.Name;
                        county.NumberOfPollingStations = csvModel.NumberOfPollingStations;
                        county.Diaspora = csvModel.Diaspora;
                        county.Order    = csvModel.Order;

                        countiesIdUpdated.Add(county.Id);
                    }
                }

                foreach (var id in countiesDictionary.Keys.Except(countiesIdUpdated))
                {
                    var csvModel = countiesDictionary[id];

                    var newCounty = new Entities.County
                    {
                        Id   = csvModel.Id,
                        Code = csvModel.Code,
                        Name = csvModel.Name,
                        NumberOfPollingStations = csvModel.NumberOfPollingStations,
                        Diaspora = csvModel.Diaspora,
                        Order    = csvModel.Order
                    };

                    _context.Counties.Add(newCounty);
                }

                await _context.SaveChangesAsync(cancellationToken);

                transaction.Commit();
            }
            catch (Exception exception)
            {
                _logger.LogError("Cannot add/update counties", exception);
                return(Result.Failure("Cannot add/update counties"));
            }

            return(Result.Ok());
        }
Exemplo n.º 4
0
        public async Task <int> Handle(CompleteazaRaspunsCommand message, CancellationToken cancellationToken)
        {
            try
            {
                //flat answers
                var lastModified = DateTime.UtcNow;

                var raspunsuriNoi = GetFlatListOfAnswers(message, lastModified);

                // stergerea este pe fiecare sectie
                var sectii = message.Answers.Select(a => a.PollingSectionId).Distinct().ToList();

                using (var tran = await _context.Database.BeginTransactionAsync())
                {
                    foreach (var sectie in sectii)
                    {
                        var intrebari = message.Answers.Select(a => a.QuestionId).Distinct().ToList();

                        // delete existing answers for posted questions on this 'sectie'
                        var todelete = _context.Answers
                                       .Include(a => a.OptionAnswered)
                                       .Where(
                            a =>
                            a.IdObserver == message.ObserverId &&
                            a.IdPollingStation == sectie)
                                       //.Where(a => intrebari.Contains(a.OptionAnswered.IdQuestion))
                                       .WhereRaspunsContains(intrebari)
                        ;
                        //.Delete();
                        _context.Answers.RemoveRange(todelete);

                        await _context.SaveChangesAsync();
                    }

                    _context.Answers.AddRange(raspunsuriNoi);

                    var result = await _context.SaveChangesAsync();

                    tran.Commit();

                    return(result);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(typeof(CompleteazaRaspunsCommand).GetHashCode(), ex, ex.Message);
            }

            return(await Task.FromResult(-1));
        }
        public Task <int> Handle(NewObserverRequest message, CancellationToken token)
        {
            var id       = GetMaxIdObserver();
            var observer = new Observer
            {
                Id    = id,
                IdNgo = message.IdOng,
                Phone = message.NumarTelefon,
                Name  = message.Nume,
                Pin   = _hashService.GetHash(message.PIN)
            };

            _context.Observers.Add(observer);
            return(_context.SaveChangesAsync());
        }
Exemplo n.º 6
0
        protected override Task <int> HandleCore(ResetDeviceCommand request)
        {
            try {
                Observer observer = _voteMonitorContext.Observers
                                    .Where(o => o.Phone == request.PhoneNumber &&
                                           o.IdNgo == request.IdNgo)
                                    .First();

                if (observer == null)
                {
                    return(Task.FromResult(-1));
                }

                observer.DeviceRegisterDate = null;
                observer.MobileDeviceId     = null;
                //observer.Pin = RandomNumberGenerator.Generate(6);

                _voteMonitorContext.Update(observer);
                return(_voteMonitorContext.SaveChangesAsync());
            }
            catch (Exception exception)
            {
                _logger.LogError("Exception caught during resetting of Observer device for id " + request.PhoneNumber, exception);
            }

            return(Task.FromResult(-1));
        }
Exemplo n.º 7
0
        public async Task <Unit> Handle(UpdatePollingStationInfo request, CancellationToken cancellationToken)
        {
            try
            {
                var pollingStationInfo = _context.PollingStationInfos.FirstOrDefault(
                    p => p.IdObserver == request.IdObserver &&
                    p.IdPollingStation == request.IdPollingStation);

                if (pollingStationInfo == null)
                {
                    return(Unit.Value);
                }

                pollingStationInfo.ObserverLeaveTime = request.ObserverLeaveTime;
                pollingStationInfo.LastModified      = DateTime.Now;

                _context.Update(pollingStationInfo);
                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
            catch (Exception ex)
            {
                _logger.LogError("Error updating polling station info: ", ex);
                throw;
            }
        }
Exemplo n.º 8
0
        protected override Task <string> HandleCore(ResetPasswordCommand request)
        {
            try
            {
                Observer observer = _voteMonitorContext.Observers
                                    .Where(o => o.Phone == request.PhoneNumber &&
                                           o.IdNgo == request.IdNgo)
                                    .First();

                if (observer == null)
                {
                    return(Task.FromResult(String.Empty));
                }

                observer.Pin = RandomNumberGenerator.Generate(6);

                _voteMonitorContext.Update(observer);
                _voteMonitorContext.SaveChangesAsync();

                return(Task.FromResult(observer.Pin));
            }
            catch (Exception exception)
            {
                _logger.LogError("Exception caught during resetting of Observer password for id " + request.PhoneNumber, exception);
            }

            return(Task.FromResult(String.Empty));
        }
        public async Task <int> Handle(UpdatePollingSectionCommand message, CancellationToken cancellationToken)
        {
            try
            {
                var pollingStationInfo = await _context.PollingStationInfos
                                         .FirstOrDefaultAsync(a =>
                                                              a.IdObserver == message.IdObserver &&
                                                              a.IdPollingStation == message.IdPollingStation);

                if (pollingStationInfo == null)
                {
                    throw new ArgumentException("PollingStationInfo nu exista");
                }

                _mapper.Map(message, pollingStationInfo);
                _context.Update(pollingStationInfo);

                return(await _context.SaveChangesAsync());
            }
            catch (Exception ex)
            {
                _logger.LogError(new EventId(), ex.Message);
            }

            return(-1);
        }
Exemplo n.º 10
0
        public async Task <bool> Handle(ResetPasswordCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var observerQuery = _voteMonitorContext.Observers
                                    .Where(o => o.Phone == request.PhoneNumber);

                if (!request.Organizer)
                {
                    observerQuery = observerQuery.Where(o => o.IdNgo == request.IdNgo);
                }

                var observer = observerQuery.FirstOrDefault();

                if (observer == null)
                {
                    return(false);
                }

                observer.Pin = _hash.GetHash(request.Pin);

                _voteMonitorContext.Update(observer);
                await _voteMonitorContext.SaveChangesAsync(cancellationToken);

                return(true);
            }
            catch (Exception exception)
            {
                _logger.LogError("Exception caught during resetting of Observer password for id " + request.PhoneNumber, exception);
            }

            return(false);
        }
Exemplo n.º 11
0
        public Task <int> Handle(ResetDeviceCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var observerQuery = _voteMonitorContext.Observers
                                    .Where(o => o.Phone == request.PhoneNumber);

                if (!request.Organizer)
                {
                    observerQuery = observerQuery.Where(o => o.IdNgo == request.IdNgo);
                }

                var observer = observerQuery.FirstOrDefault();

                if (observer == null)
                {
                    return(Task.FromResult(-1));
                }

                observer.DeviceRegisterDate = null;
                observer.MobileDeviceId     = null;

                _voteMonitorContext.Update(observer);
                return(_voteMonitorContext.SaveChangesAsync(cancellationToken));
            }
            catch (Exception exception)
            {
                _logger.LogError("Exception caught during resetting of Observer device for id " + request.PhoneNumber, exception);
            }

            return(Task.FromResult(-1));
        }
        public Task <int> Handle(OptiuneModelRequest request, CancellationToken cancellationToken)
        {
            var option      = _mapper.Map <Option>(request.OptiuneModel);
            var maxOptionId = GetMaxIdOption();

            option.Id = maxOptionId;

            _context.Options.Add(option);
            _context.SaveChangesAsync();

            return(Task.FromResult(maxOptionId));
        }
        public async Task <int> Handle(PollingStationCommand request, CancellationToken cancellationToken)
        {
            var random = new Random();

            try
            {
                //import the new entities
                using (var transaction = await _context.Database.BeginTransactionAsync(cancellationToken))
                {
                    var id = 100;
                    var newPollingStations = new List <PollingStation>();
                    var counties           = _context.Counties.ToDictionary(c => c.Code, c => c.Id);

                    foreach (var record in request.PollingStationsDTOs)
                    {
                        var pollingStation = _mapper.Map <PollingStation>(record);
                        pollingStation.Id            = id++;
                        pollingStation.IdCounty      = counties[record.CodJudet];//county.Id;
                        pollingStation.Coordinates   = null;
                        pollingStation.TerritoryCode = random.Next(10000).ToString();

                        newPollingStations.Add(pollingStation);
                    }

                    _context.BulkInsert(newPollingStations);

                    foreach (var county in _context.Counties)
                    {
                        if (!_context.PollingStations.Any(p => p.IdCounty == county.Id))
                        {
                            continue;
                        }

                        var maxPollingStation = _context.PollingStations
                                                .Where(p => p.IdCounty == county.Id)
                                                .Max(p => p.Number);
                        county.NumberOfPollingStations = maxPollingStation;
                        _context.Counties.Update(county);
                    }

                    var result = await _context.SaveChangesAsync(cancellationToken);

                    transaction.Commit();
                    return(result);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("Error while importing polling station information ", ex);
            }

            return(-1);
        }
Exemplo n.º 14
0
        public Task <int> Handle(NotificationRegistrationDataCommand request, CancellationToken cancellationToken)
        {
            var existingRegistration =
                _context.NotificationRegistrationData
                .FirstOrDefault(data => data.ObserverId == request.ObserverId && data.ChannelName == request.ChannelName);

            if (existingRegistration != null)
            {
                existingRegistration.Token = request.Token;
            }
            else
            {
                var notificationReg = new NotificationRegistrationData
                {
                    ObserverId  = request.ObserverId,
                    ChannelName = request.ChannelName,
                    Token       = request.Token
                };

                _context.NotificationRegistrationData.Add(notificationReg);
            }

            return(_context.SaveChangesAsync(cancellationToken));
        }
Exemplo n.º 15
0
        public async Task <int> Handle(AddNoteCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var noteEntity = _mapper.Map <Entities.Note>(request);

                _context.Notes.Add(noteEntity);

                return(await _context.SaveChangesAsync(cancellationToken));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public async Task <Unit> Handle(CreatePollingStationInfo request, CancellationToken cancellationToken)
        {
            try
            {
                var pollingStationInfo = _mapper.Map <PollingStationInfo>(request);

                _context.PollingStationInfos.Add(pollingStationInfo);
                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
            catch (Exception ex)
            {
                _logger.LogError("Error creating polling station info: ", ex);
                throw;
            }
        }
        public async Task <int> Handle(RegisterDeviceId request, CancellationToken cancellationToken)
        {
            try
            {
                var observator = await _context.Observers.SingleAsync(a => a.Id == request.ObserverId, cancellationToken : cancellationToken);

                observator.MobileDeviceId     = request.MobileDeviceId;
                observator.DeviceRegisterDate = DateTime.UtcNow;

                return(await _context.SaveChangesAsync(cancellationToken));
            }
            catch (Exception ex)
            {
                _logger.LogError(new EventId(), ex, ex.Message);
                throw ex;
            }
        }
        public async Task <int> Handle(RegisterPollingStationCommand message, CancellationToken cancellationToken)
        {
            try
            {
                //TODO[DH] this can be moved to a previous step, before the command is executed
                var pollingStation = await _context.PollingStations
                                     .Where(a =>
                                            a.Number == message.IdPollingStation &&
                                            a.County.Code == message.CountyCode)
                                     .FirstOrDefaultAsync();

                if (pollingStation == null)
                {
                    throw new ArgumentException("Sectia nu exista");
                }

                var formular = await _context.PollingStationInfos
                               .FirstOrDefaultAsync(a =>
                                                    a.IdObserver == message.IdObserver &&
                                                    a.IdPollingStation == pollingStation.Id);

                if (formular == null)
                {
                    formular = _mapper.Map <PollingStationInfo>(message);

                    formular.IdPollingStation = pollingStation.Id;
                    formular.IdObserver       = message.IdObserver;

                    _context.Add(formular);
                }
                else
                {
                    _mapper.Map(message, formular);
                }

                return(await _context.SaveChangesAsync());
            }
            catch (Exception ex)
            {
                _logger.LogError(new EventId(), ex.Message);
            }

            return(-1);
        }
        protected async override Task <List <GeneratedObserver> > HandleCore(ObserverGenerateCommand command)
        {
            List <Observer>          dbObservers        = new List <Observer>();
            List <GeneratedObserver> generatedObservers = new List <GeneratedObserver>();


            for (int i = 0; i < command.NrObservers; ++i)
            {
                RandomObserverBuilder builder = new RandomObserverBuilder();
                dbObservers.Add(builder.build(command.IdNgo));
            }

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

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

                    _voteMonitorContext.Observers.AddRange(dbObservers.ToArray());
                    var result = await _voteMonitorContext.SaveChangesAsync();

                    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));
        }
        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));
        }
Exemplo n.º 21
0
        public async Task <bool?> Handle(UpdatePollingStation request, CancellationToken cancellationToken)
        {
            try
            {
                var existingPollingStation = _context.PollingStations.FirstOrDefault(p => p.Id == request.Id);
                if (existingPollingStation == null)
                {
                    return(false);
                }

                existingPollingStation.AdministrativeTerritoryCode = request.AdministrativeTerritoryCode;
                existingPollingStation.Coordinates   = request.Coordinates;
                existingPollingStation.Address       = request.Address;
                existingPollingStation.TerritoryCode = request.TerritoryCode;
                existingPollingStation.Number        = request.Number;
                await _context.SaveChangesAsync(cancellationToken);
            }
            catch (Exception ex)
            {
                _logger.Log(LogLevel.Error, $"Error updating polling station: {request.Id}", ex);
                return(null);
            }
            return(true);
        }
Exemplo n.º 22
0
        public async Task <bool> Handle(DeleteFormCommand request, CancellationToken cancellationToken)
        {
            var form = await _context.Forms.FirstOrDefaultAsync(f => f.Id == request.FormId);

            if (form == null)
            {
                return(false);
            }

            var sections           = _context.FormSections.Where(s => s.IdForm == form.Id);
            var sectionsIds        = sections.Select(s => s.Id);
            var questions          = _context.Questions.Where(q => sectionsIds.Contains(q.IdSection));
            var questionsIds       = questions.Select(q => q.Id);
            var optionsToQuestions = _context.OptionsToQuestions.Where(o => questionsIds.Contains(o.IdQuestion));
            var optionsIds         = optionsToQuestions.Select(o => o.IdOption);

            // check if there are already saved answers
            var answers = _context.Answers.Where(a => optionsIds.Contains(a.IdOptionToQuestion));

            if (answers != null && answers.Any())
            {
                return(false);
            }

            var options = _context.Options.Where(o => optionsIds.Contains(o.Id));

            _context.OptionsToQuestions.RemoveRange(optionsToQuestions);
            _context.Options.RemoveRange(options);
            _context.Questions.RemoveRange(questions);
            _context.FormSections.RemoveRange(sections);
            _context.Forms.Remove(form);

            await _context.SaveChangesAsync();

            return(true);
        }
Exemplo n.º 23
0
        public async Task <FormDTO> Handle(AddFormQuery message, CancellationToken cancellationToken)
        {
            var newForm = new Entities.Form
            {
                Code           = message.Form.Code,
                CurrentVersion = message.Form.CurrentVersion,
                Description    = message.Form.Description,
                FormSections   = new List <FormSection>(),
                Diaspora       = message.Form.Diaspora,
                Draft          = message.Form.Draft,
                Order          = message.Form.Order
            };

            foreach (var(form, formIndex) in message.Form.FormSections.Select((form, formIndex) => (form, formIndex + 1)))
            {
                var formSection = new FormSection
                {
                    Code        = form.Code,
                    Description = form.Description,
                    OrderNumber = formIndex,
                    Questions   = new List <Question>()
                };
                foreach (var(question, questionIndex) in form.Questions.Select((question, questionIndex) => (question, questionIndex + 1)))
                {
                    var questionEntity = new Question
                    {
                        QuestionType = question.QuestionType,
                        Hint         = question.Hint,
                        Text         = question.Text,
                        Code         = question.Code,
                        OrderNumber  = questionIndex
                    };

                    var optionsForQuestion = new List <OptionToQuestion>();
                    foreach (var(option, optionIndex) in question.OptionsToQuestions.Select((option, optionIndex) => (option, optionIndex + 1)))
                    {
                        if (option.IdOption > 0)
                        {
                            var existingOption = _context.Options.FirstOrDefault(o => o.Id == option.IdOption);
                            existingOption.OrderNumber = optionIndex;
                            optionsForQuestion.Add(new OptionToQuestion
                            {
                                Option  = existingOption,
                                Flagged = option.Flagged
                            });
                        }
                        else
                        {
                            OptionToQuestion newOptionToQuestion = _mapper.Map <OptionToQuestion>(option);
                            newOptionToQuestion.Option.OrderNumber = optionIndex;
                            optionsForQuestion.Add(newOptionToQuestion);
                        }
                    }

                    questionEntity.OptionsToQuestions = optionsForQuestion;
                    formSection.Questions.Add(questionEntity);
                }
                newForm.FormSections.Add(formSection);
            }

            _context.Forms.Add(newForm);

            await _context.SaveChangesAsync();

            message.Form.Id = newForm.Id;
            return(message.Form);
        }