From 19d8e3e925273e1e4ceff14a3397cfab7ff904f5 Mon Sep 17 00:00:00 2001 From: James Tombleson Date: Sun, 23 Jul 2023 22:56:06 -0700 Subject: [PATCH] ArticlesController.cs was cleaned up and supports results with details now --- .../Controllers/ArticlesController.cs | 60 ------------- .../Controllers/v1/ArticlesController.cs | 84 +++++++++++++++++++ .../Interfaces/IArticlesRepository.cs | 2 +- .../Results/ArticleDetailsResult.cs | 8 ++ .../Results/ArticleResult.cs | 8 ++ .../Results/BaseResult.cs | 7 ++ 6 files changed, 108 insertions(+), 61 deletions(-) delete mode 100644 Newsbot.Collector.Api/Controllers/ArticlesController.cs create mode 100644 Newsbot.Collector.Api/Controllers/v1/ArticlesController.cs create mode 100644 Newsbot.Collector.Domain/Results/ArticleDetailsResult.cs create mode 100644 Newsbot.Collector.Domain/Results/ArticleResult.cs create mode 100644 Newsbot.Collector.Domain/Results/BaseResult.cs diff --git a/Newsbot.Collector.Api/Controllers/ArticlesController.cs b/Newsbot.Collector.Api/Controllers/ArticlesController.cs deleted file mode 100644 index e4626ba..0000000 --- a/Newsbot.Collector.Api/Controllers/ArticlesController.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Microsoft.AspNetCore.Authentication.JwtBearer; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; -using Newsbot.Collector.Domain.Dto; -using Newsbot.Collector.Domain.Interfaces; -using Newsbot.Collector.Domain.Models; - -namespace Newsbot.Collector.Api.Controllers; - -[ApiController] -[Route("api/articles")] -[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] -public class ArticlesController : ControllerBase -{ - private readonly ILogger _logger; - private readonly IArticlesRepository _articles; - private readonly ISourcesRepository _sources; - - public ArticlesController(ILogger logger, IArticlesRepository articles, ISourcesRepository sources) - { - _logger = logger; - _articles = articles; - _sources = sources; - } - - [HttpGet(Name = "GetArticles")] - public IEnumerable Get() - { - var res = new List(); - var items = _articles.List(0, 25); - foreach (var item in items) res.Add(ArticleDto.Convert(item)); - return res; - } - - [HttpGet("{id:guid}")] - [EndpointDescription("Returns the article based on the Id value given.")] - public ArticleDto GetById(Guid id) - { - var item = _articles.GetById(id); - return ArticleDto.Convert(item); - } - - [HttpGet("{id:guid}/details")] - public ArticleDetailsDto GetDetailsById(Guid id) - { - var item = _articles.GetById(id); - var sourceItem = _sources.GetById(item.SourceId); - return ArticleDetailsDto.Convert(item, sourceItem); - } - - [HttpGet("by/{sourceId:guid}")] - public IEnumerable GetBySourceId(Guid sourceId, int page = 0, int count = 25) - { - var res = new List(); - var items = _articles.ListBySourceId(sourceId, page, count); - foreach (var item in items) res.Add(ArticleDto.Convert(item)); - return res; - } -} \ No newline at end of file diff --git a/Newsbot.Collector.Api/Controllers/v1/ArticlesController.cs b/Newsbot.Collector.Api/Controllers/v1/ArticlesController.cs new file mode 100644 index 0000000..b8ed6d5 --- /dev/null +++ b/Newsbot.Collector.Api/Controllers/v1/ArticlesController.cs @@ -0,0 +1,84 @@ +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Newsbot.Collector.Domain.Dto; +using Newsbot.Collector.Domain.Interfaces; +using Newsbot.Collector.Domain.Results; + +namespace Newsbot.Collector.Api.Controllers.v1; + +[ApiController] +[Route("api/v1/articles")] +[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] +public class ArticlesController : ControllerBase +{ + //private readonly ILogger _logger; + private readonly IArticlesRepository _articles; + private readonly ISourcesRepository _sources; + + public ArticlesController(IArticlesRepository articles, ISourcesRepository sources) + { + _articles = articles; + _sources = sources; + } + + [HttpGet(Name = "GetArticles")] + public ActionResult Get() + { + var res = new List(); + var items = _articles.List(0); + foreach (var item in items) + { + res.Add(ArticleDto.Convert(item)); + } + + return new OkObjectResult(new ArticleResult + { + IsSuccessful = true, + Items = res + }); + } + + [HttpGet("{id:guid}")] + [EndpointDescription("Returns the article based on the Id value given.")] + public ActionResult GetById(Guid id) + { + var item = _articles.GetById(id); + return new OkObjectResult(new ArticleResult + { + IsSuccessful = true, + Items = new List + { + ArticleDto.Convert(item) + } + }); + } + + [HttpGet("{id:guid}/details")] + public ActionResult GetDetailsById(Guid id) + { + var item = _articles.GetById(id); + var sourceItem = _sources.GetById(item.SourceId); + + return new OkObjectResult(new ArticleDetailsResult + { + IsSuccessful = true, + Item = ArticleDetailsDto.Convert(item, sourceItem) + }); + } + + [HttpGet("by/{sourceId:guid}")] + public ActionResult GetBySourceId(Guid sourceId, int page = 0) + { + var res = new List(); + var items = _articles.ListBySourceId(sourceId, page); + foreach (var item in items) res.Add(ArticleDto.Convert(item)); + + return new OkObjectResult(new ArticleResult + { + IsSuccessful = true, + Items = res + }); + + } +} \ No newline at end of file diff --git a/Newsbot.Collector.Domain/Interfaces/IArticlesRepository.cs b/Newsbot.Collector.Domain/Interfaces/IArticlesRepository.cs index 4cabce7..c9f86c6 100644 --- a/Newsbot.Collector.Domain/Interfaces/IArticlesRepository.cs +++ b/Newsbot.Collector.Domain/Interfaces/IArticlesRepository.cs @@ -5,7 +5,7 @@ namespace Newsbot.Collector.Domain.Interfaces; public interface IArticlesRepository : ITableRepository { - List List(int page, int count); + List List(int page, int count = 25); List ListBySourceId(Guid id, int page = 0, int count = 25); ArticlesEntity GetById(Guid id); ArticlesEntity GetByUrl(string url); diff --git a/Newsbot.Collector.Domain/Results/ArticleDetailsResult.cs b/Newsbot.Collector.Domain/Results/ArticleDetailsResult.cs new file mode 100644 index 0000000..c97271f --- /dev/null +++ b/Newsbot.Collector.Domain/Results/ArticleDetailsResult.cs @@ -0,0 +1,8 @@ +using Newsbot.Collector.Domain.Dto; + +namespace Newsbot.Collector.Domain.Results; + +public class ArticleDetailsResult : BaseResult +{ + public ArticleDetailsDto? Item { get; set; } +} \ No newline at end of file diff --git a/Newsbot.Collector.Domain/Results/ArticleResult.cs b/Newsbot.Collector.Domain/Results/ArticleResult.cs new file mode 100644 index 0000000..0b5fb78 --- /dev/null +++ b/Newsbot.Collector.Domain/Results/ArticleResult.cs @@ -0,0 +1,8 @@ +using Newsbot.Collector.Domain.Dto; + +namespace Newsbot.Collector.Domain.Results; + +public class ArticleResult : BaseResult +{ + public IEnumerable? Items { get; set; } +} \ No newline at end of file diff --git a/Newsbot.Collector.Domain/Results/BaseResult.cs b/Newsbot.Collector.Domain/Results/BaseResult.cs new file mode 100644 index 0000000..d9e22e1 --- /dev/null +++ b/Newsbot.Collector.Domain/Results/BaseResult.cs @@ -0,0 +1,7 @@ +namespace Newsbot.Collector.Domain.Results; + +public class BaseResult +{ + public bool IsSuccessful { get; set; } + public IEnumerable? ErrorMessage { get; set; } +} \ No newline at end of file