コード例 #1
0
        private async Task HandleCategoryCounters(PersonCategoryFilter filter)
        {
            var personCategory = await FindGategory(filter);

            DecrementCategoryCounters(filter, personCategory);
            await PersonCategoryRepository.Save(Transaction, personCategory);
        }
コード例 #2
0
        private async Task <PersonCategoryCounter> FindGategory(PersonCategoryFilter filter)
        {
            var categories = await PersonCategoryRepository.GetPersonCategoryCounters(Anonimize(filter));

            var personCategory = categories[0];

            return(personCategory);
        }
コード例 #3
0
        private async Task HandleCityCounters(PersonDTO person, PersonCategoryFilter filter)
        {
            var city = person.Address.City;
            var personPerCityCategory = await PersonPerCityCounterRepository.GetByCity(city);

            DecrementPerCityCounters(filter, personPerCityCategory);
            await PersonPerCityCounterRepository.Save(Transaction, personPerCityCategory);
        }
コード例 #4
0
 private static FilterDefinition <PersonCategoryCounter> CreateFilterFromCategoryFilter(
     PersonCategoryFilter personCategoryFilter, FilterDefinition <PersonCategoryCounter> filter)
 {
     filter = AddNameFilter(personCategoryFilter, filter);
     filter = AddEqFilter(x => x.Race, personCategoryFilter.Race, filter);
     filter = AddEqFilter(x => x.Sex, personCategoryFilter.Sex, filter);
     filter = AddEqFilter(x => x.SchoolLevel, personCategoryFilter.SchoolLevel, filter);
     return(filter);
 }
コード例 #5
0
 protected static PersonCategoryFilter Anonimize(PersonCategoryFilter filter)
 {
     return(new PersonCategoryFilter()
     {
         Name = string.Empty,
         Race = filter.Race,
         SchoolLevel = filter.SchoolLevel,
         Sex = filter.Sex
     });
 }
コード例 #6
0
        public async Task <List <PersonCategoryCounter> > GetPersonCategoryCounters(PersonCategoryFilter personCategoryFilter)
        {
            var collection = MongoConnection.GetPersonCategoriesCollection();
            var filter     = Builders <PersonCategoryCounter> .Filter.Empty;

            filter = CreateFilterFromCategoryFilter(personCategoryFilter, filter);
            var result = await collection.FindAsync(filter);

            var list = result.ToList();

            CreateDefaultResult(list, personCategoryFilter);
            return(list);
        }
コード例 #7
0
        private static FilterDefinition <PersonCategoryCounter> AddNameFilter(PersonCategoryFilter personCategoryFilter,
                                                                              FilterDefinition <PersonCategoryCounter> filter)
        {
            if (!String.IsNullOrEmpty(personCategoryFilter.Name))
            {
                var nameFilter = Builders <PersonCategoryCounter>
                                 .Filter.Where(x => x.PersonNameCounters.ContainsKey(personCategoryFilter.Name));

                filter &= nameFilter;
            }

            return(filter);
        }
コード例 #8
0
        private async Task HandleCategoryCounters(PersonCategoryFilter oldFilter,
                                                  PersonCategoryFilter newFilter)
        {
            var oldPersonCategory = await FindGategory(oldFilter);

            DecrementCategoryCounters(oldFilter, oldPersonCategory);
            await PersonCategoryRepository.Save(Transaction, oldPersonCategory);

            var newPersonCategory = await FindGategory(newFilter);

            IncrementCategoryCounters(newFilter, newPersonCategory);
            await PersonCategoryRepository.Save(Transaction, newPersonCategory);
        }
コード例 #9
0
 private static void CreateDefaultResult(List <PersonCategoryCounter> list,
                                         PersonCategoryFilter personCategoryFilter)
 {
     if (list.Count == 0)
     {
         list.Add(new PersonCategoryCounter()
         {
             Count       = 0,
             Race        = personCategoryFilter.Race,
             SchoolLevel = personCategoryFilter.SchoolLevel,
             Sex         = personCategoryFilter.Sex
         });
     }
 }
コード例 #10
0
        private async Task HandleCityCounters(string oldCity, string newCity,
                                              PersonCategoryFilter oldFilter, PersonCategoryFilter newFilter)
        {
            if (oldCity != newCity)
            {
                var oldPersonPerCityCategory = await PersonPerCityCounterRepository.GetByCity(oldCity);

                DecrementPerCityCounters(oldFilter, oldPersonPerCityCategory);
                await PersonPerCityCounterRepository.Save(Transaction, oldPersonPerCityCategory);

                var newPersonPerCityCategory = await PersonPerCityCounterRepository.GetByCity(newCity);

                IncrementPerCityCounters(newFilter, newPersonPerCityCategory);
                await PersonPerCityCounterRepository.Save(Transaction, newPersonPerCityCategory);
            }
        }
コード例 #11
0
        public async Task <ActionResult <List <PersonCategoryCounter> > > Get([FromQuery] string name,
                                                                              [FromQuery] string sex,
                                                                              [FromQuery] string education,
                                                                              [FromQuery] string race)
        {
            var filter = new PersonCategoryFilter()
            {
                Name = name, Sex = sex, SchoolLevel = education, Race = race
            };
            var result = await Mediator.Send(new PersonCategoryQuery()
            {
                PersonCategoryFilter = filter
            });

            return(Ok(result));
        }
コード例 #12
0
 protected static void AlterNameCounters(PersonCategoryFilter filter,
                                         Dictionary <string, PersonNameCounter> nameCounters, int delta, int initial)
 {
     if (nameCounters.ContainsKey(filter.Name))
     {
         nameCounters[filter.Name].Count =
             Math.Max(nameCounters[filter.Name].Count + delta, 0);
     }
     else
     {
         nameCounters[filter.Name] = new PersonNameCounter()
         {
             Name  = filter.Name,
             Count = initial,
         };
     }
 }
コード例 #13
0
 protected static void IncrementCategoryCounters(PersonCategoryFilter filter,
                                                 PersonCategoryCounter personCategory)
 {
     personCategory.Count++;
     IncrementNameCounters(filter, personCategory.PersonNameCounters);
 }
コード例 #14
0
 protected static void DecrementNameCounters(PersonCategoryFilter filter,
                                             Dictionary <string, PersonNameCounter> nameCounters)
 {
     AlterNameCounters(filter, nameCounters, -1, 0);
 }
コード例 #15
0
 protected static void DecrementPerCityCounters(PersonCategoryFilter filter,
                                                PersonPerCityCounter personCategory)
 {
     personCategory.Count = Math.Max(personCategory.Count - 1, 0);
     DecrementNameCounters(filter, personCategory.PersonNameCounters);
 }