public async Task <DeleteContentDisclaimerCommandResponse> Handle(DeleteContentDisclaimerCommand request, CancellationToken cancellationToken)
        {
            var response = new DeleteContentDisclaimerCommandResponse()
            {
                IsSuccessful = false
            };

            var disclaimerIds = request.DisclaimerIds.Distinct().ToList();
            var disclaimers   = await _contentDisclaimerRepository.GetDisclaimerByIds(disclaimerIds);

            if (disclaimers.Count != disclaimerIds.Count)
            {
                throw new RulesException("Invalid", @"ContentDisclaimer not found");
            }

            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                foreach (var disclaimer in disclaimers)
                {
                    foreach (var disclaimerContent in disclaimer.DisclaimerContents.ToList())
                    {
                        disclaimer.DisclaimerContents.Remove(disclaimerContent);
                        _contentDisclaimerRepository.Delete(disclaimerContent);
                    }
                    _contentDisclaimerRepository.Delete(disclaimer);
                }

                await _contentDisclaimerRepository.UnitOfWork.SaveEntitiesAsync();

                response.IsSuccessful = true;
                scope.Complete();
            }
            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                var disclaimersDocs = _context.GetAll(Constants.DisclaimersDiscriminator);
                foreach (var disclaimer in disclaimers)
                {
                    foreach (var doc in disclaimersDocs.Where(d => d.GetPropertyValue <int>("DisclaimerId") == disclaimer.DisclaimerId))
                    {
                        var eventSourcing = new DisclaimerCommandEvent()
                        {
                            id            = doc.GetPropertyValue <Guid>("id"),
                            EventType     = ServiceBusEventType.Delete,
                            Discriminator = Constants.DisclaimersDiscriminator,
                            PartitionKey  = doc.GetPropertyValue <int>("LanguageId").ToString()
                        };
                        await _eventcontext.PublishThroughEventBusAsync(eventSourcing);
                    }
                }
                scope.Complete();
            }
            return(response);
        }
示例#2
0
        public async Task <CreateContentDisclaimerCommandResponse> Handle(CreateContentDisclaimerCommand request, CancellationToken cancellationToken)
        {
            var response = new CreateContentDisclaimerCommandResponse()
            {
                IsSuccessful = false
            };

            var contentDisclaimer = _mapper.Map <Disclaimers>(request);

            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                contentDisclaimer.CreatedBy   = "CMS Admin";
                contentDisclaimer.CreatedDate = DateTime.UtcNow;
                contentDisclaimer.UpdatedBy   = "CMS Admin";
                contentDisclaimer.UpdatedDate = DateTime.UtcNow;

                await _contentDisclaimerRepository.AddAsync(contentDisclaimer);

                await _contentDisclaimerRepository.UnitOfWork
                .SaveEntitiesAsync();

                response.IsSuccessful = true;
                scope.Complete();
            }
            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                foreach (var content in contentDisclaimer.DisclaimerContents)
                {
                    var eventSourcing = new DisclaimerCommandEvent()
                    {
                        EventType           = ServiceBusEventType.Create,
                        Name                = contentDisclaimer.Name,
                        DisclaimerId        = contentDisclaimer.DisclaimerId,
                        CreatedBy           = contentDisclaimer.CreatedBy,
                        CreatedDate         = contentDisclaimer.CreatedDate,
                        UpdatedBy           = contentDisclaimer.UpdatedBy,
                        UpdatedDate         = contentDisclaimer.UpdatedDate,
                        DefaultCountryId    = contentDisclaimer.DefaultCountryId,
                        ProviderName        = content.ProviderName ?? string.Empty,
                        ProviderTerms       = content.ProviderTerms ?? string.Empty,
                        LanguageId          = content.LanguageId,
                        DisclaimerContentId = content.DisclaimerContentId,
                        Discriminator       = Constants.DisclaimersDiscriminator,
                        PartitionKey        = ""
                    };
                    await _eventcontext.PublishThroughEventBusAsync(eventSourcing);
                }
                scope.Complete();
            }

            return(response);
        }
