using System.Data; using Dapper; using Microsoft.Extensions.Configuration; using Newsbot.Collector.Domain.Models; using Npgsql; namespace Newsbot.Collector.Database.Repositories; public class WebhooksTable { private string _connectionString; public WebhooksTable(string connectionString) { _connectionString = connectionString; } public WebhooksTable(IConfiguration configuration) { var connstr = configuration.GetConnectionString("database"); if (connstr is null) { connstr = ""; } _connectionString = connstr; } private IDbConnection OpenConnection(string connectionString) { var conn = new NpgsqlConnection(_connectionString); conn.Open(); return conn; } public void New(DiscordWebHook model) { using var conn = OpenConnection(_connectionString); var query = "Insert Into DiscordWebHooks (ID, Url, Server, Channel, Enabled) Values (@id, @url, @server, @channel, @enabled);"; conn.Execute(query, new { id = model.ID, url = model.Url, server = model.Server, channel = model.Channel, enabled = model.Enabled }); } public DiscordWebHook GetByID(Guid ID) { using var conn = OpenConnection(_connectionString); var query = "Select * from DiscordWebHooks Where ID = @id LIMIT 1;"; return conn.Query(query, new { id = ID }).First(); } public DiscordWebHook GetByUrl(string url) { using var conn = OpenConnection(_connectionString); var query = "Select * From DiscordWebHooks Where url = @url;"; return conn.QueryFirst(query, new { url = url }); } public List List(int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "Select * From DiscordWebHooks @limit;"; return conn.Query(query, new { limit = limit }).ToList(); } public List ListByServer(string server, int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "Select * From DiscordWebHooks Where Server = @id Limit @limit;"; return conn.Query(query, new { server = server, limit = limit }).ToList(); } public List ListByServerAndChannel(string server, string channel, int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "SELECT * FROM DiscordWebHooks WHERE Server = @server and Channel = @channel Limit @limit;"; return conn.Query(query, new { server = server, channel = channel, limit = limit }).ToList(); } public int Disable(Guid ID) { using var conn = OpenConnection(_connectionString); var query = "Update discordwebhooks Set Enabled = FALSE where ID = @id;"; return conn.Execute(query, new { id = ID }); } public int Enable(Guid ID) { using var conn = OpenConnection(_connectionString); var query = "Update discordwebhooks Set Enabled = TRUE where ID = @id;"; return conn.Execute(query, new { id = ID }); } }