Whiteboard Domain

This commit is contained in:
Veljko Tosic
2026-02-09 00:13:23 +01:00
parent 90c127ddb3
commit f93144f732
7 changed files with 103 additions and 9 deletions

View File

@@ -0,0 +1,11 @@
using AipsCore.Domain.Models.Whiteboard.ValueObjects;
namespace AipsCore.Domain.Models.Whiteboard.External;
public interface IWhiteboardRepository
{
Task<Whiteboard?> Get(WhiteboardId whiteboardId, CancellationToken cancellationToken = default);
Task Save(Whiteboard whiteboard, CancellationToken cancellationToken = default);
Task<bool> WhiteboardCodeExists(WhiteboardCode whiteboardCode);
}

View File

@@ -3,9 +3,9 @@ using AipsCore.Utility.Text;
namespace AipsCore.Domain.Models.Whiteboard.Validation; namespace AipsCore.Domain.Models.Whiteboard.Validation;
public class WhitebordCodeCharsetRule : CharsetRule public class WhiteboardCodeCharsetRule : CharsetRule
{ {
public WhitebordCodeCharsetRule(string stringValue) public WhiteboardCodeCharsetRule(string stringValue)
: base(stringValue, GetWhiteboardCodeCharset()) : base(stringValue, GetWhiteboardCodeCharset())
{ {
} }

View File

@@ -0,0 +1,24 @@
using AipsCore.Domain.Common.Validation.Rules;
using AipsCore.Utility.Text;
namespace AipsCore.Domain.Models.Whiteboard.Validation;
public class WhiteboardTitleCharsetRule : CharsetRule
{
public WhiteboardTitleCharsetRule(string stringValue)
: base(stringValue, GetWhiteboardTitleCharset())
{
}
private static char[] GetWhiteboardTitleCharset()
{
var alphanumericCharset = Charset.GetAlphanumericCharset();
return [..alphanumericCharset, '_', ' ', '/'];
}
protected override string ErrorCode => "whiteboard_title_charset";
protected override string ErrorMessage =>
"Whiteboard title contains invalid characters, only alphanumeric characters, '_', ' ', '/' are allowed";
}

View File

@@ -1,9 +1,6 @@
using AipsCore.Domain.Abstract; using AipsCore.Domain.Abstract.Rule;
using AipsCore.Domain.Abstract.Rule;
using AipsCore.Domain.Abstract.ValueObject; using AipsCore.Domain.Abstract.ValueObject;
using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Common.Validation.Rules; using AipsCore.Domain.Common.Validation.Rules;
using AipsCore.Domain.Common.ValueObjects;
using AipsCore.Domain.Models.Whiteboard.Validation; using AipsCore.Domain.Models.Whiteboard.Validation;
namespace AipsCore.Domain.Models.Whiteboard.ValueObjects; namespace AipsCore.Domain.Models.Whiteboard.ValueObjects;
@@ -25,7 +22,7 @@ public record WhiteboardCode : AbstractValueObject
return return
[ [
new ExactLength(CodeValue, CodeLength), new ExactLength(CodeValue, CodeLength),
new WhitebordCodeCharsetRule(CodeValue) new WhiteboardCodeCharsetRule(CodeValue)
]; ];
} }
} }

View File

@@ -2,4 +2,7 @@
namespace AipsCore.Domain.Models.Whiteboard.ValueObjects; namespace AipsCore.Domain.Models.Whiteboard.ValueObjects;
public record WhiteboardId(string IdValue) : DomainId(IdValue); public record WhiteboardId(string IdValue) : DomainId(IdValue)
{
public static WhiteboardId Any() => new(Guid.NewGuid().ToString());
}

View File

@@ -0,0 +1,29 @@
using AipsCore.Domain.Abstract.Rule;
using AipsCore.Domain.Abstract.ValueObject;
using AipsCore.Domain.Common.Validation.Rules;
using AipsCore.Domain.Models.Whiteboard.Validation;
namespace AipsCore.Domain.Models.Whiteboard.ValueObjects;
public record WhiteboardTitle : AbstractValueObject
{
private const int MaxWhiteboardTitleLength = 32;
private const int MinWhiteboardTitleLength = 3;
public string TitleValue { get; init; }
public WhiteboardTitle(string TitleValue)
{
this.TitleValue = TitleValue;
Validate();
}
protected override ICollection<IRule> GetValidationRules()
{
return [
new MaxLengthRule(TitleValue, MaxWhiteboardTitleLength),
new MinLengthRule(TitleValue, MinWhiteboardTitleLength),
new WhiteboardTitleCharsetRule(TitleValue)
];
}
}

View File

@@ -8,11 +8,41 @@ public class Whiteboard
public WhiteboardId Id { get; private set; } public WhiteboardId Id { get; private set; }
public UserId WhiteboardOwnerId { get; private set; } public UserId WhiteboardOwnerId { get; private set; }
public WhiteboardCode Code { get; private set; } public WhiteboardCode Code { get; private set; }
public WhiteboardTitle Title { get; private set; }
public Whiteboard(WhiteboardId id, User.User whiteboardOwner, WhiteboardCode code) public Whiteboard(WhiteboardId id, User.User whiteboardOwner, WhiteboardCode code, WhiteboardTitle title)
{ {
Id = id; Id = id;
WhiteboardOwnerId = whiteboardOwner.Id; WhiteboardOwnerId = whiteboardOwner.Id;
Code = code; Code = code;
Title = title;
}
public Whiteboard(WhiteboardId id, UserId whiteboardOwnerId, WhiteboardCode code, WhiteboardTitle title)
{
Id = id;
WhiteboardOwnerId = whiteboardOwnerId;
Code = code;
Title = title;
}
public static Whiteboard Create(string id, string ownerId, string code, string title)
{
var whiteboardId = new WhiteboardId(id);
var whiteboardOwnerId = new UserId(ownerId);
var whiteboardCode = new WhiteboardCode(code);
var whiteboardTitle = new WhiteboardTitle(title);
return new Whiteboard(whiteboardId, whiteboardOwnerId, whiteboardCode, whiteboardTitle);
}
public static Whiteboard Create(string ownerId, string code, string title)
{
var whiteboardId = WhiteboardId.Any();
var whiteboardOwnerId = new UserId(ownerId);
var whiteboardCode = new WhiteboardCode(code);
var whiteboardTitle = new WhiteboardTitle(title);
return new Whiteboard(whiteboardId, whiteboardOwnerId, whiteboardCode, whiteboardTitle);
} }
} }