From 82dea60126e6355bb32bfccbcb6bef572e2e64c3 Mon Sep 17 00:00:00 2001 From: James Tombleson Date: Sat, 29 Jul 2023 09:44:15 -0700 Subject: [PATCH] Updated DiscordWebHooks to handle userId --- .../v1/DiscordNotificationController.cs | 4 +- .../v1/DiscordWebHooksController.cs | 40 +++++++++++++------ .../Repositories/DiscordWebhooksTable.cs | 25 ++++++++---- .../Interfaces/IDiscordWebHooksRepository.cs | 8 ++-- .../Requests/NewDiscordWebhookRequest.cs | 8 ++++ .../Results/DiscordWebhookResult.cs | 8 ++++ 6 files changed, 69 insertions(+), 24 deletions(-) create mode 100644 Newsbot.Collector.Domain/Requests/NewDiscordWebhookRequest.cs create mode 100644 Newsbot.Collector.Domain/Results/DiscordWebhookResult.cs diff --git a/Newsbot.Collector.Api/Controllers/v1/DiscordNotificationController.cs b/Newsbot.Collector.Api/Controllers/v1/DiscordNotificationController.cs index c66951d..2d169ff 100644 --- a/Newsbot.Collector.Api/Controllers/v1/DiscordNotificationController.cs +++ b/Newsbot.Collector.Api/Controllers/v1/DiscordNotificationController.cs @@ -91,7 +91,7 @@ public class DiscordNotificationController : ControllerBase } var sub = _discordNotification.GetById(userId, id); - var webhook = _discord.GetById(sub.DiscordWebHookId); + var webhook = _discord.GetById(userId, sub.DiscordWebHookId); var source = _sources.GetById(sub.SourceId); return new OkObjectResult(new DiscordNotificationDetailsResult @@ -206,7 +206,7 @@ public class DiscordNotificationController : ControllerBase var exists = _discordNotification.GetByWebhookAndSource(userId, request.DiscordId, request.SourceId); if (exists.Id != Guid.Empty) return DiscordNotificationDto.Convert(exists); - var discord = _discord.GetById(request.DiscordId); + var discord = _discord.GetById(userId, request.DiscordId); if (discord.Id == Guid.Empty) return new BadRequestObjectResult(new DiscordNotificationResult { IsSuccessful = false, diff --git a/Newsbot.Collector.Api/Controllers/v1/DiscordWebHooksController.cs b/Newsbot.Collector.Api/Controllers/v1/DiscordWebHooksController.cs index a0d745d..28a1ebc 100644 --- a/Newsbot.Collector.Api/Controllers/v1/DiscordWebHooksController.cs +++ b/Newsbot.Collector.Api/Controllers/v1/DiscordWebHooksController.cs @@ -7,6 +7,8 @@ using Newsbot.Collector.Domain.Dto; using Newsbot.Collector.Domain.Entities; using Newsbot.Collector.Domain.Interfaces; using Newsbot.Collector.Domain.Models; +using Newsbot.Collector.Domain.Requests; +using Newsbot.Collector.Domain.Results; namespace Newsbot.Collector.Api.Controllers.v1; @@ -45,30 +47,44 @@ public class DiscordWebHookController : ControllerBase } [HttpPost(Name = "New")] - public DiscordWebHookDto New(string url, string server, string channel) + public ActionResult New([FromBody] NewDiscordWebhookRequest request) { - var exists = _webhooks.GetByUrl(url); + var userId = HttpContext.GetUserId(); + + var exists = _webhooks.GetByUrl(request.Url ?? ""); if (exists.Id != Guid.Empty) { - return DiscordWebHookDto.Convert(exists); + return new BadRequestObjectResult(new DiscordWebhookResult + { + IsSuccessful = true, + Items = new List { DiscordWebHookDto.Convert(exists) } + }); } var res = _webhooks.New(new DiscordWebhookEntity { - Url = url, - Server = server, - Channel = channel, + UserId = userId, + Url = request.Url ?? "", + Server = request.Server ?? "", + Channel = request.Channel ?? "", Enabled = true, }); - return DiscordWebHookDto.Convert(res); + return new OkObjectResult(new DiscordWebhookResult + { + IsSuccessful = true, + Items = new List + { + DiscordWebHookDto.Convert(res) + } + }); } [HttpGet("by/serverAndChannel")] public IEnumerable GetByServerAndChannel(string server, string channel) { var items = new List(); - var res = _webhooks.ListByServerAndChannel(server, channel, 25); + var res = _webhooks.ListByServerAndChannel(HttpContext.GetUserId(), server, channel, 25); foreach (var item in res) { @@ -78,21 +94,21 @@ public class DiscordWebHookController : ControllerBase } [HttpGet("{id}")] - public DiscordWebHookDto GetById(Guid id) + public DiscordWebHookDto GetById(string userId, Guid id) { - var res = _webhooks.GetById(id); + var res = _webhooks.GetById(userId, id); return DiscordWebHookDto.Convert(res); } [HttpPost("{id}/disable")] public void DisableById(Guid id) { - _webhooks.Disable(id); + _webhooks.Disable(HttpContext.GetUserId(), id); } [HttpPost("{id}/enable")] public void EnableById(Guid id) { - _webhooks.Enable(id); + _webhooks.Enable(HttpContext.GetUserId(), id); } } \ No newline at end of file diff --git a/Newsbot.Collector.Database/Repositories/DiscordWebhooksTable.cs b/Newsbot.Collector.Database/Repositories/DiscordWebhooksTable.cs index 74b53aa..cf38100 100644 --- a/Newsbot.Collector.Database/Repositories/DiscordWebhooksTable.cs +++ b/Newsbot.Collector.Database/Repositories/DiscordWebhooksTable.cs @@ -34,10 +34,20 @@ public class DiscordWebhooksTable : IDiscordWebHooksRepository return model; } - public DiscordWebhookEntity GetById(Guid id) + public DiscordWebhookEntity GetById(string userId, Guid id) { //using var context = new DatabaseContext(_connectionString); - var res = _context.DiscordWebhooks.FirstOrDefault(d => d.Id.Equals(id)); + var res = _context.DiscordWebhooks + .Where(i => i.UserId != null && i.UserId.Equals(userId)) + .FirstOrDefault(d => d.Id.Equals(id)); + res ??= new DiscordWebhookEntity(); + return res; + } + + public DiscordWebhookEntity GetById(Guid id) + { + var res = _context.DiscordWebhooks + .FirstOrDefault(d => d.Id.Equals(id)); res ??= new DiscordWebhookEntity(); return res; } @@ -82,10 +92,11 @@ public class DiscordWebhooksTable : IDiscordWebHooksRepository return res; } - public List ListByServerAndChannel(string server, string channel, int limit = 25) + public List ListByServerAndChannel(string userId, string server, string channel, int limit = 25) { //using var context = new DatabaseContext(_connectionString); var res = _context.DiscordWebhooks + .Where(i => i.UserId != null && i.UserId.Equals(userId)) .Where(s => s.Server.Equals(server)) .Where(c => c.Channel.Equals(channel)) .Take(limit) @@ -94,9 +105,9 @@ public class DiscordWebhooksTable : IDiscordWebHooksRepository return res; } - public int Disable(Guid id) + public int Disable(string userId, Guid id) { - var res = GetById(id); + var res = GetById(userId, id); //using var context = new DatabaseContext(_connectionString); res.Enabled = true; @@ -114,9 +125,9 @@ public class DiscordWebhooksTable : IDiscordWebHooksRepository } } - public int Enable(Guid id) + public int Enable(string userId, Guid id) { - var res = GetById(id); + var res = GetById(userId, id); //using var context = new DatabaseContext(_connectionString); res.Enabled = false; diff --git a/Newsbot.Collector.Domain/Interfaces/IDiscordWebHooksRepository.cs b/Newsbot.Collector.Domain/Interfaces/IDiscordWebHooksRepository.cs index 6d32c9d..39789fc 100644 --- a/Newsbot.Collector.Domain/Interfaces/IDiscordWebHooksRepository.cs +++ b/Newsbot.Collector.Domain/Interfaces/IDiscordWebHooksRepository.cs @@ -6,14 +6,16 @@ public interface IDiscordWebHooksRepository { DiscordWebhookEntity New(DiscordWebhookEntity model); + DiscordWebhookEntity GetById(string userId, Guid id); DiscordWebhookEntity GetById(Guid id); + DiscordWebhookEntity GetByUrl(string url); List List(int page, int count = 25); List ListByUserId(string userId, int page); List ListByServer(string server, int limit); - List ListByServerAndChannel(string server, string channel, int limit); + List ListByServerAndChannel(string userId, string server, string channel, int limit); - int Disable(Guid id); - int Enable(Guid id); + int Disable(string userId, Guid id); + int Enable(string userId, Guid id); } \ No newline at end of file diff --git a/Newsbot.Collector.Domain/Requests/NewDiscordWebhookRequest.cs b/Newsbot.Collector.Domain/Requests/NewDiscordWebhookRequest.cs new file mode 100644 index 0000000..37a71c1 --- /dev/null +++ b/Newsbot.Collector.Domain/Requests/NewDiscordWebhookRequest.cs @@ -0,0 +1,8 @@ +namespace Newsbot.Collector.Domain.Requests; + +public class NewDiscordWebhookRequest +{ + public string? Url { get; set; } + public string? Server { get; set; } + public string? Channel { get; set; } +} \ No newline at end of file diff --git a/Newsbot.Collector.Domain/Results/DiscordWebhookResult.cs b/Newsbot.Collector.Domain/Results/DiscordWebhookResult.cs new file mode 100644 index 0000000..7173168 --- /dev/null +++ b/Newsbot.Collector.Domain/Results/DiscordWebhookResult.cs @@ -0,0 +1,8 @@ +using Newsbot.Collector.Domain.Dto; + +namespace Newsbot.Collector.Domain.Results; + +public class DiscordWebhookResult : BaseResult +{ + public List? Items { get; set; } +} \ No newline at end of file