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

            if (request.ImagesData.JPGData == "" || request.ImagesData.JPGName == "" || request.ImagesData.SVGData == "" || request.ImagesData.SVGData == "")
            {
                throw new ArgumentNullException(nameof(request));
            }
            ImageData imageData = new ImageData()
            {
                JPGData = request.ImagesData.JPGData,
                JPGName = request.ImagesData.JPGName,
                SVGData = request.ImagesData.SVGData,
                SVGName = request.ImagesData.SVGName
            };
            List <string> urls = await _Eventblobcontext.PublishThroughBlobStorageAsync(imageData);

            Images _imagesPNG = new Images()
            {
                Name        = request.ImagesData.JPGName,
                ImageType   = (int)ImageType.FlagPNG,
                FilePath    = urls[0],
                FileType    = "png",
                CreatedBy   = "",
                CreatedDate = DateTime.UtcNow,
                UpdatedBy   = "",
                UpdatedDate = DateTime.UtcNow
            };
            Images _imagesSVG = new Images()
            {
                Name        = request.ImagesData.SVGName,
                ImageType   = (int)ImageType.FlagSVG,
                FilePath    = urls[1],
                FileType    = "svg",
                CreatedBy   = "",
                CreatedDate = DateTime.UtcNow,
                UpdatedBy   = "",
                UpdatedDate = DateTime.UtcNow
            };

            _CountryRepository.AddImage(_imagesPNG);
            _CountryRepository.AddImage(_imagesSVG);
            await _CountryRepository.UnitOfWork
            .SaveEntitiesAsync();

            Countries _Country = new Countries();

            using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                int pngImageId = _imagesPNG.ImageId > 0 ? _imagesPNG.ImageId : throw new NullReferenceException(nameof(request));
                int svgImageId = _imagesSVG.ImageId > 0 ? _imagesSVG.ImageId : throw new NullReferenceException(nameof(request));
                //  List<Languages> _languages = _CountryRepository.GetAllLanguages();

                _Country.PngimageId  = pngImageId;
                _Country.SvgimageId  = svgImageId;
                _Country.IsPublished = false;
                _Country.CreatedBy   = "";
                _Country.CreatedDate = DateTime.Now;
                _Country.UpdatedBy   = "";
                _Country.UpdatedDate = DateTime.Now;
                foreach (var langName in request.LanguageNames)
                {
                    var CountryContent = new CountryContents();
                    CountryContent.DisplayName      = langName.CountryName.Trim();
                    CountryContent.DisplayNameShort = langName.ShortName.Trim();
                    CountryContent.LanguageId       = langName.LanguageID;
                    _Country.CountryContents.Add(CountryContent);
                }
                _CountryRepository.Add(_Country);
                await _CountryRepository.UnitOfWork
                .SaveEntitiesAsync();

                await _cacheService.ClearCacheAsync("countriesCacheKey");

                await _cacheService.ClearCacheAsync("imagesCacheKey");

                response.IsSuccessful = true;
                scope.Complete();
            }

            using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                var pngImageEvent = new ImageCommandEvent()
                {
                    EventType     = ServiceBusEventType.Create,
                    Discriminator = Constants.ImagesDiscriminator,
                    ImageId       = _imagesPNG.ImageId,
                    ImageType     = _imagesPNG.ImageType,
                    Name          = _imagesPNG.Name,
                    CountryId     = _imagesPNG.CountryId,
                    Keyword       = _imagesPNG.Keyword ?? string.Empty,
                    Source        = _imagesPNG.Source ?? string.Empty,
                    Description   = _imagesPNG.Description ?? string.Empty,
                    Copyright     = _imagesPNG.Copyright ?? string.Empty,
                    FilePath      = _imagesPNG.FilePath,
                    FileType      = _imagesPNG.FileType,
                    CreatedBy     = _imagesPNG.CreatedBy,
                    CreatedDate   = _imagesPNG.CreatedDate,
                    UpdatedBy     = _imagesPNG.UpdatedBy,
                    UpdatedDate   = _imagesPNG.UpdatedDate,
                    EmpGuid       = _imagesPNG.EmpGuid ?? string.Empty,
                    IsEdited      = false,
                    PartitionKey  = ""
                };
                await _Eventcontext.PublishThroughEventBusAsync(pngImageEvent);

                var svgImageEvent = new ImageCommandEvent()
                {
                    EventType     = ServiceBusEventType.Create,
                    Discriminator = Constants.ImagesDiscriminator,
                    ImageId       = _imagesSVG.ImageId,
                    ImageType     = _imagesSVG.ImageType,
                    Name          = _imagesSVG.Name,
                    CountryId     = _imagesSVG.CountryId,
                    Keyword       = _imagesSVG.Keyword ?? string.Empty,
                    Source        = _imagesSVG.Source ?? string.Empty,
                    Description   = _imagesSVG.Description ?? string.Empty,
                    Copyright     = _imagesSVG.Copyright ?? string.Empty,
                    FilePath      = _imagesSVG.FilePath,
                    FileType      = _imagesSVG.FileType,
                    CreatedBy     = _imagesSVG.CreatedBy,
                    CreatedDate   = _imagesSVG.CreatedDate,
                    UpdatedBy     = _imagesSVG.UpdatedBy,
                    UpdatedDate   = _imagesSVG.UpdatedDate,
                    EmpGuid       = _imagesSVG.EmpGuid ?? string.Empty,
                    IsEdited      = false,
                    PartitionKey  = ""
                };
                await _Eventcontext.PublishThroughEventBusAsync(svgImageEvent);

                foreach (var content in _Country.CountryContents)
                {
                    var eventSourcing = new CountryCommandEvent()
                    {
                        EventType        = ServiceBusEventType.Create,
                        CountryId        = _Country.CountryId,
                        SVGImageId       = _Country.SvgimageId,
                        PNGImageId       = _Country.PngimageId,
                        IsPublished      = _Country.IsPublished,
                        CreatedBy        = _Country.CreatedBy,
                        CreatedDate      = _Country.CreatedDate,
                        UpdatedBy        = _Country.UpdatedBy,
                        UpdatedDate      = _Country.UpdatedDate,
                        CountryContentId = content.CountryContentId,
                        DisplayName      = content.DisplayName,
                        DisplayNameShort = content.DisplayNameShort,
                        LanguageId       = content.LanguageId,
                        Discriminator    = Constants.CountriesDiscriminator,
                        PartitionKey     = ""
                    };
                    await _Eventcontext.PublishThroughEventBusAsync(eventSourcing);
                }
                scope.Complete();
            }
            return(response);
        }
        public async Task <UpdateCountryCommandResponse> Handle(UpdateCountryCommand request, CancellationToken cancellationToken)
        {
            UpdateCountryCommandResponse response = new UpdateCountryCommandResponse()
            {
                IsSuccessful = false
            };

            var    country         = new Countries();
            Images pngImage        = new Images();
            Images svgImage        = new Images();
            var    countryDocs     = _context.GetAll(Constants.CountriesDiscriminator);
            var    imageDocs       = _context.GetAll(Constants.ImagesDiscriminator);
            var    contentToDelete = new List <int>();

            using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                List <int> objCountryId = new List <int>();
                objCountryId.Add(request.CountryId);
                country = _CountryRepository.getCountry(objCountryId)[0];
                List <Images> images = _CountryRepository.getImages(new List <int?> {
                    country.PngimageId, country.SvgimageId
                });

                if (request.ImagesData.JPGData == "" || request.ImagesData.JPGName == "" || request.ImagesData.SVGData == "" || request.ImagesData.SVGData == "")
                {
                    throw new ArgumentNullException(nameof(request));
                }
                ImageData imageData = new ImageData()
                {
                    JPGData = request.ImagesData.JPGData,
                    JPGName = request.ImagesData.JPGName,
                    SVGData = request.ImagesData.SVGData,
                    SVGName = request.ImagesData.SVGName
                };
                List <string> urls = await _Eventblobcontext.PublishThroughBlobStorageAsync(imageData);

                foreach (Images img in images)
                {
                    if (img.FileType == "svg")
                    {
                        img.Name        = request.ImagesData.SVGName;
                        img.ImageType   = (int)ImageType.FlagSVG;
                        img.FilePath    = urls[1];
                        img.FileType    = "svg";
                        img.UpdatedBy   = "";
                        img.UpdatedDate = DateTime.UtcNow;
                        _CountryRepository.Update(img);
                        svgImage = img;
                    }
                    else
                    {
                        img.Name        = request.ImagesData.JPGName;
                        img.ImageType   = (int)ImageType.FlagPNG;
                        img.FilePath    = urls[0];
                        img.FileType    = "png";
                        img.UpdatedBy   = "";
                        img.UpdatedDate = DateTime.UtcNow;
                        _CountryRepository.Update(img);
                        pngImage = img;
                    }
                }
                foreach (var content in request.LanguageNames)
                {
                    var countryContents = country.CountryContents.Where(s => s.LanguageId == content.LanguageID).FirstOrDefault();
                    if (countryContents == null)
                    {
                        CountryContents objCountryContents = new CountryContents();
                        objCountryContents.DisplayName      = content.CountryName;
                        objCountryContents.DisplayNameShort = content.ShortName;
                        objCountryContents.LanguageId       = content.LanguageID;
                        country.CountryContents.Add(objCountryContents);
                    }
                    else
                    {
                        countryContents.DisplayName      = content.CountryName;
                        countryContents.DisplayNameShort = content.ShortName;
                        countryContents.LanguageId       = content.LanguageID;
                        _CountryRepository.Update(countryContents);
                    }
                }
                //    List<ResourceGroupContents> ResourceGroupContents = resourceGroup.ResourceGroupContents.Where(s => s.ResourceGroupId == request.ResourceGroupId).ToList();
                foreach (var resourceContent in country.CountryContents.ToList())
                {
                    if (request.LanguageNames.Where(s => s.LanguageID == resourceContent.LanguageId).Count() == 0)
                    {
                        contentToDelete.Add((int)resourceContent.LanguageId);
                        country.CountryContents.Remove(resourceContent);
                        _CountryRepository.Delete(resourceContent);
                    }
                }
                country.UpdatedBy   = "";
                country.UpdatedDate = DateTime.Now;
                await _CountryRepository.UnitOfWork
                .SaveEntitiesAsync();

                await _cacheService.ClearCacheAsync("countriesCacheKey");

                await _cacheService.ClearCacheAsync("imagesCacheKey");

                response.IsSuccessful = true;
                scope.Complete();
            }

            using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                var pngImageEvent = new ImageCommandEvent()
                {
                    id            = imageDocs.FirstOrDefault(d => d.GetPropertyValue <int>("ImageId") == pngImage.ImageId).GetPropertyValue <Guid>("id"),
                    EventType     = ServiceBusEventType.Update,
                    Discriminator = Constants.ImagesDiscriminator,
                    ImageId       = pngImage.ImageId,
                    ImageType     = pngImage.ImageType,
                    Name          = pngImage.Name,
                    CountryId     = pngImage.CountryId,
                    Keyword       = pngImage.Keyword ?? string.Empty,
                    Source        = pngImage.Source ?? string.Empty,
                    Description   = pngImage.Description ?? string.Empty,
                    Copyright     = pngImage.Copyright ?? string.Empty,
                    FilePath      = pngImage.FilePath,
                    FileType      = pngImage.FileType,
                    CreatedBy     = pngImage.CreatedBy,
                    CreatedDate   = pngImage.CreatedDate,
                    UpdatedBy     = pngImage.UpdatedBy,
                    UpdatedDate   = pngImage.UpdatedDate,
                    EmpGuid       = pngImage.EmpGuid ?? string.Empty,
                    IsEdited      = true,
                    PartitionKey  = ""
                };
                await _Eventcontext.PublishThroughEventBusAsync(pngImageEvent);

                var svgImageEvent = new ImageCommandEvent()
                {
                    id            = imageDocs.FirstOrDefault(d => d.GetPropertyValue <int>("ImageId") == svgImage.ImageId).GetPropertyValue <Guid>("id"),
                    EventType     = ServiceBusEventType.Update,
                    Discriminator = Constants.ImagesDiscriminator,
                    ImageId       = svgImage.ImageId,
                    ImageType     = svgImage.ImageType,
                    Name          = svgImage.Name,
                    CountryId     = svgImage.CountryId,
                    Keyword       = svgImage.Keyword ?? string.Empty,
                    Source        = svgImage.Source ?? string.Empty,
                    Description   = svgImage.Description ?? string.Empty,
                    Copyright     = svgImage.Copyright ?? string.Empty,
                    FilePath      = svgImage.FilePath,
                    FileType      = svgImage.FileType,
                    CreatedBy     = svgImage.CreatedBy,
                    CreatedDate   = svgImage.CreatedDate,
                    UpdatedBy     = svgImage.UpdatedBy,
                    UpdatedDate   = svgImage.UpdatedDate,
                    EmpGuid       = svgImage.EmpGuid ?? string.Empty,
                    IsEdited      = true,
                    PartitionKey  = ""
                };
                await _Eventcontext.PublishThroughEventBusAsync(svgImageEvent);

                foreach (var item in country.CountryContents)
                {
                    var doc = countryDocs.FirstOrDefault(d => d.GetPropertyValue <int>("CountryId") == country.CountryId &&
                                                         d.GetPropertyValue <int?>("LanguageId") == item.LanguageId);
                    var eventSourcing = new CountryCommandEvent()
                    {
                        id = doc != null?doc.GetPropertyValue <Guid>("id") : Guid.NewGuid(),
                                 EventType        = doc != null ? ServiceBusEventType.Update : ServiceBusEventType.Create,
                                 CountryId        = country.CountryId,
                                 SVGImageId       = country.SvgimageId,
                                 PNGImageId       = country.PngimageId,
                                 IsPublished      = country.IsPublished,
                                 CreatedBy        = country.CreatedBy,
                                 CreatedDate      = country.CreatedDate,
                                 UpdatedBy        = country.UpdatedBy,
                                 UpdatedDate      = country.UpdatedDate,
                                 CountryContentId = item.CountryContentId,
                                 DisplayName      = item.DisplayName,
                                 DisplayNameShort = item.DisplayNameShort,
                                 LanguageId       = item.LanguageId,
                                 Discriminator    = Constants.CountriesDiscriminator,
                                 PartitionKey     = ""
                    };
                    await _Eventcontext.PublishThroughEventBusAsync(eventSourcing);
                }
                foreach (int i in contentToDelete)
                {
                    var deleteEvt = new CountryCommandEvent()
                    {
                        id = countryDocs.FirstOrDefault(d => d.GetPropertyValue <int>("CountryId") == country.CountryId &&
                                                        d.GetPropertyValue <int>("LanguageId") == i).GetPropertyValue <Guid>("id"),
                        EventType     = ServiceBusEventType.Delete,
                        Discriminator = Constants.CountriesDiscriminator,
                        PartitionKey  = ""
                    };
                    await _Eventcontext.PublishThroughEventBusAsync(deleteEvt);
                }
                scope.Complete();
            }
            return(response);
        }
