using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Newsbot.Collector.Database.Repositories; using Newsbot.Collector.Domain.Consts; using Newsbot.Collector.Domain.Dto; using Newsbot.Collector.Domain.Interfaces; using Newsbot.Collector.Domain.Models; namespace Newsbot.Collector.Api.Controllers; [ApiController] [Route("api/sources")] public class SourcesController : ControllerBase { private readonly ILogger _logger; //private readonly ConnectionStrings _settings; private readonly ISourcesRepository _sources; public SourcesController(ILogger logger, IOptions settings) { _logger = logger; //_settings = settings.Value; _sources = new SourcesTable(settings.Value.Database); } [HttpGet(Name = "GetSources")] public IEnumerable Get(int page) { var res = new List(); var temp = _sources.List(page, 25); foreach (var item in temp) res.Add(SourceDto.Convert(item)); return res; } [HttpGet("by/type")] public IEnumerable GetByType(string type) { var res = new List(); var temp = _sources.ListByType(type); foreach (var item in temp) res.Add(SourceDto.Convert(item)); return res; } [HttpPost("new/reddit")] public SourceDto NewReddit(string name, string url) { var res = _sources.GetByNameAndType(name, SourceTypes.Reddit); if (res.ID != Guid.Empty) return SourceDto.Convert(res); var item = _sources.New(new SourceModel { Site = SourceTypes.Reddit, Name = name, Type = SourceTypes.Reddit, Source = "feed", Enabled = true, Url = url, Tags = $"{SourceTypes.Reddit}, {name}" }); return SourceDto.Convert(item); } [HttpPost("new/rss")] public SourceDto NewRss(string name, string url) { var res = _sources.GetByNameAndType(name, SourceTypes.Rss); if (res.ID != Guid.Empty) return SourceDto.Convert(res); var m = new SourceModel { Site = SourceTypes.Rss, Name = name, Type = SourceTypes.Rss, Source = "feed", Enabled = true, Url = url, Tags = $"{SourceTypes.Rss}, {name}" }; var item = _sources.New(m); return SourceDto.Convert(item); } [HttpPost("new/youtube")] public SourceDto NewYoutube(string name, string url) { var res = _sources.GetByNameAndType(name, SourceTypes.YouTube); if (res.ID != Guid.Empty) return SourceDto.Convert(res); var item = _sources.New(new SourceModel { Site = SourceTypes.YouTube, Type = SourceTypes.YouTube, Name = name, Source = "feed", Url = url, Enabled = true, Tags = $"{SourceTypes.YouTube}, {name}" }); return SourceDto.Convert(item); } [HttpPost("new/twitch")] public SourceDto NewTwitch(string name) { var res = _sources.GetByNameAndType(name, SourceTypes.Twitch); if (res.ID != Guid.Empty) return SourceDto.Convert(res); var item = _sources.New(new SourceModel { Site = SourceTypes.Twitch, Type = SourceTypes.Twitch, Name = name, Url = $"https://twitch.tv/{name}", Source = "api", Enabled = true, Tags = $"{SourceTypes.Twitch}, {name}" }); return SourceDto.Convert(item); } [HttpGet("{id}")] public SourceDto GetById(Guid id) { var item = _sources.GetByID(id); return SourceDto.Convert(item); } [HttpPost("{id}/disable")] public void Disable(Guid id) { _sources.Disable(id); } [HttpPost("{id}/enable")] public void Enable(Guid id) { _sources.Enable(id); } }