Exemple #1
0
        public void HandleWithoutLibraryScenario(IBulkCampaignCreatedOrUpdated command)
        {
            var validateContext = CreateValidateContext(command);

            var campaignExternalIds = command.Data.Select(c => c.ExternalId).ToList();

            _campaignCleaner.ExecuteAsync(campaignExternalIds).GetAwaiter().GetResult();

            var campaigns = new List <CampaignDbObject>();

            foreach (var item in command.Data)
            {
                Validator.ValidateCampaign(item, validateContext);

                var newCampaign = _mapper.Map <CampaignDbObject>(item, opts => opts.UseEntityCache(_salesAreaByIdCache));
                AdjustCampaignPassPriority(newCampaign);
                newCampaign.UpdateDerivedKPIs();

                campaigns.Add(newCampaign);
            }

            using (var dbContext = _dbContextFactory.Create())
            {
                dbContext.AddRange(_mapper.Map <GamePlan.Persistence.SqlServer.Entities.Tenant.Campaigns.Campaign[]>(campaigns, opts => opts.UseEntityCache(_salesAreaByNameCache)));
                dbContext.SaveChanges();
            }
        }
Exemple #2
0
        private ValidateContext CreateValidateContext(IBulkCampaignCreatedOrUpdated command)
        {
            using (var dbContext = _dbContextFactory.Create())
            {
                if (_existingSalesAreas is null)
                {
                    _existingSalesAreas = dbContext
                                          .Query <GamePlan.Persistence.SqlServer.Entities.Tenant.SalesAreas.SalesArea>()
                                          .Select(r => r.Name)
                                          .ToArray();
                }

                if (_existingDemographics is null)
                {
                    _existingDemographics = dbContext
                                            .Query <GamePlan.Persistence.SqlServer.Entities.Tenant.Demographic>()
                                            .Select(r => r.ExternalRef)
                                            .ToImmutableHashSet();
                }

                if (_programmeCategories is null)
                {
                    _programmeCategories = dbContext
                                           .Query <GamePlan.Persistence.SqlServer.Entities.Tenant.ProgrammeCategoryHierarchy>()
                                           .Select(r => r.Name)
                                           .ToImmutableHashSet();
                }

                if (_breakTypes is null)
                {
                    _breakTypes = dbContext
                                  .Query <GamePlan.Persistence.SqlServer.Entities.Tenant.Metadatas.MetadataCategory>()
                                  .Include(e => e.MetadataValues)
                                  .FirstOrDefault(e => e.Name == MetaDataKeys.BreakTypes.ToString())
                                  ?.MetadataValues
                                  .Select(s => s.Value)
                                  .ToImmutableHashSet();
                }

                if (_bookingPositionGroups is null)
                {
                    _bookingPositionGroups =
                        dbContext
                        .Query <GamePlan.Persistence.SqlServer.Entities.Tenant.BookingPositionGroups.
                                BookingPositionGroup>().Select(r => r.GroupId)
                        .ToImmutableHashSet();
                }

                var productExternalIdentifiers = command.Data.Select(r => r.Product)
                                                 .Distinct()
                                                 .ToList();

                var products = dbContext.Query <GamePlan.Persistence.SqlServer.Entities.Tenant.Products.Product>()
                               .Where(x => productExternalIdentifiers.Contains(x.Externalidentifier))
                               .Select(r => r.Externalidentifier)
                               .ToImmutableHashSet();

                return(new ValidateContext
                {
                    ExistingSalesAreas = _existingSalesAreas,
                    ExistingDemographics = _existingDemographics,
                    ProgrammeCategories = _programmeCategories,
                    BookingPositionGroups = _bookingPositionGroups,
                    BreakTypes = _breakTypes,
                    Products = products
                });
            }
        }
Exemple #3
0
 public void Handle(IBulkCampaignCreatedOrUpdated command)
 {
     HandleWithoutLibraryScenario(command);
     HandleLibraryScenario();
 }