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