public async Task <DatasetDto> AddNew(string orgSlug, DatasetNewDto dataset) { var org = await _utils.GetOrganization(orgSlug); if (!await _authManager.IsOwnerOrAdmin(org)) { throw new UnauthorizedException("You are not authorized to add datasets to this organization"); } if (dataset == null) { throw new BadRequestException("Dataset is null"); } if (dataset.Slug == null) { throw new BadRequestException("Dataset slug is null"); } if (!dataset.Slug.IsValidSlug()) { throw new BadRequestException("Dataset slug is invalid"); } if (_context.Datasets.Any(item => item.Slug == dataset.Slug && item.Organization.Slug == orgSlug)) { throw new BadRequestException("Dataset with this slug already exists"); } var ds = new Dataset { Slug = dataset.Slug, Organization = org, InternalRef = Guid.NewGuid(), CreationDate = DateTime.Now }; var ddb = _ddbManager.Get(orgSlug, ds.InternalRef); ddb.Meta.GetSafe().Name = dataset.Name ?? dataset.Slug; var attributes = await ddb.GetAttributesAsync(); if (dataset.IsPublic.HasValue) { attributes.IsPublic = dataset.IsPublic.Value; } org.Datasets.Add(ds); await _context.SaveChangesAsync(); return(ds.ToDto(await ddb.GetInfoAsync())); }
public async Task <IActionResult> Post([FromRoute] string orgSlug, [FromForm] DatasetNewDto dataset) { try { _logger.LogDebug("Dataset controller Post('{OrgSlug}', '{DatasetSlug}')", orgSlug, dataset?.Slug); var newDs = await _datasetsManager.AddNew(orgSlug, dataset); return(CreatedAtRoute( nameof(DatasetsController) + "." + nameof(Get), new { orgSlug = orgSlug, dsSlug = newDs.Slug }, newDs)); } catch (Exception ex) { _logger.LogError(ex, "Exception in Dataset controller Post('{OrgSlug}', '{DatasetSlug}')", orgSlug, dataset?.Slug); return(ExceptionResult(ex)); } }