using System.Data; using Dapper; using Microsoft.Extensions.Configuration; using Newsbot.Collector.Domain.Models; using Npgsql; namespace Newsbot.Collector.Database.Repositories; public class SubscriptionsTable { private string _connectionString; public SubscriptionsTable(string connectionString) { _connectionString = connectionString; } public SubscriptionsTable(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(SubscriptionModel model) { using var conn = OpenConnection(_connectionString); var query = "Insert Into subscriptions (ID, DiscordWebHookId, SourceId) Values (@id, @webhookid, @sourceid);"; conn.Execute(query, new { id = Guid.NewGuid(), webhookid = model.DiscordWebHookID, sourceid = model.SourceID }); } public List List(int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "Select * From subscriptions Limit @limit;"; return conn.Query(query, new { limit = limit, }).ToList(); } // todo add paging public List ListBySourceID(Guid sourceID) { using var conn = OpenConnection(_connectionString); var query = "Select * From subscriptions where sourceid = @sourceid"; return conn.Query(query, new { sourceid = sourceID }).ToList(); } public List GetByWebhookAndSource(Guid webhookId, Guid sourceId) { using var conn = OpenConnection(_connectionString); var query = "Select * From subscriptions Where discordwebhookid = @webhookid and sourceid = @sourceid;"; return conn.Query(query, new { webhookid = webhookId, sourceid = sourceId, }).ToList(); } public List ListByWebhook(Guid webhookId) { using var conn = OpenConnection(_connectionString); var query = "Select * From subscriptions Where discordwebhookid = @webhookid"; return conn.Query(query, new { webhookid = webhookId, }).ToList(); } public void Delete(Guid id) { using var conn = OpenConnection(_connectionString); var query = "Delete From subscriptions Where id = @id;"; conn.Execute(query, new { id = id }); } }