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));
        }
Esempio n. 2
0
        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);
            }
        }