2e23a032d3
This PR implements the Hub Navigation system and the Profile Dashboard, while resolving critical session synchronization issues. ### Key Changes - **Hub Navigation**: Introduced `MainHubLayout` with a premium glassmorphism sidebar, providing access to Dashboard, Library, Concepts Map, and Profile. - **Profile Dashboard**: Implemented a high-fidelity Profile page (#27) with learning metrics, AI token usage tracking, and system rank visualization. - **Stability Fixes**: - Resolved an infinite network loop on the `/profile` page by implementing request deduplication and in-memory caching in `IdentityService`. - Added environment-aware guards to prevent illegal JavaScript interop calls during server-side prerendering. - Implemented automatic session invalidation on `401 Unauthorized` responses to handle stale authentication states gracefully. - **Reader Integration**: Added a "Return to Dashboard" option in the reader toolbar (#26). Closes #26 Closes #27 Reviewed-on: #31 Co-authored-by: Marek Jasiński <jasins.marek@gmail.com> Co-committed-by: Marek Jasiński <jasins.marek@gmail.com>
41 lines
1.1 KiB
C#
41 lines
1.1 KiB
C#
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
#nullable disable
|
|
|
|
namespace NexusReader.Data.Migrations
|
|
{
|
|
/// <inheritdoc />
|
|
public partial class AddEbookProgressAndChapter : Migration
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.AddColumn<string>(
|
|
name: "LastChapter",
|
|
table: "Ebooks",
|
|
type: "character varying(255)",
|
|
maxLength: 255,
|
|
nullable: true);
|
|
|
|
migrationBuilder.AddColumn<double>(
|
|
name: "Progress",
|
|
table: "Ebooks",
|
|
type: "double precision",
|
|
nullable: false,
|
|
defaultValue: 0.0);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.DropColumn(
|
|
name: "LastChapter",
|
|
table: "Ebooks");
|
|
|
|
migrationBuilder.DropColumn(
|
|
name: "Progress",
|
|
table: "Ebooks");
|
|
}
|
|
}
|
|
}
|