public override void Initialize()
 {
     base.Initialize();
     UserConnection            = Context.UserConnection;
     TemplateRepository        = new DCTemplateRepository <DCTemplateModel>(UserConnection);
     TemplateFactory           = new CESMailingTemplateFactory();
     ServiceApi                = Context.ServiceApi;
     Validator                 = new BulkEmailValidator(UserConnection, ServiceApi);
     BulkEmailEventLogger      = new BulkEmailEventLogger(UserConnection);
     AudienceDataSourceFactory = new BulkEmailAudienceDataSourceFactory();
     BulkEmailMacroParser      = GetMacroParser();
 }
        public override void Initialize()
        {
            base.Initialize();
            UserConnection            = Context.UserConnection;
            TemplateRepository        = new DCTemplateRepository <DCTemplateModel>(UserConnection);
            TemplateFactory           = new CESMailingTemplateFactory();
            ServiceApi                = Context.ServiceApi;
            Validator                 = new BulkEmailValidator(UserConnection, ServiceApi);
            BulkEmailEventLogger      = new BulkEmailEventLogger(UserConnection);
            AudienceDataSourceFactory = new BulkEmailAudienceDataSourceFactory();
            BulkEmailMacroParser      = GetMacroParser();
            InitializeAudienceDataSource(Context.BulkEmailEntity.PrimaryColumnValue);
            var validationBuilder = new BulkEmailRecipientValidatorBuilder(ServiceApi);

            RecipientsValidator = new BulkEmailRecipientValidator(validationBuilder);
        }
        private void ResolveRecipientsReplica(Guid bulkEmailId)
        {
            var dcDataSource = _audienceDataSource as IDCAudienceDataSource;

            _audienceDataSource.PageNumber = 0;
            var dcStrategyResolver = new DCStrategyResolver(UserConnection);
            var templateRepository = new DCTemplateRepository <DCTemplateModel>(UserConnection);
            var repositoryOptions  = new DCRepositoryReadOptions <DCTemplateModel, DCReplicaModel> {
                TemplateReadOptions = DCTemplateReadOption.None
            };
            var template = templateRepository.ReadByRecordId(bulkEmailId, repositoryOptions);

            if (template == null)
            {
                throw new NullReferenceException($"Template for BulkEmail with id {bulkEmailId} not found");
            }
            while (true)
            {
                _audienceDataSource.PageNumber++;
                var audienceSelect        = dcDataSource.GetRecipientsIdsSelectQuery(Guid.Empty);
                var isAudienceSelectEmpty = IsRecipientsSelectQueryEmpty(audienceSelect);
                if (isAudienceSelectEmpty)
                {
                    break;
                }
                var segmentationContext = new DCSegmentationContext(UserConnection)
                {
                    Template              = template,
                    SourceAudience        = dcDataSource.GetRecipientsIdsSelectQuery(Guid.Empty),
                    SourceAlias           = "MandrillDeliveryPackage",
                    EntityIdSourceColumn  = "RecipientUId",
                    SourceColumnForFilter = "ContactId",
                    TargetTable           = "BulkEmailRecipientReplica",
                    EntityIdTargetColumn  = "RecipientId",
                    ReplicaIdTargetColumn = "DCReplicaId",
                    RecordIdTargetColumn  = "BulkEmailId"
                };
                dcStrategyResolver.SegmentAudience(segmentationContext);
            }
        }
        /// <summary>
        /// Creates instance of <see cref="DCTemplateRepository&lt;DCTemplateModel&gt;"/>.
        /// </summary>
        /// <param name="userConnection"></param>
        /// <returns></returns>
        public virtual DCTemplateRepository <DCTemplateModel> CreateDcTemplateRepository(UserConnection userConnection)
        {
            var templateRepository = new DCTemplateRepository <DCTemplateModel>(userConnection);

            return(templateRepository);
        }