using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Newsbot.Collector.Database.Repositories; using Newsbot.Collector.Domain.Dto; using Newsbot.Collector.Domain.Interfaces; using Newsbot.Collector.Domain.Models; namespace Newsbot.Collector.Api.Controllers; [ApiController] [Route("api/articles")] public class ArticlesController : ControllerBase { private readonly ILogger _logger; private readonly ConnectionStrings _settings; private readonly IArticlesRepository _articles; private readonly ISourcesRepository _sources; public ArticlesController(ILogger logger, IOptions settings) { _logger = logger; _settings = settings.Value; _articles = new ArticlesTable(_settings.Database); _sources = new SourcesTable(_settings.Database); } [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}")] public ArticleDto GetById(Guid id) { var item = _articles.GetById(id); return ArticleDto.Convert(item); } [HttpGet("{id}/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}")] 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; } }