From 098aa23c62ae3e3c8151f21a961efd217d21eb19 Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Mon, 2 Feb 2026 13:17:43 -0600 Subject: [PATCH] refactor(core): encapsulate user and refresh token creation with factory methods --- src/FiscalOS.Core/Identity/RefreshToken.cs | 2 +- src/FiscalOS.Core/Identity/User.cs | 18 ++++++++++++++++++ src/FiscalOS.Core/Usings.cs | 4 +++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/FiscalOS.Core/Identity/RefreshToken.cs b/src/FiscalOS.Core/Identity/RefreshToken.cs index 69ddce1..f802ce4 100644 --- a/src/FiscalOS.Core/Identity/RefreshToken.cs +++ b/src/FiscalOS.Core/Identity/RefreshToken.cs @@ -5,7 +5,7 @@ public sealed class RefreshToken : Entity public string Token { get; init; } = string.Empty; public DateTimeOffset ExpiresAt { get; init; } public Guid UserId { get; init; } - public User User { get; init; } = new(); + public User User { get; init; } = User.New(); private RefreshToken() { diff --git a/src/FiscalOS.Core/Identity/User.cs b/src/FiscalOS.Core/Identity/User.cs index b3bb1fa..be80277 100644 --- a/src/FiscalOS.Core/Identity/User.cs +++ b/src/FiscalOS.Core/Identity/User.cs @@ -6,4 +6,22 @@ public sealed class User : Entity public string HashedPassword { get; init; } = string.Empty; public ICollection RefreshTokens { get; init; } = []; + + private User() + { + } + + public static User New() + { + return new(); + } + + public static User From(string username, string hashedPassword) + { + return new() + { + Username = username, + HashedPassword = hashedPassword, + }; + } } \ No newline at end of file diff --git a/src/FiscalOS.Core/Usings.cs b/src/FiscalOS.Core/Usings.cs index c70d0ad..05db914 100644 --- a/src/FiscalOS.Core/Usings.cs +++ b/src/FiscalOS.Core/Usings.cs @@ -1 +1,3 @@ -global using FiscalOS.Core.Data; \ No newline at end of file +global using FiscalOS.Core.Data; + +global using FiscalOS.Core.Identity; \ No newline at end of file