Files
AIPS/dotnet/AipsCore/Domain/Models/Whiteboard/Whiteboard.AddUser.cs
2026-03-04 23:12:08 +01:00

47 lines
1.7 KiB
C#

using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Models.User.ValueObjects;
using AipsCore.Domain.Models.Whiteboard.Enums;
using AipsCore.Domain.Models.Whiteboard.Validation;
using AipsCore.Domain.Models.WhiteboardMembership.Enums;
namespace AipsCore.Domain.Models.Whiteboard;
public partial class Whiteboard
{
public WhiteboardMembership.WhiteboardMembership RequestJoin(UserId userId)
{
return WhiteboardMembership.WhiteboardMembership.Create(
Id.IdValue,
userId.IdValue,
false,
DetermineJoinStatus(),
DateTime.UtcNow);
}
public void RequestReJoin(WhiteboardMembership.WhiteboardMembership membership)
{
switch (membership.Status)
{
case WhiteboardMembershipStatus.Banned:
throw new ValidationException(WhiteboardErrors.UserBanned(membership.UserId));
case WhiteboardMembershipStatus.Pending:
throw new ValidationException(WhiteboardErrors.UserAlreadyTryingToJoin(membership.UserId));
case WhiteboardMembershipStatus.Accepted:
break;
default:
membership.UpdateStatus(DetermineJoinStatus());
break;
}
}
private WhiteboardMembershipStatus DetermineJoinStatus()
{
return JoinPolicy switch
{
WhiteboardJoinPolicy.FreeToJoin => WhiteboardMembershipStatus.Accepted,
WhiteboardJoinPolicy.RequestToJoin => WhiteboardMembershipStatus.Pending,
WhiteboardJoinPolicy.Private => throw new ValidationException(WhiteboardErrors.CannotJoin(Code)),
_ => throw new ArgumentOutOfRangeException()
};
}
}