Files
Nexus.Reader/src/.documentation/cache/summaries/NexusReader.Data__Migrations__20260429080302_AddQuizResults.Designer.cs.json
T
2026-05-25 14:02:56 +02:00

1 line
13 KiB
JSON

{"path":"NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs","purpose":"EF Core migration designer that defines the target database model (tables, columns, keys, indices, and relationships) for the AddQuizResults migration.","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["[DbContext(typeof(AppDbContext))] and [Migration(\"20260429080302_AddQuizResults\")] attributes","Contains BuildTargetModel(ModelBuilder) which configures entities, tables, indexes, and foreign keys"]},"className":"AddQuizResults","methods":[{"name":"BuildTargetModel","line":19,"endLine":418,"signature":"(modelBuilder: ModelBuilder) -> void","purpose":"Constructs the EF Core model for the migration: declares entities, columns, keys, indexes, relationships, and Npgsql identity config.","calls":[],"actions":[{"id":"db-config-call_26","kind":"mapping","label":"Use Npgsql identity-by-default columns","line":26,"detail":"NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder) — configures PostgreSQL identity default behavior","visibility":"detail-only","confidence":0.7},{"id":"create-table_28","kind":"mapping","label":"AspNetRoles table mapping","line":28,"detail":"Defines IdentityRole columns (Id, ConcurrencyStamp, Name, NormalizedName), primary key, unique index RoleNameIndex and table name AspNetRoles","visibility":"detail-only","confidence":0.7},{"id":"create-table_54","kind":"mapping","label":"AspNetRoleClaims table mapping","line":54,"detail":"Defines IdentityRoleClaim columns (Id, ClaimType, ClaimValue, RoleId), PK, index on RoleId and table AspNetRoleClaims","visibility":"detail-only","confidence":0.7},{"id":"create-table_79","kind":"mapping","label":"AspNetUserClaims table mapping","line":79,"detail":"Defines IdentityUserClaim columns, PK, index on UserId and table AspNetUserClaims","visibility":"detail-only","confidence":0.7},{"id":"create-table_104","kind":"mapping","label":"AspNetUserLogins table mapping","line":104,"detail":"Defines IdentityUserLogin composite PK, Provider/Key, UserId index and table AspNetUserLogins","visibility":"detail-only","confidence":0.7},{"id":"create-table_126","kind":"mapping","label":"AspNetUserRoles table mapping","line":126,"detail":"Defines composite PK (UserId, RoleId), index on RoleId and table AspNetUserRoles","visibility":"detail-only","confidence":0.7},{"id":"create-table_141","kind":"mapping","label":"AspNetUserTokens table mapping","line":141,"detail":"Defines composite PK (UserId, LoginProvider, Name) and table AspNetUserTokens","visibility":"detail-only","confidence":0.7},{"id":"create-table_160","kind":"mapping","label":"Ebooks table mapping","line":160,"detail":"Defines Ebook columns (Id uuid PK, AddedDate, Author, CoverUrl, FilePath, LastReadDate, Title, UserId), index on UserId and table Ebooks","visibility":"detail-only","confidence":0.7},{"id":"create-table_200","kind":"mapping","label":"AspNetUsers (NexusUser) table mapping","line":200,"detail":"Defines NexusUser / AspNetUsers columns (Id, AITokenLimit, AITokensUsed, AccessFailedCount, ConcurrencyStamp, CurrentPlan, Email, EmailConfirmed, LockoutEnabled, LockoutEnd, NormalizedEmail, NormalizedUserName, PasswordHash, PhoneNumber, PhoneNumberConfirmed, SecurityStamp, TenantId, TwoFactorEnabled, UserName), indices for EmailIndex and UserNameIndex","visibility":"detail-only","confidence":0.7},{"id":"create-table_277","kind":"mapping","label":"QuizResults table mapping","line":277,"detail":"Defines QuizResult columns (Id uuid PK, CompletedDate, Score, Topic, TotalQuestions, UserId), index on UserId and table QuizResults","visibility":"detail-only","confidence":0.7},{"id":"create-table_307","kind":"mapping","label":"SemanticKnowledgeCache table mapping","line":307,"detail":"Defines SemanticKnowledgeCache columns (ContentHash PK, CreatedAt, JsonData, ModelId, PromptVersion), unique index on ContentHash and table SemanticKnowledgeCache","visibility":"detail-only","confidence":0.7},{"id":"relationship_338","kind":"mapping","label":"Identity role claims -> IdentityRole (FK RoleId)","line":338,"detail":"IdentityRoleClaim.RoleId -> IdentityRole.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"relationship_347","kind":"mapping","label":"Identity user claims -> NexusUser (FK UserId)","line":347,"detail":"IdentityUserClaim.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"relationship_356","kind":"mapping","label":"Identity user logins -> NexusUser (FK UserId)","line":356,"detail":"IdentityUserLogin.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"relationship_365","kind":"mapping","label":"Identity user roles -> IdentityRole and NexusUser (FK RoleId, UserId)","line":365,"detail":"IdentityUserRole.RoleId -> IdentityRole.Id and IdentityUserRole.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"relationship_380","kind":"mapping","label":"Identity user tokens -> NexusUser (FK UserId)","line":380,"detail":"IdentityUserToken.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"relationship_389","kind":"mapping","label":"Ebook -> NexusUser (FK UserId)","line":389,"detail":"Ebook.UserId -> NexusUser.Id with cascade delete; navigation property User and NexusUser.Ebooks","visibility":"detail-only","confidence":0.7},{"id":"relationship_400","kind":"mapping","label":"QuizResult -> NexusUser (FK UserId)","line":400,"detail":"QuizResult.UserId -> NexusUser.Id with cascade delete; navigation property User and NexusUser.QuizResults","visibility":"detail-only","confidence":0.7},{"id":"navigation-declare_411","kind":"mapping","label":"NexusUser navigations","line":411,"detail":"Declares NexusUser navigations Ebooks and QuizResults","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"Ebook (entity mapping)","kind":"entity","line":160,"purpose":"Represents e-book metadata persisted in Ebooks table and linked to a NexusUser.","fields":[{"name":"Id","type":"Guid","required":true,"line":162,"description":"Primary key, uuid, generated on add"},{"name":"AddedDate","type":"DateTime","required":true,"line":166,"description":"When ebook was added"},{"name":"Author","type":"string","required":true,"line":169,"description":"Author name, max length 255"},{"name":"CoverUrl","type":"string","required":false,"line":174,"description":"Optional cover URL"},{"name":"FilePath","type":"string","required":true,"line":177,"description":"File path to ebook"},{"name":"LastReadDate","type":"DateTime?","required":false,"line":181,"description":"Nullable last read timestamp"},{"name":"Title","type":"string","required":true,"line":184,"description":"Title, max length 255"},{"name":"UserId","type":"string","required":true,"line":189,"description":"FK to NexusUser.Id"}]},{"name":"NexusUser (entity mapping)","kind":"entity","line":200,"purpose":"Application user (extends IdentityUser) persisted in AspNetUsers with authentication/tenant and AI token tracking fields.","fields":[{"name":"Id","type":"string","required":true,"line":202,"description":"Primary key"},{"name":"AITokenLimit","type":"int","required":true,"line":205,"description":"AI token limit for user"},{"name":"AITokensUsed","type":"int","required":true,"line":208,"description":"AI tokens consumed"},{"name":"AccessFailedCount","type":"int","required":true,"line":211,"description":"Failed access attempts"},{"name":"ConcurrencyStamp","type":"string","required":false,"line":214,"description":"Concurrency token"},{"name":"CurrentPlan","type":"string","required":true,"line":218,"description":"User subscription plan"},{"name":"Email","type":"string","required":false,"line":222,"description":"Email address"},{"name":"EmailConfirmed","type":"bool","required":true,"line":226,"description":"Whether email is confirmed"},{"name":"LockoutEnabled","type":"bool","required":true,"line":229,"description":"Lockout enabled flag"},{"name":"LockoutEnd","type":"DateTimeOffset?","required":false,"line":232,"description":"Lockout end if any"},{"name":"NormalizedEmail","type":"string","required":false,"line":235,"description":"Normalized email for lookup"},{"name":"NormalizedUserName","type":"string","required":false,"line":239,"description":"Normalized username for lookup"},{"name":"PasswordHash","type":"string","required":false,"line":243,"description":"Password hash"},{"name":"PhoneNumber","type":"string","required":false,"line":246,"description":"Phone number"},{"name":"PhoneNumberConfirmed","type":"bool","required":true,"line":249,"description":"Phone confirmed flag"},{"name":"SecurityStamp","type":"string","required":false,"line":252,"description":"Security stamp for identity"},{"name":"TenantId","type":"Guid","required":true,"line":255,"description":"Tenant identifier (uuid)"},{"name":"TwoFactorEnabled","type":"bool","required":true,"line":258,"description":"Two-factor auth enabled flag"},{"name":"UserName","type":"string","required":false,"line":261,"description":"User name"}]},{"name":"QuizResult (entity mapping)","kind":"entity","line":277,"purpose":"Represents a completed quiz result persisted in QuizResults and linked to a NexusUser.","fields":[{"name":"Id","type":"Guid","required":true,"line":279,"description":"Primary key, uuid, generated on add"},{"name":"CompletedDate","type":"DateTime","required":true,"line":283,"description":"When quiz was completed"},{"name":"Score","type":"int","required":true,"line":286,"description":"Score achieved"},{"name":"Topic","type":"string","required":true,"line":289,"description":"Quiz topic"},{"name":"TotalQuestions","type":"int","required":true,"line":293,"description":"Total number of questions"},{"name":"UserId","type":"string","required":true,"line":296,"description":"FK to NexusUser.Id"}]},{"name":"SemanticKnowledgeCache (entity mapping)","kind":"entity","line":307,"purpose":"Caches semantic knowledge artifacts keyed by content hash for reuse (stored as JSON), persisted in SemanticKnowledgeCache.","fields":[{"name":"ContentHash","type":"string","required":true,"line":309,"description":"Primary key and unique content hash (max length 128)"},{"name":"CreatedAt","type":"DateTime","required":true,"line":313,"description":"Cache creation timestamp"},{"name":"JsonData","type":"string","required":true,"line":316,"description":"Serialized JSON payload"},{"name":"ModelId","type":"string","required":true,"line":320,"description":"Model identifier used to produce cache (max length 50)"},{"name":"PromptVersion","type":"string","required":true,"line":325,"description":"Prompt version tag (max length 10)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Data/Persistence/AppDbContext.cs","NexusReader.Domain/Entities/Ebook.cs","NexusReader.Domain/Entities/NexusUser.cs","NexusReader.Domain/Entities/QuizResult.cs","NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"],"patterns":["EF Core Migration","Fluent Mapping"],"domainConcepts":["QuizResult","Ebook","NexusUser","SemanticKnowledgeCache","Identity (AspNetUsers/AspNetRoles)"],"keyDetails":"This auto-generated EF Core migration designer defines the QuizResults table and wiring to NexusUser, plus other identity and application tables; it configures columns, PKs, indices, and cascade-delete foreign keys for the PostgreSQL provider.","orchestrationMethods":[],"typedContracts":[{"name":"Ebook (entity mapping)","kind":"entity","line":160,"fieldCount":8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"NexusUser (entity mapping)","kind":"entity","line":200,"fieldCount":19,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"QuizResult (entity mapping)","kind":"entity","line":277,"fieldCount":6,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"SemanticKnowledgeCache (entity mapping)","kind":"entity","line":307,"fieldCount":5,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"Ebook (entity mapping)","line":160,"summary":"entity with 8 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"kind":"typed-contract","label":"NexusUser (entity mapping)","line":200,"summary":"entity with 19 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"kind":"typed-contract","label":"QuizResult (entity mapping)","line":277,"summary":"entity with 6 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"kind":"typed-contract","label":"SemanticKnowledgeCache (entity mapping)","line":307,"summary":"entity with 5 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]}],"cacheMetadata":{"schemaVersion":2,"analysisVersion":"2026-05-23.cache-v1","contentChecksum":"410e5f76c58c6e5d9154fbb114860032b589c4893d5e5f83fdc1322d0d88cae2","sourceByteSize":15583,"analyzedAt":"2026-05-23T16:24:27.059Z","technology":"dotnet"}}