public async Task <IActionResult> SavePage([FromBody] Model.NewPage newPage) { if (!Uri.TryCreate(newPage.ResourceUrl, UriKind.RelativeOrAbsolute, out var uri)) { return(BadRequest("Unable to parse URI")); } var(IsSuccess, Id, PageExists, ErrorMessage) = await pageCollector.SavePageAsync(newPage); if (IsSuccess && Id != Guid.Empty) { if (PageExists) { return(StatusCode(StatusCodes.Status303SeeOther, JsonConvert.SerializeObject(new { Id = Id }))); } return(CreatedAtAction(nameof(GetPageById), new { id = Id }, JsonConvert.SerializeObject(new { Id = Id }))); } return(StatusCode(StatusCodes.Status500InternalServerError, ErrorMessage)); }
public async Task <(bool IsSuccess, Guid?Id, bool PageExists, string ErrorMessage)> SavePageAsync(Model.NewPage page) { try { // Test Url var targetUri = new Uri(page.ResourceUrl); var domain = targetUri.Host; var resource = targetUri.AbsolutePath; // Validate if we already have this page var existingPage = await dbContext.Page.Where(p => p.Domain == domain.ToUpperInvariant() && p.ResourceLocation == resource).Select(p => p.Id).FirstOrDefaultAsync(); if (existingPage != Guid.Empty) { return(true, existingPage, true, null); } ; // Map new Page var newPage = autoMap.Map <Model.NewPage, Repository.Page>(page); newPage.Id = Guid.NewGuid(); newPage.Domain = domain.ToUpperInvariant(); newPage.ResourceLocation = resource; // Save Page dbContext.Page.Add(newPage); await dbContext.SaveChangesAsync(); return(true, newPage.Id, false, null); } catch (Exception e) { logger?.LogError(e.ToString()); return(false, null, false, e.Message); } }