using System.Data; using Dapper; using Microsoft.Extensions.Configuration; using Newsbot.Collector.Domain.Interfaces; using Newsbot.Collector.Domain.Models; using Npgsql; namespace Newsbot.Collector.Database.Repositories; public class DiscordWebhooksTable : IDiscordWebHooksRepository { private readonly string _connectionString; public DiscordWebhooksTable(string connectionString) { _connectionString = connectionString; } public DiscordWebhooksTable(IConfiguration configuration) { var connstr = configuration.GetConnectionString("database") ?? ""; _connectionString = connstr; } public DiscordWebHookModel New(DiscordWebHookModel model) { var uid = Guid.NewGuid(); 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 = uid, url = model.Url, server = model.Server, channel = model.Channel, enabled = model.Enabled }); model.ID = uid; return model; } public DiscordWebHookModel GetByID(Guid id) { using var conn = OpenConnection(_connectionString); var query = "Select * from DiscordWebHooks Where ID = @id LIMIT 1;"; return conn.Query(query, new { id }).First(); } public DiscordWebHookModel GetByUrl(string url) { using var conn = OpenConnection(_connectionString); var query = "Select * From DiscordWebHooks Where url = @url;"; try { var res = conn.QueryFirst(query, new { url }); return res; } catch { return new DiscordWebHookModel(); } } public List List(int page, int count = 25) { using var conn = OpenConnection(_connectionString); var query = @"Select * From DiscordWebHooks Offset @offset Fetch Next @count Rows Only;"; return conn.Query(query, new { offset = page * count, count }).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, 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, channel, 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 }); } 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 }); } private IDbConnection OpenConnection(string connectionString) { var conn = new NpgsqlConnection(_connectionString); conn.Open(); return conn; } }