subscriptions updated for ef

This commit is contained in:
James Tombleson 2023-06-25 21:02:26 -07:00
parent c2b0f47d1c
commit 49342a8c39
6 changed files with 52 additions and 89 deletions

View File

@ -1,6 +1,7 @@
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;
@ -23,104 +24,64 @@ public class SubscriptionsTable : ISubscriptionRepository
_connectionString = connstr;
}
public SubscriptionModel New(SubscriptionModel model)
public SubscriptionEntity New(SubscriptionEntity model)
{
model.Id = Guid.NewGuid();
using var conn = OpenConnection(_connectionString);
var query =
"Insert Into subscriptions (ID, DiscordWebHookId, SourceId, codeAllowCommits, codeAllowReleases) Values (@id, @webhookId, @sourceId, @codeAllowCommits, @codeAllowReleases);";
try
{
conn.Execute(query, new
{
id = model.Id,
webhookId = model.DiscordWebHookId,
sourceId = model.SourceId,
codeAllowCommits = model.CodeAllowCommits,
codeAllowReleases = model.CodeAllowReleases
});
return model;
}
catch
{
return new SubscriptionModel();
}
model.Id = new Guid();
using var context = new DatabaseContext(_connectionString);
context.Subscriptions.Add(model);
context.SaveChanges();
return model;
}
public List<SubscriptionModel> List(int page = 0, int count = 25)
public List<SubscriptionEntity> 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<SubscriptionModel>(query, new
{
page = page * count, count
}).ToList();
using var context = new DatabaseContext(_connectionString);
return context.Subscriptions.Skip(page * count).Take(count).ToList();
}
public List<SubscriptionModel> ListBySourceID(Guid id, int page = 0, int count = 25)
public List<SubscriptionEntity> 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<SubscriptionModel>(query, new
{
page = page * count,
count,
sourceid = id
}).ToList();
using var context = new DatabaseContext(_connectionString);
return context.Subscriptions.Where(f => f.SourceId.Equals(id))
.Skip(page * count)
.ToList();
}
public List<SubscriptionModel> ListByWebhook(Guid id, int page = 0, int count = 25)
public List<SubscriptionEntity> 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<SubscriptionModel>(query, new
{
page = page * count,
count,
webhookid = id
}).ToList();
using var context = new DatabaseContext(_connectionString);
return context.Subscriptions.Where(f => f.DiscordWebHookId.Equals(id)).Skip(page * count).ToList();
}
public SubscriptionModel GetById(Guid id)
public SubscriptionEntity GetById(Guid id)
{
using var conn = OpenConnection(_connectionString);
var query = @"Select * From subscriptions Where id = @id;";
var res = conn.Query<SubscriptionModel>(query, new
{
id
});
if (res.Count() == 0) return new SubscriptionModel();
return res.First();
using var context = new DatabaseContext(_connectionString);
var res = context.Subscriptions
.FirstOrDefault(f => f.Id.Equals(id));
return res ??= new SubscriptionEntity();
}
public SubscriptionModel GetByWebhookAndSource(Guid webhookId, Guid sourceId)
public SubscriptionEntity 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<SubscriptionModel>(query, new
{
webhookid = webhookId,
sourceid = sourceId
});
if (res.Count() == 0) return new SubscriptionModel();
return res.First();
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 conn = OpenConnection(_connectionString);
var query = "Delete From subscriptions Where id = @id;";
conn.Execute(query, new
using var context = new DatabaseContext(_connectionString);
var res = context.Subscriptions.FirstOrDefault(f => f.Id.Equals(id));
if (res is null)
{
id
});
return;
}
context.Subscriptions.Remove(res);
context.SaveChanges();
}
private IDbConnection OpenConnection(string connectionString)

View File

@ -11,7 +11,7 @@ public class SubscriptionDetailsDto
public SourceDto? Source { get; set; }
public DiscordWebHookDto? DiscordWebHook { get; set; }
public static SubscriptionDetailsDto Convert(SubscriptionModel subscription, SourceEntity source,
public static SubscriptionDetailsDto Convert(SubscriptionEntity subscription, SourceEntity source,
DiscordWebhookEntity discord)
{
return new SubscriptionDetailsDto

View File

@ -1,3 +1,4 @@
using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Models;
namespace Newsbot.Collector.Domain.Dto;
@ -10,7 +11,7 @@ public class SubscriptionDto
public bool CodeAllowReleases { get; set; }
public bool CodeAllowCommits { get; set; }
public static SubscriptionDto Convert(SubscriptionModel model)
public static SubscriptionDto Convert(SubscriptionEntity model)
{
return new SubscriptionDto
{

View File

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

View File

@ -112,7 +112,7 @@ public class DiscordNotificationJob
}
// Find all the subscriptions for that source
var allSubscriptions = _subs.ListBySourceID(sourceDetails.Id);
var allSubscriptions = _subs.ListBySourceId(sourceDetails.Id);
foreach (var sub in allSubscriptions)
SendSubscriptionNotification(request.Id, articleDetails, sourceDetails, sourceIcon, sub);
@ -121,7 +121,7 @@ public class DiscordNotificationJob
_queue.Delete(request.Id);
}
public void SendSubscriptionNotification(Guid requestId, ArticlesEntity articleDetails, SourceEntity sourceDetails, IconEntity sourceIcon, SubscriptionModel sub)
public void SendSubscriptionNotification(Guid requestId, ArticlesEntity articleDetails, SourceEntity sourceDetails, IconEntity sourceIcon, SubscriptionEntity sub)
{
// Check if the subscription code flags
// If the article is a code commit and the subscription does not want them, skip.

View File

@ -1,5 +1,4 @@
using Newsbot.Collector.Domain.Entities;
using Newsbot.Collector.Domain.Models;
using Newsbot.Collector.Services.Jobs;
using Newsbot.Collector.Services.Notifications.Discord;
@ -79,7 +78,7 @@ public class DiscordNotificationJobTest
Id = Guid.NewGuid(),
FileName = "https://www.redditstatic.com/desktop2x/img/favicon/android-icon-192x192.png"
},
new SubscriptionModel
new SubscriptionEntity
{
CodeAllowCommits = false,
CodeAllowReleases = true
@ -88,6 +87,7 @@ public class DiscordNotificationJobTest
}
catch (MessageTypeNotRequestedException)
{
Console.Write($"Message did not send as expected");
}