1 line
8.7 KiB
JSON
1 line
8.7 KiB
JSON
{"path":"NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs","purpose":"EF Core migration designer file that describes the target EF model for the migration 'FixKnowledgeUnitEbookId'; it encodes entity mappings, indices, relationships, extension usage and seed data used by the migration snapshot.","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["File contains [DbContext(typeof(AppDbContext))] and [Migration(...)] attributes (lines 15-16)","Overrides BuildTargetModel(ModelBuilder) to define entity mappings, indices, relationships and seed data (method at line 20)"]},"className":"FixKnowledgeUnitEbookId","methods":[{"name":"BuildTargetModel","line":20,"endLine":710,"signature":"(modelBuilder: ModelBuilder) -> void","purpose":"Constructs the EF Core model snapshot for this migration: annotations, DB extensions, entities, properties, indices, relationships and seed data.","calls":[],"actions":[{"id":"model-annotation_23","kind":"mapping","label":"Sets product version and max identifier length","line":23,"detail":"modelBuilder.HasAnnotation(\"ProductVersion\", \"10.0.7\").HasAnnotation(\"Relational:MaxIdentifierLength\", 63)","visibility":"detail-only","confidence":0.7},{"id":"db-extension_27","kind":"mapping","label":"Enables Postgres 'vector' extension","line":27,"detail":"NpgsqlModelBuilderExtensions.HasPostgresExtension(modelBuilder, \"vector\")","visibility":"detail-only","confidence":0.7},{"id":"db-configuration_28","kind":"mapping","label":"Configures identity default columns","line":28,"detail":"NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder)","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_30","kind":"mapping","label":"Defines IdentityRole entity mapping (AspNetRoles)","line":30,"detail":"Defines properties Id, ConcurrencyStamp, Name, NormalizedName; key on Id; unique index on NormalizedName","visibility":"detail-only","confidence":0.7},{"id":"index_49","kind":"mapping","label":"Various indices and uniqueness constraints","line":49,"detail":"Examples: RoleNameIndex on IdentityRole.NormalizedName (unique); PlanName unique index on SubscriptionPlans (line 525); unique index on SemanticKnowledgeCache.ContentHash (line 488)","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_56","kind":"mapping","label":"Defines Identity role/claim/login/user tables","line":56,"detail":"Maps IdentityRoleClaim, IdentityUserClaim, IdentityUserLogin, IdentityUserRole, IdentityUserToken and sets keys/indices/tables","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_162","kind":"mapping","label":"Defines Author","line":162,"detail":"Author.Id (int identity), Name required string, table Authors","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_180","kind":"mapping","label":"Defines Ebook","line":180,"detail":"Ebook.Id (Guid identity), fields (AddedDate, AuthorId, CoverUrl, FilePath required, IsReadyForReading, LastChapter, LastChapterIndex, LastReadDate, Progress, TenantId required, Title required, UserId required); indices on AuthorId, TenantId, UserId; table Ebooks","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_240","kind":"mapping","label":"Defines KnowledgeUnit","line":240,"detail":"KnowledgeUnit.Id (string, max 128), Content required, CreatedAt, EbookId (uuid), MetadataJson, TenantId required, Type (int), Vector of size 768, Version required; index on EbookId and TenantId; table KnowledgeUnits","visibility":"detail-only","confidence":0.7},{"id":"property_253","kind":"mapping","label":"KnowledgeUnit.EbookId property typed as Guid","line":253,"detail":"b.Property<Guid>(\"EbookId\").HasColumnType(\"uuid\")","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_284","kind":"mapping","label":"Defines KnowledgeUnitLink","line":284,"detail":"Link Id (int identity), RelationType, SourceUnitId, TargetUnitId; indices on SourceUnitId and TargetUnitId; table KnowledgeUnitLinks","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_316","kind":"mapping","label":"Defines NexusUser (AspNetUsers) with subscription FK","line":316,"detail":"Many identity and profile fields, SubscriptionPlanId with default value 1; indices on NormalizedEmail, NormalizedUserName (unique), SubscriptionPlanId, TenantId","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_414","kind":"mapping","label":"Defines QuizResult","line":414,"detail":"QuizResult.Id (Guid), CompletedDate, Score, TenantId, Topic, TotalQuestions, UserId; indices on TenantId and UserId","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_451","kind":"mapping","label":"Defines SemanticKnowledgeCache with vector(1536)","line":451,"detail":"Primary key ContentHash (max 128), CreatedAt, JsonData, ModelId, OriginalText, PromptVersion, TenantId, Vector column of vector(1536), unique index on ContentHash","visibility":"detail-only","confidence":0.7},{"id":"entity-definition_496","kind":"mapping","label":"Defines SubscriptionPlan and seeds data","line":496,"detail":"SubscriptionPlan.Id (int identity), AITokenLimit, IsUnlimitedTokens, MonthlyPrice, PlanName (unique), StripeProductId; seeds 4 plan rows (Free, Basic, Pro, Enterprise)","visibility":"detail-only","confidence":0.7},{"id":"seed-data_530","kind":"mapping","label":"Seeds SubscriptionPlan rows","line":530,"detail":"b.HasData(...) adds four SubscriptionPlan entries with Ids 1..4 and predefined AIToken limits/prices/StripeProductId","visibility":"detail-only","confidence":0.7},{"id":"relationship_620","kind":"mapping","label":"Ebook -> Author and Ebook -> NexusUser relationships","line":620,"detail":"Ebook.HasOne(Author).WithMany(Ebooks).HasForeignKey(AuthorId).OnDelete(Restrict).Required; Ebook.HasOne(User).WithMany(Ebooks).HasForeignKey(UserId).OnDelete(Cascade).Required","visibility":"detail-only","confidence":0.7},{"id":"navigation_634","kind":"mapping","label":"Registers navigation properties for many entities","line":634,"detail":"Adds Navigation for Author, User, Ebook, IncomingLinks/OutgoingLinks, Ebooks, QuizResults etc.","visibility":"detail-only","confidence":0.7},{"id":"relationship_639","kind":"mapping","label":"KnowledgeUnit -> Ebook relationship","line":639,"detail":"KnowledgeUnit.HasOne(Ebook).WithMany().HasForeignKey(EbookId).OnDelete(Cascade).IsRequired","visibility":"detail-only","confidence":0.7},{"id":"relationship_650","kind":"mapping","label":"KnowledgeUnitLink -> KnowledgeUnit (source/target) relationships","line":650,"detail":"SourceUnit and TargetUnit FKs to KnowledgeUnit with Cascade delete and required","visibility":"detail-only","confidence":0.7},{"id":"relationship_669","kind":"mapping","label":"NexusUser -> SubscriptionPlan relationship","line":669,"detail":"NexusUser.HasOne(SubscriptionPlan).WithMany().HasForeignKey(SubscriptionPlanId).OnDelete(Restrict).IsRequired","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"FixKnowledgeUnitEbookId","kind":"model","line":17,"purpose":"Partial migration class representing the migration snapshot and model-building logic for 'FixKnowledgeUnitEbookId'.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Data/Persistence/AppDbContext.cs","NexusReader.Domain/Entities (referenced entity types: Author, Ebook, KnowledgeUnit, KnowledgeUnitLink, NexusUser, SubscriptionPlan, QuizResult, SemanticKnowledgeCache)"],"patterns":["EF Core Migration","Entity Configuration","Data Seeding"],"domainConcepts":["KnowledgeUnit","Ebook","NexusUser","SubscriptionPlan","SemanticKnowledgeCache","KnowledgeUnitLink","Author","QuizResult"],"keyDetails":"BuildTargetModel configures Postgres 'vector' extension, identity default columns, declares entity schemas (properties, indices, keys), establishes FK relationships with explicit delete behaviors and navigation properties, and seeds SubscriptionPlan table with four rows. KnowledgeUnit.EbookId is mapped as a uuid (Guid) and indexed (lines 253, 277).","orchestrationMethods":[],"typedContracts":[{"name":"FixKnowledgeUnitEbookId","kind":"model","line":17,"fieldCount":0,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"FixKnowledgeUnitEbookId","line":17,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.Designer.cs"]}],"cacheMetadata":{"schemaVersion":2,"analysisVersion":"2026-05-23.cache-v1","contentChecksum":"459cfeaeff6d309e670a03fb3453130c4eb6a6633f8db7a0220ce1a36d495b4b","sourceByteSize":26819,"analyzedAt":"2026-05-23T16:26:06.620Z","technology":"dotnet"}} |