/// <summary>
        ///Post service collection base.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        protected IActionResult Post(IVmOpenApiServiceCollectionInVersionBase request)
        {
            if (request == null)
            {
                ModelState.AddModelError("RequestIsNull", CoreMessages.OpenApi.RequestIsNull);
                return(new BadRequestObjectResult(ModelState));
            }
            // Validate the items
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            // Get the base model for service collection
            request = request.VersionBase();

            // Check the item values from db and validate
            ValidateParameters(request, true);
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            var result = serviceCollectionService.AddServiceCollection(request, Settings.AllowAnonymous, versionNumber);

            return(Ok(result));
        }
        /// <summary>
        /// Put service collection base.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="id"></param>
        /// <param name="sourceId"></param>
        /// <returns></returns>
        protected IActionResult Put(IVmOpenApiServiceCollectionInVersionBase request, string id = null, string sourceId = null)
        {
            if (request == null)
            {
                ModelState.AddModelError("RequestIsNull", CoreMessages.OpenApi.RequestIsNull);
                return(new BadRequestObjectResult(ModelState));
            }

            if (id.IsNullOrEmpty() && sourceId.IsNullOrEmpty())
            {
                return(NotFound(new VmError()
                {
                    ErrorMessage = $"ServiceCollection with id '{id}' not found."
                }));
            }

            if (!string.IsNullOrEmpty(id))
            {
                Guid?serviceCollectionId = id.ParseToGuid();

                // check that service collection exists
                if (!serviceCollectionId.HasValue || !serviceCollectionService.ServiceCollectionExists(serviceCollectionId.Value))
                {
                    return(NotFound(new VmError()
                    {
                        ErrorMessage = $"Service collection with id '{id}' not found."
                    }));
                }

                if (request == null)
                {
                    ModelState.AddModelError("RequestIsNull", CoreMessages.OpenApi.RequestIsNull);
                    return(new BadRequestObjectResult(ModelState));
                }

                request.Id = serviceCollectionId;
            }

            // Validate the items
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            // get the base model for service collection
            request = request.VersionBase();

            // Check the item values from db and validate
            ValidateParameters(request, sourceId: sourceId);
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(ModelState));
            }

            return(Ok(serviceCollectionService.SaveServiceCollection(request, Settings.AllowAnonymous, versionNumber, sourceId)));
        }
        /// <summary>
        /// Validate the request.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="createOperation"></param>
        /// <param name="sourceId"></param>
        protected void ValidateParameters(IVmOpenApiServiceCollectionInVersionBase request, bool createOperation = false, string sourceId = null)
        {
            IList <string> newLanguages = new List <string>();

            if (createOperation)
            {
                if (request.PublishingStatus != PublishingStatus.Published.ToString())
                {
                    request.PublishingStatus = PublishingStatus.Draft.ToString();
                }
                newLanguages = request.AvailableLanguages;
            }
            else
            {
                // We are updating existing service collection.
                // Get the current version and data related to it
                var externalSourceId = string.IsNullOrEmpty(sourceId) ? request.SourceId : sourceId;
                var currentVersion   = request.Id.IsAssigned() ? serviceCollectionService.GetServiceCollectionById(request.Id.Value, 0, false) : serviceCollectionService.GetServiceCollectionBySource(externalSourceId, 0, false);
                if (currentVersion == null || string.IsNullOrEmpty(currentVersion.PublishingStatus))
                {
                    if (request.Id.IsAssigned())
                    {
                        this.ModelState.AddModelError("Service collection id", $"Version for service collection with id '{request.Id.Value}' not found.");
                    }
                    else
                    {
                        this.ModelState.AddModelError("Service collection id", $"Version for service collection with source id '{externalSourceId}' not found.");
                    }
                }
                else
                {
                    request.CurrentPublishingStatus = currentVersion.PublishingStatus;
                    // Get the available languages from current version
                    // Check if user has added new language versions. New available languages and data need to be validated (required fields need to exist in request).
                    newLanguages = request.AvailableLanguages.Where(i => !currentVersion.AvailableLanguages.Contains(i)).ToList();
                }
            }

            ServiceCollectionValidator serviceCollection = new ServiceCollectionValidator(request, commonService, serviceService, newLanguages, UserOrganizations());

            serviceCollection.Validate(this.ModelState);
        }
Exemplo n.º 4
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));
        }
Exemplo n.º 5
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));
        }