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

1 line
6.6 KiB
JSON

{"path":"NexusReader.Data/Persistence/AppDbContextFactory.cs","purpose":"Design-time EF Core DbContext factory: locates solution/web project, builds configuration, resolves a Postgres connection (with fallback), configures DbContextOptions (including pgvector) and returns an AppDbContext for design-time tooling (migrations, scaffolding).","classification":{"role":"unknown","layer":"unknown","confidence":0.6,"evidence":["Implements IDesignTimeDbContextFactory<AppDbContext> (line 8)","Builds configuration and DbContextOptions, returns AppDbContext (lines 25-44)"]},"className":"AppDbContextFactory","methods":[{"name":"CreateDbContext","line":10,"endLine":44,"signature":"(args: string[]) -> AppDbContext","purpose":"Creates and configures an AppDbContext for design-time use by reading environment, locating the Web project for configuration files, resolving a connection string (with fallback), applying Npgsql + pgvector options, and returning the context.","calls":[{"targetFile":"NexusReader.Data/Persistence/AppDbContext.cs","targetMethod":"AppDbContext..ctor","callLine":43,"paramSummary":"optionsBuilder.Options (DbContextOptions<AppDbContext>)"}],"actions":[{"id":"env-read_12","kind":"mapping","label":"Read ASPNETCORE_ENVIRONMENT","line":12,"detail":"Environment.GetEnvironmentVariable(\"ASPNETCORE_ENVIRONMENT\") with default 'Development'","visibility":"detail-only","confidence":0.7},{"id":"loop_15","kind":"loop","label":"Walk up directories to find solution file","line":15,"detail":"while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\"))) currentDir = currentDir.Parent;","visibility":"detail-only","confidence":0.7},{"id":"createdbcontext_loop_16_0","kind":"loop","label":"Repeats work over a collection or condition","line":16,"detail":"while (currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\")))","conditionSummary":"currentDir != null && !File.Exists(Path.Combine(currentDir.FullName, \"NexusReader.slnx\"))","loopTargetLine":16,"loopExitSummary":"Leaves the loop when the condition no longer holds.","visibility":"primary-visible","confidence":0.86},{"id":"branch_21","kind":"branch","label":"Resolve basePath to Web project or current directory","line":21,"detail":"basePath = currentDir != null ? Path.Combine(currentDir.FullName, \"src\", \"NexusReader.Web\") : Directory.GetCurrentDirectory();","conditionSummary":"currentDir != null","outcomeLabels":["use src/NexusReader.Web","use current working directory"],"visibility":"detail-only","confidence":0.7},{"id":"config-build_25","kind":"mapping","label":"Build configuration from appsettings and environment","line":25,"detail":"ConfigurationBuilder with appsettings.json, appsettings.{env}.json, and environment variables","visibility":"detail-only","confidence":0.7},{"id":"call_33","kind":"mapping","label":"Get connection string","line":33,"detail":"configuration.GetConnectionString(\"PostgresConnection\")","visibility":"detail-only","confidence":0.7},{"id":"createdbcontext_branch_35_1","kind":"branch","label":"Evaluates branch condition","line":35,"detail":"if (string.IsNullOrEmpty(connectionString))","conditionSummary":"string.IsNullOrEmpty(connectionString)","outcomeLabels":["true","false"],"visibility":"secondary-visible","confidence":0.78},{"id":"guard-clause_35","kind":"guard-clause","label":"Fallback connection when none found","line":35,"detail":"sets connectionString = \"Host=localhost;Database=nexus_reader;Username=postgres;Password=postgres\"","conditionSummary":"string.IsNullOrEmpty(connectionString)","outcomeLabels":["assign default Postgres connection","keep discovered connection"],"visibility":"detail-only","confidence":0.7},{"id":"persistence-config_41","kind":"mapping","label":"Configure Npgsql with pgvector","line":41,"detail":"optionsBuilder.UseNpgsql(connectionString, x => x.UseVector())","visibility":"detail-only","confidence":0.7},{"id":"return_43","kind":"return","label":"Return configured DbContext","line":43,"detail":"return new AppDbContext(optionsBuilder.Options)","visibility":"detail-only","confidence":0.7},{"id":"createdbcontext_return_43_2","kind":"return","label":"Returns result","line":43,"detail":"return new AppDbContext(optionsBuilder.Options);","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"AppDbContextFactory","kind":"model","line":8,"purpose":"Design-time factory to create AppDbContext instances for EF Core tooling.","fields":[]}],"serviceRegistrations":[],"startupActions":[{"name":"CreateDbContext (design-time factory)","line":10,"kind":"unknown","targetCalls":[{"targetFile":"NexusReader.Data/Persistence/AppDbContext.cs","targetMethod":"AppDbContext..ctor","callLine":43,"paramSummary":"DbContextOptions<AppDbContext>"}]}],"dependencies":["NexusReader.Data/Persistence/AppDbContext.cs"],"patterns":["Factory","Design-time EF Core DbContext Factory"],"domainConcepts":["Database","Configuration","Migrations"],"keyDetails":"Searches upward for NexusReader.slnx to locate Web project's appsettings, supports environment-specific appsettings, falls back to a hard-coded Postgres connection for design-time scenarios, and enables pgvector via UseVector().","orchestrationMethods":[{"name":"CreateDbContext","line":10,"confidence":0.98,"reason":"Contains 4 architectural actions relevant to business execution.","actionKinds":["mapping","loop","branch","guard-clause","return"],"evidencePaths":["NexusReader.Data/Persistence/AppDbContextFactory.cs","NexusReader.Data/Persistence/AppDbContext.cs"]}],"typedContracts":[{"name":"AppDbContextFactory","kind":"model","line":8,"fieldCount":0,"evidencePaths":["NexusReader.Data/Persistence/AppDbContextFactory.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"orchestration-method","label":"CreateDbContext","line":10,"summary":"Contains 4 architectural actions relevant to business execution.","confidence":0.98,"evidencePaths":["NexusReader.Data/Persistence/AppDbContextFactory.cs","NexusReader.Data/Persistence/AppDbContext.cs"]},{"kind":"typed-contract","label":"AppDbContextFactory","line":8,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/AppDbContextFactory.cs"]},{"kind":"startup","label":"CreateDbContext (design-time factory)","line":10,"summary":"unknown startup action","confidence":0.78,"evidencePaths":["NexusReader.Data/Persistence/AppDbContextFactory.cs","NexusReader.Data/Persistence/AppDbContext.cs"]}],"cacheMetadata":{"schemaVersion":2,"analysisVersion":"2026-05-23.cache-v1","contentChecksum":"d1b6ce77684d73d88810307f90f65e96ece9514aca7833616cfd3faa62dd3773","sourceByteSize":1870,"analyzedAt":"2026-05-23T16:25:26.377Z","technology":"dotnet"}}