Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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));
        }
Example #4
0
        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));
        }