Canceling join request now actually changes the status to cancelled so trying to join same RequestToJoin whiteboard with code manually doesnt fail due to status being Pending
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
using AipsCore.Application.Abstract.MessageBroking;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
|
||||
namespace AipsCore.Application.Common.Message.UserCanceledRequestToJoin;
|
||||
|
||||
public record UserCanceledRequestToJoinMessage(UserCanceledRequestToJoinCommand Command): IMessage;
|
||||
@@ -0,0 +1,19 @@
|
||||
using AipsCore.Application.Abstract;
|
||||
using AipsCore.Application.Abstract.MessageBroking;
|
||||
|
||||
namespace AipsCore.Application.Common.Message.UserCanceledRequestToJoin;
|
||||
|
||||
public class UserCanceledRequestToJoinMessageHandler : IMessageHandler<UserCanceledRequestToJoinMessage>
|
||||
{
|
||||
private readonly IDispatcher _dispatcher;
|
||||
|
||||
public UserCanceledRequestToJoinMessageHandler(IDispatcher dispatcher)
|
||||
{
|
||||
_dispatcher = dispatcher;
|
||||
}
|
||||
|
||||
public async Task Handle(UserCanceledRequestToJoinMessage message, CancellationToken cancellationToken)
|
||||
{
|
||||
await _dispatcher.Execute(message.Command, cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
using AipsCore.Application.Abstract.Command;
|
||||
|
||||
namespace AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
|
||||
public record UserCanceledRequestToJoinCommand(string WhiteboardId, string UserId): ICommand;
|
||||
@@ -0,0 +1,40 @@
|
||||
using AipsCore.Application.Abstract.Command;
|
||||
using AipsCore.Domain.Abstract;
|
||||
using AipsCore.Domain.Common.Validation;
|
||||
using AipsCore.Domain.Models.User.ValueObjects;
|
||||
using AipsCore.Domain.Models.Whiteboard.ValueObjects;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.External;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Validation;
|
||||
|
||||
namespace AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
|
||||
public class CancelJoinRequestCommandHandler : ICommandHandler<UserCanceledRequestToJoinCommand>
|
||||
{
|
||||
private readonly IWhiteboardMembershipRepository _whiteboardMembershipRepository;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
|
||||
public CancelJoinRequestCommandHandler(IWhiteboardMembershipRepository whiteboardMembershipRepository, IUnitOfWork unitOfWork)
|
||||
{
|
||||
_whiteboardMembershipRepository = whiteboardMembershipRepository;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
public async Task Handle(UserCanceledRequestToJoinCommand command, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var whiteboardId = new WhiteboardId(command.WhiteboardId);
|
||||
var userId = new UserId(command.UserId);
|
||||
|
||||
var membership = await _whiteboardMembershipRepository.GetByWhiteboardAndUserAsync(whiteboardId, userId, cancellationToken);
|
||||
|
||||
if (membership is null)
|
||||
{
|
||||
throw new ValidationException(WhiteboardMembershipErrors.NotFound(whiteboardId, userId));
|
||||
}
|
||||
|
||||
membership.UpdateStatus(WhiteboardMembershipStatus.Cancelled);
|
||||
|
||||
await _whiteboardMembershipRepository.SaveAsync(membership, cancellationToken);
|
||||
await _unitOfWork.SaveChangesAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ using AipsCore.Application.Abstract;
|
||||
using AipsCore.Application.Models.Shape.Command.MoveShape;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.AcceptUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.RejectUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Query.GetMembershipStatus;
|
||||
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
|
||||
using AipsRT.Model.Memberships;
|
||||
@@ -21,14 +22,14 @@ public class WhiteboardHub : Hub
|
||||
private readonly WhiteboardManager _whiteboardManager;
|
||||
private readonly IMessagingService _messagingService;
|
||||
private readonly MembershipService _membershipService;
|
||||
private readonly GetUserService _getUserService;
|
||||
private readonly UserService _userService;
|
||||
|
||||
public WhiteboardHub(WhiteboardManager whiteboardManager, IMessagingService messagingService, MembershipService membershipService, GetUserService getUserService)
|
||||
public WhiteboardHub(WhiteboardManager whiteboardManager, IMessagingService messagingService, MembershipService membershipService, UserService userService)
|
||||
{
|
||||
_whiteboardManager = whiteboardManager;
|
||||
_messagingService = messagingService;
|
||||
_membershipService = membershipService;
|
||||
_getUserService = getUserService;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public override async Task OnDisconnectedAsync(Exception? exception)
|
||||
@@ -107,7 +108,7 @@ public class WhiteboardHub : Hub
|
||||
|
||||
if (user == null)
|
||||
{
|
||||
user = await _getUserService.GetUser(userId);
|
||||
user = await _userService.GetUser(userId);
|
||||
}
|
||||
|
||||
await Clients.User(ownerId.ToString()).SendAsync("UserWaitingForApproval", user);
|
||||
@@ -147,6 +148,7 @@ public class WhiteboardHub : Hub
|
||||
|
||||
if (whiteboard != null)
|
||||
{
|
||||
await _messagingService.CancelJoinRequest(new UserCanceledRequestToJoinCommand(whiteboard.WhiteboardId.ToString(), userId.ToString()));
|
||||
await Clients.User(whiteboard.OwnerId.ToString()).SendAsync("UserCanceledJoinRequest", userId.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
using AipsCore.Application.Abstract;
|
||||
using AipsCore.Application.Models.User.Query.GetUser;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
|
||||
namespace AipsRT.Model.Users;
|
||||
|
||||
public class GetUserService
|
||||
public class UserService
|
||||
{
|
||||
private readonly IDispatcher _dispatcher;
|
||||
|
||||
public GetUserService(IDispatcher dispatcher)
|
||||
public UserService(IDispatcher dispatcher)
|
||||
{
|
||||
_dispatcher = dispatcher;
|
||||
}
|
||||
@@ -27,7 +27,7 @@ builder.Services.AddSingleton<IErrorMessageHandleStrategy, RtErrorHandleStrategy
|
||||
builder.Services.AddHostedService<ErrorSubscriberBackgroundService>();
|
||||
|
||||
builder.Services.AddTransient<MembershipService>();
|
||||
builder.Services.AddTransient<GetUserService>();
|
||||
builder.Services.AddTransient<UserService>();
|
||||
|
||||
builder.Services.AddScoped<GetWhiteboardService>();
|
||||
builder.Services.AddSingleton<WhiteboardManager>();
|
||||
|
||||
@@ -2,6 +2,7 @@ using AipsCore.Application.Models.Shape.Command.CreateTextShape;
|
||||
using AipsCore.Application.Models.Shape.Command.MoveShape;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.AcceptUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.RejectUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
using AipsRT.Model.Whiteboard.Shapes;
|
||||
|
||||
namespace AipsRT.Services.Interfaces;
|
||||
@@ -17,4 +18,5 @@ public interface IMessagingService
|
||||
|
||||
Task AcceptedUser(AcceptUserRequestToJoinCommand command);
|
||||
Task RejectedUser(RejectUserRequestToJoinCommand command);
|
||||
Task CancelJoinRequest(UserCanceledRequestToJoinCommand command);
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using AipsCore.Application.Common.Message.AddRectangle;
|
||||
using AipsCore.Application.Common.Message.AddTextShape;
|
||||
using AipsCore.Application.Common.Message.MoveShape;
|
||||
using AipsCore.Application.Common.Message.RejectUserRequestToJoin;
|
||||
using AipsCore.Application.Common.Message.UserCanceledRequestToJoin;
|
||||
using AipsCore.Application.Models.Shape.Command.CreateArrow;
|
||||
using AipsCore.Application.Models.Shape.Command.CreateLine;
|
||||
using AipsCore.Application.Models.Shape.Command.CreateRectangle;
|
||||
@@ -13,6 +14,7 @@ using AipsCore.Application.Models.Shape.Command.CreateTextShape;
|
||||
using AipsCore.Application.Models.Shape.Command.MoveShape;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.AcceptUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.RejectUserRequestToJoin;
|
||||
using AipsCore.Application.Models.Whiteboard.Command.UserCanceledRequestToJoin;
|
||||
using AipsRT.Model.Whiteboard.Shapes;
|
||||
using AipsRT.Services.Interfaces;
|
||||
|
||||
@@ -116,4 +118,10 @@ public class MessagingService : IMessagingService
|
||||
var message = new RejectUserRequestToJoinMessage(command);
|
||||
await _messagePublisher.PublishAsync(message);
|
||||
}
|
||||
|
||||
public async Task CancelJoinRequest(UserCanceledRequestToJoinCommand command)
|
||||
{
|
||||
var message = new UserCanceledRequestToJoinMessage(command);
|
||||
await _messagePublisher.PublishAsync(message);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using AipsCore.Application.Common.Message.AddRectangle;
|
||||
using AipsCore.Application.Common.Message.AddTextShape;
|
||||
using AipsCore.Application.Common.Message.MoveShape;
|
||||
using AipsCore.Application.Common.Message.RejectUserRequestToJoin;
|
||||
using AipsCore.Application.Common.Message.UserCanceledRequestToJoin;
|
||||
|
||||
namespace AipsWorker.Messages;
|
||||
|
||||
@@ -21,7 +22,8 @@ public class MessageTypesProvider : IMessageTypesProvider
|
||||
typeof(AddTextShapeMessage),
|
||||
typeof(MoveShapeMessage),
|
||||
typeof(AcceptUserRequestToJoinMessage),
|
||||
typeof(RejectUserRequestToJoinMessage)
|
||||
typeof(RejectUserRequestToJoinMessage),
|
||||
typeof(UserCanceledRequestToJoinMessage)
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -113,6 +113,7 @@ export const useWhiteboardStore = defineStore('whiteboard', () => {
|
||||
whiteboardHubService.onAccepted(() => {
|
||||
const infoStore = useWhiteboardsStore()
|
||||
infoStore.stopWaitingToJoin()
|
||||
isLoading.value = false
|
||||
})
|
||||
|
||||
whiteboardHubService.onRejected(() => {
|
||||
|
||||
Reference in New Issue
Block a user