Пример #3
0
        public async Task <ManipulateCountriesCommandResponse> Handle(ManipulateCountriesCommand request, CancellationToken cancellationToken)
        {
            ManipulateCountriesCommandResponse response = new ManipulateCountriesCommandResponse()
            {
                IsSuccessful = false
            };

            List <Countries> countries = _CountryRepository.getCountry(request.CountryIds);

            if (request.CountryIds.Count != countries.Count)
            {
                throw new RulesException("Invalid", @"Country not found");
            }

            using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                if (request.Operation == "Publish")
                {
                    foreach (var country in countries)
                    {
                        country.IsPublished = true;
                        _CountryRepository.Update <Countries>(country);
                    }
                }
                else if (request.Operation == "UnPublish")
                {
                    foreach (var country in countries)
                    {
                        country.IsPublished = false;
                        _CountryRepository.Update <Countries>(country);
                    }
                }
                else if (request.Operation == "Delete")
                {
                    foreach (Countries country in countries)
                    {
                        List <Images> images = _CountryRepository.getImages(new List <int?> {
                            country.PngimageId, country.SvgimageId
                        });
                        foreach (var image in images)
                        {
                            _CountryRepository.DeleteImage(image);
                        }

                        foreach (var countryContents in country.CountryContents.ToList())
                        {
                            country.CountryContents.Remove(countryContents);
                            _CountryRepository.Delete <CountryContents>(countryContents);
                        }
                        _CountryRepository.DeleteCountry(country);
                    }
                }
                else
                {
                    throw new RulesException("Operation", @"The Operation " + request.Operation + " is not valied");
                }
                await _cacheService.ClearCacheAsync("countriesCacheKey");

                await _cacheService.ClearCacheAsync("imagesCacheKey");

                await _CountryRepository.UnitOfWork
                .SaveEntitiesAsync();

                response.IsSuccessful = true;
                scope.Complete();
            }

            var countryDocs = _context.GetAll(Constants.CountriesDiscriminator);
            var imageDocs   = _context.GetAll(Constants.ImagesDiscriminator);

            using (TransactionScope scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                if (request.Operation == "Publish" || request.Operation == "UnPublish")
                {
                    foreach (var country in countries)
                    {
                        foreach (var doc in countryDocs.Where(d => d.GetPropertyValue <int>("CountryId") == country.CountryId))
                        {
                            var eventsource = new CountryCommandEvent()
                            {
                                id               = doc.GetPropertyValue <Guid>("id"),
                                EventType        = ServiceBusEventType.Update,
                                Discriminator    = Constants.CountriesDiscriminator,
                                CountryId        = country.CountryId,
                                IsPublished      = country.IsPublished,
                                CreatedBy        = doc.GetPropertyValue <string>("CreatedBy"),
                                CreatedDate      = doc.GetPropertyValue <DateTime>("CreatedDate"),
                                UpdatedBy        = doc.GetPropertyValue <string>("UpdatedBy"),
                                UpdatedDate      = doc.GetPropertyValue <DateTime>("UpdatedDate"),
                                PNGImageId       = doc.GetPropertyValue <int?>("PNGImageId"),
                                SVGImageId       = doc.GetPropertyValue <int?>("SVGImageId"),
                                CountryContentId = doc.GetPropertyValue <int>("CountryContentId"),
                                DisplayName      = doc.GetPropertyValue <string>("DisplayName"),
                                DisplayNameShort = doc.GetPropertyValue <string>("DisplayNameShort"),
                                LanguageId       = doc.GetPropertyValue <int?>("LanguageId"),
                                PartitionKey     = ""
                            };
                            await _Eventcontext.PublishThroughEventBusAsync(eventsource);
                        }
                    }
                }
                else if (request.Operation == "Delete")
                {
                    foreach (var item in countries)
                    {
                        var pngimgevent = new ImageCommandEvent()
                        {
                            id            = imageDocs.FirstOrDefault(d => d.GetPropertyValue <int>("ImageId") == item.PngimageId).GetPropertyValue <Guid>("id"),
                            EventType     = ServiceBusEventType.Delete,
                            Discriminator = Constants.ImagesDiscriminator,
                            PartitionKey  = imageDocs.FirstOrDefault(d => d.GetPropertyValue <int>("ImageId") == item.SvgimageId).GetPropertyValue <int>("CountryId").ToString()
                        };
                        await _Eventcontext.PublishThroughEventBusAsync(pngimgevent);

                        var svgimgevent = new ImageCommandEvent()
                        {
                            id            = imageDocs.FirstOrDefault(d => d.GetPropertyValue <int>("ImageId") == item.SvgimageId).GetPropertyValue <Guid>("id"),
                            EventType     = ServiceBusEventType.Delete,
                            Discriminator = Constants.ImagesDiscriminator,
                            PartitionKey  = imageDocs.FirstOrDefault(d => d.GetPropertyValue <int>("ImageId") == item.SvgimageId).GetPropertyValue <int>("CountryId").ToString()
                        };
                        await _Eventcontext.PublishThroughEventBusAsync(svgimgevent);

                        foreach (var doc in countryDocs.Where(d => d.GetPropertyValue <int>("CountryId") == item.CountryId))
                        {
                            var countryevent = new CountryCommandEvent()
                            {
                                id            = doc.GetPropertyValue <Guid>("id"),
                                EventType     = ServiceBusEventType.Delete,
                                Discriminator = Constants.CountriesDiscriminator,
                                PartitionKey  = doc.GetPropertyValue <int>("LanguageId").ToString()
                            };
                            await _Eventcontext.PublishThroughEventBusAsync(countryevent);
                        }
                    }
                }
                scope.Complete();
            }
            return(response);
        }