fixes
This commit is contained in:
@@ -34,6 +34,7 @@ public class GetWhiteboardInfoRTQueryHandler
|
||||
return _context.Whiteboards
|
||||
.Where(w => w.Id == whiteboardId)
|
||||
.Include(w => w.Memberships)
|
||||
.ThenInclude(m => m.User)
|
||||
.Include(w => w.Owner)
|
||||
.Include(w => w.Shapes);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using AipsCore.Application.Models.Whiteboard.Command.AcceptUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.RejectUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Query.GetMembershipStatus;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
|
||||
using AipsRT.Model.Memberships;
|
||||
using AipsRT.Model.Whiteboard;
|
||||
using AipsRT.Model.Whiteboard.Shapes;
|
||||
using AipsRT.Model.Whiteboard.Structs;
|
||||
@@ -18,13 +19,13 @@ public class WhiteboardHub : Hub
|
||||
{
|
||||
private readonly WhiteboardManager _whiteboardManager;
|
||||
private readonly IMessagingService _messagingService;
|
||||
private readonly IDispatcher _dispatcher;
|
||||
private readonly MembershipService _membershipService;
|
||||
|
||||
public WhiteboardHub(WhiteboardManager whiteboardManager, IMessagingService messagingService, IDispatcher dispatcher)
|
||||
public WhiteboardHub(WhiteboardManager whiteboardManager, IMessagingService messagingService, MembershipService membershipService)
|
||||
{
|
||||
_whiteboardManager = whiteboardManager;
|
||||
_messagingService = messagingService;
|
||||
_dispatcher = dispatcher;
|
||||
_membershipService = membershipService;
|
||||
}
|
||||
|
||||
public async Task JoinWhiteboard(Guid whiteboardId)
|
||||
@@ -49,7 +50,7 @@ public class WhiteboardHub : Hub
|
||||
}
|
||||
else
|
||||
{
|
||||
status = await _dispatcher.Execute(new GetMembershipStatusQuery(whiteboardId.ToString(), userId.ToString()));
|
||||
status = await _membershipService.GetMembershipStatus(whiteboardId, userId);
|
||||
}
|
||||
|
||||
if (status == WhiteboardMembershipStatus.Accepted)
|
||||
@@ -67,8 +68,10 @@ public class WhiteboardHub : Hub
|
||||
_whiteboardManager.AddPendingUser(userId, whiteboardId);
|
||||
|
||||
await Clients.Caller.SendAsync("WaitingForApproval", userId.ToString());
|
||||
|
||||
var user = whiteboard.Users.First(u => u.UserId == userId);
|
||||
|
||||
await Clients.User(ownerId.ToString()).SendAsync("UserWaitingForApproval", userId.ToString());
|
||||
await Clients.User(ownerId.ToString()).SendAsync("UserWaitingForApproval", user);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
19
dotnet/AipsRT/Model/Memberships/MembershipManager.cs
Normal file
19
dotnet/AipsRT/Model/Memberships/MembershipManager.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
|
||||
|
||||
namespace AipsRT.Model.Memberships;
|
||||
|
||||
public class MembershipManager
|
||||
{
|
||||
private readonly IServiceScopeFactory _scopeFactory;
|
||||
|
||||
public MembershipManager(IServiceScopeFactory scopeFactory)
|
||||
{
|
||||
_scopeFactory = scopeFactory;
|
||||
}
|
||||
|
||||
public async Task<WhiteboardMembershipStatus> GetMembershipStatus(Guid whiteboardId, Guid userId)
|
||||
{
|
||||
var membershipService = _scopeFactory.CreateScope().ServiceProvider.GetRequiredService<MembershipService>();
|
||||
return await membershipService.GetMembershipStatus(whiteboardId, userId);
|
||||
}
|
||||
}
|
||||
21
dotnet/AipsRT/Model/Memberships/MembershipService.cs
Normal file
21
dotnet/AipsRT/Model/Memberships/MembershipService.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using AipsCore.Application.Abstract;
|
||||
using AipsCore.Application.Models.Whiteboard.Query.GetMembershipStatus;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
|
||||
|
||||
namespace AipsRT.Model.Memberships;
|
||||
|
||||
public class MembershipService
|
||||
{
|
||||
private readonly IDispatcher _dispatcher;
|
||||
|
||||
public MembershipService(IDispatcher dispatcher)
|
||||
{
|
||||
_dispatcher = dispatcher;
|
||||
}
|
||||
|
||||
public async Task<WhiteboardMembershipStatus> GetMembershipStatus(Guid whiteboardId, Guid userId)
|
||||
{
|
||||
var query = new GetMembershipStatusQuery(whiteboardId.ToString(), userId.ToString());
|
||||
return await _dispatcher.Execute(query);
|
||||
}
|
||||
}
|
||||
17
dotnet/AipsRT/Model/Users/User.cs
Normal file
17
dotnet/AipsRT/Model/Users/User.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace AipsRT.Model.Users;
|
||||
|
||||
public class User
|
||||
{
|
||||
public Guid UserId { get; private set; }
|
||||
|
||||
public string Username { get; private set; }
|
||||
|
||||
public string Email { get; private set; }
|
||||
|
||||
public User(Guid userId, string username, string email)
|
||||
{
|
||||
UserId = userId;
|
||||
Username = username;
|
||||
Email = email;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
using AipsCore.Application.Abstract;
|
||||
using AipsCore.Application.Models.Whiteboard.Query.GetMembershipStatus;
|
||||
using AipsCore.Application.Models.Whiteboard.Query.GetWhiteboardInfoRT;
|
||||
using AipsCore.Domain.Models.Shape.Enums;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
|
||||
using AipsRT.Model.Whiteboard.Shapes.Map;
|
||||
using AipsRT.Model.Users;
|
||||
|
||||
namespace AipsRT.Model.Whiteboard;
|
||||
|
||||
@@ -30,6 +29,11 @@ public class GetWhiteboardService
|
||||
OwnerId = entity.OwnerId,
|
||||
};
|
||||
|
||||
foreach (var membership in entity.Memberships)
|
||||
{
|
||||
whiteboard.AddUser(new User(membership.UserId, membership.User!.UserName!, membership.User.Email!));
|
||||
}
|
||||
|
||||
foreach (var shape in entity.Shapes)
|
||||
{
|
||||
switch (shape.Type)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using AipsRT.Model.Whiteboard.Shapes;
|
||||
using AipsRT.Model.Users;
|
||||
|
||||
namespace AipsRT.Model.Whiteboard;
|
||||
|
||||
@@ -10,6 +11,8 @@ public class Whiteboard
|
||||
|
||||
public HashSet<Guid> AcceptedUsers { get; } = new();
|
||||
public HashSet<Guid> PendingUsers { get; } = new();
|
||||
|
||||
public List<User> Users { get; } = [];
|
||||
|
||||
public List<Shape> Shapes { get; } = [];
|
||||
|
||||
@@ -42,6 +45,8 @@ public class Whiteboard
|
||||
TextShapes.Add(shape);
|
||||
}
|
||||
|
||||
public void AddUser(User user) => Users.Add(user);
|
||||
|
||||
public void AddPendingUser(Guid userId) => PendingUsers.Add(userId);
|
||||
|
||||
public void AcceptUser(Guid userId)
|
||||
|
||||
@@ -79,10 +79,10 @@ public class WhiteboardManager
|
||||
|
||||
public bool IsAccepted(Guid userId)
|
||||
{
|
||||
if (!_userInWhiteboards.TryGetValue(userId, out var wbId))
|
||||
if (!_userInWhiteboards.TryGetValue(userId, out var whiteboardId))
|
||||
return false;
|
||||
|
||||
var whiteboard = GetWhiteboard(wbId);
|
||||
var whiteboard = GetWhiteboard(whiteboardId);
|
||||
return whiteboard?.IsAccepted(userId) ?? false;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using AipsCore.Application.Common.Message.ErrorMessage;
|
||||
using AipsCore.Infrastructure.DI;
|
||||
using AipsRT.Hubs;
|
||||
using AipsRT.Model.Memberships;
|
||||
using AipsRT.Model.Whiteboard;
|
||||
using AipsRT.Services;
|
||||
using AipsRT.Services.Interfaces;
|
||||
@@ -21,6 +22,9 @@ builder.Services.AddAipsMessageHandlers();
|
||||
builder.Services.AddSingleton<IErrorMessageHandleStrategy, RtErrorHandleStrategy>();
|
||||
builder.Services.AddHostedService<ErrorSubscriberBackgroundService>();
|
||||
|
||||
builder.Services.AddTransient<MembershipService>();
|
||||
|
||||
|
||||
builder.Services.AddScoped<GetWhiteboardService>();
|
||||
builder.Services.AddSingleton<WhiteboardManager>();
|
||||
builder.Services.AddSingleton<IMessagingService, MessagingService>();
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
using AipsCore.Application.Abstract.MessageBroking;
|
||||
using AipsCore.Application.Common.Message.AcceptUserRequestToJoin;
|
||||
using AipsCore.Application.Common.Message.AddArrow;
|
||||
using AipsCore.Application.Common.Message.AddLine;
|
||||
using AipsCore.Application.Common.Message.AddRectangle;
|
||||
using AipsCore.Application.Common.Message.AddTextShape;
|
||||
using AipsCore.Application.Common.Message.MoveShape;
|
||||
using AipsCore.Application.Common.Message.RejectUserRequestToJoin;
|
||||
|
||||
namespace AipsWorker.Messages;
|
||||
|
||||
@@ -17,7 +19,9 @@ public class MessageTypesProvider : IMessageTypesProvider
|
||||
typeof(AddLineMessage),
|
||||
typeof(AddRectangleMessage),
|
||||
typeof(AddTextShapeMessage),
|
||||
typeof(MoveShapeMessage)
|
||||
typeof(MoveShapeMessage),
|
||||
typeof(AcceptUserRequestToJoinMessage),
|
||||
typeof(RejectUserRequestToJoinMessage)
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user