52 lines
1.5 KiB
C#
52 lines
1.5 KiB
C#
using FastEndpoints;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Knots.Endpoints.Discussion;
|
|
|
|
public class GetDiscussionMembersWithRolesEndpoint(KnotsDbContext db) : EndpointWithoutRequest<List<MemberWithRoleDto>>
|
|
{
|
|
public override void Configure()
|
|
{
|
|
Get("/discussions/{discussionId}/members/roles");
|
|
}
|
|
|
|
public override async Task HandleAsync(CancellationToken ct)
|
|
{
|
|
int discussionId = Route<int>("discussionId");
|
|
|
|
Models.Discussion? discussion = await db.Discussions
|
|
.Include(d => d.Group)
|
|
.ThenInclude(g => g!.GroupUsers)
|
|
.ThenInclude(gu => gu.User)
|
|
.Include(d => d.Group)
|
|
.ThenInclude(g => g!.GroupUsers)
|
|
.ThenInclude(gu => gu.Role)
|
|
.SingleOrDefaultAsync(d => d.Id == discussionId, ct);
|
|
|
|
if (discussion?.Group is null)
|
|
{
|
|
await SendNotFoundAsync(ct);
|
|
return;
|
|
}
|
|
|
|
List<MemberWithRoleDto> members = discussion.Group.GroupUsers
|
|
.Select(gu => new MemberWithRoleDto
|
|
{
|
|
UserId = gu.UserId,
|
|
Username = gu.User.Username!,
|
|
RoleId = gu.RoleId,
|
|
RoleLibelle = gu.Role?.Libelle
|
|
})
|
|
.ToList();
|
|
|
|
await SendOkAsync(members, ct);
|
|
}
|
|
}
|
|
|
|
public class MemberWithRoleDto
|
|
{
|
|
public int UserId { get; set; }
|
|
public string Username { get; set; } = "";
|
|
public int? RoleId { get; set; }
|
|
public string? RoleLibelle { get; set; }
|
|
} |