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 SubscriptionsTable : ISubscriptionRepository { 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 SubscriptionModel New(SubscriptionModel model) { model.ID = Guid.NewGuid(); using var conn = OpenConnection(_connectionString); var query = "Insert Into subscriptions (ID, DiscordWebHookId, SourceId) Values (@id, @webhookid, @sourceid);"; conn.Execute(query, new { id = model.ID, webhookid = model.DiscordWebHookID, sourceid = model.SourceID }); return model; } public List List(int page = 0, int count = 25) { using var conn = OpenConnection(_connectionString); var query = @"Select * From subscriptions Offset @page Fetch Next @count Rows Only;"; return conn.Query(query, new { page = page * count, count = count }).ToList(); } public List ListBySourceID(Guid id, int page = 0, int count = 25) { using var conn = OpenConnection(_connectionString); var query = @"Select * From subscriptions Where sourceid = @sourceid Offset @page Fetch Next @count Rows Only"; return conn.Query(query, new { page = page * count, count = count, sourceid = id }).ToList(); } public List ListByWebhook(Guid id, int page = 0, int count = 25) { using var conn = OpenConnection(_connectionString); var query = @"Select * From subscriptions Where discordwebhookid = @webhookid Offset @page Fetch Next @count Rows Only"; return conn.Query(query, new { page = page * count, count = count, webhookid = id, }).ToList(); } public SubscriptionModel GetById(Guid id) { using var conn = OpenConnection(_connectionString); var query = @"Select * From subscriptions Where id = @id;"; var res = conn.Query(query, new { id = id, }); if (res.Count() == 0) { return new SubscriptionModel(); } return res.First(); } public SubscriptionModel GetByWebhookAndSource(Guid webhookId, Guid sourceId) { using var conn = OpenConnection(_connectionString); var query = @"Select * From subscriptions Where discordwebhookid = @webhookid and sourceid = @sourceid;"; var res = conn.Query(query, new { webhookid = webhookId, sourceid = sourceId, }); if (res.Count() == 0) { return new SubscriptionModel(); } return res.First(); } public void Delete(Guid id) { using var conn = OpenConnection(_connectionString); var query = "Delete From subscriptions Where id = @id;"; conn.Execute(query, new { id = id }); } }