@page "/account/profile" @page "/profile" @using Microsoft.AspNetCore.Authorization @using NexusReader.UI.Shared.Services @using NexusReader.UI.Shared.Components.Atoms @attribute [Authorize] @inject IIdentityService IdentityService @inject NavigationManager NavigationManager
@if (_profile == null) {

Ładowanie systemu...

} else {
@(_profile.Email[0].ToString().ToUpper())

@_profile.Email.Split('@')[0]

[Nexus_Explorer_@(_profile.TenantId.ToString()[..4])]

Interfejs AI

@_profile.AITokensUsed / @_profile.AITokenLimit
Wykorzystane Jednostki Mocy

Wydajność Nauki

@_profile.AverageQuizScore% Średni Wynik Asymilacji
@_profile.LastReadBookTitle

Status Autoryzacji

@_profile.CurrentPlan Protocol Node: @_profile.TenantId.ToString().ToUpper()
}
NXS-SYS-v10
IDENTITY-CORE-ENCRYPTED
@code { private UserProfileDto? _profile; protected override async Task OnInitializedAsync() { var result = await IdentityService.GetProfileAsync(); if (result.IsSuccess) { _profile = result.Value; } StateHasChanged(); } private int CalculateProgress() { if (_profile == null || _profile.AITokenLimit == 0) return 0; var percent = (int)((double)_profile.AITokensUsed / _profile.AITokenLimit * 100); return Math.Min(percent, 100); } private void HandleUpgrade() { // Future: Redirect to Stripe billing portal } private async Task HandleLogout() { await IdentityService.LogoutAsync(); NavigationManager.NavigateTo("/account/logout-form", true); } }