{"path":"NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs","purpose":"EF Core migration designer that describes the target EF model for the AddQuizResults migration (database schema snapshot used by EF migrations).","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["File is in NexusReader.Data.Migrations and contains an EF Core Migration partial class","Contains BuildTargetModel(ModelBuilder) which configures entities, keys, indexes, and relationships"]},"className":"AddQuizResults","methods":[{"name":"BuildTargetModel","line":19,"endLine":418,"signature":"(modelBuilder: ModelBuilder) -> void","purpose":"Constructs the EF Core model snapshot for the migration: declares tables, columns, keys, indexes, annotations and relationships used by this migration.","calls":[],"actions":[{"id":"model-annotation_22","kind":"mapping","label":"Set product/version and max identifier length","line":22,"detail":"modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)","visibility":"detail-only","confidence":0.7},{"id":"provider-configuration_26","kind":"mapping","label":"Enable identity-by-default columns for Npgsql","line":26,"detail":"NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)","visibility":"detail-only","confidence":0.7},{"id":"define-entity_28","kind":"mapping","label":"Define IdentityRole table schema (AspNetRoles)","line":28,"detail":"Defines properties Id, ConcurrencyStamp, Name, NormalizedName; sets key, unique index NormalizedName and table name","visibility":"detail-only","confidence":0.7},{"id":"define-entity_54","kind":"mapping","label":"Define IdentityRoleClaim table schema (AspNetRoleClaims)","line":54,"detail":"Defines Id (identity), ClaimType, ClaimValue, RoleId; sets key, index RoleId and table name","visibility":"detail-only","confidence":0.7},{"id":"define-entity_79","kind":"mapping","label":"Define IdentityUserClaim table schema (AspNetUserClaims)","line":79,"detail":"Defines Id, ClaimType, ClaimValue, UserId; sets key, index UserId","visibility":"detail-only","confidence":0.7},{"id":"define-entity_104","kind":"mapping","label":"Define IdentityUserLogin table schema (AspNetUserLogins)","line":104,"detail":"Defines composite key (LoginProvider, ProviderKey), ProviderDisplayName, UserId; index on UserId","visibility":"detail-only","confidence":0.7},{"id":"define-entity_126","kind":"mapping","label":"Define IdentityUserRole table schema (AspNetUserRoles)","line":126,"detail":"Defines composite key (UserId, RoleId), index RoleId","visibility":"detail-only","confidence":0.7},{"id":"define-entity_141","kind":"mapping","label":"Define IdentityUserToken table schema (AspNetUserTokens)","line":141,"detail":"Defines composite key (UserId, LoginProvider, Name) and Value","visibility":"detail-only","confidence":0.7},{"id":"define-entity_160","kind":"mapping","label":"Define Ebook entity/table (Ebooks)","line":160,"detail":"Defines Id (uuid, generated), AddedDate, Author, CoverUrl, FilePath, LastReadDate, Title, UserId; key Id; index on UserId","visibility":"detail-only","confidence":0.7},{"id":"define-entity_200","kind":"mapping","label":"Define NexusUser entity/table (AspNetUsers)","line":200,"detail":"Defines many identity/user columns (Id, AIToken fields, CurrentPlan, Email, security fields, TenantId, etc.); key Id; indexes on NormalizedEmail and NormalizedUserName","visibility":"detail-only","confidence":0.7},{"id":"define-entity_277","kind":"mapping","label":"Define QuizResult entity/table (QuizResults) — primary purpose of this migration","line":277,"detail":"Defines Id (uuid, generated), CompletedDate, Score, Topic (required), TotalQuestions, UserId (required); key Id; index on UserId; table QuizResults","visibility":"detail-only","confidence":0.7},{"id":"define-entity_307","kind":"mapping","label":"Define SemanticKnowledgeCache entity/table (SemanticKnowledgeCache)","line":307,"detail":"Defines ContentHash (PK, maxLength 128), CreatedAt, JsonData, ModelId, PromptVersion; unique index on ContentHash","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_338","kind":"mapping","label":"Role claims -> Role (FK RoleId) cascade delete","line":338,"detail":"IdentityRoleClaim.RoleId -> IdentityRole.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_346","kind":"mapping","label":"User claims -> NexusUser (FK UserId) cascade delete","line":346,"detail":"IdentityUserClaim.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_356","kind":"mapping","label":"User logins -> NexusUser (FK UserId) cascade delete","line":356,"detail":"IdentityUserLogin.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_365","kind":"mapping","label":"User roles -> Role and NexusUser (FK RoleId, UserId) cascade delete","line":365,"detail":"IdentityUserRole.RoleId -> IdentityRole.Id and IdentityUserRole.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_380","kind":"mapping","label":"User tokens -> NexusUser (FK UserId) cascade delete","line":380,"detail":"IdentityUserToken.UserId -> NexusUser.Id with cascade delete","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_389","kind":"mapping","label":"Ebook.User -> NexusUser (FK UserId) cascade delete + navigation","line":389,"detail":"Ebook.UserId -> NexusUser.Id, WithMany('Ebooks'), navigation property 'User' configured","visibility":"detail-only","confidence":0.7},{"id":"define-relationship_400","kind":"mapping","label":"QuizResult.User -> NexusUser (FK UserId) cascade delete + navigation","line":400,"detail":"QuizResult.UserId -> NexusUser.Id, WithMany('QuizResults'), navigation property 'User' configured","visibility":"detail-only","confidence":0.7},{"id":"define-navigation_411","kind":"mapping","label":"NexusUser navigations for Ebooks and QuizResults","line":411,"detail":"Navigation properties 'Ebooks' and 'QuizResults' configured on NexusUser","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"AddQuizResults","kind":"model","line":16,"purpose":"Partial migration class representing the AddQuizResults EF migration (designer snapshot).","fields":[{"name":"BuildTargetModel","type":"method","required":true,"line":19,"description":"Method that builds the EF model snapshot for this migration"}]},{"name":"QuizResult","kind":"entity","line":277,"purpose":"Represents a user's completed quiz result stored in the QuizResults table.","fields":[{"name":"Id","type":"Guid (uuid)","required":true,"line":279,"description":"Primary key, value 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 (required)"},{"name":"TotalQuestions","type":"int","required":true,"line":293,"description":"Number of questions in the quiz"},{"name":"UserId","type":"string","required":true,"line":296,"description":"FK to NexusUser (required), indexed"}]},{"name":"Ebook","kind":"entity","line":160,"purpose":"Represents an e-book record stored in the Ebooks table.","fields":[{"name":"Id","type":"Guid (uuid)","required":true,"line":162,"description":"Primary key, value 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 255)"},{"name":"CoverUrl","type":"string","required":false,"line":174,"description":"Optional cover URL"},{"name":"FilePath","type":"string","required":true,"line":177,"description":"Path to file"},{"name":"LastReadDate","type":"DateTime?","required":false,"line":181,"description":"When last read (nullable)"},{"name":"Title","type":"string","required":true,"line":184,"description":"Title (max 255)"},{"name":"UserId","type":"string","required":true,"line":189,"description":"FK to NexusUser, indexed"}]},{"name":"NexusUser","kind":"entity","line":200,"purpose":"Application user entity mapped to AspNetUsers with various identity and app-specific 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 the user"},{"name":"AITokensUsed","type":"int","required":true,"line":208,"description":"AI tokens used"},{"name":"CurrentPlan","type":"string","required":true,"line":218,"description":"User plan identifier"},{"name":"Email","type":"string","required":false,"line":222,"description":"Email (max 256)"},{"name":"TenantId","type":"Guid","required":true,"line":255,"description":"Tenant identifier"},{"name":"Ebooks","type":"ICollection","required":false,"line":413,"description":"Navigation collection configured"},{"name":"QuizResults","type":"ICollection","required":false,"line":415,"description":"Navigation collection configured"}]},{"name":"SemanticKnowledgeCache","kind":"entity","line":307,"purpose":"Cache table for semantic knowledge artifacts keyed by content hash.","fields":[{"name":"ContentHash","type":"string","required":true,"line":309,"description":"Primary key, max length 128"},{"name":"CreatedAt","type":"DateTime","required":true,"line":313,"description":"Creation timestamp"},{"name":"JsonData","type":"string","required":true,"line":316,"description":"Stored JSON blob"},{"name":"ModelId","type":"string","required":true,"line":320,"description":"Model identifier (max 50)"},{"name":"PromptVersion","type":"string","required":true,"line":325,"description":"Prompt version (max 10)"}]},{"name":"IdentityRole / AspNetRoles (framework)","kind":"entity","line":28,"purpose":"ASP.NET Identity role table schema snapshot.","fields":[{"name":"Id","type":"string","required":true,"line":30,"description":"Primary key"},{"name":"Name","type":"string","required":false,"line":37,"description":"Role name (max 256)"},{"name":"NormalizedName","type":"string","required":false,"line":41,"description":"Normalized name (unique index)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Data/Persistence/AppDbContext.cs","Npgsql.EntityFrameworkCore.PostgreSQL (provider extension)"],"patterns":["EFCore Migration","Entity Configuration (Fluent API)"],"domainConcepts":["QuizResult","Ebook","NexusUser","SemanticKnowledgeCache","ASP.NET Identity (roles, claims, tokens, logins)"],"keyDetails":"This designer snapshot declares the QuizResults table (Id, CompletedDate, Score, Topic, TotalQuestions, UserId) and its FK relationship to NexusUser; the file is an EF Core migration snapshot used by the AddQuizResults migration and configures identity-related tables, Ebooks, SemanticKnowledgeCache and navigations.","orchestrationMethods":[],"typedContracts":[{"name":"AddQuizResults","kind":"model","line":16,"fieldCount":1,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"QuizResult","kind":"entity","line":277,"fieldCount":6,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"Ebook","kind":"entity","line":160,"fieldCount":8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"NexusUser","kind":"entity","line":200,"fieldCount":8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"SemanticKnowledgeCache","kind":"entity","line":307,"fieldCount":5,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"name":"IdentityRole / AspNetRoles (framework)","kind":"entity","line":28,"fieldCount":3,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AddQuizResults","line":16,"summary":"model with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"kind":"typed-contract","label":"QuizResult","line":277,"summary":"entity with 6 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"kind":"typed-contract","label":"Ebook","line":160,"summary":"entity with 8 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]},{"kind":"typed-contract","label":"NexusUser","line":200,"summary":"entity with 8 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.Designer.cs"]}]}