Updated DiscordWebHooks to handle userId
continuous-integration/drone/pr Build is passing Details

This commit is contained in:
James Tombleson 2023-07-29 09:44:15 -07:00
parent c92d13797f
commit 82dea60126
6 changed files with 69 additions and 24 deletions

View File

@ -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,

View File

@ -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<DiscordWebhookResult> 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> { 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>
{
DiscordWebHookDto.Convert(res)
}
});
}
[HttpGet("by/serverAndChannel")]
public IEnumerable<DiscordWebHookDto> GetByServerAndChannel(string server, string channel)
{
var items = new List<DiscordWebHookDto>();
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);
}
}

View File

@ -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<DiscordWebhookEntity> ListByServerAndChannel(string server, string channel, int limit = 25)
public List<DiscordWebhookEntity> 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;

View File

@ -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<DiscordWebhookEntity> List(int page, int count = 25);
List<DiscordWebhookEntity> ListByUserId(string userId, int page);
List<DiscordWebhookEntity> ListByServer(string server, int limit);
List<DiscordWebhookEntity> ListByServerAndChannel(string server, string channel, int limit);
List<DiscordWebhookEntity> 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);
}

View File

@ -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; }
}

View File

@ -0,0 +1,8 @@
using Newsbot.Collector.Domain.Dto;
namespace Newsbot.Collector.Domain.Results;
public class DiscordWebhookResult : BaseResult
{
public List<DiscordWebHookDto>? Items { get; set; }
}