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 FastEndpoints;
|
||||||
using Knots.DTO.Role;
|
using Knots.Models;
|
||||||
using Knots.DTO.User;
|
|
||||||
|
|
||||||
namespace Knots.Endpoints.Role;
|
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()
|
public override void Configure()
|
||||||
{
|
{
|
||||||
Post("/roles");
|
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);
|
db.Roles.Add(role);
|
||||||
await db.SaveChangesAsync(ct);
|
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.AssemblyCompanyAttribute("Knots")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[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.AssemblyProductAttribute("Knots")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Knots")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Knots")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[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