public async Task <IActionResult> ReanalyzeLinkAsync(string id) { var responseDocument = new JsonApiDocument(); if (!(ObjectId.TryParse(id, out var linkId))) { return(this.NotFound(responseDocument)); } var result = await this.repository.FindAsync(linkId); if (result.Data.Count() == 0) { return(this.NotFound(responseDocument)); } var oldLink = result.Data.First(); var newLink = await AnalyzeLinkAsync(result.Data.First().Url, false); newLink.Id = oldLink.Id; newLink.Tags = oldLink.Tags; result = await this.repository.CreateOrReplaceAsync(newLink); if (!(result.Succeeded)) { return(this.InternalServerError(responseDocument)); } responseDocument.Data = JsonApiLinkResource.Create(result.Data.First()); return(this.Ok(responseDocument)); }
public async Task <IActionResult> GetLinksAsync() { var responseDocument = new JsonApiMultiResourceDocument(); var result = await this.repository.FindAsync(x => true); responseDocument.Data = result.Data.Select(x => JsonApiLinkResource.Create(x) as IJsonApiResourceIdentifier).ToList(); return(this.Ok(responseDocument)); }
public async Task <IActionResult> CreateLinkAsync([FromBody] JsonApiLinkDocument requestDocument) { var responseDocument = new JsonApiDocument(); if (requestDocument is null || requestDocument.Data is null || requestDocument.Data.Attributes is null || requestDocument.Data.Attributes.Url is null) { return(this.BadRequest(responseDocument)); } Uri.TryCreate(requestDocument.Data.Attributes.Url, UriKind.Absolute, out var url); if (url is null || (url.Scheme != "http" && url.Scheme != "https")) { return(this.BadRequest(responseDocument)); } TaggedLink link; if (string.IsNullOrWhiteSpace(requestDocument.Data.Attributes.Title)) { link = await this.AnalyzeLinkAsync(url, false); } else { link = await this.AnalyzeLinkAsync(url); link.Title = requestDocument.Data.Attributes.Title; } if (!(requestDocument.Data.Attributes.Tags is null)) { link.Tags = requestDocument.Data.Attributes.Tags.Split(',', StringSplitOptions.RemoveEmptyEntries); } var result = await this.repository.InsertAsync(link); if (result.Succeeded) { responseDocument.Data = JsonApiLinkResource.Create(link); return(this.Ok(responseDocument)); } return(this.BadRequest(responseDocument)); }
public async Task <IActionResult> GetLinkAsync(string id) { var responseDocument = new JsonApiDocument(); if (!(ObjectId.TryParse(id, out var linkId))) { return(this.NotFound(responseDocument)); } var result = await this.repository.FindAsync(linkId); if (result.Data.Count() == 0) { return(this.NotFound(responseDocument)); } responseDocument.Data = JsonApiLinkResource.Create(result.Data.First()); return(this.Ok(responseDocument)); }