Whiteboard Domain
This commit is contained in:
11
dotnet/AipsCore/Domain/Models/Whiteboard/External/IWhiteboardRepository.cs
vendored
Normal file
11
dotnet/AipsCore/Domain/Models/Whiteboard/External/IWhiteboardRepository.cs
vendored
Normal 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);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -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";
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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());
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user