init backend

This commit is contained in:
2026-02-04 21:11:51 +01:00
parent 537d49e797
commit b73fd8eb05
31 changed files with 673 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
using AipsCore.Domain.Common.ValueObjects;
using AipsCore.Domain.Models.User.ValueObjects;
namespace AipsCore.Domain.Models.User;
public class User
{
public UserId Id { get; private set; }
public Email Email { get; private set; }
public Username Username { get; private set; }
public User(UserId id, Email email, Username username)
{
Id = id;
Email = email;
Username = username;
}
}

View File

@@ -0,0 +1,26 @@
using AipsCore.Domain.Common.Validation.Rules;
using AipsCore.Utility.Text;
namespace AipsCore.Domain.Models.User.Validation;
public class UsernameCharsetRule : CharsetRule
{
public UsernameCharsetRule(string stringValue)
: base(stringValue, GetUsernameCharset())
{
}
private static char[] GetUsernameCharset()
{
var alphanumericCharset = Charset.GetAlphanumericCharset();
char[] usernameCharset = [..alphanumericCharset, '_'];
return usernameCharset;
}
protected override string ErrorCode => "username_charset";
protected override string ErrorMessage =>
"Username contains invalid characters, only alphanumeric characters and '_' are allowed";
}

View File

@@ -0,0 +1,5 @@
using AipsCore.Domain.Common.ValueObjects;
namespace AipsCore.Domain.Models.User.ValueObjects;
public record UserId(string IdValue) : DomainId(IdValue);

View File

@@ -0,0 +1,33 @@
using AipsCore.Domain.Abstract;
using AipsCore.Domain.Abstract.Rule;
using AipsCore.Domain.Abstract.ValueObject;
using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Common.Validation.Rules;
using AipsCore.Domain.Common.ValueObjects;
using AipsCore.Domain.Models.User.Validation;
namespace AipsCore.Domain.Models.User.ValueObjects;
public record Username : AbstractValueObject
{
public string UsernameValue { get; init; }
public Username(string UsernameValue)
{
this.UsernameValue = UsernameValue;
Validate();
}
private const int MinimumLength = 8;
private const int MaximumLength = 20;
protected override ICollection<IRule> GetValidationRules()
{
return
[
new MinLengthRule(UsernameValue, MinimumLength),
new MaxLengthRule(UsernameValue, MaximumLength),
new UsernameCharsetRule(UsernameValue)
];
}
}