diff --git a/src/FiscalOS.API/Accounts/Add/Endpoint.cs b/src/FiscalOS.API/Accounts/Add/Endpoint.cs index 7977be7..2b70e6f 100644 --- a/src/FiscalOS.API/Accounts/Add/Endpoint.cs +++ b/src/FiscalOS.API/Accounts/Add/Endpoint.cs @@ -42,8 +42,14 @@ internal static class Endpoint return Results.Conflict(); } + // TODO: We need to get the initial balance + // of the account + var accountMetadata = PlaidAccountMetadata.From(request.PlaidAccountId, request.PlaidAccountName); var account = Account.From(user.Institutions.First().Id, request.PlaidAccountName, accountMetadata); + var balance = Balance.From(request.AccountCurrentBalance, request.AccountAvailableBalance); + + account.AddBalance(balance); user.AddAccount(account); await appDbContext.SaveChangesAsync(ct); diff --git a/src/FiscalOS.API/Accounts/Add/Request.cs b/src/FiscalOS.API/Accounts/Add/Request.cs index e78fb3d..470e5b4 100644 --- a/src/FiscalOS.API/Accounts/Add/Request.cs +++ b/src/FiscalOS.API/Accounts/Add/Request.cs @@ -5,6 +5,8 @@ public record Request : IValidatableObject public string PlaidInstitutionId { get; init; } = string.Empty; public string PlaidAccountId { get; init; } = string.Empty; public string PlaidAccountName { get; init; } = string.Empty; + public decimal AccountCurrentBalance { get; init; } + public decimal AccountAvailableBalance { get; init; } public IEnumerable Validate(ValidationContext validationContext) { diff --git a/tests/FiscalOS.API.Tests/Integration/Accounts/AddTests.cs b/tests/FiscalOS.API.Tests/Integration/Accounts/AddTests.cs index d4d8412..e0f0e9d 100644 --- a/tests/FiscalOS.API.Tests/Integration/Accounts/AddTests.cs +++ b/tests/FiscalOS.API.Tests/Integration/Accounts/AddTests.cs @@ -222,6 +222,7 @@ public class AddTests(TestApi testApi) : IntegrationTest(testApi) var newAccountId = "newAccountId"; var newAccountName = "New Account"; + var expectedBalance = 100; using var request = HttpRequestBuilder.New() .Post(AddUri) @@ -231,6 +232,8 @@ public class AddTests(TestApi testApi) : IntegrationTest(testApi) plaidInstitutionId = ((PlaidMetadata)institution.Metadata!).PlaidId, plaidAccountId = newAccountId, plaidAccountName = newAccountName, + accountCurrentBalance = expectedBalance, + accountAvailableBalance = expectedBalance, }) .Build(); @@ -242,6 +245,9 @@ public class AddTests(TestApi testApi) : IntegrationTest(testApi) async (context, ct) => await context.Set() .Include(u => u.Accounts) .ThenInclude(a => a.Metadata) + .Include(u => u.Accounts) + .ThenInclude(a => a.Balances) + .AsSplitQuery() .FirstAsync(u => u.Id == user.Id, ct), TestContext.Current.CancellationToken ); @@ -253,5 +259,12 @@ public class AddTests(TestApi testApi) : IntegrationTest(testApi) ((PlaidAccountMetadata)a.Metadata).PlaidId == newAccountId && ((PlaidAccountMetadata)a.Metadata).PlaidName == newAccountName ); + + updatedUser.Accounts.First() + .Balances.Should().ContainSingle( + b => b.AccountId == updatedUser.Accounts.First().Id && + b.Current == expectedBalance && + b.Available == expectedBalance + ); } } \ No newline at end of file