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); }
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); }
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); }