Ejemplo n.º 1
0
        public IVmEntityBase DeleteServiceCollection(Guid serviceCollectionId)
        {
            ServiceCollectionVersioned result = null;

            contextManager.ExecuteWriter(unitOfWork =>
            {
                result = DeleteServiceCollection(unitOfWork, serviceCollectionId);
                unitOfWork.Save();
            });
            return(new VmEntityStatusBase {
                Id = result.Id, PublishingStatusId = result.PublishingStatusId
            });
        }
Ejemplo n.º 2
0
        public IVmOpenApiServiceCollectionBase AddServiceCollection(IVmOpenApiServiceCollectionInVersionBase vm, bool allowAnonymous, int openApiVersion, string userName = null)
        {
            var serviceCollection = new ServiceCollectionVersioned();
            var saveMode          = allowAnonymous ? SaveMode.AllowAnonymous : SaveMode.Normal;
            var userId            = userName ?? utilities.GetRelationIdForExternalSource();
            var useOtherEndPoint  = false;

            contextManager.ExecuteWriter(unitOfWork =>
            {
                // Check if the external source already exists. Let's not throw the excpetion here to avoid contextManager to catch the exception.
                useOtherEndPoint = ExternalSourceExists <ServiceCollection>(vm.SourceId, userId, unitOfWork);
                if (!useOtherEndPoint)
                {
                    serviceCollection = TranslationManagerToEntity.Translate <IVmOpenApiServiceCollectionInVersionBase, ServiceCollectionVersioned>(vm, unitOfWork);

                    var serviceCollectionRep = unitOfWork.CreateRepository <IServiceCollectionVersionedRepository>();
                    serviceCollectionRep.Add(serviceCollection);

                    // Create the mapping between external source id and PTV id
                    if (!string.IsNullOrEmpty(vm.SourceId))
                    {
                        SetExternalSource(serviceCollection.UnificRoot, vm.SourceId, userId, unitOfWork);
                    }

                    unitOfWork.Save(saveMode, userName: userName);
                }
            });

            if (useOtherEndPoint)
            {
                throw new ExternalSourceExistsException(string.Format(CoreMessages.OpenApi.ExternalSourceExists, vm.SourceId));
            }

            // Publish all language versions
            if (vm.PublishingStatus == PublishingStatus.Published.ToString())
            {
                var publishingResult = commonService.PublishAllAvailableLanguageVersions <ServiceCollectionVersioned, ServiceCollectionLanguageAvailability>(serviceCollection.Id, i => i.ServiceCollectionVersionedId == serviceCollection.Id);
            }

            return(GetServiceCollectionWithDetails(serviceCollection.Id, openApiVersion, false));
        }
Ejemplo n.º 3
0
        public IVmOpenApiServiceCollectionBase SaveServiceCollection(IVmOpenApiServiceCollectionInVersionBase vm, bool allowAnonymous, int openApiVersion, string sourceId = null, string userName = null)
        {
            var saveMode = allowAnonymous ? SaveMode.AllowAnonymous : SaveMode.Normal;
            var userId   = userName ?? utilities.GetRelationIdForExternalSource();
            IVmOpenApiServiceCollectionBase result            = new VmOpenApiServiceCollectionBase();
            ServiceCollectionVersioned      serviceCollection = null;

            contextManager.ExecuteWriter(unitOfWork =>
            {
                // Get the root id according to source id (if defined)
                var rootId = vm.Id ?? GetPTVId <ServiceCollection>(sourceId, userId, unitOfWork);

                // Get right version id
                vm.Id = versioningManager.GetVersionId <ServiceCollectionVersioned>(unitOfWork, rootId);

                if (vm.PublishingStatus == PublishingStatus.Deleted.ToString())
                {
                    serviceCollection = DeleteServiceCollection(unitOfWork, vm.Id);
                }
                else
                {
                    // Entity needs to be restored?
                    if (vm.CurrentPublishingStatus == PublishingStatus.Deleted.ToString())
                    {
                        if (vm.PublishingStatus == PublishingStatus.Modified.ToString() || vm.PublishingStatus == PublishingStatus.Published.ToString())
                        {
                            // We need to restore already archived item
                            var publishingResult = commonService.RestoreArchivedEntity <ServiceCollectionVersioned>(unitOfWork, vm.Id.Value);
                        }
                    }

                    serviceCollection = TranslationManagerToEntity.Translate <IVmOpenApiServiceCollectionInVersionBase, ServiceCollectionVersioned>(vm, unitOfWork);

                    if (vm.CurrentPublishingStatus == PublishingStatus.Draft.ToString())
                    {
                        // We need to manually remove items from collections!
                        if (vm.ServiceCollectionNames?.Count > 0)
                        {
                            var updatedEntities = serviceCollection.ServiceCollectionNames;
                            var rep             = unitOfWork.CreateRepository <IServiceCollectionNameRepository>();
                            var currentItems    = rep.All().Where(s => s.ServiceCollectionVersionedId == serviceCollection.Id).ToList();
                            var toRemove        = currentItems.Where(i => !updatedEntities.Any(s => s.TypeId == i.TypeId && s.LocalizationId == i.LocalizationId));
                            toRemove.ForEach(i => rep.Remove(i));
                        }
                        if (vm.ServiceCollectionDescriptions?.Count > 0)
                        {
                            var updatedEntities = serviceCollection.ServiceCollectionDescriptions;
                            var rep             = unitOfWork.CreateRepository <IServiceCollectionDescriptionRepository>();
                            var currentItems    = rep.All().Where(s => s.ServiceCollectionVersionedId == serviceCollection.Id).ToList();
                            var toRemove        = currentItems.Where(i => !updatedEntities.Any(s => s.TypeId == i.TypeId && s.LocalizationId == i.LocalizationId));
                            toRemove.ForEach(i => rep.Remove(i));
                        }
                        if (vm.DeleteAllServices || vm.ServiceCollectionServices?.Count > 0)
                        {
                            serviceCollection.ServiceCollectionServices = dataUtils.UpdateCollectionForReferenceTable(unitOfWork,
                                                                                                                      serviceCollection.ServiceCollectionServices,
                                                                                                                      query => query.ServiceCollectionVersionedId == serviceCollection.Id,
                                                                                                                      service => service.Service != null ? service.Service.Id : service.ServiceId
                                                                                                                      );
                        }
                    }

                    // Update the mapping between external source id and PTV id
                    if (!string.IsNullOrEmpty(vm.SourceId))
                    {
                        UpdateExternalSource <ServiceCollection>(serviceCollection.UnificRootId, vm.SourceId, userId, unitOfWork);
                    }
                }

                unitOfWork.Save(saveMode, serviceCollection, userName);
            });

            // Publish all language versions
            if (vm.PublishingStatus == PublishingStatus.Published.ToString())
            {
                var publishingResult = commonService.PublishAllAvailableLanguageVersions <ServiceCollectionVersioned, ServiceCollectionLanguageAvailability>(serviceCollection.Id, i => i.ServiceCollectionVersionedId == serviceCollection.Id);
            }

            return(GetServiceCollectionWithDetails(serviceCollection.Id, openApiVersion, false));
        }