refactor: consolidate project structure by migrating authentication, identity, and shared UI components while removing legacy Web Client files.
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
@page "/account/profile"
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@using NexusReader.UI.Shared.Services
|
||||
@attribute [Authorize]
|
||||
@inject IIdentityService IdentityService
|
||||
@inject NavigationManager NavigationManager
|
||||
|
||||
<div class="profile-container">
|
||||
<div class="profile-card">
|
||||
@if (_profile == null)
|
||||
{
|
||||
<div class="loading-state">
|
||||
<div class="spinner"></div>
|
||||
<p>Fetching your Nexus profile...</p>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="profile-header">
|
||||
<div class="user-avatar">
|
||||
@(string.IsNullOrEmpty(_profile.Email) ? "?" : _profile.Email[0].ToString().ToUpper())
|
||||
</div>
|
||||
<h2>@_profile.Email</h2>
|
||||
<div class="plan-badge @(_profile.CurrentPlan.ToLower())">
|
||||
@_profile.CurrentPlan Plan
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="profile-stats">
|
||||
<div class="stat-group">
|
||||
<div class="stat-header">
|
||||
<span>AI Token Usage</span>
|
||||
<span class="usage-count">@_profile.AITokensUsed / @_profile.AITokenLimit</span>
|
||||
</div>
|
||||
<div class="progress-bar">
|
||||
<div class="progress-fill" style="width: @(CalculateProgress())%"></div>
|
||||
</div>
|
||||
<p class="stat-footer">Resetting on your next billing date.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="profile-actions">
|
||||
<button class="btn-primary" @onclick="HandleUpgrade">
|
||||
Manage Subscription
|
||||
</button>
|
||||
<button class="btn-outline" @onclick="HandleLogout">
|
||||
Sign Out
|
||||
</button>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private UserProfile? _profile;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_profile = await IdentityService.GetProfileAsync();
|
||||
}
|
||||
|
||||
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/login");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user