Files
itworx-knowledge-hub-Public/src/backend/ItWorx.KnowledgeHub.Application/Identity/UseCases/GetSessionUseCase.cs
T

45 lines
1.3 KiB
C#

using ItWorx.KnowledgeHub.Domain.Identity;
namespace ItWorx.KnowledgeHub.Application.Identity.UseCases;
public sealed record SessionInfo(
bool Authenticated,
bool SetupRequired,
Guid? UserId,
string? DisplayName,
string? Email,
Guid? WorkspaceId,
WorkspaceRole? Role);
public sealed class GetSessionUseCase(
IInstallationRepository installations,
IUserAccountManager userAccounts,
IWorkspaceRepository workspaces,
IWorkspaceMembershipRepository memberships)
{
public async Task<SessionInfo> ExecuteAsync(CancellationToken cancellationToken)
{
var setupComplete = await installations.IsSetupCompleteAsync(cancellationToken);
var account = await userAccounts.GetSignedInAccountAsync(cancellationToken);
if (account is null)
{
return new SessionInfo(false, !setupComplete, null, null, null, null, null);
}
var workspaceId = await workspaces.GetDefaultWorkspaceIdAsync(cancellationToken);
WorkspaceRole? role = workspaceId is null
? null
: await memberships.GetRoleAsync(workspaceId.Value, account.Id, cancellationToken);
return new SessionInfo(
true,
!setupComplete,
account.Id,
account.DisplayName,
account.Email,
workspaceId,
role);
}
}