Add real workspace channels
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
using FastEndpoints;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Socialize.Api.Data;
|
||||
using Socialize.Api.Infrastructure.Security;
|
||||
using Socialize.Api.Modules.Channels.Data;
|
||||
|
||||
namespace Socialize.Api.Modules.Channels.Handlers;
|
||||
|
||||
public record GetChannelsRequest(Guid? WorkspaceId);
|
||||
|
||||
public class GetChannelsHandler(
|
||||
AppDbContext dbContext,
|
||||
AccessScopeService accessScopeService)
|
||||
: Endpoint<GetChannelsRequest, IReadOnlyCollection<ChannelDto>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/channels");
|
||||
Options(o => o.WithTags("Channels"));
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(GetChannelsRequest request, CancellationToken ct)
|
||||
{
|
||||
IQueryable<Channel> query = dbContext.Channels.AsQueryable();
|
||||
|
||||
if (!accessScopeService.IsManager(User))
|
||||
{
|
||||
IReadOnlyCollection<Guid> workspaceScopeIds = await accessScopeService.GetAccessibleWorkspaceIdsAsync(User, ct);
|
||||
query = query.Where(channel => workspaceScopeIds.Contains(channel.WorkspaceId));
|
||||
}
|
||||
|
||||
if (request.WorkspaceId.HasValue)
|
||||
{
|
||||
query = query.Where(channel => channel.WorkspaceId == request.WorkspaceId.Value);
|
||||
}
|
||||
|
||||
List<ChannelDto> channels = await query
|
||||
.OrderBy(channel => channel.Network)
|
||||
.ThenBy(channel => channel.Name)
|
||||
.Select(channel => new ChannelDto(
|
||||
channel.Id,
|
||||
channel.WorkspaceId,
|
||||
channel.Name,
|
||||
channel.Network,
|
||||
channel.Handle,
|
||||
channel.ExternalUrl,
|
||||
channel.CreatedAt))
|
||||
.ToListAsync(ct);
|
||||
|
||||
await SendOkAsync(channels, ct);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user