541e9e1fb5
This Pull Request encapsulates all outstanding AI, Blazor InteractiveAuto lifecycle, pgvector, and Firefox authorization/session compatibility fixes. ### Key Accomplishments: 1. **Concurrent Request Deduplication (Option B):** Implemented a thread-safe active task registry in `KnowledgeService` that groups concurrent graph extraction queries for the same content, preventing duplicate AI calls completely. 2. **Resilience Strategy for Downstream Demands:** Extended the `ai-retry` resilience pipeline to automatically intercept and retry on temporary Google API `503 ServiceUnavailable` / `high demand` spikes. 3. **Interactive Graph Generation Guard (Option A):** Prevented server-side prerender-phase graph requests in the reader canvas component. 4. **Firefox Compatibility & Cookie Handler:** Implemented an authentication endpoint and hybrid hidden-form submission flow to solve login, registration, and logout redirections and cookies securely. 5. **Autoscrolling & Graph Exclusions:** Added concept-to-block smooth scrolling, active block badging, and filtered out markdown code blocks from being extracted as nodes. All unit tests compiled and passed 100% cleanly. --------- Co-authored-by: Marek Jasiński <jasins.marek@gmail.com> Reviewed-on: #44 Co-authored-by: Antigravity <antigravity@google.com> Co-committed-by: Antigravity <antigravity@google.com>
42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
using NexusReader.Application.Constants;
|
|
|
|
namespace NexusReader.Application.DTOs.User;
|
|
|
|
public record UserProfileDto
|
|
{
|
|
public string Email { get; init; } = string.Empty;
|
|
public int AITokensUsed { get; init; }
|
|
public Guid TenantId { get; init; }
|
|
|
|
/// <summary>
|
|
/// Relational data for the current subscription plan.
|
|
/// </summary>
|
|
public SubscriptionPlanDto Plan { get; init; } = new();
|
|
|
|
public int AverageQuizScore { get; init; }
|
|
|
|
/// <summary>
|
|
/// Summary of the last read book.
|
|
/// </summary>
|
|
public LastReadBookDto? LastReadBook { get; init; }
|
|
|
|
public string[] Roles { get; init; } = Array.Empty<string>();
|
|
|
|
// Helper properties for UI compatibility
|
|
public string CurrentPlan => Plan?.Name ?? PlanConstants.DefaultPlanName;
|
|
public int AITokenLimit => Plan?.AITokenLimit ?? PlanConstants.DefaultTokenLimit;
|
|
public string LastReadBookTitle => LastReadBook?.Title ?? PlanConstants.DefaultActivityLabel;
|
|
}
|
|
|
|
public record LastReadBookDto
|
|
{
|
|
public Guid Id { get; init; }
|
|
public string Title { get; init; } = string.Empty;
|
|
public AuthorDto Author { get; init; } = new();
|
|
public string? CoverUrl { get; init; }
|
|
public double Progress { get; init; }
|
|
public string? LastChapter { get; init; }
|
|
public int LastChapterIndex { get; init; }
|
|
public string? Description { get; init; }
|
|
}
|