Compare commits

...

2 Commits

15 changed files with 212 additions and 195 deletions

View File

@ -0,0 +1,130 @@
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newsbot.Collector.Domain.Dto;
using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Interfaces;
namespace Newsbot.Collector.Api.Controllers;
[ApiController]
[Route("api/subscriptions")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class DiscordNotificationController : ControllerBase
{
private readonly ILogger<DiscordNotificationController> _logger;
private readonly IDiscordWebHooksRepository _discord;
private readonly ISourcesRepository _sources;
private readonly IDiscordNotificationRepository _discordNotification;
public DiscordNotificationController(ILogger<DiscordNotificationController> logger, IDiscordWebHooksRepository discord, ISourcesRepository sources, IDiscordNotificationRepository discordNotification)
{
_logger = logger;
_discord = discord;
_sources = sources;
_discordNotification = discordNotification;
}
[HttpGet(Name = "ListSubscriptions")]
public IEnumerable<DiscordNotificationDto> List(int page)
{
var res = new List<DiscordNotificationDto>();
var items = _discordNotification.List(page);
foreach (var item in items) res.Add(DiscordNotificationDto.Convert(item));
return res;
}
[HttpGet("{id}")]
public DiscordNotificationDto GetById(Guid id)
{
return DiscordNotificationDto.Convert(_discordNotification.GetById(id));
}
[HttpGet("{id}/details")]
public DiscordNotificationDetailsDto GetDetailsById(Guid id)
{
var sub = _discordNotification.GetById(id);
var webhook = _discord.GetById(sub.DiscordWebHookId);
var source = _sources.GetById(sub.SourceId);
return DiscordNotificationDetailsDto.Convert(sub, source, webhook);
}
[HttpPost("{id}/delete")]
public void DeleteById(Guid id)
{
_discordNotification.Delete(id);
}
[HttpGet("by/discordId/{id}")]
public IEnumerable<DiscordNotificationDto> GetByDiscordId(Guid id)
{
var res = new List<DiscordNotificationDto>();
var items = _discordNotification.ListByWebhook(id);
foreach (var item in items) res.Add(DiscordNotificationDto.Convert(item));
return res;
}
[HttpGet("by/sourceId/{id}")]
public IEnumerable<DiscordNotificationDto> GetBySourceId(Guid id)
{
var res = new List<DiscordNotificationDto>();
var items = _discordNotification.ListBySourceId(id);
foreach (var item in items) res.Add(DiscordNotificationDto.Convert(item));
return res;
}
[HttpPost(Name = "New Subscription")]
public ActionResult<DiscordNotificationDto> New(Guid sourceId, Guid discordId)
{
if (sourceId == Guid.Empty) return new BadRequestResult();
if (discordId == Guid.Empty) return new BadRequestResult();
var exists = _discordNotification.GetByWebhookAndSource(discordId, sourceId);
if (exists.Id != Guid.Empty) return DiscordNotificationDto.Convert(exists);
var discord = _discord.GetById(discordId);
if (discord.Id == Guid.Empty) return new BadRequestResult();
var source = _sources.GetById(sourceId);
if (source.Id == Guid.Empty) return new BadRequestResult();
var item = _discordNotification.New(new DiscordNotificationEntity
{
Id = Guid.NewGuid(),
SourceId = sourceId,
DiscordWebHookId = discordId,
CodeAllowCommits = false,
CodeAllowReleases = false
});
return DiscordNotificationDto.Convert(item);
}
[HttpPost("new/codeproject")]
public ActionResult<DiscordNotificationDto> NewCodeProjectSubscription(Guid sourceId, Guid discordId, bool allowReleases,
bool allowCommits)
{
if (sourceId == Guid.Empty) return new BadRequestResult();
if (discordId == Guid.Empty) return new BadRequestResult();
var exists = _discordNotification.GetByWebhookAndSource(discordId, sourceId);
if (exists.Id != Guid.Empty) return DiscordNotificationDto.Convert(exists);
var discord = _discord.GetById(discordId);
if (discord.Id == Guid.Empty) return new BadRequestResult();
var source = _sources.GetById(sourceId);
if (source.Id == Guid.Empty) return new BadRequestResult();
var sub = _discordNotification.New(new DiscordNotificationEntity
{
DiscordWebHookId = discordId,
SourceId = sourceId,
CodeAllowCommits = allowCommits,
CodeAllowReleases = allowReleases
});
return new DiscordNotificationDto();
}
}

View File

@ -1,133 +0,0 @@
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Newsbot.Collector.Database.Repositories;
using Newsbot.Collector.Domain.Dto;
using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Interfaces;
using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Api.Controllers;
[ApiController]
[Route("api/subscriptions")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class SubscriptionsController : ControllerBase
{
private readonly ILogger<SubscriptionsController> _logger;
private readonly IDiscordWebHooksRepository _discord;
private readonly ISourcesRepository _sources;
private readonly ISubscriptionRepository _subscription;
public SubscriptionsController(ILogger<SubscriptionsController> logger, IDiscordWebHooksRepository discord, ISourcesRepository sources, ISubscriptionRepository subscription)
{
_logger = logger;
_discord = discord;
_sources = sources;
_subscription = subscription;
}
[HttpGet(Name = "ListSubscriptions")]
public IEnumerable<SubscriptionDto> List(int page)
{
var res = new List<SubscriptionDto>();
var items = _subscription.List(page);
foreach (var item in items) res.Add(SubscriptionDto.Convert(item));
return res;
}
[HttpGet("{id}")]
public SubscriptionDto GetById(Guid id)
{
return SubscriptionDto.Convert(_subscription.GetById(id));
}
[HttpGet("{id}/details")]
public SubscriptionDetailsDto GetDetailsById(Guid id)
{
var sub = _subscription.GetById(id);
var webhook = _discord.GetById(sub.DiscordWebHookId);
var source = _sources.GetById(sub.SourceId);
return SubscriptionDetailsDto.Convert(sub, source, webhook);
}
[HttpPost("{id}/delete")]
public void DeleteById(Guid id)
{
_subscription.Delete(id);
}
[HttpGet("by/discordid/{id}")]
public IEnumerable<SubscriptionDto> GetByDiscordId(Guid id)
{
var res = new List<SubscriptionDto>();
var items = _subscription.ListByWebhook(id);
foreach (var item in items) res.Add(SubscriptionDto.Convert(item));
return res;
}
[HttpGet("by/sourceId/{id}")]
public IEnumerable<SubscriptionDto> GetBySourceId(Guid id)
{
var res = new List<SubscriptionDto>();
var items = _subscription.ListBySourceId(id);
foreach (var item in items) res.Add(SubscriptionDto.Convert(item));
return res;
}
[HttpPost(Name = "New Subscription")]
public ActionResult<SubscriptionDto> New(Guid sourceId, Guid discordId)
{
if (sourceId == Guid.Empty) return new BadRequestResult();
if (discordId == Guid.Empty) return new BadRequestResult();
var exists = _subscription.GetByWebhookAndSource(discordId, sourceId);
if (exists.Id != Guid.Empty) return SubscriptionDto.Convert(exists);
var discord = _discord.GetById(discordId);
if (discord.Id == Guid.Empty) return new BadRequestResult();
var source = _sources.GetById(sourceId);
if (source.Id == Guid.Empty) return new BadRequestResult();
var item = _subscription.New(new SubscriptionEntity
{
Id = Guid.NewGuid(),
SourceId = sourceId,
DiscordWebHookId = discordId,
CodeAllowCommits = false,
CodeAllowReleases = false
});
return SubscriptionDto.Convert(item);
}
[HttpPost("new/codeproject")]
public ActionResult<SubscriptionDto> NewCodeProjectSubscription(Guid sourceId, Guid discordId, bool allowReleases,
bool allowCommits)
{
if (sourceId == Guid.Empty) return new BadRequestResult();
if (discordId == Guid.Empty) return new BadRequestResult();
var exists = _subscription.GetByWebhookAndSource(discordId, sourceId);
if (exists.Id != Guid.Empty) return SubscriptionDto.Convert(exists);
var discord = _discord.GetById(discordId);
if (discord.Id == Guid.Empty) return new BadRequestResult();
var source = _sources.GetById(sourceId);
if (source.Id == Guid.Empty) return new BadRequestResult();
var sub = _subscription.New(new SubscriptionEntity
{
DiscordWebHookId = discordId,
SourceId = sourceId,
CodeAllowCommits = allowCommits,
CodeAllowReleases = allowReleases
});
return new SubscriptionDto();
}
}

View File

@ -48,7 +48,7 @@ builder.Services.AddScoped<IDiscordQueueRepository, DiscordQueueTable>();
builder.Services.AddScoped<IDiscordWebHooksRepository, DiscordWebhooksTable>(); builder.Services.AddScoped<IDiscordWebHooksRepository, DiscordWebhooksTable>();
builder.Services.AddScoped<IIconsRepository, IconsTable>(); builder.Services.AddScoped<IIconsRepository, IconsTable>();
builder.Services.AddScoped<ISourcesRepository, SourcesTable>(); builder.Services.AddScoped<ISourcesRepository, SourcesTable>();
builder.Services.AddScoped<ISubscriptionRepository, SubscriptionsTable>(); builder.Services.AddScoped<IDiscordNotificationRepository, DiscordNotificationTable>();
// Configure Identity // Configure Identity
builder.Services.AddScoped<IIdentityService, IdentityService>(); builder.Services.AddScoped<IIdentityService, IdentityService>();

View File

@ -10,11 +10,12 @@ namespace Newsbot.Collector.Database;
public class DatabaseContext : IdentityDbContext public class DatabaseContext : IdentityDbContext
{ {
public DbSet<ArticlesEntity> Articles { get; set; } = null!; public DbSet<ArticlesEntity> Articles { get; set; } = null!;
public DbSet<DiscordNotificationEntity> DiscordNotification { get; set; } = null!;
public DbSet<DiscordQueueEntity> DiscordQueue { get; set; } = null!; public DbSet<DiscordQueueEntity> DiscordQueue { get; set; } = null!;
public DbSet<DiscordWebhookEntity> DiscordWebhooks { get; set; } = null!; public DbSet<DiscordWebhookEntity> DiscordWebhooks { get; set; } = null!;
public DbSet<IconEntity> Icons { get; set; } = null!; public DbSet<IconEntity> Icons { get; set; } = null!;
public DbSet<SourceEntity> Sources { get; set; } = null!; public DbSet<SourceEntity> Sources { get; set; } = null!;
public DbSet<SubscriptionEntity> Subscriptions { get; set; } = null!;
//public DbSet<UserEntity> Users { get; set; } = null!; //public DbSet<UserEntity> Users { get; set; } = null!;

View File

@ -8,78 +8,78 @@ using Npgsql;
namespace Newsbot.Collector.Database.Repositories; namespace Newsbot.Collector.Database.Repositories;
public class SubscriptionsTable : ISubscriptionRepository public class DiscordNotificationTable : IDiscordNotificationRepository
{ {
//private readonly string _connectionString; //private readonly string _connectionString;
private DatabaseContext _context; private DatabaseContext _context;
public SubscriptionsTable(string connectionString) public DiscordNotificationTable(string connectionString)
{ {
//_connectionString = connectionString; //_connectionString = connectionString;
_context = new DatabaseContext(connectionString); _context = new DatabaseContext(connectionString);
} }
public SubscriptionsTable(DatabaseContext context) public DiscordNotificationTable(DatabaseContext context)
{ {
_context = context; _context = context;
} }
public SubscriptionEntity New(SubscriptionEntity model) public DiscordNotificationEntity New(DiscordNotificationEntity model)
{ {
model.Id = new Guid(); model.Id = new Guid();
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
_context.Subscriptions.Add(model); _context.DiscordNotification.Add(model);
_context.SaveChanges(); _context.SaveChanges();
return model; return model;
} }
public List<SubscriptionEntity> List(int page = 0, int count = 25) public List<DiscordNotificationEntity> List(int page = 0, int count = 25)
{ {
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
return _context.Subscriptions.Skip(page * count).Take(count).ToList(); return _context.DiscordNotification.Skip(page * count).Take(count).ToList();
} }
public List<SubscriptionEntity> ListBySourceId(Guid id, int page = 0, int count = 25) public List<DiscordNotificationEntity> ListBySourceId(Guid id, int page = 0, int count = 25)
{ {
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
return _context.Subscriptions.Where(f => f.SourceId.Equals(id)) return _context.DiscordNotification.Where(f => f.SourceId.Equals(id))
.Skip(page * count) .Skip(page * count)
.ToList(); .ToList();
} }
public List<SubscriptionEntity> ListByWebhook(Guid id, int page = 0, int count = 25) public List<DiscordNotificationEntity> ListByWebhook(Guid id, int page = 0, int count = 25)
{ {
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
return _context.Subscriptions.Where(f => f.DiscordWebHookId.Equals(id)).Skip(page * count).ToList(); return _context.DiscordNotification.Where(f => f.DiscordWebHookId.Equals(id)).Skip(page * count).ToList();
} }
public SubscriptionEntity GetById(Guid id) public DiscordNotificationEntity GetById(Guid id)
{ {
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
var res = _context.Subscriptions var res = _context.DiscordNotification
.FirstOrDefault(f => f.Id.Equals(id)); .FirstOrDefault(f => f.Id.Equals(id));
return res ??= new SubscriptionEntity(); return res ??= new DiscordNotificationEntity();
} }
public SubscriptionEntity GetByWebhookAndSource(Guid webhookId, Guid sourceId) public DiscordNotificationEntity GetByWebhookAndSource(Guid webhookId, Guid sourceId)
{ {
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
var res = _context.Subscriptions var res = _context.DiscordNotification
.Where(f => f.DiscordWebHookId.Equals(webhookId)) .Where(f => f.DiscordWebHookId.Equals(webhookId))
.FirstOrDefault(f => f.SourceId.Equals(sourceId)); .FirstOrDefault(f => f.SourceId.Equals(sourceId));
return res ??= new SubscriptionEntity(); return res ??= new DiscordNotificationEntity();
} }
public void Delete(Guid id) public void Delete(Guid id)
{ {
//using var context = new DatabaseContext(_connectionString); //using var context = new DatabaseContext(_connectionString);
var res = _context.Subscriptions.FirstOrDefault(f => f.Id.Equals(id)); var res = _context.DiscordNotification.FirstOrDefault(f => f.Id.Equals(id));
if (res is null) if (res is null)
{ {
return; return;
} }
_context.Subscriptions.Remove(res); _context.DiscordNotification.Remove(res);
_context.SaveChanges(); _context.SaveChanges();
} }

View File

@ -3,7 +3,7 @@ using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Domain.Dto; namespace Newsbot.Collector.Domain.Dto;
public class SubscriptionDetailsDto public class DiscordNotificationDetailsDto
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
public bool CodeAllowReleases { get; set; } public bool CodeAllowReleases { get; set; }
@ -11,14 +11,14 @@ public class SubscriptionDetailsDto
public SourceDto? Source { get; set; } public SourceDto? Source { get; set; }
public DiscordWebHookDto? DiscordWebHook { get; set; } public DiscordWebHookDto? DiscordWebHook { get; set; }
public static SubscriptionDetailsDto Convert(SubscriptionEntity subscription, SourceEntity source, public static DiscordNotificationDetailsDto Convert(DiscordNotificationEntity discordNotification, SourceEntity source,
DiscordWebhookEntity discord) DiscordWebhookEntity discord)
{ {
return new SubscriptionDetailsDto return new DiscordNotificationDetailsDto
{ {
Id = subscription.Id, Id = discordNotification.Id,
CodeAllowCommits = subscription.CodeAllowCommits, CodeAllowCommits = discordNotification.CodeAllowCommits,
CodeAllowReleases = subscription.CodeAllowReleases, CodeAllowReleases = discordNotification.CodeAllowReleases,
Source = SourceDto.Convert(source), Source = SourceDto.Convert(source),
DiscordWebHook = DiscordWebHookDto.Convert(discord) DiscordWebHook = DiscordWebHookDto.Convert(discord)
}; };

View File

@ -3,7 +3,7 @@ using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Domain.Dto; namespace Newsbot.Collector.Domain.Dto;
public class SubscriptionDto public class DiscordNotificationDto
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
public Guid SourceId { get; set; } public Guid SourceId { get; set; }
@ -11,9 +11,9 @@ public class SubscriptionDto
public bool CodeAllowReleases { get; set; } public bool CodeAllowReleases { get; set; }
public bool CodeAllowCommits { get; set; } public bool CodeAllowCommits { get; set; }
public static SubscriptionDto Convert(SubscriptionEntity model) public static DiscordNotificationDto Convert(DiscordNotificationEntity model)
{ {
return new SubscriptionDto return new DiscordNotificationDto
{ {
Id = model.Id, Id = model.Id,
SourceId = model.SourceId, SourceId = model.SourceId,

View File

@ -1,6 +1,6 @@
namespace Newsbot.Collector.Domain.Entities; namespace Newsbot.Collector.Domain.Entities;
public class SubscriptionEntity public class DiscordNotificationEntity
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
public bool CodeAllowReleases { get; set; } public bool CodeAllowReleases { get; set; }

View File

@ -2,7 +2,7 @@ using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Domain.Interfaces; namespace Newsbot.Collector.Domain.Interfaces;
public interface IDiscordNotificatioClient public interface IDiscordClient
{ {
void SendMessage(DiscordMessage payload); void SendMessage(DiscordMessage payload);
} }

View File

@ -0,0 +1,18 @@
using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Domain.Interfaces;
public interface IDiscordNotificationRepository
{
DiscordNotificationEntity New(DiscordNotificationEntity model);
List<DiscordNotificationEntity> List(int page = 0, int count = 25);
List<DiscordNotificationEntity> ListBySourceId(Guid id, int page = 0, int count = 25);
List<DiscordNotificationEntity> ListByWebhook(Guid id, int page = 0, int count = 25);
DiscordNotificationEntity GetById(Guid id);
DiscordNotificationEntity GetByWebhookAndSource(Guid webhookId, Guid sourceId);
void Delete(Guid id);
}

View File

@ -1,18 +0,0 @@
using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Domain.Interfaces;
public interface ISubscriptionRepository
{
SubscriptionEntity New(SubscriptionEntity model);
List<SubscriptionEntity> List(int page = 0, int count = 25);
List<SubscriptionEntity> ListBySourceId(Guid id, int page = 0, int count = 25);
List<SubscriptionEntity> ListByWebhook(Guid id, int page = 0, int count = 25);
SubscriptionEntity GetById(Guid id);
SubscriptionEntity GetByWebhookAndSource(Guid webhookId, Guid sourceId);
void Delete(Guid id);
}

View File

@ -1,3 +1,4 @@
using Newsbot.Collector.Database;
using Newsbot.Collector.Database.Repositories; using Newsbot.Collector.Database.Repositories;
using Newsbot.Collector.Domain.Entities; using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Interfaces; using Newsbot.Collector.Domain.Interfaces;
@ -32,13 +33,13 @@ public class DiscordNotificationJobOptions
public class DiscordNotificationJob public class DiscordNotificationJob
{ {
private const string JobName = "DiscordNotifications"; private const string JobName = "DiscordNotifications";
private ILogger _logger;
//private DatabaseContext _databaseContext;
private IArticlesRepository _article; private IArticlesRepository _article;
private IIconsRepository _icons; private IIconsRepository _icons;
private ILogger _logger;
private IDiscordQueueRepository _queue; private IDiscordQueueRepository _queue;
private ISourcesRepository _sources; private ISourcesRepository _sources;
private ISubscriptionRepository _subs; private IDiscordNotificationRepository _subs;
private IDiscordWebHooksRepository _webhook; private IDiscordWebHooksRepository _webhook;
public DiscordNotificationJob() public DiscordNotificationJob()
@ -47,18 +48,19 @@ public class DiscordNotificationJob
_article = new ArticlesTable(""); _article = new ArticlesTable("");
_webhook = new DiscordWebhooksTable(""); _webhook = new DiscordWebhooksTable("");
_sources = new SourcesTable(""); _sources = new SourcesTable("");
_subs = new SubscriptionsTable(""); _subs = new DiscordNotificationTable("");
_icons = new IconsTable(""); _icons = new IconsTable("");
_logger = JobLogger.GetLogger("", JobName); _logger = JobLogger.GetLogger("", JobName);
} }
public void InitAndExecute(DiscordNotificationJobOptions options) public void InitAndExecute(DiscordNotificationJobOptions options)
{ {
//_databaseContext = new DatabaseContext(options.ConnectionString ?? "");
_queue = new DiscordQueueTable(options.ConnectionString ?? ""); _queue = new DiscordQueueTable(options.ConnectionString ?? "");
_article = new ArticlesTable(options.ConnectionString ?? ""); _article = new ArticlesTable(options.ConnectionString ?? "");
_webhook = new DiscordWebhooksTable(options.ConnectionString ?? ""); _webhook = new DiscordWebhooksTable(options.ConnectionString ?? "");
_sources = new SourcesTable(options.ConnectionString ?? ""); _sources = new SourcesTable(options.ConnectionString ?? "");
_subs = new SubscriptionsTable(options.ConnectionString ?? ""); _subs = new DiscordNotificationTable(options.ConnectionString ?? "");
_icons = new IconsTable(options.ConnectionString ?? ""); _icons = new IconsTable(options.ConnectionString ?? "");
_logger = JobLogger.GetLogger(options.OpenTelemetry ?? "", JobName); _logger = JobLogger.GetLogger(options.OpenTelemetry ?? "", JobName);
@ -76,6 +78,7 @@ public class DiscordNotificationJob
private void Execute() private void Execute()
{ {
//collect all the new requests //collect all the new requests
var requests = _queue.List(100); var requests = _queue.List(100);
_logger.Debug($"{JobName} - Collected {requests.Count} items to send"); _logger.Debug($"{JobName} - Collected {requests.Count} items to send");
@ -121,7 +124,7 @@ public class DiscordNotificationJob
_queue.Delete(request.Id); _queue.Delete(request.Id);
} }
public void SendSubscriptionNotification(Guid requestId, ArticlesEntity articleDetails, SourceEntity sourceDetails, IconEntity sourceIcon, SubscriptionEntity sub) public void SendSubscriptionNotification(Guid requestId, ArticlesEntity articleDetails, SourceEntity sourceDetails, IconEntity sourceIcon, DiscordNotificationEntity sub)
{ {
// Check if the subscription code flags // Check if the subscription code flags
// If the article is a code commit and the subscription does not want them, skip. // If the article is a code commit and the subscription does not want them, skip.
@ -134,7 +137,7 @@ public class DiscordNotificationJob
var discordDetails = _webhook.GetById(sub.DiscordWebHookId); var discordDetails = _webhook.GetById(sub.DiscordWebHookId);
if (discordDetails.Enabled == false) return; if (discordDetails.Enabled == false) return;
var client = new DiscordWebhookClient(discordDetails.Url); var client = new DiscordClient(discordDetails.Url);
try try
{ {
client.SendMessage(GenerateDiscordMessage(sourceDetails, articleDetails, sourceIcon)); client.SendMessage(GenerateDiscordMessage(sourceDetails, articleDetails, sourceIcon));

View File

@ -6,16 +6,16 @@ using Newtonsoft.Json;
namespace Newsbot.Collector.Services.Notifications.Discord; namespace Newsbot.Collector.Services.Notifications.Discord;
public class DiscordWebhookClient : IDiscordNotificatioClient public class DiscordClient : IDiscordClient
{ {
private readonly string[] _webhooks; private readonly string[] _webhooks;
public DiscordWebhookClient(string webhook) public DiscordClient(string webhook)
{ {
_webhooks = new[] { webhook }; _webhooks = new[] { webhook };
} }
public DiscordWebhookClient(string[] webhooks) public DiscordClient(string[] webhooks)
{ {
_webhooks = webhooks; _webhooks = webhooks;
} }

View File

@ -10,7 +10,7 @@ public class DiscordNotificationJobTest
public void PostTestMessage() public void PostTestMessage()
{ {
var uri = ""; var uri = "";
var webhookClient = new DiscordWebhookClient(uri); var webhookClient = new DiscordClient(uri);
var client = new DiscordNotificationJob(); var client = new DiscordNotificationJob();
var msg = client.GenerateDiscordMessage(new SourceEntity var msg = client.GenerateDiscordMessage(new SourceEntity
@ -78,7 +78,7 @@ public class DiscordNotificationJobTest
Id = Guid.NewGuid(), Id = Guid.NewGuid(),
FileName = "https://www.redditstatic.com/desktop2x/img/favicon/android-icon-192x192.png" FileName = "https://www.redditstatic.com/desktop2x/img/favicon/android-icon-192x192.png"
}, },
new SubscriptionEntity new DiscordNotificationEntity
{ {
CodeAllowCommits = false, CodeAllowCommits = false,
CodeAllowReleases = true CodeAllowReleases = true

View File

@ -0,0 +1,16 @@
using Microsoft.Extensions.Configuration;
using Newsbot.Collector.Database.Repositories;
using Newsbot.Collector.Domain.Consts;
namespace Newsbot.Collector.Tests.Tables;
public class DiscordQueueTableTests
{
[Fact]
public void TableListsData()
{
var str = TestHelper.LoadConfig().GetConnectionString("Database") ?? "";
var context = new DiscordQueueTable(str);
var results = context.List();
}
}