Added skoruba api integration

This commit is contained in:
2026-10-04 14:31:06 +02:00
parent b3957f4af4
commit 06539236a1
151 changed files with 317 additions and 242 deletions
@@ -1,4 +1,4 @@
using PostFundManagement.Application.Abstractions;
using PostFundManagement.Application.Abstractions.Services;
using PostFundManagement.Domain.Abstractions;
using static PostFundManagement.Domain.Extensions.Constants;
@@ -1,5 +1,4 @@
using PostFundManagement.Application.Abstractions;
using PostFundManagement.Application.Abstractions.Services;
using PostFundManagement.Application.Abstractions.Services;
namespace PostFundManagement.Application.Services.Shared;
@@ -12,9 +12,10 @@ public sealed class IdentityService(IDbContextFactory<ApplicationDbContext> cont
{
await using var context = await contextFactory.CreateDbContextAsync(cancellationToken);
// TODO: Ensure TenantUser status is checked
var userExistsAndActive = await context.Users
.AnyAsync(u => u.Id == userId && u.Status == ActivityStatus.Active, cancellationToken);
var userExistsAndActive = await context.TenantUsers
.Include(i => i.User)
.AnyAsync(u => u.UserId == userId && u.Status == ActivityStatus.Active &&
u.User!.Status == ActivityStatus.Active, cancellationToken);
return Result.OkIf(userExistsAndActive, NotFoundError.Create());
}));
@@ -1,7 +1,7 @@
using PostFundManagement.Domain.Configuration.Security;
using PostFundManagement.Domain.Errors;
using PostFundManagement.Domain.Security.Configuration;
using PostFundManagement.Domain.Security.Models;
using PostFundManagement.Domain.Security.Sdk;
using PostFundManagement.Domain.Models.Security;
using PostFundManagement.Infrastructure.Security;
namespace PostFundManagement.Application.Services.Shared;
@@ -9,10 +9,10 @@ public sealed class TokenService(ISecurityConnectApi connectApi, IOptions<Securi
{
private readonly SecurityClientSettings clientSettings = clientOptions.Value;
public async Task<Result<Domain.Security.Models.TokenResponse>> GenerateAsync(CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<Domain.Security.Models.TokenResponse>>>)(async () =>
public async Task<Result<Domain.Models.Security.TokenResponse>> GenerateAsync(CancellationToken cancellationToken = default) =>
await Result.Try((Func<Task<Result<Domain.Models.Security.TokenResponse>>>)(async () =>
{
using var response = await connectApi.GetToken(new Domain.Security.Models.TokenRequest
using var response = await connectApi.GetToken(new Domain.Models.Security.TokenRequest
{
ClientId = clientSettings.ClientId,
ClientSecret = clientSettings.ClientSecret,
@@ -27,14 +27,14 @@ public sealed class TokenService(ISecurityConnectApi connectApi, IOptions<Securi
if (response.IsSuccessStatusCode)
{
var tokenResponse = JsonSerializer.Deserialize<Domain.Security.Models.TokenResponse>(contentRaw);
var tokenResponse = JsonSerializer.Deserialize<Domain.Models.Security.TokenResponse>(contentRaw);
return Result.FailIf(string.IsNullOrWhiteSpace(tokenResponse?.AccessToken),
NotFoundError.Create("Authentication succeeded, but no access token was found in the response payload."))
.ToResult(tokenResponse!);
}
return await Result.Try((Func<Task<Result<Domain.Security.Models.TokenResponse>>>)(async () =>
return await Result.Try((Func<Task<Result<Domain.Models.Security.TokenResponse>>>)(async () =>
{
var errorResult = JsonSerializer.Deserialize<TokenErrorResponse>(contentRaw);