Préparation des rôles
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
using System.Security.Claims;
|
||||
using FastEndpoints;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Knots.Endpoints.Discussion;
|
||||
|
||||
public class GetDiscussionMembersEndpoint(KnotsDbContext db) : EndpointWithoutRequest<List<string>>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/discussions/{discussionId}/members");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CancellationToken ct)
|
||||
{
|
||||
int discussionId = Route<int>("discussionId");
|
||||
|
||||
Models.Discussion? discussion = await db.Discussions
|
||||
.Include(d => d.UserDiscussions)
|
||||
.ThenInclude(ud => ud.User)
|
||||
.SingleOrDefaultAsync(d => d.Id == discussionId, ct);
|
||||
|
||||
if (discussion is null)
|
||||
{
|
||||
await SendNotFoundAsync(ct);
|
||||
return;
|
||||
}
|
||||
|
||||
List<string> members = discussion.UserDiscussions
|
||||
.Select(ud => ud.User.Username!)
|
||||
.ToList();
|
||||
|
||||
await SendOkAsync(members, ct);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
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; }
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using FastEndpoints;
|
||||
using Knots.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Knots.Endpoints.Role;
|
||||
|
||||
public class AssignRoleEndpoint(KnotsDbContext db) : Endpoint<AssignRoleRequest>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/groups/{groupId}/members/{userId}/role");
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(AssignRoleRequest req, CancellationToken ct)
|
||||
{
|
||||
int groupId = Route<int>("groupId");
|
||||
int userId = Route<int>("userId");
|
||||
|
||||
GroupUser? groupUser = await db.GroupUsers
|
||||
.SingleOrDefaultAsync(gu => gu.GroupId == groupId && gu.UserId == userId, ct);
|
||||
|
||||
if (groupUser is null)
|
||||
{
|
||||
await SendNotFoundAsync(ct);
|
||||
return;
|
||||
}
|
||||
|
||||
bool roleExists = await db.Roles.AnyAsync(r => r.Id == req.RoleId, ct);
|
||||
if (!roleExists)
|
||||
{
|
||||
await SendNotFoundAsync(ct);
|
||||
return;
|
||||
}
|
||||
|
||||
groupUser.RoleId = req.RoleId;
|
||||
await db.SaveChangesAsync(ct);
|
||||
|
||||
await SendOkAsync(ct);
|
||||
}
|
||||
}
|
||||
|
||||
public class AssignRoleRequest
|
||||
{
|
||||
public int RoleId { get; set; }
|
||||
}
|
||||
@@ -1,22 +1,32 @@
|
||||
using FastEndpoints;
|
||||
using Knots.DTO.Role;
|
||||
using Knots.DTO.User;
|
||||
using Knots.Models;
|
||||
|
||||
namespace Knots.Endpoints.Role;
|
||||
|
||||
public class CreateRoleEndpoint(KnotsDbContext db, AutoMapper.IMapper mapper) : Endpoint<CreateRoleDto>
|
||||
public class CreateRoleEndpoint(KnotsDbContext db) : Endpoint<CreateRoleRequest, RoleDto>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Post("/roles");
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(CreateRoleDto req, CancellationToken ct)
|
||||
|
||||
public override async Task HandleAsync(CreateRoleRequest req, CancellationToken ct)
|
||||
{
|
||||
Models.Role? role = mapper.Map<Models.Role>(req);
|
||||
Models.Role role = new() { Libelle = req.Libelle };
|
||||
db.Roles.Add(role);
|
||||
await db.SaveChangesAsync(ct);
|
||||
await SendNoContentAsync(ct);
|
||||
|
||||
await SendOkAsync(new RoleDto { Id = role.Id, Libelle = role.Libelle! }, ct);
|
||||
}
|
||||
}
|
||||
|
||||
public class CreateRoleRequest
|
||||
{
|
||||
public string Libelle { get; set; } = "";
|
||||
}
|
||||
|
||||
public class RoleDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Libelle { get; set; } = "";
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -13,7 +13,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Knots")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f1cdc5de19a96d553f0eaf2fbe65392602c54f85")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1d2f96b2f44a77ffc60910e80ff641d569336938")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Knots")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Knots")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
0618e480c1221c208fb53c91259f81c85675af45b5772bccc9fee873e927c02b
|
||||
811716b679de87289165cd43ea2a1df8f028fb5afe28ba98b508d691f4d0a71f
|
||||
|
||||
@@ -1 +1 @@
|
||||
1afb5c57f375954b5501d52f6ccbfcdd0c9a4a7d75abca85439c878c12264607
|
||||
eae1c606f235f5f51466aca07da485bdaa9b0072133d65d312d41bb94837718a
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user