diff --git a/src/FiscalOS.Core/Accounts/Account.cs b/src/FiscalOS.Core/Accounts/Account.cs new file mode 100644 index 0000000..8175235 --- /dev/null +++ b/src/FiscalOS.Core/Accounts/Account.cs @@ -0,0 +1,20 @@ +namespace FiscalOS.Core.Accounts; + +public sealed class Account : Entity +{ + public Guid UserId { get; init; } + public Guid InstituionId { get; init; } + public Institution Institution { get; init; } = null!; + public string Name { get; init; } = string.Empty; + public AccountMetadata Metadata { get; init; } = null!; + + public static Account From(Guid institutionId, string name, AccountMetadata accountMetadata) + { + return new() + { + InstituionId = institutionId, + Name = name, + Metadata = accountMetadata, + }; + } +} \ No newline at end of file diff --git a/src/FiscalOS.Core/Accounts/AccountMetadata.cs b/src/FiscalOS.Core/Accounts/AccountMetadata.cs new file mode 100644 index 0000000..aa6191b --- /dev/null +++ b/src/FiscalOS.Core/Accounts/AccountMetadata.cs @@ -0,0 +1,15 @@ +namespace FiscalOS.Core.Accounts; + +public abstract class AccountMetadata : Entity +{ + private readonly string _type; + + public string Type => _type; + + public Guid AccountId { get; init; } + + protected AccountMetadata(string type) + { + _type = type; + } +} \ No newline at end of file diff --git a/src/FiscalOS.Core/Identity/User.cs b/src/FiscalOS.Core/Identity/User.cs index 3c992cb..bd3ff2d 100644 --- a/src/FiscalOS.Core/Identity/User.cs +++ b/src/FiscalOS.Core/Identity/User.cs @@ -13,6 +13,9 @@ public sealed class User : Entity private readonly List _institutions = []; public IEnumerable Institutions => _institutions; + private readonly List _accounts = []; + public IEnumerable Accounts => _accounts; + private User() { } @@ -50,4 +53,11 @@ public sealed class User : Entity _institutions.Add(institution); } + + public void AddAccount(Account account) + { + ArgumentNullException.ThrowIfNull(account, nameof(account)); + + _accounts.Add(account); + } } \ No newline at end of file