コード例 #1
0
        public override void Handle(IBulkRestrictionCreatedOrUpdated command)
        {
            if (command.Data.Any())
            {
                var newRestrictionModelItems = command.Data.ToList();

                ValidateNewRestrictions(newRestrictionModelItems);

                var salesAreas = newRestrictionModelItems.SelectMany(x => x.SalesAreas)
                                 .Select(x => x.Trim())
                                 .Distinct()
                                 .ToList();

                _salesAreaRepository.ValidateSalesArea(salesAreas);

                var programmeCategoryNames = newRestrictionModelItems
                                             .Select(x => x.ProgrammeCategory)
                                             .Distinct(StringComparer.OrdinalIgnoreCase).ToList();

                _programmeCategoryRepository.ValidateProgrammeCategory(programmeCategoryNames);

                var clearenceCodes = newRestrictionModelItems
                                     .Where(x => !string.IsNullOrWhiteSpace(x.ClearanceCode))
                                     .Select(x => x.ClearanceCode)
                                     .Distinct(StringComparer.OrdinalIgnoreCase).ToList();

                ValidateClearanceCodes(clearenceCodes);

                var newRestrictions = _mapper.Map <List <RestrictionDbObject> >(newRestrictionModelItems);

                var allSalesAreaQty = _salesAreaRepository.CountAll;
                foreach (var newRestriction in newRestrictions)
                {
                    newRestriction.Uid = Guid.NewGuid();

                    if ((newRestriction.SalesAreas?.Any() ?? false) &&
                        newRestriction.SalesAreas.Count == allSalesAreaQty)
                    {
                        newRestriction.SalesAreas = new List <string>();
                    }
                }

                _restrictionRepository.UpdateRange(newRestrictions);
                _restrictionRepository.SaveChanges();
            }
        }