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 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); } }