示例#3
0
        public async Task <UpdateContentDisclaimerCommandResponse> Handle(UpdateContentDisclaimerCommand request, CancellationToken cancellationToken)
        {
            var response = new UpdateContentDisclaimerCommandResponse()
            {
                IsSuccessful = false
            };
            var disclaimer = await _contentDisclaimerRepository.GetContentDisclaimer(request.DisclaimerId);

            if (disclaimer == null)
            {
                throw new RulesException("contentDisclaimer", $"ContentDisclaimer with DisclaimerId: {request.DisclaimerId}  not found");
            }

            var contentToDelete = new List <int>();

            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                //Update existing Content disclaimer

                disclaimer.Name             = request.GroupName;
                disclaimer.UpdatedBy        = "CMS Admin";
                disclaimer.UpdatedDate      = DateTime.UtcNow;
                disclaimer.DefaultCountryId = request.DefaultCountryId;

                foreach (var item in request.DisclaimerContent)
                {
                    var disclaimerContent = disclaimer.DisclaimerContents.FirstOrDefault(x => x.LanguageId.Equals(item.LanguageId));
                    if (disclaimerContent == null)
                    {
                        disclaimerContent = new DisclaimerContents
                        {
                            ProviderName  = item.ProviderName,
                            ProviderTerms = item.ProviderTerms,
                            LanguageId    = item.LanguageId
                        };

                        disclaimer.DisclaimerContents.Add(disclaimerContent);
                    }
                    else
                    {
                        disclaimerContent.ProviderName  = item.ProviderName;
                        disclaimerContent.ProviderTerms = item.ProviderTerms;
                        disclaimerContent.LanguageId    = item.LanguageId;
                        _contentDisclaimerRepository.Update(disclaimerContent);
                    }
                }

                foreach (var item in disclaimer.DisclaimerContents.ToList())
                {
                    if (request.DisclaimerContent.Where(dc => dc.LanguageId.Equals(item.LanguageId)).Count() == 0)
                    {
                        contentToDelete.Add((int)item.LanguageId);
                        disclaimer.DisclaimerContents.Remove(item);
                        _contentDisclaimerRepository.Delete(item);
                    }
                }

                await _contentDisclaimerRepository.UnitOfWork.SaveEntitiesAsync();

                response.IsSuccessful = true;
                scope.Complete();
            }
            using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                var disclaimerDocs = _context.GetAll(Constants.DisclaimersDiscriminator);
                foreach (var content in disclaimer.DisclaimerContents)
                {
                    var doc = disclaimerDocs.FirstOrDefault(d => d.GetPropertyValue <int>("DisclaimerId") == disclaimer.DisclaimerId &&
                                                            d.GetPropertyValue <int?>("LanguageId") == content.LanguageId);
                    var eventSourcing = new DisclaimerCommandEvent()
                    {
                        id = doc != null?doc.GetPropertyValue <Guid>("id") : Guid.NewGuid(),
                                 EventType           = doc != null ? ServiceBusEventType.Update : ServiceBusEventType.Create,
                                 DisclaimerId        = disclaimer.DisclaimerId,
                                 Name                = disclaimer.Name,
                                 CreatedBy           = disclaimer.CreatedBy,
                                 CreatedDate         = disclaimer.CreatedDate,
                                 UpdatedBy           = disclaimer.UpdatedBy,
                                 UpdatedDate         = disclaimer.UpdatedDate,
                                 DefaultCountryId    = disclaimer.DefaultCountryId,
                                 ProviderName        = content.ProviderName,
                                 ProviderTerms       = content.ProviderTerms,
                                 LanguageId          = content.LanguageId,
                                 DisclaimerContentId = content.DisclaimerContentId,
                                 Discriminator       = Constants.DisclaimersDiscriminator,
                                 PartitionKey        = ""
                    };
                    await _eventcontext.PublishThroughEventBusAsync(eventSourcing);
                }
                foreach (int i in contentToDelete)
                {
                    var deleteEvt = new DisclaimerCommandEvent()
                    {
                        id = disclaimerDocs.FirstOrDefault(d => d.GetPropertyValue <int>("DisclaimerId") == disclaimer.DisclaimerId &&
                                                           d.GetPropertyValue <int>("LanguageId") == i).GetPropertyValue <Guid>("id"),
                        EventType     = ServiceBusEventType.Delete,
                        Discriminator = Constants.DisclaimersDiscriminator,
                        PartitionKey  = ""
                    };
                    await _eventcontext.PublishThroughEventBusAsync(deleteEvt);
                }
                scope.Complete();
            }
            return(response);
        }