using System.Data; using Dapper; using Microsoft.Extensions.Configuration; using Newsbot.Collector.Domain.Entities; using Newsbot.Collector.Domain.Interfaces; using Newsbot.Collector.Domain.Models; using Npgsql; namespace Newsbot.Collector.Database.Repositories; public class SubscriptionsTable : ISubscriptionRepository { //private readonly string _connectionString; private DatabaseContext _context; public SubscriptionsTable(string connectionString) { //_connectionString = connectionString; _context = new DatabaseContext(connectionString); } public SubscriptionsTable(DatabaseContext context) { _context = context; } public SubscriptionEntity New(SubscriptionEntity model) { model.Id = new Guid(); //using var context = new DatabaseContext(_connectionString); _context.Subscriptions.Add(model); _context.SaveChanges(); return model; } public List List(int page = 0, int count = 25) { //using var context = new DatabaseContext(_connectionString); return _context.Subscriptions.Skip(page * count).Take(count).ToList(); } public List ListBySourceId(Guid id, int page = 0, int count = 25) { //using var context = new DatabaseContext(_connectionString); return _context.Subscriptions.Where(f => f.SourceId.Equals(id)) .Skip(page * count) .ToList(); } public List ListByWebhook(Guid id, int page = 0, int count = 25) { //using var context = new DatabaseContext(_connectionString); return _context.Subscriptions.Where(f => f.DiscordWebHookId.Equals(id)).Skip(page * count).ToList(); } public SubscriptionEntity GetById(Guid id) { //using var context = new DatabaseContext(_connectionString); var res = _context.Subscriptions .FirstOrDefault(f => f.Id.Equals(id)); return res ??= new SubscriptionEntity(); } public SubscriptionEntity GetByWebhookAndSource(Guid webhookId, Guid sourceId) { //using var context = new DatabaseContext(_connectionString); var res = _context.Subscriptions .Where(f => f.DiscordWebHookId.Equals(webhookId)) .FirstOrDefault(f => f.SourceId.Equals(sourceId)); return res ??= new SubscriptionEntity(); } public void Delete(Guid id) { //using var context = new DatabaseContext(_connectionString); var res = _context.Subscriptions.FirstOrDefault(f => f.Id.Equals(id)); if (res is null) { return; } _context.Subscriptions.Remove(res); _context.SaveChanges(); } //private IDbConnection OpenConnection(string connectionString) //{ // var conn = new NpgsqlConnection(_connectionString); // conn.Open(); // return conn; //} }