Domain rules for kicking and banning users from whiteboards

This commit is contained in:
Veljko Tosic
2026-02-11 21:58:08 +01:00
parent 802d8d26be
commit 3e95033fe7
8 changed files with 111 additions and 1 deletions

View File

@@ -15,4 +15,27 @@ public class WhiteboardErrors : AbstractErrors<Whiteboard, WhiteboardId>
return CreateValidationError(code, message); return CreateValidationError(code, message);
} }
public static ValidationError OnlyOwnerCanBanOtherUsers(UserId currentUserId)
{
string code = "only_owner_can_ban_other_users";
string message = $"Only owner of whiteboard can ban other users. Current user id: '{currentUserId}' is not the owner.";
return CreateValidationError(code, message);
}
public static ValidationError OnlyOwnerCanUnbanOtherUsers(UserId currentUserId)
{
string code = "only_owner_can_unban_other_users";
string message = $"Only owner of whiteboard can unban other users. Current user id: '{currentUserId}' is not the owner.";
return CreateValidationError(code, message);
}
public static ValidationError OnlyOwnerCanKickOtherUsers(UserId currentUserId)
{
string code = "only_owner_can_unban_other_users";
string message = $"Only owner of whiteboard can kick other users. Current user id: '{currentUserId}' is not the owner.";
return CreateValidationError(code, message);
}
} }

View File

@@ -0,0 +1,18 @@
using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Models.User.ValueObjects;
using AipsCore.Domain.Models.Whiteboard.Validation;
namespace AipsCore.Domain.Models.Whiteboard;
public partial class Whiteboard
{
public void BanUser(UserId currentUserId, WhiteboardMembership.WhiteboardMembership whiteboardMembership)
{
if (WhiteboardOwnerId != currentUserId)
{
throw new ValidationException(WhiteboardErrors.OnlyOwnerCanBanOtherUsers(currentUserId));
}
whiteboardMembership.Ban();
}
}

View File

@@ -0,0 +1,18 @@
using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Models.User.ValueObjects;
using AipsCore.Domain.Models.Whiteboard.Validation;
namespace AipsCore.Domain.Models.Whiteboard;
public partial class Whiteboard
{
public void KickUser(UserId currentUserId, WhiteboardMembership.WhiteboardMembership whiteboardMembership)
{
if (WhiteboardOwnerId != currentUserId)
{
throw new ValidationException(WhiteboardErrors.OnlyOwnerCanKickOtherUsers(currentUserId));
}
whiteboardMembership.Kick();
}
}

View File

@@ -0,0 +1,18 @@
using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Models.User.ValueObjects;
using AipsCore.Domain.Models.Whiteboard.Validation;
namespace AipsCore.Domain.Models.Whiteboard;
public partial class Whiteboard
{
public void UnbanUser(UserId currentUserId, WhiteboardMembership.WhiteboardMembership whiteboardMembership)
{
if (WhiteboardOwnerId != currentUserId)
{
throw new ValidationException(WhiteboardErrors.OnlyOwnerCanUnbanOtherUsers(currentUserId));
}
whiteboardMembership.Unban();
}
}

View File

@@ -0,0 +1,11 @@
using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects;
namespace AipsCore.Domain.Models.WhiteboardMembership;
public partial class WhiteboardMembership
{
public void Ban()
{
IsBanned = new WhiteboardMembershipIsBanned(true);
}
}

View File

@@ -0,0 +1,11 @@
using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects;
namespace AipsCore.Domain.Models.WhiteboardMembership;
public partial class WhiteboardMembership
{
public void Kick()
{
CanJoin = new WhiteboardMembershipCanJoin(false);
}
}

View File

@@ -0,0 +1,11 @@
using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects;
namespace AipsCore.Domain.Models.WhiteboardMembership;
public partial class WhiteboardMembership
{
public void Unban()
{
IsBanned = new WhiteboardMembershipIsBanned(false);
}
}

View File

@@ -5,7 +5,7 @@ using AipsCore.Domain.Models.WhiteboardMembership.ValueObjects;
namespace AipsCore.Domain.Models.WhiteboardMembership; namespace AipsCore.Domain.Models.WhiteboardMembership;
public class WhiteboardMembership : DomainModel<WhiteboardMembershipId> public partial class WhiteboardMembership : DomainModel<WhiteboardMembershipId>
{ {
public WhiteboardId WhiteboardId { get; private set; } public WhiteboardId WhiteboardId { get; private set; }
public UserId UserId { get; private set; } public UserId UserId { get; private set; }