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 SourcesTable : ISourcesRepository { private string _connectionString; public SourcesTable(string connectionString) { _connectionString = connectionString; } public SourcesTable(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 SourceModel New(SourceModel model) { model.ID = Guid.NewGuid(); using var conn = OpenConnection(_connectionString); var query = "Insert Into Sources (ID, Site, Name, Source, Type, Value, Enabled, Url, Tags) Values (@id ,@site,@name,@source,@type,@value,@enabled,@url,@tags);"; conn.Execute(query, new { id = model.ID, model.Site, model.Name, model.Source, model.Type, model.Value, model.Enabled, model.Url, model.Tags }); return model; } public SourceModel GetByID(Guid ID) { using var conn = OpenConnection(_connectionString); var query = "Select * From Sources where ID = @id Limit 1;"; var res = conn.Query(query, new { id = ID }); if (res.Count() == 0) { return new SourceModel(); } return res.First(); } public SourceModel GetByID(string ID) { var uid = Guid.Parse(ID); return GetByID(uid); } public SourceModel GetByName(string Name) { using var conn = OpenConnection(_connectionString); var query = "Select * from Sources where name = @name Limit 1;"; var res = conn.Query(query, new { name = Name }); if (res.Count() == 0) { return new SourceModel(); } return res.First(); } public SourceModel GetByNameAndSource(string name, string source) { using var conn = OpenConnection(_connectionString); var query = "Select * from Sources WHERE name = @name and source = @source;"; var res = conn.Query(query, new { name = name, source = source }); if (res.Count() == 0) { return new SourceModel(); } return res.First(); } public List List(int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "Select * From Sources Limit @limit;"; return conn.Query(query, new { limit = 25 }).ToList(); } public List ListBySource(string source, int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "Select * From Sources where Source = @source Limit @limit;"; return conn.Query(query, new { source = source, limit = limit }).ToList(); } public List ListByType(string type, int limit = 25) { using var conn = OpenConnection(_connectionString); var query = "Select * From Sources where Type = @type Limit @limit;"; return conn.Query(query, new { type = type, limit = limit }).ToList(); } public int Disable(Guid ID) { using var conn = OpenConnection(_connectionString); var query = "Update Sources 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 Sources Set Enabled = TRUE where ID = @id;"; return conn.Execute(query, new { id = ID }); } }