using System.Net; 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/discord/webhooks")] public class DiscordWebHookController : ControllerBase { private readonly ILogger _logger; private readonly ConnectionStrings _settings; private readonly IDiscordWebHooksRepository _webhooks; public DiscordWebHookController(ILogger logger, IOptions settings) { _logger = logger; _settings = settings.Value; _webhooks = new DiscordWebhooksTable(_settings.Database); } [HttpGet(Name = "GetDiscordWebhooks")] public IEnumerable Get(int page) { var items = new List(); var res = _webhooks.List(page); foreach (var item in res) { items.Add(DiscordWebHookDto.Convert(item)); } return items; } [HttpPost(Name = "New")] public DiscordWebHookDto New(string url, string server, string channel) { var exists = _webhooks.GetByUrl(url); // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract if (exists is not null) { return DiscordWebHookDto.Convert(exists); } var res = _webhooks.New(new DiscordWebHookModel { Url = url, Server = server, Channel = channel, Enabled = true, }); return DiscordWebHookDto.Convert(res); } [HttpGet("by/serverAndChannel")] public IEnumerable GetByServerAndChannel(string server, string channel) { var items = new List(); var res = _webhooks.ListByServerAndChannel(server, channel, 25); foreach (var item in res) { items.Add(DiscordWebHookDto.Convert(item)); } return items; } [HttpGet("{id}")] public DiscordWebHookDto GetById(Guid id) { var res = _webhooks.GetByID(id); return DiscordWebHookDto.Convert(res); } [HttpPost("{id}/disable")] public void DisableById(Guid id) { _webhooks.Disable(id); } [HttpPost("{id}/enable")] public void EnableById(Guid id) { _webhooks.Enable(id); } }