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 }); } }