feat: Release v1.2.0 - Concepts Map, RAG Search & Core Consolidations #59
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"generatedAt": "2026-05-22T06:58:01.149Z",
|
||||||
|
"runId": "v4-1779429619297-t7x306q1",
|
||||||
|
"agentVersion": "v4.1-streaming",
|
||||||
|
"totalDurationMs": 3461851,
|
||||||
|
"phaseTiming": {
|
||||||
|
"phase0": 934,
|
||||||
|
"phase1": 53278,
|
||||||
|
"pipeline": 3377465,
|
||||||
|
"phase5": 29989
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"llmCandidateCount": 5,
|
||||||
|
"maxConcurrentLlmCalls": 5,
|
||||||
|
"featureFlags": {
|
||||||
|
"architectureMappingMode": false,
|
||||||
|
"boundedSubsystemMode": false,
|
||||||
|
"architectureMapPersistence": false,
|
||||||
|
"chunkPlanning": false,
|
||||||
|
"sequenceDiagrams": false,
|
||||||
|
"stateDiagrams": false,
|
||||||
|
"erDiagrams": false,
|
||||||
|
"experimentalDiagramFamilies": false,
|
||||||
|
"publicationCollections": true,
|
||||||
|
"businessFlowGeneration": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"technology": "dotnet",
|
||||||
|
"totalFiles": 198,
|
||||||
|
"uniqueFilesSummarized": 189,
|
||||||
|
"documentsGenerated": 10,
|
||||||
|
"collectionsPlanned": 4,
|
||||||
|
"projectArchetype": "web-application",
|
||||||
|
"candidateEntrypoints": 20
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
|||||||
|
## Business
|
||||||
|
|
||||||
|
This collection groups business documentation generated from the repository semantic map.
|
||||||
|
|
||||||
|
### Documents
|
||||||
|
|
||||||
|
- [Business Overview](business-overview.md): ## Business Overview Business Overview centers on account, ai token usage / limits, ai tokens and c...
|
||||||
|
- [Top Business Flows](top-business-flows.md): ## Top Business Flows Highest-value business flows that should be published as first-class system e...
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Messaging/ICommand.cs","purpose":"Defines application-level command abstractions used with MediatR and FluentResults to represent operations that return FluentResults (optionally with a typed payload).","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Namespace NexusReader.Application.Abstractions.Messaging indicates an application-layer contract","Interfaces extend MediatR IRequest and use FluentResults Result types"]},"className":"","methods":[],"types":[{"name":"ICommand","kind":"interface","line":6,"purpose":"Marker/contract for a command that produces a FluentResults.Result when handled via MediatR.","fields":[]},{"name":"ICommand<TResponse>","kind":"interface","line":10,"purpose":"Generic command contract that produces a FluentResults.Result<TResponse> when handled via MediatR.","fields":[{"name":"TResponse","type":"type-parameter","required":true,"line":10,"description":"Generic result payload type returned inside Result<TResponse>"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["FluentResults (external)","MediatR (external)"],"patterns":["Command Pattern","Mediator"],"domainConcepts":[],"keyDetails":"Two simple interfaces that unify MediatR IRequest with FluentResults.Result to standardize command return shapes across the application.","orchestrationMethods":[],"typedContracts":[{"name":"ICommand","kind":"interface","line":6,"fieldCount":0,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommand.cs"]},{"name":"ICommand<TResponse>","kind":"interface","line":10,"fieldCount":1,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommand.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"ICommand","line":6,"summary":"interface with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommand.cs"]},{"kind":"typed-contract","label":"ICommand<TResponse>","line":10,"summary":"interface with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommand.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs","purpose":"Declares application-level command handler abstractions that adapt MediatR IRequestHandler to return FluentResults.Result, standardizing command handling signatures across the Application layer.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Namespace: NexusReader.Application.Abstractions.Messaging","Interfaces extend MediatR IRequestHandler and use FluentResults.Result"]},"className":"ICommandHandler","methods":[],"types":[{"name":"ICommandHandler<TCommand>","kind":"interface","line":6,"purpose":"Represents a command handler that processes a command and returns a FluentResults.Result (no data).","fields":[]},{"name":"ICommandHandler<TCommand, TResponse>","kind":"interface","line":11,"purpose":"Represents a command handler that processes a command and returns a FluentResults.Result with a typed response.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["FluentResults","MediatR","ICommand (project-local type, path unknown)"],"patterns":["Mediator","Command Handler","Dependency Inversion"],"domainConcepts":["Command","Result"],"keyDetails":"Two small interface abstractions adapting MediatR handlers to use FluentResults.Result; no implementations or runtime logic in this file.","orchestrationMethods":[],"typedContracts":[{"name":"ICommandHandler<TCommand>","kind":"interface","line":6,"fieldCount":0,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"]},{"name":"ICommandHandler<TCommand, TResponse>","kind":"interface","line":11,"fieldCount":0,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"ICommandHandler<TCommand>","line":6,"summary":"interface with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"]},{"kind":"typed-contract","label":"ICommandHandler<TCommand, TResponse>","line":11,"summary":"interface with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs"]}]}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Messaging/IQuery.cs","purpose":"Defines a marker interface for application-layer read/query operations that use MediatR and return a FluentResults.Result-wrapped response.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","namespace NexusReader.Application.Abstractions.Messaging","public interface IQuery<TResponse> : IRequest<Result<TResponse>> (extends MediatR IRequest and uses FluentResults)"]},"className":"","methods":[],"types":[{"name":"IQuery<TResponse>","kind":"interface","line":6,"purpose":"Marker interface representing a CQRS query that returns a Result-wrapped TResponse via MediatR.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["FluentResults (package)","MediatR (package)"],"patterns":["CQRS","Mediator"],"domainConcepts":["Query","Result<TResponse>"],"keyDetails":"A minimal marker interface used to type queries handled by MediatR handlers; no runtime methods or properties in this file.","orchestrationMethods":[],"typedContracts":[{"name":"IQuery<TResponse>","kind":"interface","line":6,"fieldCount":0,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/IQuery.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IQuery<TResponse>","line":6,"summary":"interface with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/IQuery.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs","purpose":"Defines an application-level abstraction for MediatR query handlers that return a FluentResults Result<TResponse>.","classification":{"role":"handler","layer":"application","confidence":0.85,"evidence":["Namespace: NexusReader.Application.Abstractions.Messaging","Interface name IQueryHandler and generic TQuery/TResponse","Inherits MediatR IRequestHandler<TQuery, Result<TResponse>>"]},"className":"IQueryHandler<TQuery, TResponse>","methods":[{"name":"Handle (inherited from IRequestHandler)","line":6,"endLine":9,"signature":"(request: TQuery, cancellationToken: CancellationToken) -> Task<Result<TResponse>>","purpose":"Abstract handler method for processing a query and returning a Result-wrapped response.","calls":[],"actions":[{"id":"orchestration-point_6","kind":"mapping","label":"Query handling contract for MediatR pipeline","line":6,"detail":"This interface surface is used by the MediatR pipeline to locate and invoke query handlers that return FluentResults.Result<TResponse>.","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"IQueryHandler","kind":"interface","line":6,"purpose":"Generic abstraction for query handlers that process TQuery and return Result<TResponse> via MediatR.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["FluentResults (package)","MediatR (package)","NexusReader.Application.Abstractions.Messaging.IQuery (type dependency, same namespace)"],"patterns":["CQRS Handler","Mediator"],"domainConcepts":["Query","Result"],"keyDetails":"This file only declares a small generic interface that ties MediatR's IRequestHandler to FluentResults.Result<TResponse>, serving as an application-layer contract for query handlers.","orchestrationMethods":[],"typedContracts":[{"name":"IQueryHandler","kind":"interface","line":6,"fieldCount":0,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IQueryHandler","line":6,"summary":"interface with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Services/IBillingService.cs","purpose":"Defines an application-layer billing service contract for handling subscription lifecycle events (updated/deleted) using asynchronous results.","classification":{"role":"service","layer":"application","confidence":0.9,"evidence":["Service naming pattern","Application/service path heuristic","File declares IBillingService in Application.Abstractions.Services namespace (line 4-6)","Methods represent application-level operations for subscription events (lines 8-9)"]},"className":"IBillingService","methods":[{"name":"HandleSubscriptionUpdatedAsync","line":8,"endLine":8,"signature":"(customerEmail: string, stripeProductId: string) -> Task<Result>","purpose":"Contract method to process a subscription update for a customer (e.g., map Stripe product change to app state) and return an operation Result asynchronously.","calls":[],"actions":[{"id":"abstract-method_8","kind":"mapping","label":"Declaration of async handler for subscription-updated events","line":8,"detail":"Interface method only; implementation must handle orchestration, persistence, notifications, or external calls.","visibility":"detail-only","confidence":0.7},{"id":"returns_8","kind":"mapping","label":"Returns a FluentResults.Result wrapped in Task","line":8,"detail":"Task<Result> indicates success/failure reporting from implementations.","visibility":"detail-only","confidence":0.7}]},{"name":"HandleSubscriptionDeletedAsync","line":9,"endLine":9,"signature":"(customerEmail: string) -> Task<Result>","purpose":"Contract method to process a subscription deletion for a customer and return an operation Result asynchronously.","calls":[],"actions":[{"id":"abstract-method_9","kind":"mapping","label":"Declaration of async handler for subscription-deleted events","line":9,"detail":"Interface method only; implementation must handle cleanup, persistence updates, or downstream notifications.","visibility":"detail-only","confidence":0.7},{"id":"returns_9","kind":"mapping","label":"Returns a FluentResults.Result wrapped in Task","line":9,"detail":"Task<Result> indicates success/failure reporting from implementations.","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"IBillingService","kind":"interface","line":6,"purpose":"Service contract for handling billing/subscription lifecycle events (update/delete).","fields":[{"name":"HandleSubscriptionUpdatedAsync","type":"Task<Result>","required":true,"line":8,"description":"Async operation to handle subscription updates given customer email and Stripe product id."},{"name":"HandleSubscriptionDeletedAsync","type":"Task<Result>","required":true,"line":9,"description":"Async operation to handle subscription deletions given customer email."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain.Entities (imported at line 1)","FluentResults (imported at line 2)"],"patterns":["Service Interface","Dependency Injection (interface abstraction for implementations)"],"domainConcepts":["Billing","Subscription","Customer","Stripe (stripeProductId)"],"keyDetails":"This file is an application-layer abstraction defining two async handlers that implementations must use to reconcile subscription updates/deletions; it returns FluentResults to surface success/failure.","orchestrationMethods":[],"typedContracts":[{"name":"IBillingService","kind":"interface","line":6,"fieldCount":2,"evidencePaths":["NexusReader.Application/Abstractions/Services/IBillingService.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IBillingService","line":6,"summary":"interface with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Services/IBillingService.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Services/IBookStorageService.cs","purpose":"Defines an application-layer abstraction for persisting ebook and cover image files (byte[] or Stream) and returning their relative path/URL; cover save methods may return null when no data is provided.","classification":{"role":"service","layer":"application","confidence":0.85,"evidence":["Service naming pattern","Application/service path heuristic","namespace NexusReader.Application.Abstractions.Services (line 1) indicates an application-layer abstraction","File declares IBookStorageService interface with SaveEbookAsync/SaveCoverAsync methods (lines 6-29)"]},"className":"IBookStorageService","methods":[{"name":"SaveEbookAsync","line":11,"endLine":11,"signature":"(data: byte[], fileName: string) -> Task<string>","purpose":"Saves an ebook provided as a byte array and returns its relative path/URL.","calls":[],"actions":[{"id":"return_11","kind":"return","label":"returns path/url","line":11,"detail":"Returns Task<string> containing the relative path/URL of the saved ebook","visibility":"detail-only","confidence":0.7}]},{"name":"SaveEbookAsync","line":16,"endLine":16,"signature":"(data: Stream, fileName: string) -> Task<string>","purpose":"Saves an ebook provided as a Stream and returns its relative path/URL.","calls":[],"actions":[{"id":"return_16","kind":"return","label":"returns path/url","line":16,"detail":"Returns Task<string> containing the relative path/URL of the saved ebook","visibility":"detail-only","confidence":0.7}]},{"name":"SaveCoverAsync","line":22,"endLine":22,"signature":"(data: byte[], fileName: string) -> Task<string?>","purpose":"Saves a cover image provided as a byte array and returns its relative path/URL; may return null if no cover data.","calls":[],"actions":[{"id":"nullable-return_19","kind":"mapping","label":"may return null when no data provided","line":19,"detail":"Method returns Task<string?>; documentation notes null is returned if no cover data is provided","visibility":"detail-only","confidence":0.7}]},{"name":"SaveCoverAsync","line":28,"endLine":28,"signature":"(data: Stream, fileName: string) -> Task<string?>","purpose":"Saves a cover image provided as a Stream and returns its relative path/URL; may return null if no cover data.","calls":[],"actions":[{"id":"nullable-return_25","kind":"mapping","label":"may return null when no data provided","line":25,"detail":"Method returns Task<string?>; documentation notes null is returned if no cover data is provided","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"IBookStorageService","kind":"interface","line":6,"purpose":"Abstraction for persisting ebook and cover files and returning their storage path/URLs.","fields":[{"name":"SaveEbookAsync(byte[])","type":"Task<string>","required":true,"line":11,"description":"Saves ebook from byte array and returns relative path/URL"},{"name":"SaveEbookAsync(Stream)","type":"Task<string>","required":true,"line":16,"description":"Saves ebook from stream and returns relative path/URL"},{"name":"SaveCoverAsync(byte[])","type":"Task<string?>","required":true,"line":22,"description":"Saves cover from byte array and returns relative path/URL or null if no data"},{"name":"SaveCoverAsync(Stream)","type":"Task<string?>","required":true,"line":28,"description":"Saves cover from stream and returns relative path/URL or null if no data"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Storage Abstraction","Adapter"],"domainConcepts":["Ebook","Cover","File Storage","Path/URL"],"keyDetails":"Application-layer abstraction for ebook and cover persistence; supports both byte[] and Stream overloads; cover save methods explicitly allow null when no data is provided.","orchestrationMethods":[],"typedContracts":[{"name":"IBookStorageService","kind":"interface","line":6,"fieldCount":4,"evidencePaths":["NexusReader.Application/Abstractions/Services/IBookStorageService.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IBookStorageService","line":6,"summary":"interface with 4 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Services/IBookStorageService.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Services/IEpubMetadataExtractor.cs","purpose":"Defines an application-layer service abstraction for extracting metadata from an EPUB stream, returning a Result-wrapped LocalEpubMetadata.","classification":{"role":"service","layer":"application","confidence":0.9,"evidence":["Service naming pattern","Application/service path heuristic","Namespace: NexusReader.Application.Abstractions.Services","Type is an interface named IEpubMetadataExtractor and lives in Application project","Method returns application DTO LocalEpubMetadata (imported from Queries.Reader)"]},"className":"IEpubMetadataExtractor","methods":[{"name":"ExtractMetadataAsync","line":9,"endLine":9,"signature":"(epubStream: Stream) -> Task<Result<LocalEpubMetadata>>","purpose":"Asynchronously extracts EPUB metadata from the provided stream and returns it wrapped in a FluentResults Result.","calls":[],"actions":[{"id":"async-signature_9","kind":"mapping","label":"Asynchronous extraction contract","line":9,"detail":"Returns Task<Result<LocalEpubMetadata>> to signal success/failure and carry metadata","visibility":"detail-only","confidence":0.7}]}],"types":[],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application/Queries/Reader (LocalEpubMetadata)","FluentResults","System.IO"],"patterns":["Service Interface","Abstraction"],"domainConcepts":["EPUB","Metadata"],"keyDetails":"Small application-layer interface specifying a single async operation to extract EPUB metadata; implementation is expected elsewhere in the Application/Infrastructure layers.","orchestrationMethods":[],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Services/IEpubReader.cs","purpose":"Defines an application-level abstraction for reading and parsing EPUB content for a specific ebook and chapter, exposing a single async operation that returns a Result-wrapped ReaderPageViewModel.","classification":{"role":"service","layer":"application","confidence":0.9,"evidence":["Service naming pattern","Application/service path heuristic","namespace NexusReader.Application.Abstractions.Services","public interface IEpubReader with a GetEpubContentAsync method"]},"className":"IEpubReader","methods":[{"name":"GetEpubContentAsync","line":18,"endLine":22,"signature":"(ebookId: Guid, chapterIndex: int, userId: string? = null, cancellationToken: CancellationToken = default) -> Task<Result<ReaderPageViewModel>>","purpose":"Retrieve content blocks for a specific ebook chapter, returning a Result that wraps a ReaderPageViewModel; supports optional tenant userId and cancellation.","calls":[],"actions":[{"id":"parameter_16","kind":"mapping","label":"tenant-isolation-hint","line":16,"detail":"userId parameter is documented as used for tenant isolation in DB lookup (implementation responsibility).","visibility":"detail-only","confidence":0.7},{"id":"return_18","kind":"return","label":"result-wrapper","line":18,"detail":"Returns a FluentResults.Result wrapping ReaderPageViewModel to convey success/failure and payload.","visibility":"detail-only","confidence":0.7},{"id":"parameter_22","kind":"mapping","label":"cancellation-token","line":22,"detail":"Accepts CancellationToken to allow caller-driven cancellation of the async read.","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"IEpubReader","kind":"interface","line":9,"purpose":"Abstraction for EPUB reading/parsing service used by application code to fetch chapter content.","fields":[{"name":"GetEpubContentAsync","type":"Task<Result<ReaderPageViewModel>>","required":true,"line":18,"description":"Async method to get EPUB chapter content by ebookId and chapterIndex, with optional userId and cancellationToken."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Queries.Reader (ReaderPageViewModel)","FluentResults (Result<T>)"],"patterns":["Abstraction/Service Interface"],"domainConcepts":["Ebook","Chapter","TenantIsolation","ReaderPage (content blocks)"],"keyDetails":"Single-method interface that returns a FluentResults.Result of ReaderPageViewModel; userId is explicitly documented for tenant isolation and a CancellationToken is supported for cooperative cancellation.","orchestrationMethods":[],"typedContracts":[{"name":"IEpubReader","kind":"interface","line":9,"fieldCount":1,"evidencePaths":["NexusReader.Application/Abstractions/Services/IEpubReader.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IEpubReader","line":9,"summary":"interface with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Services/IEpubReader.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Abstractions/Services/IPlatformService.cs","purpose":"Defines an application-level platform abstraction for device capabilities (vibration) and a small device info model (DeviceContext) used by UI/client layers to adapt behavior per device.","classification":{"role":"service","layer":"application","confidence":0.9,"evidence":["Service naming pattern","Application/service path heuristic","Namespace NexusReader.Application.Abstractions.Services indicates an application-level service abstraction","File exposes an interface IPlatformService and types representing device context and enums for device/orientation"]},"className":"IPlatformService","methods":[{"name":"VibrateSuccessAsync","line":7,"endLine":7,"signature":"() -> Task<Result>","purpose":"Requests a short platform-specific 'success' vibration; returns a Result indicating success/failure.","calls":[],"actions":[{"id":"return_7","kind":"return","label":"async result","line":7,"detail":"Task<Result> returned by implementation","visibility":"detail-only","confidence":0.7}]},{"name":"VibrateErrorAsync","line":8,"endLine":8,"signature":"() -> Task<Result>","purpose":"Requests a short platform-specific 'error' vibration; returns a Result indicating success/failure.","calls":[],"actions":[{"id":"return_8","kind":"return","label":"async result","line":8,"detail":"Task<Result> returned by implementation","visibility":"detail-only","confidence":0.7}]},{"name":"VibrateAsync","line":9,"endLine":9,"signature":"(milliseconds: int) -> Task<Result>","purpose":"Requests a platform vibration for the specified duration in milliseconds; returns a Result indicating success/failure.","calls":[],"actions":[{"id":"return_9","kind":"return","label":"async result","line":9,"detail":"Task<Result> returned by implementation","visibility":"detail-only","confidence":0.7},{"id":"parameter_9","kind":"mapping","label":"milliseconds","line":9,"detail":"duration passed to platform implementation","visibility":"detail-only","confidence":0.7}]},{"name":"GetDeviceContext","line":10,"endLine":10,"signature":"() -> Result<DeviceContext>","purpose":"Retrieves current device characteristics (model, manufacturer, type, orientation) wrapped in a Result.","calls":[],"actions":[{"id":"return_10","kind":"return","label":"synchronous result","line":10,"detail":"Result<DeviceContext> returned by implementation","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"DeviceContext","kind":"dto","line":13,"purpose":"Represents device metadata (model, manufacturer, device type, display orientation) for platform-aware logic.","fields":[{"name":"Model","type":"string","required":true,"line":14,"description":"Device model identifier"},{"name":"Manufacturer","type":"string","required":true,"line":15,"description":"Device manufacturer"},{"name":"DeviceType","type":"DeviceType","required":true,"line":16,"description":"High-level category of device (Phone/Tablet/Desktop/Unknown)"},{"name":"Orientation","type":"DisplayOrientation","required":true,"line":17,"description":"Current display orientation"}]},{"name":"DeviceType","kind":"enum","line":20,"purpose":"Enumerates device categories used to adapt UI/behavior.","fields":[{"name":"Unknown","type":"DeviceType","required":true,"line":22,"description":"Unclassified device"},{"name":"Phone","type":"DeviceType","required":true,"line":23,"description":"Phone-sized device"},{"name":"Tablet","type":"DeviceType","required":true,"line":24,"description":"Tablet-sized device"},{"name":"Desktop","type":"DeviceType","required":true,"line":25,"description":"Desktop device"}]},{"name":"DisplayOrientation","kind":"enum","line":28,"purpose":"Enumerates possible screen orientations to allow layout/behavior adjustments.","fields":[{"name":"Unknown","type":"DisplayOrientation","required":true,"line":30,"description":"Orientation not determined"},{"name":"Portrait","type":"DisplayOrientation","required":true,"line":31,"description":"Portrait orientation"},{"name":"Landscape","type":"DisplayOrientation","required":true,"line":32,"description":"Landscape orientation"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Service Interface","Platform Abstraction / Adapter"],"domainConcepts":["Device","Vibration","DisplayOrientation"],"keyDetails":"Pure abstraction: interface declares vibration operations and a device-context DTO; implementations will be platform-specific (WASM/MAUI/desktop) and are responsible for actual vibration and device info retrieval.","orchestrationMethods":[],"typedContracts":[{"name":"DeviceContext","kind":"dto","line":13,"fieldCount":4,"evidencePaths":["NexusReader.Application/Abstractions/Services/IPlatformService.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"DeviceContext","line":13,"summary":"dto with 4 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Abstractions/Services/IPlatformService.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs","purpose":"Defines a MediatR command (VerifyGroundednessCommand) and its handler which delegates groundedness verification to an IKnowledgeService implementation.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Contains a record that implements IRequest<Result<GroundednessResult>>","Handler class implements MediatR IRequestHandler and calls IKnowledgeService"]},"className":"VerifyGroundednessCommandHandler","methods":[{"name":"VerifyGroundednessCommandHandler","line":13,"endLine":16,"signature":"(knowledgeService: IKnowledgeService) -> VerifyGroundednessCommandHandler","purpose":"Constructs the handler and stores the required IKnowledgeService dependency for later calls.","calls":[],"actions":[{"id":"dependency-injection_13","kind":"mapping","label":"Receives IKnowledgeService via constructor","line":13,"detail":"constructor parameter injection","visibility":"detail-only","confidence":0.7},{"id":"assign-field_15","kind":"mapping","label":"Assigns injected service to private field","line":15,"detail":"_knowledgeService = knowledgeService;","visibility":"detail-only","confidence":0.7}]},{"name":"Handle","line":18,"endLine":21,"signature":"(request: VerifyGroundednessCommand, cancellationToken: CancellationToken) -> Task<Result<GroundednessResult>>","purpose":"Handles the VerifyGroundednessCommand by delegating to IKnowledgeService.VerifyGroundednessAsync and returning its result.","calls":[{"targetFile":"NexusReader.Application/Abstractions/Services/IKnowledgeService.cs","targetMethod":"VerifyGroundednessAsync","callLine":20,"paramSummary":"request.Answer, request.Context, request.TenantId, cancellationToken"}],"actions":[{"id":"external-call_20","kind":"external-call","label":"Delegates verification to knowledge service","line":20,"detail":"await _knowledgeService.VerifyGroundednessAsync(...)","visibility":"detail-only","confidence":0.7},{"id":"handle_return_20_0","kind":"return","label":"Returns result","line":20,"detail":"return await _knowledgeService.VerifyGroundednessAsync(request.Answer, request.Context, request.TenantId, cancellationToken);","visibility":"detail-only","confidence":0.7},{"id":"return_20","kind":"return","label":"Returns service result directly","line":20,"detail":"returns Task<Result<GroundednessResult>> from the knowledge service","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"VerifyGroundednessCommand","kind":"command","line":7,"purpose":"Carries the answer, context, and tenant id for a groundedness verification request through MediatR.","fields":[{"name":"Answer","type":"string","required":true,"line":7,"description":"The answer text to verify"},{"name":"Context","type":"string","required":true,"line":7,"description":"Contextual information used for verification"},{"name":"TenantId","type":"string","required":true,"line":7,"description":"Tenant identifier for scoped verification"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"],"patterns":["Mediator (MediatR) handler","Dependency Injection"],"domainConcepts":["Groundedness","AI verification","KnowledgeService"],"keyDetails":"This file provides a thin MediatR handler that simply forwards the request to an IKnowledgeService; no branching, validation, or local persistence occurs here.","orchestrationMethods":[{"name":"Handle","line":18,"confidence":0.65,"reason":"Contains 1 architectural actions relevant to business execution.","actionKinds":["external-call","return"],"evidencePaths":["NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs","NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"]}],"typedContracts":[{"name":"VerifyGroundednessCommand","kind":"command","line":7,"fieldCount":3,"evidencePaths":["NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"]}],"persistenceInteractions":[],"externalInteractions":[{"methodName":"Handle","line":20,"kind":"external-call","detail":"await _knowledgeService.VerifyGroundednessAsync(...)","evidencePaths":["NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"]}],"evidenceAnchors":[{"kind":"orchestration-method","label":"Handle","line":18,"summary":"Contains 1 architectural actions relevant to business execution.","confidence":0.65,"evidencePaths":["NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs","NexusReader.Application/Abstractions/Services/IKnowledgeService.cs"]},{"kind":"typed-contract","label":"VerifyGroundednessCommand","line":7,"summary":"command with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"]},{"kind":"external-call","label":"Handle","line":20,"summary":"await _knowledgeService.VerifyGroundednessAsync(...)","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Commands/Library/IngestEbookCommand.cs","purpose":"Defines a CQRS command record used to ingest a new ebook into the library, carrying payload (metadata, content bytes, ownership and tenant info) for application-side handlers.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Namespace: NexusReader.Application.Commands.Library (line 3)","Declares a record named IngestEbookCommand that implements ICommand<Guid> (lines 15-23)"]},"className":"IngestEbookCommand","methods":[],"types":[{"name":"IngestEbookCommand","kind":"command","line":15,"purpose":"Represents the input payload to ingest a new ebook (title, author, cover bytes, EPUB bytes, description, owner and tenant) for processing by an application command handler.","fields":[{"name":"Title","type":"string","required":true,"line":16,"description":"The title of the ebook."},{"name":"AuthorName","type":"string","required":true,"line":17,"description":"The name of the author."},{"name":"CoverImage","type":"byte[]?","required":false,"line":18,"description":"Optional raw bytes for the cover image."},{"name":"EpubData","type":"byte[]","required":true,"line":19,"description":"Raw bytes of the EPUB file (content to persist/process)."},{"name":"Description","type":"string?","required":false,"line":20,"description":"Optional description or summary of the book."},{"name":"UserId","type":"string","required":true,"line":21,"description":"ID of the user who owns/ingested the book."},{"name":"TenantId","type":"string","required":false,"line":22,"description":"Tenant ID for multi-tenant isolation; defaults to \"global\"."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging"],"patterns":["CQRS Command"],"domainConcepts":["Ebook","Library","Tenant","User/Ownership"],"keyDetails":"Record implements ICommand<Guid> (line 23) so it is intended for a command handler that will return a Guid (likely the created ebook id). TenantId has a default of \"global\" indicating single-tenant default behavior. Contains raw binary payloads (CoverImage, EpubData) which imply handlers will perform persistence or external storage operations.","orchestrationMethods":[],"typedContracts":[{"name":"IngestEbookCommand","kind":"command","line":15,"fieldCount":7,"evidencePaths":["NexusReader.Application/Commands/Library/IngestEbookCommand.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IngestEbookCommand","line":15,"summary":"command with 7 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/Library/IngestEbookCommand.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Commands/Library/IngestEbookRequest.cs","purpose":"Defines a command/request DTO used to ingest an ebook into the library (carries metadata and base64-encoded payload).","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Namespace: NexusReader.Application.Commands.Library","File path indicates Commands/Library and the type is named IngestEbookRequest","Record shape carries data for an application-level request (ingest)"]},"className":"IngestEbookRequest","methods":[],"types":[{"name":"IngestEbookRequest","kind":"command","line":3,"purpose":"Represents the data required to ingest an ebook: metadata, optional cover image, and the EPUB payload (base64).","fields":[{"name":"Title","type":"string","required":true,"line":4,"description":"Ebook title"},{"name":"AuthorName","type":"string","required":true,"line":5,"description":"Author's name"},{"name":"CoverImageBase64","type":"string?","required":false,"line":6,"description":"Optional cover image encoded as base64"},{"name":"EpubDataBase64","type":"string","required":true,"line":7,"description":"EPUB file content encoded as base64"},{"name":"Description","type":"string?","required":false,"line":8,"description":"Optional description (has default null)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Command DTO"],"domainConcepts":["Ebook","Library","Author","CoverImage"],"keyDetails":"Simple immutable record used as an application command carrying base64-encoded EPUB payload and optional cover/description; no runtime behavior, methods, or external calls in this file.","orchestrationMethods":[],"typedContracts":[{"name":"IngestEbookRequest","kind":"command","line":3,"fieldCount":5,"evidencePaths":["NexusReader.Application/Commands/Library/IngestEbookRequest.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"IngestEbookRequest","line":3,"summary":"command with 5 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/Library/IngestEbookRequest.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs","purpose":"Defines a lightweight CQRS command that carries the user's selected answer index and the correct index for quiz answer submission.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Namespace: NexusReader.Application.Commands.Quiz","Type implements ICommand from Application.Abstractions.Messaging"]},"className":"SubmitAnswerCommand","methods":[],"types":[{"name":"SubmitAnswerCommand","kind":"command","line":5,"purpose":"Represents a request to submit an answer for a quiz question carrying the selected and correct indices.","fields":[{"name":"SelectedIndex","type":"int","required":true,"line":5,"description":"Index chosen by the user"},{"name":"CorrectIndex","type":"int","required":true,"line":5,"description":"Index considered correct for the question"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging"],"patterns":["CQRS","Command"],"domainConcepts":["Quiz","Answer"],"keyDetails":"Simple immutable record used as a CQRS command (ICommand) carrying two integers; no methods or runtime branching present in this file.","orchestrationMethods":[],"typedContracts":[{"name":"SubmitAnswerCommand","kind":"command","line":5,"fieldCount":2,"evidencePaths":["NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"SubmitAnswerCommand","line":5,"summary":"command with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs","purpose":"Command handler that processes a quiz answer submission: vibrates the device on correct answers and returns success/failure results.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Class implements ICommandHandler<T> (line 7)","Namespace NexusReader.Application.Commands.Quiz (line 5)"]},"className":"SubmitAnswerCommandHandler","methods":[{"name":"Handle","line":16,"endLine":25,"signature":"(request: SubmitAnswerCommand, cancellationToken: CancellationToken) -> Task<Result>","purpose":"Evaluates the submitted answer, triggers a short vibration if correct, and returns a success or failure Result.","calls":[{"targetFile":"NexusReader.Application.Abstractions.Services","targetMethod":"VibrateAsync","callLine":20,"paramSummary":"durationMs: 50"}],"actions":[{"id":"guard-clause_18","kind":"guard-clause","label":"Check if selected index equals correct index","line":18,"detail":"If true, vibrate and return Result.Ok(); otherwise return Result.Fail(...)","conditionSummary":"request.SelectedIndex == request.CorrectIndex","outcomeLabels":["correct","incorrect"],"visibility":"detail-only","confidence":0.7},{"id":"handle_branch_18_0","kind":"branch","label":"Evaluates branch condition","line":18,"detail":"if (request.SelectedIndex == request.CorrectIndex)","conditionSummary":"request.SelectedIndex == request.CorrectIndex","outcomeLabels":["true","false"],"visibility":"secondary-visible","confidence":0.78},{"id":"external-call_20","kind":"external-call","label":"Triggers platform vibration for correct answer","line":20,"detail":"await _platformService.VibrateAsync(50)","visibility":"detail-only","confidence":0.7},{"id":"return_21","kind":"return","label":"Return success Result","line":21,"detail":"Result.Ok()","visibility":"detail-only","confidence":0.7},{"id":"handle_return_21_1","kind":"return","label":"Returns result","line":21,"detail":"return Result.Ok();","visibility":"detail-only","confidence":0.7},{"id":"return_24","kind":"return","label":"Return failure Result","line":24,"detail":"Result.Fail(\"Incorrect answer.\")","visibility":"detail-only","confidence":0.7},{"id":"handle_return_24_2","kind":"return","label":"Returns result","line":24,"detail":"return Result.Fail(\"Incorrect answer.\");","visibility":"detail-only","confidence":0.7}]},{"name":"SubmitAnswerCommandHandler","line":11,"endLine":14,"signature":"(platformService: IPlatformService) -> SubmitAnswerCommandHandler","purpose":"Constructor that injects the platform service dependency.","calls":[],"actions":[{"id":"assign_13","kind":"mapping","label":"Assign injected dependency","line":13,"detail":"_platformService = platformService","visibility":"detail-only","confidence":0.7}]}],"types":[],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Services","NexusReader.Application.Abstractions.Messaging","FluentResults (nuget)"],"patterns":["Command Handler","Dependency Injection"],"domainConcepts":["Quiz","Answer"],"keyDetails":"Runtime behavior centers on a simple branch: correct answer triggers a platform vibration (external call) and returns Result.Ok; incorrect returns Result.Fail. Implements ICommandHandler in the Application layer.","orchestrationMethods":[{"name":"Handle","line":16,"confidence":0.77,"reason":"Contains 2 architectural actions relevant to business execution.","actionKinds":["guard-clause","branch","external-call","return"],"evidencePaths":["NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs","NexusReader.Application.Abstractions.Services"]}],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[{"methodName":"Handle","line":20,"kind":"external-call","detail":"await _platformService.VibrateAsync(50)","evidencePaths":["NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs"]}],"evidenceAnchors":[{"kind":"orchestration-method","label":"Handle","line":16,"summary":"Contains 2 architectural actions relevant to business execution.","confidence":0.77,"evidencePaths":["NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs","NexusReader.Application.Abstractions.Services"]},{"kind":"external-call","label":"Handle","line":20,"summary":"await _platformService.VibrateAsync(50)","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/Quiz/SubmitAnswerCommandHandler.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs","purpose":"Defines a MediatR command DTO used to update/sync a user's reading progress for an ebook across the application.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","namespace NexusReader.Application.Commands.Sync","type implements IRequest<Result> (MediatR) — used as an application-level command/DTO"]},"className":"UpdateReadingProgressCommand","methods":[],"types":[{"name":"UpdateReadingProgressCommand","kind":"command","line":6,"purpose":"Represents the data required to update/synchronize reading progress for a user's ebook.","fields":[{"name":"PageId","type":"string","required":true,"line":7,"description":"Identifier of the current page"},{"name":"UserId","type":"string","required":true,"line":8,"description":"Identifier of the user whose progress is being updated"},{"name":"EbookId","type":"Guid","required":true,"line":9,"description":"Ebook identifier"},{"name":"Progress","type":"double","required":true,"line":10,"description":"Progress value (e.g., percentage or fraction) representing reading position"},{"name":"ChapterTitle","type":"string?","required":false,"line":11,"description":"Optional current chapter title"},{"name":"ChapterIndex","type":"int","required":true,"line":12,"description":"Index of the current chapter"},{"name":"ExcludedConnectionId","type":"string?","required":false,"line":13,"description":"Optional connection id to exclude from notifications (default null)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["FluentResults (external package)","MediatR (external package)"],"patterns":["CQRS Command","MediatR IRequest<Result>"],"domainConcepts":["ReadingProgress","Ebook","User","Sync"],"keyDetails":"A simple record-level command DTO (lines 6–13). Implements IRequest<Result> for MediatR dispatch; includes an optional ExcludedConnectionId likely used to suppress notifying the originator when broadcasting updates.","orchestrationMethods":[],"typedContracts":[{"name":"UpdateReadingProgressCommand","kind":"command","line":6,"fieldCount":7,"evidencePaths":["NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"UpdateReadingProgressCommand","line":6,"summary":"command with 7 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Commands/Sync/UpdateReadingProgressCommand.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Common/AppJsonContext.cs","purpose":"Defines a System.Text.Json source-generation context that registers graph-related DTO types for ahead-of-time JSON (de)serialization with indented output.","classification":{"role":"config","layer":"application","confidence":0.9,"evidence":["Namespace NexusReader.Application.Common (application layer)","Uses JsonSourceGenerationOptions and multiple JsonSerializable attributes (lines 6-11)"]},"className":"AppJsonContext","methods":[],"types":[{"name":"AppJsonContext","kind":"model","line":12,"purpose":"Partial JsonSerializerContext type that drives System.Text.Json source generation for specified DTO types.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["System.Text.Json.Serialization (framework)","NexusReader.Application.Queries.Graph (referenced DTOs GraphNodeDto, GraphLinkDto, GraphDataDto)"],"patterns":["Source Generator","Json Source Generation"],"domainConcepts":["GraphNode","GraphLink","GraphData"],"keyDetails":"Lines 6-11 apply JsonSourceGenerationOptions(WriteIndented=true) and register JsonSerializable for GraphNodeDto, GraphLinkDto, GraphDataDto and List<T> variants. The class (line 12) is an empty partial inheriting JsonSerializerContext used at compile-time to generate optimized JSON serializers.","orchestrationMethods":[],"typedContracts":[{"name":"AppJsonContext","kind":"model","line":12,"fieldCount":0,"evidencePaths":["NexusReader.Application/Common/AppJsonContext.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AppJsonContext","line":12,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Common/AppJsonContext.cs"]}]}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Constants/PlanConstants.cs","purpose":"Defines application-wide default constants for Plan-related settings (name, token limit, activity label).","classification":{"role":"config","layer":"application","confidence":0.85,"evidence":["namespace NexusReader.Application.Constants","static class with public constant values for Plan defaults"]},"className":"PlanConstants","methods":[],"types":[{"name":"PlanConstants","kind":"model","line":3,"purpose":"Holds compile-time constant defaults for plan configuration used across the application.","fields":[{"name":"DefaultPlanName","type":"string","required":true,"line":5,"description":"Default plan name (e.g., 'Free')."},{"name":"DefaultTokenLimit","type":"int","required":true,"line":6,"description":"Default numeric token limit for the plan."},{"name":"DefaultActivityLabel","type":"string","required":true,"line":7,"description":"Default label shown when there's no activity."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Constants holder"],"domainConcepts":["Plan"],"keyDetails":"Simple static container of compile-time constants; no runtime behavior, no external calls, and safe for inlining/compile-time use.","orchestrationMethods":[],"typedContracts":[{"name":"PlanConstants","kind":"model","line":3,"fieldCount":3,"evidencePaths":["NexusReader.Application/Constants/PlanConstants.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"PlanConstants","line":3,"summary":"model with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Constants/PlanConstants.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Constants/StorageKeys.cs","purpose":"Defines application-wide string keys used for client/local storage (auth tokens and user metadata).","classification":{"role":"config","layer":"application","confidence":0.9,"evidence":["Namespace NexusReader.Application.Constants indicates application-level constants","Public static class with const string fields used as storage keys"]},"className":"StorageKeys","methods":[],"types":[{"name":"StorageKeys","kind":"model","line":3,"purpose":"Holds constant keys for storing authentication and user metadata in client/local storage.","fields":[{"name":"AuthToken","type":"string","required":true,"line":5,"description":"Key for the auth token (\"nexus_auth_token\")."},{"name":"RefreshToken","type":"string","required":true,"line":6,"description":"Key for the refresh token (\"nexus_refresh_token\")."},{"name":"UserEmail","type":"string","required":true,"line":7,"description":"Key for the user's email (\"nexus_user_email\")."},{"name":"UserTenant","type":"string","required":true,"line":8,"description":"Key for the user's tenant identifier (\"nexus_user_tenant\")."},{"name":"UserRoles","type":"string","required":true,"line":9,"description":"Key for the user's roles (\"nexus_user_roles\")."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Constants"],"domainConcepts":["Auth","User","Tenant","Roles","Token storage"],"keyDetails":"Simple static constant holder used across client and application code to standardize local storage keys for authentication and user metadata.","orchestrationMethods":[],"typedContracts":[{"name":"StorageKeys","kind":"model","line":3,"fieldCount":5,"evidencePaths":["NexusReader.Application/Constants/StorageKeys.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"StorageKeys","line":3,"summary":"model with 5 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Constants/StorageKeys.cs"]}]}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","purpose":"Defines simple DTOs used to return a grounded AI response (answer plus provenance/citations) from application services.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace NexusReader.Application.DTOs.AI","File only contains plain data-holder classes (GroundedResponseDto, CitationDto) with auto-properties"]},"className":"GroundedResponseDto","methods":[],"types":[{"name":"GroundedResponseDto","kind":"dto","line":5,"purpose":"Carries an AI-generated answer and a list of provenance citations back to callers.","fields":[{"name":"Answer","type":"string","required":true,"line":7,"description":"The generated answer text"},{"name":"Citations","type":"List<CitationDto>","required":true,"line":8,"description":"List of contextual citations supporting the answer"}]},{"name":"CitationDto","kind":"dto","line":11,"purpose":"Represents a single provenance item (chunk id, snippet, and source) used to justify the answer.","fields":[{"name":"CitationId","type":"string","required":true,"line":13,"description":"Identifier for the cited chunk (e.g., chunk hash/ID)"},{"name":"Snippet","type":"string","required":true,"line":14,"description":"Verified text snippet extracted from context"},{"name":"SourceBook","type":"string","required":true,"line":15,"description":"Book title or human-readable source description"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO"],"domainConcepts":["GroundedResponse","Citation","AI/Knowledge","Answering","Provenance"],"keyDetails":"Small, self-contained DTOs with default non-null initializers (string.Empty, new List) intended for safe transport over app/service boundaries.","orchestrationMethods":[],"typedContracts":[{"name":"GroundedResponseDto","kind":"dto","line":5,"fieldCount":2,"evidencePaths":["NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"]},{"name":"CitationDto","kind":"dto","line":11,"fieldCount":3,"evidencePaths":["NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GroundedResponseDto","line":5,"summary":"dto with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"]},{"kind":"typed-contract","label":"CitationDto","line":11,"summary":"dto with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/AI/GroundedResponseDto.cs"]}]}
|
||||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/DTOs/AI/RelevantContext.cs","purpose":"Defines a small DTO that carries a piece of retrieved context (text, source id and confidence) used by AI/knowledge features.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace NexusReader.Application.DTOs.AI","File path implies DTOs for AI features and contains only plain properties"]},"className":"RelevantContext","methods":[],"types":[{"name":"RelevantContext","kind":"dto","line":3,"purpose":"Represents a single relevant context item (text snippet) returned or passed to AI/knowledge components, including its source and confidence score.","fields":[{"name":"Text","type":"string","required":true,"line":5,"description":"The context text snippet; initialized to empty string by default."},{"name":"SourceId","type":"string","required":true,"line":6,"description":"Identifier of the source (e.g., ContentHash or EbookTitle); initialized to empty string."},{"name":"Confidence","type":"double","required":false,"line":7,"description":"Confidence score for how relevant the snippet is."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO"],"domainConcepts":["AI","Knowledge Retrieval","Context Snippet"],"keyDetails":"Tiny immutable-appearing DTO (auto-properties with defaults) used to transport relevant context text, its source id, and a numeric confidence between layers or AI components.","orchestrationMethods":[],"typedContracts":[{"name":"RelevantContext","kind":"dto","line":3,"fieldCount":3,"evidencePaths":["NexusReader.Application/DTOs/AI/RelevantContext.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"RelevantContext","line":3,"summary":"dto with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/AI/RelevantContext.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","purpose":"Defines a data transfer object representing a semantic search hit returned by AI/semantic search operations, carrying content identifiers, a snippet, relevance score and optional metadata.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace NexusReader.Application.DTOs.AI indicates an Application-layer DTO","File declares a single plain data class SemanticSearchResultDto with no methods"]},"className":"SemanticSearchResultDto","methods":[],"types":[{"name":"SemanticSearchResultDto","kind":"dto","line":3,"purpose":"Carries the result of a semantic search (content identifier, snippet, unit type, relevance and optional source/metadata) across application boundaries.","fields":[{"name":"ContentHash","type":"string","required":true,"line":5,"description":"Identifier/hash for the matched content (non-null, initialized to empty string)."},{"name":"Snippet","type":"string","required":true,"line":6,"description":"Text snippet or excerpt used to show the match (non-null, initialized to empty string)."},{"name":"UnitType","type":"string?","required":false,"line":7,"description":"Optional unit/type of the content (nullable)."},{"name":"RelevanceScore","type":"float","required":true,"line":8,"description":"Numeric relevance score from the semantic search."},{"name":"SourceBookTitle","type":"string?","required":false,"line":9,"description":"Optional title of the source book where the content originated (nullable)."},{"name":"Metadata","type":"Dictionary<string, object>?","required":false,"line":10,"description":"Optional arbitrary metadata / bonus context attached to the result (nullable)."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO"],"domainConcepts":["Semantic Search","Search Result","Knowledge Retrieval"],"keyDetails":"Plain DTO used to transport semantic search hits; contains nullable metadata for extensibility and initialized non-null strings for ContentHash and Snippet.","orchestrationMethods":[],"typedContracts":[{"name":"SemanticSearchResultDto","kind":"dto","line":3,"fieldCount":6,"evidencePaths":["NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"SemanticSearchResultDto","line":3,"summary":"dto with 6 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/DTOs/User/AuthorDto.cs","purpose":"Defines a simple data transfer object representing an author (Id and Name) used by the Application layer to pass user/author data between boundaries.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace: NexusReader.Application.DTOs.User","File path and name: Application/DTOs/User/AuthorDto.cs","Declares a record named AuthorDto with simple properties"]},"className":"AuthorDto","methods":[],"types":[{"name":"AuthorDto","kind":"dto","line":3,"purpose":"Immutable DTO carrying basic author identity data across application boundaries.","fields":[{"name":"Id","type":"int","required":true,"line":5,"description":"Numeric author identifier"},{"name":"Name","type":"string","required":true,"line":6,"description":"Author display name (defaults to empty string)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO","record"],"domainConcepts":["Author","User"],"keyDetails":"Small immutable record DTO in the Application layer representing author/user identity (Id and Name).","orchestrationMethods":[],"typedContracts":[{"name":"AuthorDto","kind":"dto","line":3,"fieldCount":2,"evidencePaths":["NexusReader.Application/DTOs/User/AuthorDto.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AuthorDto","line":3,"summary":"dto with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/User/AuthorDto.cs"]}]}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs","purpose":"Defines a simple immutable DTO representing a subscription plan used across the application layer (billing/AI quota).","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace: NexusReader.Application.DTOs.User","File name and shape: SubscriptionPlanDto record with init-only properties"]},"className":"SubscriptionPlanDto","methods":[],"types":[{"name":"SubscriptionPlanDto","kind":"dto","line":3,"purpose":"Carries subscription plan data (id, name, AI token limits, price) across application boundaries.","fields":[{"name":"Id","type":"int","required":true,"line":5,"description":"Numeric identifier of the subscription plan"},{"name":"Name","type":"string","required":true,"line":6,"description":"Human-readable plan name"},{"name":"AITokenLimit","type":"int","required":true,"line":7,"description":"Token allowance for AI usage on the plan"},{"name":"IsUnlimitedTokens","type":"bool","required":true,"line":8,"description":"Flag indicating whether token limits are disabled"},{"name":"MonthlyPrice","type":"decimal","required":true,"line":9,"description":"Monthly price for the subscription plan"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO","Immutable Record"],"domainConcepts":["SubscriptionPlan","Billing","AI Tokens"],"keyDetails":"A minimal, immutable data-transfer record used to move subscription plan data; no methods, behavior, or external calls in this file.","orchestrationMethods":[],"typedContracts":[{"name":"SubscriptionPlanDto","kind":"dto","line":3,"fieldCount":5,"evidencePaths":["NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"SubscriptionPlanDto","line":3,"summary":"dto with 5 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/DTOs/User/SubscriptionPlanDto.cs"]}]}
|
||||||
Vendored
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/DependencyInjection.cs","purpose":"Provides application-level DI registrations (Mapster mapping config and MediatR handler registration) and exposes the application assembly for composition/root usage.","classification":{"role":"service-registration","layer":"application","confidence":0.9,"evidence":["Contains an AddApplication(IServiceCollection) extension that registers services","Exposes Assembly property for registering handlers from this assembly"]},"className":"DependencyInjection","methods":[{"name":"AddApplication","line":8,"endLine":14,"signature":"(services: IServiceCollection) -> IServiceCollection","purpose":"Extension method that registers application mapping configuration and MediatR handlers, returning the IServiceCollection for chaining.","calls":[{"targetFile":"NexusReader.Application/Mappings.cs","targetMethod":"AddMapsterConfiguration","callLine":10,"paramSummary":"this IServiceCollection (extension call to register Mapster mappings)"}],"actions":[{"id":"service-registration_10","kind":"mapping","label":"Register mapping configuration","line":10,"detail":"Calls AddMapsterConfiguration() to add Mapster mapping setup","visibility":"detail-only","confidence":0.7},{"id":"service-registration_11","kind":"mapping","label":"Register MediatR handlers","line":11,"detail":"Calls AddMediatR(...) to register MediatR handlers from this assembly (external library call)","visibility":"detail-only","confidence":0.7},{"id":"return_13","kind":"return","label":"Return IServiceCollection","line":13,"detail":"Returns the same IServiceCollection for fluent chaining","visibility":"detail-only","confidence":0.7},{"id":"addapplication_return_13_0","kind":"return","label":"Returns result","line":13,"detail":"return services;","visibility":"detail-only","confidence":0.7}]},{"name":"Assembly","line":16,"endLine":16,"signature":"-> System.Reflection.Assembly","purpose":"Exposes the current assembly (NexusReader.Application) for use when registering handlers or scanning types.","calls":[],"actions":[{"id":"expose-value_16","kind":"mapping","label":"Provide assembly reference","line":16,"detail":"Getter returns typeof(DependencyInjection).Assembly","visibility":"detail-only","confidence":0.7}]}],"types":[],"serviceRegistrations":[{"line":10,"serviceType":"Mapster configuration / mapping profiles","implementationType":"configured via AddMapsterConfiguration extension","lifetime":"unknown","factorySummary":"Calls AddMapsterConfiguration to register Mapster mapping setup for the Application project"},{"line":11,"serviceType":"MediatR handlers (from this assembly)","implementationType":"handlers discovered in this assembly","lifetime":"unknown","factorySummary":"Calls AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly)) to register MediatR handlers"}],"startupActions":[],"dependencies":["NexusReader.Application/Mappings.cs","MediatR (external package)"],"patterns":["Dependency Injection extension","Service registration"],"domainConcepts":[],"keyDetails":"Intended to be called from the composition root (e.g., Web project startup) to wire up application mapping and MediatR handler discovery; exposes Assembly for scanning.","orchestrationMethods":[],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[]}
|
||||||
Vendored
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/NexusReader.Application.csproj","purpose":"Project file for the NexusReader.Application .NET project: declares project-to-project references, NuGet package dependencies, and build properties (target framework, nullable, implicit usings, runtime config generation).","classification":{"role":"config","layer":"application","confidence":0.9,"evidence":["Project references to NexusReader.Domain and NexusReader.Data (lines 4-6)","Multiple PackageReference entries including MediatR, EF Core, AI, Identity, resilience libraries (lines 9-18)","TargetFramework, Nullable, ImplicitUsings defined (lines 21-26)"]},"className":"","methods":[],"types":[],"serviceRegistrations":[],"startupActions":[],"dependencies":["..\\NexusReader.Domain\\NexusReader.Domain.csproj","..\\NexusReader.Data\\NexusReader.Data.csproj"],"patterns":["MediatR (Mediator/CQRS)","Mapster (mapping)","EF Core repository/persistence","Resilience patterns (Microsoft.Extensions.Resilience)"],"domainConcepts":["Authentication/Identity","AI/Knowledge (Microsoft.Extensions.AI)","Vector search (Pgvector)","Persistence/EF Core","Mapping/DTOs"],"keyDetails":"TargetFramework: net10.0 (line 22); ImplicitUsings enabled (line 23); Nullable enabled (line 24); GenerateRuntimeConfigurationFiles true (line 25). NuGet packages: FluentResults, Mapster, Mapster.DependencyInjection, MediatR, Microsoft.AspNetCore.Authorization, Microsoft.EntityFrameworkCore, Microsoft.Extensions.AI, Microsoft.Extensions.Identity.Core, Pgvector.EntityFrameworkCore, Microsoft.Extensions.Resilience (lines 9-18). Project references to Domain and Data projects (lines 4-5).","orchestrationMethods":[],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs","purpose":"Defines a CQRS query record that carries input for extracting a knowledge graph from text within a tenant and optional ebook scope.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Query naming pattern","File path: NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs","Type implements IQuery<GraphDataDto>"]},"className":"GetKnowledgeGraphQuery","methods":[{"name":"GetKnowledgeGraphQuery (ctor)","line":8,"endLine":8,"signature":"(Text: string, TenantId: string, EbookId: Guid? = null) -> GetKnowledgeGraphQuery","purpose":"Constructs the query DTO carrying text, tenant, and optional ebook id for knowledge-graph extraction.","calls":[],"actions":[{"id":"ctor_8","kind":"mapping","label":"Primary record constructor","line":8,"detail":"Immutable record positional parameters: Text, TenantId, EbookId (nullable, default null)","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"GetKnowledgeGraphQuery","kind":"query","line":8,"purpose":"Represents a request to produce a GraphDataDto from provided text within a tenant and optional ebook context.","fields":[{"name":"Text","type":"string","required":true,"line":8,"description":"Chapter or page content to extract the graph from."},{"name":"TenantId","type":"string","required":true,"line":8,"description":"Tenant scope for knowledge extraction and caching."},{"name":"EbookId","type":"Guid?","required":false,"line":8,"description":"Optional Ebook ID to link the knowledge units to."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging (referenced via using)","GraphDataDto (referenced in IQuery<GraphDataDto>, file unknown)"],"patterns":["CQRS Query"],"domainConcepts":["Knowledge Graph","Tenant","Ebook"],"keyDetails":"Lightweight immutable record used as the application-layer query DTO; no runtime logic in this file.","orchestrationMethods":[],"typedContracts":[{"name":"GetKnowledgeGraphQuery","kind":"query","line":8,"fieldCount":3,"evidencePaths":["NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GetKnowledgeGraphQuery","line":8,"summary":"query with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Graph/GetKnowledgeGraphQuery.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Graph/GraphViewModels.cs","purpose":"Defines simple DTO/view-model records for graph visualization: node, link, and a container holding collections of nodes and links used by application queries.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace NexusReader.Application.Queries.Graph indicates application query DTOs","File contains only record types named GraphNodeDto, GraphLinkDto, GraphDataDto"]},"className":"","methods":[],"types":[{"name":"GraphNodeDto","kind":"dto","line":3,"purpose":"Represents a single graph node with id, display label, group and optional type.","fields":[{"name":"Id","type":"string","required":true,"line":3,"description":"Unique identifier for the node (constructor parameter)"},{"name":"Label","type":"string","required":true,"line":3,"description":"Human-readable label for the node (constructor parameter)"},{"name":"Group","type":"string","required":true,"line":3,"description":"Grouping/category for visualization (constructor parameter)"},{"name":"Type","type":"string?","required":false,"line":3,"description":"Optional semantic type of the node (nullable constructor parameter)"}]},{"name":"GraphLinkDto","kind":"dto","line":4,"purpose":"Represents an edge/link between two nodes with a relation type and optional weight/value.","fields":[{"name":"Source","type":"string","required":true,"line":4,"description":"Source node id (constructor parameter)"},{"name":"Target","type":"string","required":true,"line":4,"description":"Target node id (constructor parameter)"},{"name":"RelationType","type":"string","required":true,"line":4,"description":"Label/type of the relationship (constructor parameter)"},{"name":"Value","type":"int","required":true,"line":4,"description":"Numeric weight/strength of the link with default 1 (constructor parameter)"}]},{"name":"GraphDataDto","kind":"dto","line":5,"purpose":"Container holding collections of GraphNodeDto and GraphLinkDto for graph results returned by queries.","fields":[{"name":"Nodes","type":"List<GraphNodeDto>","required":true,"line":7,"description":"List of nodes (init-only property, defaults to empty list)"},{"name":"Links","type":"List<GraphLinkDto>","required":true,"line":8,"description":"List of links/edges (init-only property, defaults to empty list)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO","View-Model"],"domainConcepts":["Graph","Node","Link"],"keyDetails":"Minimal, immutable record types used to transport graph data in application query responses; no behavior, persistence, or external calls present.","orchestrationMethods":[],"typedContracts":[{"name":"GraphNodeDto","kind":"dto","line":3,"fieldCount":4,"evidencePaths":["NexusReader.Application/Queries/Graph/GraphViewModels.cs"]},{"name":"GraphLinkDto","kind":"dto","line":4,"fieldCount":4,"evidencePaths":["NexusReader.Application/Queries/Graph/GraphViewModels.cs"]},{"name":"GraphDataDto","kind":"dto","line":5,"fieldCount":2,"evidencePaths":["NexusReader.Application/Queries/Graph/GraphViewModels.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GraphNodeDto","line":3,"summary":"dto with 4 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Graph/GraphViewModels.cs"]},{"kind":"typed-contract","label":"GraphLinkDto","line":4,"summary":"dto with 4 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Graph/GraphViewModels.cs"]},{"kind":"typed-contract","label":"GraphDataDto","line":5,"summary":"dto with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Graph/GraphViewModels.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Quiz/QuizViewModels.cs","purpose":"Defines lightweight Data Transfer Objects (records) used by the Application layer to represent quizzes and quiz questions for queries and view models.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","Namespace: NexusReader.Application.Queries.Quiz","File contains record types named QuizDto and QuizQuestionDto used for query/view-model purposes"]},"className":"","methods":[],"types":[{"name":"QuizQuestionDto","kind":"dto","line":3,"purpose":"Represents a single quiz question with its possible options and the index of the correct option.","fields":[{"name":"Question","type":"string","required":true,"line":3,"description":"The text of the question"},{"name":"Options","type":"List<string>","required":true,"line":3,"description":"Possible answer options"},{"name":"CorrectIndex","type":"int","required":true,"line":3,"description":"Zero-based index of the correct option in Options"}]},{"name":"QuizDto","kind":"dto","line":4,"purpose":"Holds a collection of quiz questions to represent an entire quiz payload.","fields":[{"name":"Questions","type":"List<QuizQuestionDto>","required":true,"line":4,"description":"List of quiz questions"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO","Record"],"domainConcepts":["Quiz","Question","Options"],"keyDetails":"Very small file: only two immutable record DTOs used for query/view-model surface; no methods or external calls.","orchestrationMethods":[],"typedContracts":[{"name":"QuizQuestionDto","kind":"dto","line":3,"fieldCount":3,"evidencePaths":["NexusReader.Application/Queries/Quiz/QuizViewModels.cs"]},{"name":"QuizDto","kind":"dto","line":4,"fieldCount":1,"evidencePaths":["NexusReader.Application/Queries/Quiz/QuizViewModels.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"QuizQuestionDto","line":3,"summary":"dto with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Quiz/QuizViewModels.cs"]},{"kind":"typed-contract","label":"QuizDto","line":4,"summary":"dto with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Quiz/QuizViewModels.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs","purpose":"Defines a CQRS query record that models a request to retrieve a specific chapter/page of a user's ebook (ReaderPageViewModel) and carries tenant/user context.","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Query naming pattern","Namespace: NexusReader.Application.Queries.Reader","Record implements IQuery<ReaderPageViewModel>","File located under Application project area"]},"className":"GetReaderPageQuery","methods":[],"types":[{"name":"GetReaderPageQuery","kind":"query","line":11,"purpose":"Represents a request to fetch a reader page (chapter) for a specific ebook and user (tenant isolation).","fields":[{"name":"EbookId","type":"Guid","required":true,"line":12,"description":"Identifier of the ebook to read"},{"name":"ChapterIndex","type":"int","required":true,"line":13,"description":"Zero-based index of the chapter/page to retrieve (defaults to 0)"},{"name":"UserId","type":"string?","required":false,"line":14,"description":"Authenticated user's ID for tenant isolation (optional)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging (using at line 1)","ReaderPageViewModel (referenced in generic IQuery<>; defined elsewhere)"],"patterns":["CQRS Query","Record DTO"],"domainConcepts":["Ebook","Chapter / ReaderPage","Tenant / User isolation"],"keyDetails":"Simple immutable record used as the application-layer query message type: GetReaderPageQuery(Guid EbookId, int ChapterIndex = 0, string? UserId = null) : IQuery<ReaderPageViewModel> (declared lines 11-14).","orchestrationMethods":[],"typedContracts":[{"name":"GetReaderPageQuery","kind":"query","line":11,"fieldCount":3,"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GetReaderPageQuery","line":11,"summary":"query with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQuery.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs","purpose":"Handles GetReaderPageQuery requests by delegating to an EPUB reader service to produce a ReaderPageViewModel result.","classification":{"role":"handler","layer":"application","confidence":0.86,"evidence":["Namespace: NexusReader.Application.Queries.Reader","Implements IQueryHandler<GetReaderPageQuery, ReaderPageViewModel>","Delegates to an injected IEpubReader service"]},"className":"GetReaderPageQueryHandler","methods":[{"name":"GetReaderPageQueryHandler","line":11,"endLine":14,"signature":"(epubReader: IEpubReader) -> void","purpose":"Constructs the handler and captures the IEpubReader dependency.","calls":[],"actions":[{"id":"assignment_13","kind":"mapping","label":"Assign DI dependency","line":13,"detail":"_epubReader = epubReader","visibility":"detail-only","confidence":0.7}]},{"name":"Handle","line":16,"endLine":19,"signature":"(request: GetReaderPageQuery, cancellationToken: CancellationToken) -> Task<Result<ReaderPageViewModel>>","purpose":"Loads EPUB content for the requested ebook/chapter/user by delegating to IEpubReader.GetEpubContentAsync and returns the Result-wrapped ReaderPageViewModel.","calls":[{"targetFile":"NexusReader.Application.Abstractions.Services/IEpubReader.cs","targetMethod":"GetEpubContentAsync","callLine":18,"paramSummary":"request.EbookId, request.ChapterIndex, request.UserId, cancellationToken"}],"actions":[{"id":"external-call_18","kind":"external-call","label":"Delegates content loading","line":18,"detail":"Calls IEpubReader.GetEpubContentAsync and directly returns its Task<Result<ReaderPageViewModel>>","visibility":"detail-only","confidence":0.7},{"id":"return_18","kind":"return","label":"Returns delegated Task result","line":18,"detail":"No local processing; returns the Task from the EPUB reader","visibility":"detail-only","confidence":0.7},{"id":"handle_return_18_0","kind":"return","label":"Returns result","line":18,"detail":"return _epubReader.GetEpubContentAsync(request.EbookId, request.ChapterIndex, request.UserId, cancellationToken);","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"GetReaderPageQueryHandler","kind":"model","line":7,"purpose":"Application handler that processes GetReaderPageQuery by calling the EPUB reader service.","fields":[{"name":"_epubReader","type":"IEpubReader","required":true,"line":9,"description":"Injected service used to load EPUB content"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging/IQueryHandler","NexusReader.Application.Abstractions.Services/IEpubReader","GetReaderPageQuery","ReaderPageViewModel","FluentResults/Result"],"patterns":["CQRS Handler","Dependency Injection","Adapter/Facade (delegation to service)"],"domainConcepts":["Ebook","Chapter","Reader session/content"],"keyDetails":"The handler performs no local business logic or validation; it directly returns the Task produced by IEpubReader.GetEpubContentAsync, making the EPUB reader the authority for content retrieval and error/result shaping.","orchestrationMethods":[{"name":"Handle","line":16,"confidence":0.65,"reason":"Contains 1 architectural actions relevant to business execution.","actionKinds":["external-call","return"],"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs","NexusReader.Application.Abstractions.Services/IEpubReader.cs"]}],"typedContracts":[{"name":"GetReaderPageQueryHandler","kind":"model","line":7,"fieldCount":1,"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"]}],"persistenceInteractions":[],"externalInteractions":[{"methodName":"Handle","line":18,"kind":"external-call","detail":"Calls IEpubReader.GetEpubContentAsync and directly returns its Task<Result<ReaderPageViewModel>>","evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"]}],"evidenceAnchors":[{"kind":"orchestration-method","label":"Handle","line":16,"summary":"Contains 1 architectural actions relevant to business execution.","confidence":0.65,"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs","NexusReader.Application.Abstractions.Services/IEpubReader.cs"]},{"kind":"typed-contract","label":"GetReaderPageQueryHandler","line":7,"summary":"model with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"]},{"kind":"external-call","label":"Handle","line":18,"summary":"Calls IEpubReader.GetEpubContentAsync and directly returns its Task<Result<ReaderPageViewModel>>","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/GetReaderPageQueryHandler.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs","purpose":"Defines a simple data-transfer record that carries metadata extracted from a local EPUB file (title, author, cover image, description) for use by application query handlers.","classification":{"role":"dto","layer":"application","confidence":0.86,"evidence":["Namespace: NexusReader.Application.Queries.Reader","File declares a record named LocalEpubMetadata used to carry EPUB metadata"]},"className":"LocalEpubMetadata","methods":[],"types":[{"name":"LocalEpubMetadata","kind":"dto","line":6,"purpose":"Holds extracted metadata from a local EPUB for query/transfer purposes.","fields":[{"name":"Title","type":"string","required":true,"line":11,"description":"The title of the book; non-nullable with default empty string."},{"name":"Author","type":"string","required":true,"line":16,"description":"The author(s) of the book; non-nullable with default empty string."},{"name":"CoverImage","type":"byte[]?","required":false,"line":21,"description":"Raw bytes of the cover image if available; nullable."},{"name":"Description","type":"string?","required":false,"line":26,"description":"Description or summary of the book; nullable."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["DTO","Record"],"domainConcepts":["Epub","Book","Metadata"],"keyDetails":"Pure data holder (record) with no runtime behavior; used in Application.Queries.Reader to transport EPUB metadata between components.","orchestrationMethods":[],"typedContracts":[{"name":"LocalEpubMetadata","kind":"dto","line":6,"fieldCount":4,"evidencePaths":["NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"LocalEpubMetadata","line":6,"summary":"dto with 4 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/LocalEpubMetadata.cs"]}]}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/Reader/ViewModels.cs","purpose":"Defines application-level view models for the reader UI, including a polymorphic ContentBlock hierarchy (text and AI-trigger blocks) and a ReaderPageViewModel used by reader queries.","classification":{"role":"dto","layer":"application","confidence":0.9,"evidence":["DTO/view-model naming pattern","namespace NexusReader.Application.Queries.Reader","records named *ViewModel and ContentBlock used to carry UI/query data","JsonDerivedType attributes declare polymorphic JSON serialization for ContentBlock"]},"className":"","methods":[],"types":[{"name":"ContentBlock","kind":"model","line":7,"purpose":"Abstract base record for polymorphic content blocks shown on a reader page (polymorphic JSON root).","fields":[{"name":"Id","type":"string","required":true,"line":7,"description":"Identifier for the content block"}]},{"name":"TextSegmentBlock","kind":"model","line":8,"purpose":"Concrete ContentBlock carrying a text segment to render.","fields":[{"name":"Id","type":"string","required":true,"line":8,"description":"Inherited block identifier"},{"name":"Content","type":"string","required":true,"line":8,"description":"Text payload for the segment"}]},{"name":"AiActionTriggerBlock","kind":"model","line":9,"purpose":"Concrete ContentBlock representing an AI-driven action trigger with dialog and selectable options.","fields":[{"name":"Id","type":"string","required":true,"line":9,"description":"Inherited block identifier"},{"name":"Dialogue","type":"string","required":true,"line":9,"description":"Prompt or dialogue text presented to the user"},{"name":"ActionOptions","type":"List<string>","required":true,"line":9,"description":"List of selectable action identifiers or labels"}]},{"name":"ReaderPageViewModel","kind":"view-model","line":11,"purpose":"View model for a reader page, aggregating content blocks and chapter/eBook context used by queries and UI.","fields":[{"name":"Blocks","type":"List<ContentBlock>","required":true,"line":11,"description":"Ordered list of polymorphic content blocks to render on the page"},{"name":"CurrentChapterIndex","type":"int","required":true,"line":11,"description":"Zero-based index of the current chapter"},{"name":"TotalChapters","type":"int","required":true,"line":11,"description":"Total number of chapters in the eBook"},{"name":"ChapterTitle","type":"string","required":true,"line":11,"description":"Title of the current chapter"},{"name":"EbookId","type":"Guid","required":false,"line":11,"description":"Optional eBook identifier (defaults to Guid.Empty)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["System.Text.Json.Serialization"],"patterns":["Polymorphic DTO","View Model","Record Types"],"domainConcepts":["ContentBlock","ReaderPage","Ebook","Chapter","AI Action"],"keyDetails":"Uses JsonDerivedType attributes (lines 5-6) to register two discriminators: \"text\" -> TextSegmentBlock and \"trigger\" -> AiActionTriggerBlock for System.Text.Json polymorphic serialization. File contains only immutable record types (no methods).","orchestrationMethods":[],"typedContracts":[{"name":"ContentBlock","kind":"model","line":7,"fieldCount":1,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]},{"name":"TextSegmentBlock","kind":"model","line":8,"fieldCount":2,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]},{"name":"AiActionTriggerBlock","kind":"model","line":9,"fieldCount":3,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]},{"name":"ReaderPageViewModel","kind":"view-model","line":11,"fieldCount":5,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"ContentBlock","line":7,"summary":"model with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]},{"kind":"typed-contract","label":"TextSegmentBlock","line":8,"summary":"model with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]},{"kind":"typed-contract","label":"AiActionTriggerBlock","line":9,"summary":"model with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]},{"kind":"typed-contract","label":"ReaderPageViewModel","line":11,"summary":"view-model with 5 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/Reader/ViewModels.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs","purpose":"Defines a CQRS query message used to request the application's initialization status (returns a string).","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Query naming pattern","Namespace: NexusReader.Application.Queries.System","Type implements IQuery<string> from the messaging abstractions","File placed under Application/Queries/System (query/command pattern)"]},"className":"GetInitializationStatusQuery","methods":[],"types":[{"name":"GetInitializationStatusQuery","kind":"query","line":5,"purpose":"Marker/query DTO representing a request to get the initialization status as a string.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging"],"patterns":["CQRS (Query object)"],"domainConcepts":["InitializationStatus"],"keyDetails":"A lightweight record with no payload used as a request message (IQuery<string>) to fetch initialization status; runtime behavior implemented by a separate query handler elsewhere.","orchestrationMethods":[],"typedContracts":[{"name":"GetInitializationStatusQuery","kind":"query","line":5,"fieldCount":0,"evidencePaths":["NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GetInitializationStatusQuery","line":5,"summary":"query with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/System/GetInitializationStatusQuery.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs","purpose":"Query handler that answers whether the Nexus E-Reader application is initialized; returns a constant success message.","classification":{"role":"handler","layer":"application","confidence":0.85,"evidence":["Namespace: NexusReader.Application.Queries.System","Class implements IQueryHandler<GetInitializationStatusQuery, string>","Single Handle method returning a fixed initialization status message"]},"className":"GetInitializationStatusQueryHandler","methods":[{"name":"Handle","line":8,"endLine":11,"signature":"(request: GetInitializationStatusQuery, cancellationToken: CancellationToken) -> Task<Result<string>>","purpose":"Handles the GetInitializationStatusQuery by returning a constant success message indicating the application is initialized.","calls":[],"actions":[{"id":"return_10","kind":"return","label":"Returns constant initialization message","line":10,"detail":"Task.FromResult(Result.Ok(\"Nexus E-Reader Application is fully initialized and operational.\"))","visibility":"detail-only","confidence":0.7},{"id":"handle_return_10_0","kind":"return","label":"Returns result","line":10,"detail":"return Task.FromResult(Result.Ok(\"Nexus E-Reader Application is fully initialized and operational.\"));","visibility":"detail-only","confidence":0.7},{"id":"constant-response_10","kind":"mapping","label":"Static successful result","line":10,"detail":"Always returns Result.Ok with a fixed string; no branching or external calls.","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"GetInitializationStatusQueryHandler","kind":"model","line":6,"purpose":"Query handler type implementing IQueryHandler to provide initialization status.","fields":[{"name":"class-modifiers","type":"internal sealed","required":true,"line":6,"description":"Class is internal and sealed; no instance state or constructor logic present."},{"name":"implemented-interface","type":"IQueryHandler<GetInitializationStatusQuery, string>","required":true,"line":6,"description":"Indicates this class handles the GetInitializationStatusQuery via the application's messaging abstraction."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.Abstractions.Messaging","FluentResults"],"patterns":["Query Handler","Mediator"],"domainConcepts":["InitializationStatus","Application health / readiness"],"keyDetails":"Single-responsibility handler that always returns a fixed ready message; no external calls, no branching, suitable as a simple health/readiness query endpoint.","orchestrationMethods":[],"typedContracts":[{"name":"GetInitializationStatusQueryHandler","kind":"model","line":6,"fieldCount":2,"evidencePaths":["NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GetInitializationStatusQueryHandler","line":6,"summary":"model with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/System/GetInitializationStatusQueryHandler.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Queries/User/GetUserProfileQuery.cs","purpose":"Defines a MediatR query message representing a request to retrieve a user's profile (returns a FluentResults Result wrapping a UserProfileDto).","classification":{"role":"handler","layer":"application","confidence":0.9,"evidence":["Command pattern","Line 7: record implements MediatR IRequest<Result<UserProfileDto>>","Namespace: NexusReader.Application.Queries.User indicates an application-layer query object"]},"className":"GetUserProfileQuery","methods":[],"types":[{"name":"GetUserProfileQuery","kind":"query","line":7,"purpose":"CQRS query message carrying the user identifier to request a UserProfileDto wrapped in a FluentResults Result.","fields":[{"name":"UserId","type":"string","required":true,"line":7,"description":"Identifier of the user whose profile is being requested"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Application.DTOs.User (UserProfileDto)","MediatR","FluentResults"],"patterns":["CQRS Query","MediatR Request/Response Message"],"domainConcepts":["User","UserProfile"],"keyDetails":"Single-line record type (line 7) implementing IRequest<Result<UserProfileDto>>; no runtime logic here — a simple message/DTO used by a handler elsewhere.","orchestrationMethods":[],"typedContracts":[{"name":"GetUserProfileQuery","kind":"query","line":7,"fieldCount":1,"evidencePaths":["NexusReader.Application/Queries/User/GetUserProfileQuery.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"GetUserProfileQuery","line":7,"summary":"query with 1 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Queries/User/GetUserProfileQuery.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Application/Security/Authorization/ProUserRequirement.cs","purpose":"Defines a marker authorization requirement representing users with an active Pro subscription or sufficient AI tokens for policy-based authorization checks.","classification":{"role":"unknown","layer":"application","confidence":0.65,"evidence":["Namespace NexusReader.Application.Security.Authorization indicates application-layer auth policy code","Implements Microsoft.AspNetCore.Authorization.IAuthorizationRequirement which is used by ASP.NET Core authorization handlers/policies"]},"className":"ProUserRequirement","methods":[],"types":[{"name":"ProUserRequirement","kind":"model","line":8,"purpose":"Marker requirement type used in authorization policies to represent Pro users or users with sufficient AI tokens.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["Microsoft.AspNetCore.Authorization"],"patterns":["Authorization Requirement","Policy-based Authorization"],"domainConcepts":["Pro subscription","AI tokens","Authorization policy"],"keyDetails":"Empty marker class implementing IAuthorizationRequirement (lines 8–10); actual authorization logic is expected in corresponding AuthorizationHandler(s) elsewhere.","orchestrationMethods":[],"typedContracts":[{"name":"ProUserRequirement","kind":"model","line":8,"fieldCount":0,"evidencePaths":["NexusReader.Application/Security/Authorization/ProUserRequirement.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"ProUserRequirement","line":8,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Application/Security/Authorization/ProUserRequirement.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs","purpose":"EF Core migration that adds a QuizResults table with columns, primary key, foreign key to AspNetUsers, and an index; and provides a Down method to drop the table.","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["Contains a Migration-derived class creating/dropping a database table","Namespace NexusReader.Data.Migrations and usage of MigrationBuilder.CreateTable/CreateIndex/DropTable"]},"className":"AddQuizResults","methods":[{"name":"Up","line":12,"endLine":40,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Applies the migration: creates the QuizResults table with columns, primary key, foreign key to AspNetUsers (cascade) and an index on UserId.","calls":[],"actions":[{"id":"create-table_14","kind":"mapping","label":"Creates QuizResults table","line":14,"detail":"migrationBuilder.CreateTable(name: \"QuizResults\", columns: ...) defines columns Id, UserId, Topic, Score, TotalQuestions, CompletedDate","visibility":"detail-only","confidence":0.7},{"id":"column_18","kind":"mapping","label":"Id column","line":18,"detail":"Id: Guid, type uuid, nullable: false","visibility":"detail-only","confidence":0.7},{"id":"column_19","kind":"mapping","label":"UserId column","line":19,"detail":"UserId: string, type text, nullable: false","visibility":"detail-only","confidence":0.7},{"id":"column_20","kind":"mapping","label":"Topic column","line":20,"detail":"Topic: string, type text, nullable: false","visibility":"detail-only","confidence":0.7},{"id":"column_21","kind":"mapping","label":"Score column","line":21,"detail":"Score: int, type integer, nullable: false","visibility":"detail-only","confidence":0.7},{"id":"column_22","kind":"mapping","label":"TotalQuestions column","line":22,"detail":"TotalQuestions: int, type integer, nullable: false","visibility":"detail-only","confidence":0.7},{"id":"column_23","kind":"mapping","label":"CompletedDate column","line":23,"detail":"CompletedDate: DateTime, timestamp without time zone, nullable: false","visibility":"detail-only","confidence":0.7},{"id":"primary-key_27","kind":"mapping","label":"Primary key on Id","line":27,"detail":"table.PrimaryKey(\"PK_QuizResults\", x => x.Id)","visibility":"detail-only","confidence":0.7},{"id":"foreign-key_28","kind":"mapping","label":"FK to AspNetUsers on UserId (cascade)","line":28,"detail":"Foreign key references AspNetUsers(Id) with ReferentialAction.Cascade","visibility":"detail-only","confidence":0.7},{"id":"create-index_36","kind":"mapping","label":"Index on UserId","line":36,"detail":"migrationBuilder.CreateIndex(name: \"IX_QuizResults_UserId\", table: \"QuizResults\", column: \"UserId\")","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":43,"endLine":47,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Reverts the migration by dropping the QuizResults table.","calls":[],"actions":[{"id":"drop-table_45","kind":"mapping","label":"Drops QuizResults table","line":45,"detail":"migrationBuilder.DropTable(name: \"QuizResults\")","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"QuizResults (table)","kind":"entity","line":14,"purpose":"Represents persisted quiz result records for users (table created by the migration).","fields":[{"name":"Id","type":"Guid","required":true,"line":18,"description":"Primary key identifier (uuid)"},{"name":"UserId","type":"string","required":true,"line":19,"description":"FK to AspNetUsers.Id (text), non-null"},{"name":"Topic","type":"string","required":true,"line":20,"description":"Quiz topic"},{"name":"Score","type":"int","required":true,"line":21,"description":"User score for the quiz"},{"name":"TotalQuestions","type":"int","required":true,"line":22,"description":"Total number of questions in the quiz"},{"name":"CompletedDate","type":"DateTime","required":true,"line":23,"description":"Timestamp when the quiz was completed"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration"],"domainConcepts":["QuizResult","User (AspNetUsers)"],"keyDetails":"Adds QuizResults table with non-nullable columns, primary key on Id, foreign key to AspNetUsers.Id with cascade delete, and an index on UserId; Down drops the table.","orchestrationMethods":[],"typedContracts":[{"name":"QuizResults (table)","kind":"entity","line":14,"fieldCount":6,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"QuizResults (table)","line":14,"summary":"entity with 6 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260429080302_AddQuizResults.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs","purpose":"EF Core migration that modifies the Ebooks table to add a nullable LastChapter column and a non-null Progress column with default 0.0; provides Up and Down schema change paths.","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["Class inherits Microsoft.EntityFrameworkCore.Migrations.Migration","Defines Up and Down methods that add/drop columns on the Ebooks table","Located under NexusReader.Data.Migrations namespace"]},"className":"AddEbookProgressAndChapter","methods":[{"name":"Up","line":11,"endLine":26,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Applies schema changes: adds LastChapter (string, nullable, maxLength 255) and Progress (double, non-null, default 0.0) columns to the Ebooks table.","calls":[],"actions":[{"id":"schema-change_13","kind":"mapping","label":"Add LastChapter column","line":13,"detail":"migrationBuilder.AddColumn<string>(name: \"LastChapter\", table: \"Ebooks\", type: \"character varying(255)\", maxLength: 255, nullable: true)","visibility":"detail-only","confidence":0.7},{"id":"schema-change_20","kind":"mapping","label":"Add Progress column","line":20,"detail":"migrationBuilder.AddColumn<double>(name: \"Progress\", table: \"Ebooks\", type: \"double precision\", nullable: false, defaultValue: 0.0)","visibility":"detail-only","confidence":0.7},{"id":"return_26","kind":"return","label":"Complete migration Up","line":26,"detail":"Method exits after applying AddColumn calls","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":29,"endLine":38,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Reverts the Up migration: drops LastChapter and Progress columns from the Ebooks table.","calls":[],"actions":[{"id":"schema-change_31","kind":"mapping","label":"Drop LastChapter column","line":31,"detail":"migrationBuilder.DropColumn(name: \"LastChapter\", table: \"Ebooks\")","visibility":"detail-only","confidence":0.7},{"id":"schema-change_35","kind":"mapping","label":"Drop Progress column","line":35,"detail":"migrationBuilder.DropColumn(name: \"Progress\", table: \"Ebooks\")","visibility":"detail-only","confidence":0.7},{"id":"return_38","kind":"return","label":"Complete migration Down","line":38,"detail":"Method exits after DropColumn calls","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"AddEbookProgressAndChapter","kind":"model","line":8,"purpose":"Represents an EF Core migration that alters the Ebooks table to track last-read chapter and reading progress.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration","Database Migration"],"domainConcepts":["Ebook","Chapter","Progress"],"keyDetails":"Adds LastChapter (varchar(255), nullable) and Progress (double, not nullable, default 0.0) to Ebooks; provides Down to remove them.","orchestrationMethods":[],"typedContracts":[{"name":"AddEbookProgressAndChapter","kind":"model","line":8,"fieldCount":0,"evidencePaths":["NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AddEbookProgressAndChapter","line":8,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260510161155_AddEbookProgressAndChapter.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs","purpose":"EF Core migration that adds a new non-nullable integer column LastChapterIndex (default 0) to the Ebooks table and provides the reverse operation.","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["Class derives from Microsoft.EntityFrameworkCore.Migrations.Migration","Implements Up and Down methods that modify the database schema (AddColumn / DropColumn on Ebooks)"]},"className":"AddEbookLastChapterIndex","methods":[{"name":"Up","line":11,"endLine":19,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Apply the migration: add LastChapterIndex integer column to the Ebooks table with default 0 and non-nullable constraint.","calls":[],"actions":[{"id":"schema-change_13","kind":"mapping","label":"AddColumn LastChapterIndex to Ebooks","line":13,"detail":"migrationBuilder.AddColumn<int>(name: \"LastChapterIndex\", table: \"Ebooks\", type: \"integer\", nullable: false, defaultValue: 0)","visibility":"detail-only","confidence":0.7},{"id":"persistence-migration_13","kind":"mapping","label":"Writes schema change to migration history when applied","line":13,"detail":"Adds a non-null integer column with default value to existing table","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":22,"endLine":26,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Revert the migration: remove the LastChapterIndex column from the Ebooks table.","calls":[],"actions":[{"id":"schema-change_24","kind":"mapping","label":"DropColumn LastChapterIndex from Ebooks","line":24,"detail":"migrationBuilder.DropColumn(name: \"LastChapterIndex\", table: \"Ebooks\")","visibility":"detail-only","confidence":0.7},{"id":"persistence-migration_24","kind":"mapping","label":"Removes schema change from database","line":24,"detail":"Drops the column added in Up","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"AddEbookLastChapterIndex","kind":"model","line":8,"purpose":"EF Core migration class that encapsulates the schema change to add LastChapterIndex to Ebooks.","fields":[{"name":"Up(migrationBuilder)","type":"method","required":true,"line":11,"description":"Applies schema change (adds column)"},{"name":"Down(migrationBuilder)","type":"method","required":true,"line":22,"description":"Reverts schema change (drops column)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Migration"],"domainConcepts":["Ebook","Chapter index"],"keyDetails":"Adds a non-nullable integer column LastChapterIndex (default 0) to the Ebooks table; Down removes it. File is a standard EF Core migration with no branching, loops, retries, or external project method calls.","orchestrationMethods":[],"typedContracts":[{"name":"AddEbookLastChapterIndex","kind":"model","line":8,"fieldCount":2,"evidencePaths":["NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AddEbookLastChapterIndex","line":8,"summary":"model with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Migrations/20260510171941_AddEbookLastChapterIndex.cs"]}]}
|
||||||
Vendored
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/NexusReader.Data.csproj","purpose":"Defines the Data project build configuration and NuGet/Project dependencies for the NexusReader data layer (Entity Framework Core persistence, DB providers, and vector support).","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["References EF Core and provider packages (Microsoft.EntityFrameworkCore, Sqlite, Npgsql) at lines 11-13","Includes Pgvector.EntityFrameworkCore for vector storage at line 21","ProjectReference to NexusReader.Domain indicates this is the persistence/data implementation at line 25"]},"className":"","methods":[],"types":[],"serviceRegistrations":[],"startupActions":[],"dependencies":["Package: Microsoft.AspNetCore.Identity.EntityFrameworkCore (line 10)","Package: Microsoft.EntityFrameworkCore (line 11)","Package: Microsoft.EntityFrameworkCore.Sqlite (line 12)","Package: Npgsql.EntityFrameworkCore.PostgreSQL (line 13)","Package: Microsoft.Extensions.Configuration.FileExtensions (line 14)","Package: Microsoft.Extensions.Configuration.Json (line 15)","Package: Microsoft.Extensions.Configuration.EnvironmentVariables (line 16)","Package: Microsoft.EntityFrameworkCore.Design (line 17)","Package: Pgvector.EntityFrameworkCore (line 21)","Project: ../NexusReader.Domain/NexusReader.Domain.csproj (line 25)"],"patterns":["EF Core (ORM)","Repository/Repository-like data layer","Provider-based DB configuration (SQLite, PostgreSQL)"],"domainConcepts":["Persistence","Database providers (SQLite, PostgreSQL)","Vector embeddings storage (pgvector)","Configuration (JSON/env file support)"],"keyDetails":"TargetFramework net10.0, Nullable enabled, ImplicitUsings enabled. EF Core design package included with PrivateAssets=all (dev-time tooling). Supports SQLite and Postgres providers and Pgvector for vector data; references Domain project for domain types.","orchestrationMethods":[],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[]}
|
||||||
+1
File diff suppressed because one or more lines are too long
Vendored
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs","purpose":"EF Core migration that adds a boolean IsReadyForReading column to the Ebooks table (and removes it on rollback).","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["Namespace: NexusReader.Data.Persistence.Migrations","Class derives from Microsoft.EntityFrameworkCore.Migrations.Migration","Calls migrationBuilder.AddColumn / DropColumn to change DB schema"]},"className":"AddEbookReadyFlag","methods":[{"name":"Up","line":11,"endLine":19,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Applies the migration by adding the IsReadyForReading boolean column (default false) to the Ebooks table.","calls":[{"targetFile":"unknown","targetMethod":"migrationBuilder.AddColumn","callLine":13,"paramSummary":"name: \"IsReadyForReading\", table: \"Ebooks\", type: \"boolean\", nullable: false, defaultValue: false"}],"actions":[{"id":"migration-step_11","kind":"mapping","label":"Up migration","line":11,"detail":"Defines the forward/upgrade migration step","visibility":"detail-only","confidence":0.7},{"id":"schema-change_13","kind":"mapping","label":"Add column","line":13,"detail":"migrationBuilder.AddColumn<bool>(name: \"IsReadyForReading\", table: \"Ebooks\", type: \"boolean\", nullable: false, defaultValue: false)","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":22,"endLine":26,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Reverts the migration by removing the IsReadyForReading column from the Ebooks table.","calls":[{"targetFile":"unknown","targetMethod":"migrationBuilder.DropColumn","callLine":24,"paramSummary":"name: \"IsReadyForReading\", table: \"Ebooks\""}],"actions":[{"id":"migration-step_22","kind":"mapping","label":"Down migration","line":22,"detail":"Defines the rollback/downgrade migration step","visibility":"detail-only","confidence":0.7},{"id":"schema-change_24","kind":"mapping","label":"Drop column","line":24,"detail":"migrationBuilder.DropColumn(name: \"IsReadyForReading\", table: \"Ebooks\")","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"AddEbookReadyFlag","kind":"model","line":8,"purpose":"EF Core migration class that encapsulates schema changes to add/remove the IsReadyForReading column for Ebooks.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration"],"domainConcepts":["Ebook"],"keyDetails":"Adds a non-nullable boolean column IsReadyForReading to the Ebooks table with default false; Down removes that column.","orchestrationMethods":[],"typedContracts":[{"name":"AddEbookReadyFlag","kind":"model","line":8,"fieldCount":0,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AddEbookReadyFlag","line":8,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513181743_AddEbookReadyFlag.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs","purpose":"EF Core migration that replaces a string SourceId on KnowledgeUnits with a Guid EbookId, adds an index and foreign key to Ebooks (cascade delete); provides Up and Down schema transitions.","classification":{"role":"database-config","layer":"data","confidence":0.9,"evidence":["Class derives from Migration (line 9)","Uses MigrationBuilder to alter KnowledgeUnits table: AddColumn, DropColumn, CreateIndex, AddForeignKey (lines 14-40, 46-69)"]},"className":"FixKnowledgeUnitEbookId","methods":[{"name":"Up","line":12,"endLine":41,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Apply schema changes: remove SourceId (string) and its index from KnowledgeUnits, add non-nullable EbookId (Guid) with default Guid.Zero, create index on EbookId and add FK to Ebooks.Id with cascade delete.","calls":[],"actions":[{"id":"drop-index_14","kind":"mapping","label":"Drop IX_KnowledgeUnits_SourceId index","line":14,"detail":"migrationBuilder.DropIndex(name: \"IX_KnowledgeUnits_SourceId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"drop-column_18","kind":"mapping","label":"Drop SourceId column","line":18,"detail":"migrationBuilder.DropColumn(name: \"SourceId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"add-column_22","kind":"mapping","label":"Add EbookId column (Guid, non-nullable, default Guid.Empty)","line":22,"detail":"migrationBuilder.AddColumn<Guid>(name: \"EbookId\", table: \"KnowledgeUnits\", type: \"uuid\", nullable: false, defaultValue: Guid.Empty)","visibility":"detail-only","confidence":0.7},{"id":"create-index_29","kind":"mapping","label":"Create IX_KnowledgeUnits_EbookId index","line":29,"detail":"migrationBuilder.CreateIndex(name: \"IX_KnowledgeUnits_EbookId\", table: \"KnowledgeUnits\", column: \"EbookId\")","visibility":"detail-only","confidence":0.7},{"id":"add-foreign-key_34","kind":"mapping","label":"Add FK from KnowledgeUnits.EbookId -> Ebooks.Id with cascade delete","line":34,"detail":"migrationBuilder.AddForeignKey(name: \"FK_KnowledgeUnits_Ebooks_EbookId\", table: \"KnowledgeUnits\", column: \"EbookId\", principalTable: \"Ebooks\", principalColumn: \"Id\", onDelete: ReferentialAction.Cascade)","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":44,"endLine":70,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Revert schema changes: remove foreign key, index and EbookId column; re-add SourceId (string) with max length 128 and its index.","calls":[],"actions":[{"id":"drop-foreign-key_46","kind":"mapping","label":"Drop FK_KnowledgeUnits_Ebooks_EbookId","line":46,"detail":"migrationBuilder.DropForeignKey(name: \"FK_KnowledgeUnits_Ebooks_EbookId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"drop-index_50","kind":"mapping","label":"Drop IX_KnowledgeUnits_EbookId index","line":50,"detail":"migrationBuilder.DropIndex(name: \"IX_KnowledgeUnits_EbookId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"drop-column_54","kind":"mapping","label":"Drop EbookId column","line":54,"detail":"migrationBuilder.DropColumn(name: \"EbookId\", table: \"KnowledgeUnits\")","visibility":"detail-only","confidence":0.7},{"id":"add-column_58","kind":"mapping","label":"Re-add SourceId column (string, maxLength 128, non-nullable, default \"\")","line":58,"detail":"migrationBuilder.AddColumn<string>(name: \"SourceId\", table: \"KnowledgeUnits\", type: \"character varying(128)\", maxLength: 128, nullable: false, defaultValue: \"\")","visibility":"detail-only","confidence":0.7},{"id":"create-index_66","kind":"mapping","label":"Re-create IX_KnowledgeUnits_SourceId index","line":66,"detail":"migrationBuilder.CreateIndex(name: \"IX_KnowledgeUnits_SourceId\", table: \"KnowledgeUnits\", column: \"SourceId\")","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"FixKnowledgeUnitEbookId","kind":"model","line":9,"purpose":"EF Core Migration class that applies/reverts the KnowledgeUnits EbookId/SourceId schema changes.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration"],"domainConcepts":["KnowledgeUnit","Ebook"],"keyDetails":"Up adds non-nullable EbookId Guid with default Guid.Empty and cascade delete FK to Ebooks.Id; Down restores SourceId as non-nullable string(128).","orchestrationMethods":[],"typedContracts":[{"name":"FixKnowledgeUnitEbookId","kind":"model","line":9,"fieldCount":0,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"FixKnowledgeUnitEbookId","line":9,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513183726_FixKnowledgeUnitEbookId.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs","purpose":"EF Core code-first migration that changes the KnowledgeUnits.EbookId column to be nullable (and provides a Down method to revert the change).","classification":{"role":"database-config","layer":"data","confidence":0.88,"evidence":["class inherits from Microsoft.EntityFrameworkCore.Migrations.Migration","namespace NexusReader.Data.Persistence.Migrations and methods Up/Down altering DB column"]},"className":"MakeKnowledgeUnitEbookIdNullable","methods":[{"name":"Up","line":12,"endLine":21,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Applies the migration: alters the KnowledgeUnits.EbookId column to be nullable (type uuid).","calls":[],"actions":[{"id":"override_12","kind":"mapping","label":"EF Migration override","line":12,"detail":"protected override void Up(MigrationBuilder migrationBuilder) - runtime entry for applying migration","visibility":"detail-only","confidence":0.7},{"id":"schema-change_14","kind":"mapping","label":"AlterColumn to make EbookId nullable","line":14,"detail":"migrationBuilder.AlterColumn<Guid>(name: \"EbookId\", table: \"KnowledgeUnits\", type: \"uuid\", nullable: true, oldClrType: typeof(Guid), oldType: \"uuid\");","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":24,"endLine":35,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Reverts the migration: alters the KnowledgeUnits.EbookId column to be non-nullable and sets a default zero GUID.","calls":[],"actions":[{"id":"override_24","kind":"mapping","label":"EF Migration override","line":24,"detail":"protected override void Down(MigrationBuilder migrationBuilder) - runtime entry for reverting migration","visibility":"detail-only","confidence":0.7},{"id":"schema-change_26","kind":"mapping","label":"AlterColumn to make EbookId non-nullable with default","line":26,"detail":"migrationBuilder.AlterColumn<Guid>(name: \"EbookId\", table: \"KnowledgeUnits\", type: \"uuid\", nullable: false, defaultValue: new Guid(\"00000000-0000-0000-0000-000000000000\"), oldClrType: typeof(Guid), oldType: \"uuid\", oldNullable: true);","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"MakeKnowledgeUnitEbookIdNullable","kind":"model","line":9,"purpose":"EF Core migration class that toggles nullability of KnowledgeUnits.EbookId.","fields":[{"name":"Up","type":"method","required":true,"line":12,"description":"Applies the migration to alter the column to nullable."},{"name":"Down","type":"method","required":true,"line":24,"description":"Reverts the migration, making the column non-nullable and adding a default GUID."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration","Schema Migration"],"domainConcepts":["KnowledgeUnit","Ebook","EbookId"],"keyDetails":"The Up method makes KnowledgeUnits.EbookId nullable (uuid); the Down method restores non-nullable with a zero GUID default. File is strictly a data-layer DB migration with no external calls beyond EF MigrationBuilder.","orchestrationMethods":[],"typedContracts":[{"name":"MakeKnowledgeUnitEbookIdNullable","kind":"model","line":9,"fieldCount":2,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"MakeKnowledgeUnitEbookIdNullable","line":9,"summary":"model with 2 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260513185108_MakeKnowledgeUnitEbookIdNullable.cs"]}]}
|
||||||
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs","purpose":"EF Core migration that adds a nullable text Description column to the Ebooks table and provides a down migration to remove it.","classification":{"role":"database-config","layer":"data","confidence":0.8,"evidence":["Class inherits Microsoft.EntityFrameworkCore.Migrations.Migration","Namespace NexusReader.Data.Persistence.Migrations","Defines Up and Down methods that alter the database schema (AddColumn/DropColumn)"]},"className":"AddDescriptionToEbook","methods":[{"name":"Up","line":11,"endLine":18,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Apply the migration by adding a nullable text 'Description' column to the 'Ebooks' table.","calls":[],"actions":[{"id":"schema-change_13","kind":"mapping","label":"AddColumn Description on Ebooks","line":13,"detail":"migrationBuilder.AddColumn<string>(name: \"Description\", table: \"Ebooks\", type: \"text\", nullable: true)","visibility":"detail-only","confidence":0.7}]},{"name":"Down","line":21,"endLine":26,"signature":"(migrationBuilder: MigrationBuilder) -> void","purpose":"Revert the migration by dropping the 'Description' column from the 'Ebooks' table.","calls":[],"actions":[{"id":"schema-change_23","kind":"mapping","label":"DropColumn Description from Ebooks","line":23,"detail":"migrationBuilder.DropColumn(name: \"Description\", table: \"Ebooks\")","visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"AddDescriptionToEbook","kind":"model","line":8,"purpose":"Represents an EF Core migration that adds/removes the Description column on the Ebooks table.","fields":[]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["EF Core Migration"],"domainConcepts":["Ebook","Ebooks table","Description column"],"keyDetails":"This migration adds a nullable text column 'Description' to the 'Ebooks' table (Up) and removes it on rollback (Down).","orchestrationMethods":[],"typedContracts":[{"name":"AddDescriptionToEbook","kind":"model","line":8,"fieldCount":0,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"AddDescriptionToEbook","line":8,"summary":"model with 0 fields.","confidence":0.8,"evidencePaths":["NexusReader.Data/Persistence/Migrations/20260514184243_AddDescriptionToEbook.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/Author.cs","purpose":"Domain entity representing an Author in the NexusReader domain model; declares identity, display name and a navigation collection of related Ebook entities for ORM mapping.","classification":{"role":"entity","layer":"domain","confidence":0.95,"evidence":["Domain/entity pattern","Domain path heuristic","Namespace NexusReader.Domain.Entities","Class Author with data-annotation attributes [Key], [Required], [MaxLength] and a virtual navigation ICollection<Ebook>"]},"className":"Author","methods":[],"types":[{"name":"Author","kind":"entity","line":5,"purpose":"Represents an author record with identity, name and related ebooks for persistence via an ORM (EF Core).","fields":[{"name":"Id","type":"int","required":true,"line":8,"description":"Primary key; annotated with [Key]"},{"name":"Name","type":"string","required":true,"line":12,"description":"Author display name; annotated with [Required] and [MaxLength(255)], initialized to empty string"},{"name":"Ebooks","type":"ICollection<Ebook>","required":true,"line":14,"description":"Virtual navigation collection of related Ebook entities; initialized to new List<Ebook>() (ORM relationship)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain/Entities/Ebook.cs"],"patterns":["Entity","ORM (EF Core) navigation property"],"domainConcepts":["Author","Ebook"],"keyDetails":"Uses System.ComponentModel.DataAnnotations for schema constraints; navigation property is virtual and initialized, indicating intended EF Core usage (lazy/proxy or relationship mapping).","orchestrationMethods":[],"typedContracts":[{"name":"Author","kind":"entity","line":5,"fieldCount":3,"evidencePaths":["NexusReader.Domain/Entities/Author.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"Author","line":5,"summary":"entity with 3 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/Author.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/Ebook.cs","purpose":"Defines the domain entity Ebook with storage/ORM mapping, metadata, navigation properties (Author, NexusUser), and fields used for reading/progress and AI ingestion readiness.","classification":{"role":"entity","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","Domain path heuristic","namespace NexusReader.Domain.Entities; (line 4)","Entity class Ebook with data annotations like [Key], [Required], [ForeignKey] (lines 11, 14, 21, 24, 29, 53, 56)","Contains domain properties and navigation properties Author and NexusUser (lines 21-22, 56-57)"]},"className":"Ebook","methods":[],"types":[{"name":"Ebook","kind":"entity","line":9,"purpose":"Represents an e-book owned/uploaded by a user including metadata, storage info, reading progress and AI ingestion state.","fields":[{"name":"Id","type":"Guid","required":true,"line":11,"description":"Primary key; initialized to a new Guid"},{"name":"Title","type":"string","required":true,"line":14,"description":"Book title; max length 255"},{"name":"AuthorId","type":"int","required":true,"line":18,"description":"Foreign key to Author"},{"name":"Author","type":"Author (navigation)","required":true,"line":21,"description":"Navigation property to Author (ForeignKey(nameof(AuthorId)))"},{"name":"FilePath","type":"string","required":true,"line":24,"description":"Path to stored ebook file"},{"name":"CoverUrl","type":"string?","required":false,"line":27,"description":"Optional cover image URL"},{"name":"TenantId","type":"string","required":true,"line":29,"description":"Tenant identifier (multi-tenant); max length 128; defaults to \"global\""},{"name":"AddedDate","type":"DateTime","required":true,"line":33,"description":"Creation/added timestamp; defaults to DateTime.UtcNow"},{"name":"LastReadDate","type":"DateTime?","required":false,"line":35,"description":"Nullable timestamp for last time read"},{"name":"Progress","type":"double","required":true,"line":37,"description":"Reading progress percentage (0..100); defaults to 0"},{"name":"LastChapter","type":"string?","required":false,"line":39,"description":"Optional last chapter title; max length 255"},{"name":"LastChapterIndex","type":"int","required":true,"line":42,"description":"Index of last read chapter; defaults to 0"},{"name":"Description","type":"string?","required":false,"line":44,"description":"Optional description or synopsis"},{"name":"IsReadyForReading","type":"bool","required":true,"line":50,"description":"Flag indicating AI ingestion/processing completed and knowledge units are available"},{"name":"UserId","type":"string","required":true,"line":53,"description":"Owner user id (required)"},{"name":"User","type":"NexusUser? (navigation)","required":false,"line":56,"description":"Optional navigation to NexusUser (ForeignKey(nameof(UserId)))"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain.Entities.Author","NexusReader.Domain.Entities.NexusUser"],"patterns":["ORM Entity","Repository (consumer)"],"domainConcepts":["Ebook","Author","NexusUser","Tenant","AI ingestion / Knowledge Units"],"keyDetails":"Entity includes multi-tenant TenantId defaulting to 'global', navigation properties for Author and NexusUser, and an IsReadyForReading flag indicating AI processing state used by ingestion/reading flows.","orchestrationMethods":[],"typedContracts":[{"name":"Ebook","kind":"entity","line":9,"fieldCount":16,"evidencePaths":["NexusReader.Domain/Entities/Ebook.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"Ebook","line":9,"summary":"entity with 16 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/Ebook.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/KnowledgeUnit.cs","purpose":"Defines the domain entity KnowledgeUnit which models a piece of knowledge (content, type, provenance) and its relationships for persistence (EF Core) within the Domain project.","classification":{"role":"entity","layer":"domain","confidence":0.95,"evidence":["Domain/entity pattern","Domain path heuristic","Namespace NexusReader.Domain.Entities","Class named KnowledgeUnit with [Key], [Required], [ForeignKey] attributes and navigation properties"]},"className":"KnowledgeUnit","methods":[],"types":[{"name":"KnowledgeUnit","kind":"entity","line":7,"purpose":"Represents a persisted unit of knowledge (content, type, version, tenant scoping) and links to other knowledge units.","fields":[{"name":"Id","type":"string","required":true,"line":9,"description":"Primary key (hash of Source+Content+Version), max length 128"},{"name":"EbookId","type":"Guid?","required":false,"line":13,"description":"Optional FK to an Ebook"},{"name":"Ebook","type":"Ebook?","required":false,"line":15,"description":"Navigation property to Ebook (ForeignKey on EbookId)"},{"name":"Version","type":"string","required":true,"line":18,"description":"Unit version, required, max length 50, default '1.0'"},{"name":"Type","type":"KnowledgeUnitType","required":true,"line":22,"description":"Domain enum indicating the unit type (from NexusReader.Domain.Enums)"},{"name":"Content","type":"string","required":true,"line":25,"description":"The textual content of the knowledge unit"},{"name":"MetadataJson","type":"string?","required":false,"line":28,"description":"Optional JSON string with metadata (e.g., page, path)"},{"name":"TenantId","type":"string","required":true,"line":30,"description":"Tenant scoping identifier, required, max length 128"},{"name":"CreatedAt","type":"DateTime","required":true,"line":34,"description":"Timestamp when the unit was created, defaulted to DateTime.UtcNow"},{"name":"OutgoingLinks","type":"ICollection<KnowledgeUnitLink>","required":true,"line":37,"description":"Navigation collection of outgoing links to other KnowledgeUnit instances"},{"name":"IncomingLinks","type":"ICollection<KnowledgeUnitLink>","required":true,"line":38,"description":"Navigation collection of incoming links from other KnowledgeUnit instances"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain/Enums (KnowledgeUnitType)","NexusReader.Domain/Entities/Ebook.cs","NexusReader.Domain/Entities/KnowledgeUnitLink.cs"],"patterns":["Entity","EF Core (Data Annotations)","Aggregate / Graph node (links to other units)"],"domainConcepts":["KnowledgeUnit","Ebook","KnowledgeUnitLink","Tenant scoping"],"keyDetails":"Primary-key is a derived hash (Source+Content+Version). The entity is EF Core oriented (DataAnnotations), includes tenant scoping, versioning, metadata JSON, created timestamp, and bidirectional link collections to model a graph of knowledge units.","orchestrationMethods":[],"typedContracts":[{"name":"KnowledgeUnit","kind":"entity","line":7,"fieldCount":11,"evidencePaths":["NexusReader.Domain/Entities/KnowledgeUnit.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"KnowledgeUnit","line":7,"summary":"entity with 11 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/KnowledgeUnit.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/KnowledgeUnitLink.cs","purpose":"Defines the domain entity KnowledgeUnitLink which models a directed link between two KnowledgeUnit entities with metadata (relation type) and EF Core data annotations for persistence.","classification":{"role":"entity","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","Domain path heuristic","namespace NexusReader.Domain.Entities (line 4)","DataAnnotations attributes ([Key], [Required], [MaxLength], [ForeignKey]) applied to properties","Class models relationships to KnowledgeUnit (SourceUnit, TargetUnit) via foreign keys"]},"className":"KnowledgeUnitLink","methods":[],"types":[{"name":"KnowledgeUnitLink","kind":"entity","line":6,"purpose":"Represents a directed relationship/link between two KnowledgeUnit entities with a typed relation label and persistence annotations.","fields":[{"name":"Id","type":"int","required":true,"line":9,"description":"Primary key for the link (annotated with [Key])."},{"name":"SourceUnitId","type":"string","required":true,"line":13,"description":"FK string identifier of the source KnowledgeUnit; [Required], [MaxLength(128)], defaults to empty string."},{"name":"TargetUnitId","type":"string","required":true,"line":17,"description":"FK string identifier of the target KnowledgeUnit; [Required], [MaxLength(128)], defaults to empty string."},{"name":"RelationType","type":"string","required":true,"line":21,"description":"Label describing the relation (e.g., \"Next\", \"Defines\", \"Contains\"); [Required], [MaxLength(50)], default \"References\"."},{"name":"SourceUnit","type":"KnowledgeUnit","required":true,"line":24,"description":"Navigation property to the source KnowledgeUnit; annotated with [ForeignKey(nameof(SourceUnitId))]."},{"name":"TargetUnit","type":"KnowledgeUnit","required":true,"line":27,"description":"Navigation property to the target KnowledgeUnit; annotated with [ForeignKey(nameof(TargetUnitId))]."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain/Entities/KnowledgeUnit.cs"],"patterns":["Entity","EF Core Data Annotations","Foreign Key Relationship"],"domainConcepts":["KnowledgeUnit","KnowledgeUnitLink","RelationType"],"keyDetails":"Simple EF Core entity with primary key (Id), two string FK identifiers (SourceUnitId, TargetUnitId) with max lengths, a RelationType with default \"References\", and navigation properties annotated with [ForeignKey] to link to KnowledgeUnit entities.","orchestrationMethods":[],"typedContracts":[{"name":"KnowledgeUnitLink","kind":"entity","line":6,"fieldCount":6,"evidencePaths":["NexusReader.Domain/Entities/KnowledgeUnitLink.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"KnowledgeUnitLink","line":6,"summary":"entity with 6 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/KnowledgeUnitLink.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/NexusUser.cs","purpose":"Domain entity representing an application user, extending IdentityUser with tenancy, subscription, AI quota, reading state and navigation to related domain objects.","classification":{"role":"entity","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","Domain path heuristic","namespace NexusReader.Domain.Entities","public class NexusUser : IdentityUser","Contains navigation properties (SubscriptionPlan, Ebooks, QuizResults) and domain-specific fields (TenantId, SubscriptionPlanId, AITokenLimit)"]},"className":"NexusUser","methods":[],"types":[{"name":"NexusUser","kind":"entity","line":7,"purpose":"Represents a user in the domain with identity integration, tenant-scoping, subscription and AI quota accounting, and reading-related state.","fields":[{"name":"DisplayName","type":"string?","required":false,"line":13,"description":"User's display name or full name (MaxLength 100)."},{"name":"AITokenLimit","type":"int","required":true,"line":18,"description":"Total AI tokens available for the user (depends on subscription)."},{"name":"AITokensUsed","type":"int","required":true,"line":23,"description":"AI tokens consumed by the user in the current billing period."},{"name":"LastAiActionDate","type":"DateTime?","required":false,"line":28,"description":"Date when the user last performed an AI-related action."},{"name":"TenantId","type":"string","required":true,"line":35,"description":"Multi-tenant identifier (Required, MaxLength 128), defaults to \"global\"."},{"name":"SubscriptionPlanId","type":"int","required":true,"line":41,"description":"Foreign key for the current subscription plan (Required)."},{"name":"SubscriptionPlan","type":"SubscriptionPlan?","required":false,"line":46,"description":"Navigation property for the current subscription plan."},{"name":"Ebooks","type":"ICollection<Ebook>","required":true,"line":51,"description":"Collection of e-books owned by the user; initialized to an empty list."},{"name":"QuizResults","type":"ICollection<QuizResult>","required":true,"line":56,"description":"Collection of quiz results completed by the user; initialized to an empty list."},{"name":"LastReadPageId","type":"string?","required":false,"line":62,"description":"ID of the last page read by the user (MaxLength 255)."},{"name":"LastReadAt","type":"DateTime?","required":false,"line":67,"description":"Last read timestamp."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain/Entities/SubscriptionPlan.cs","NexusReader.Domain/Entities/Ebook.cs","NexusReader.Domain/Entities/QuizResult.cs","Microsoft.AspNetCore.Identity (framework)"],"patterns":["Entity","IdentityUser-extension","ORM-navigation-properties"],"domainConcepts":["User","Tenant","SubscriptionPlan","AITokens","Ebook","QuizResult","ReadingState"],"keyDetails":"Lightweight domain entity that augments ASP.NET Identity user with tenancy, subscription linkage, AI quota tracking and reading-state navigation; no runtime methods in this file.","orchestrationMethods":[],"typedContracts":[{"name":"NexusUser","kind":"entity","line":7,"fieldCount":11,"evidencePaths":["NexusReader.Domain/Entities/NexusUser.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"NexusUser","line":7,"summary":"entity with 11 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/NexusUser.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/QuizResult.cs","purpose":"Defines the domain entity that records a user's result for an AI-generated quiz, including metadata (user, tenant, topic), score, computed percentage, and completion timestamp.","classification":{"role":"entity","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","Domain path heuristic","Namespace: NexusReader.Domain.Entities","Class uses [Key], [Required], [ForeignKey] attributes (EF Core/ORM metadata)","Represents a persistent model (Id, foreign key to NexusUser)"]},"className":"QuizResult","methods":[{"name":"implicit constructor","line":9,"endLine":34,"signature":"() -> QuizResult","purpose":"Initializes instance-level default values for properties when a new QuizResult is created.","calls":[],"actions":[{"id":"metadata_11","kind":"mapping","label":"EF Core attributes applied","line":11,"detail":"Attributes such as [Key], [Required], [MaxLength], [ForeignKey] are present on properties and used by ORM","visibility":"detail-only","confidence":0.7},{"id":"init_12","kind":"mapping","label":"Set Id to new Guid","line":12,"detail":"Id property initialized to Guid.NewGuid() at declaration","visibility":"detail-only","confidence":0.7},{"id":"init_15","kind":"mapping","label":"Set UserId default","line":15,"detail":"UserId initialized to empty string","visibility":"detail-only","confidence":0.7},{"id":"init_22","kind":"mapping","label":"Set TenantId default","line":22,"detail":"TenantId initialized to \"global\"","visibility":"detail-only","confidence":0.7},{"id":"init_25","kind":"mapping","label":"Set Topic default","line":25,"detail":"Topic initialized to empty string","visibility":"detail-only","confidence":0.7},{"id":"init_33","kind":"mapping","label":"Set CompletedDate to UTC now","line":33,"detail":"CompletedDate initialized to DateTime.UtcNow at declaration","visibility":"detail-only","confidence":0.7}]},{"name":"Percentage (getter)","line":31,"endLine":31,"signature":"() -> double","purpose":"Computes the quiz score percentage as Score/TotalQuestions*100, guarding against division by zero.","calls":[],"actions":[{"id":"guard-clause_31","kind":"guard-clause","label":"Avoid divide-by-zero","line":31,"detail":"If TotalQuestions > 0 returns (double)Score/TotalQuestions*100, else returns 0","conditionSummary":"TotalQuestions > 0","outcomeLabels":["return computed percentage","return 0"],"visibility":"detail-only","confidence":0.7}]}],"types":[{"name":"QuizResult","kind":"entity","line":9,"purpose":"Represents a persisted quiz result for a user including score, topic, tenant, and completion timestamp.","fields":[{"name":"Id","type":"Guid","required":true,"line":12,"description":"Primary key; initialized to a new Guid by default; decorated with [Key]."},{"name":"UserId","type":"string","required":true,"line":15,"description":"FK string id of the user who took the quiz; decorated with [Required]."},{"name":"User","type":"NexusUser?","required":false,"line":18,"description":"Navigation property to the NexusUser entity; marked with [ForeignKey(nameof(UserId))]."},{"name":"TenantId","type":"string","required":true,"line":22,"description":"Tenant identifier with [Required] and [MaxLength(128)], defaulting to \"global\"."},{"name":"Topic","type":"string","required":true,"line":25,"description":"Topic or subject of the quiz; [Required], default empty string."},{"name":"Score","type":"int","required":false,"line":27,"description":"Number of correct answers."},{"name":"TotalQuestions","type":"int","required":false,"line":29,"description":"Total number of questions in the quiz used to compute Percentage."},{"name":"Percentage","type":"double","required":false,"line":31,"description":"Computed read-only property returning (Score/TotalQuestions)*100 with divide-by-zero guard."},{"name":"CompletedDate","type":"DateTime","required":false,"line":33,"description":"When the quiz was completed; defaulted to DateTime.UtcNow."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain/Entities/NexusUser.cs"],"patterns":["Entity","EF Core (ORM)","Computed Property"],"domainConcepts":["QuizResult","User","Tenant","Topic","Score/Percentage"],"keyDetails":"Small EF Core entity with declarative attributes, default initializers (Id->Guid.NewGuid, CompletedDate->UtcNow), and a computed Percentage getter that guards against division by zero.","orchestrationMethods":[],"typedContracts":[{"name":"QuizResult","kind":"entity","line":9,"fieldCount":9,"evidencePaths":["NexusReader.Domain/Entities/QuizResult.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"QuizResult","line":9,"summary":"entity with 9 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/QuizResult.cs"]}]}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/SemanticKnowledgeCache.cs","purpose":"Defines a domain entity that caches semantic extraction results (JSON payload, original text, model/prompt metadata) and stores an optional vector embedding for semantic search.","classification":{"role":"entity","layer":"domain","confidence":0.8,"evidence":["Domain/entity pattern","Domain path heuristic","Namespace NexusReader.Domain.Entities and folder path Entities","Class is a POCO with data annotations ([Key], [Required], [MaxLength]) used by an ORM","Uses Pgvector.Vector for embeddings (persistence of vector data)"]},"className":"SemanticKnowledgeCache","methods":[],"types":[{"name":"SemanticKnowledgeCache","kind":"entity","line":7,"purpose":"Represents a persisted cache entry for semantic knowledge including raw text, JSON result, model/prompt metadata, tenant scoping, and an optional vector embedding for semantic search.","fields":[{"name":"ContentHash","type":"string","required":true,"line":11,"description":"Primary key: hash of the content used as unique identifier (MaxLength 128)."},{"name":"JsonData","type":"string","required":true,"line":14,"description":"Serialized JSON result of the semantic extraction or analysis."},{"name":"OriginalText","type":"string","required":true,"line":17,"description":"Original source text used to produce the JSONData / embedding."},{"name":"ModelId","type":"string","required":true,"line":21,"description":"Identifier of the model used to generate the semantic data (MaxLength 50). Defaults to 'gemini-1.5-flash'."},{"name":"PromptVersion","type":"string","required":true,"line":25,"description":"Version of the prompt used for generation (MaxLength 10). Defaults to '1.0'."},{"name":"TenantId","type":"string","required":true,"line":29,"description":"Tenant or scope identifier for multi-tenant isolation (MaxLength 128)."},{"name":"Embedding","type":"Pgvector.Vector?","required":false,"line":32,"description":"Optional vector embedding used for semantic search (comment: 768 dimensions)."},{"name":"CreatedAt","type":"DateTime","required":true,"line":34,"description":"UTC timestamp when the cache entry was created; defaulted to DateTime.UtcNow."}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":["NexusReader.Domain/Entities/SemanticKnowledgeCache.cs","Pgvector (NuGet package)","System.ComponentModel.DataAnnotations (for [Key],[Required],[MaxLength])"],"patterns":["ORM Entity","Repository (implied)","Vector embedding cache"],"domainConcepts":["Semantic cache","Embedding","Tenant scoping","Model and prompt versioning","Content hashing (cache key)"],"keyDetails":"Primary key is ContentHash (MaxLength 128). Embedding is stored via Pgvector.Vector (comment notes 768 dims). ModelId and PromptVersion have defaults and length constraints. CreatedAt defaults to UTC now.","orchestrationMethods":[],"typedContracts":[{"name":"SemanticKnowledgeCache","kind":"entity","line":7,"fieldCount":8,"evidencePaths":["NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"SemanticKnowledgeCache","line":7,"summary":"entity with 8 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/SemanticKnowledgeCache.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Entities/SubscriptionPlan.cs","purpose":"Defines the domain entity SubscriptionPlan which models subscription tiers, pricing and AI token limits used by the application.","classification":{"role":"entity","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","Domain path heuristic","Contains public class SubscriptionPlan with data annotations (Key, Required, MaxLength)","Defines constants for plan names and IDs used across the domain"]},"className":"SubscriptionPlan","methods":[],"types":[{"name":"SubscriptionPlan","kind":"entity","line":5,"purpose":"Represents a subscription tier with identifiers, display name, token limits and billing identifiers/pricing.","fields":[{"name":"FreeName","type":"string (const)","required":false,"line":7,"description":"Static constant for the Free plan name"},{"name":"BasicName","type":"string (const)","required":false,"line":8,"description":"Static constant for the Basic plan name"},{"name":"ProName","type":"string (const)","required":false,"line":9,"description":"Static constant for the Pro plan name"},{"name":"EnterpriseName","type":"string (const)","required":false,"line":10,"description":"Static constant for the Enterprise plan name"},{"name":"FreeId","type":"int (const)","required":false,"line":12,"description":"Static constant for the Free plan numeric id"},{"name":"BasicId","type":"int (const)","required":false,"line":13,"description":"Static constant for the Basic plan numeric id"},{"name":"ProId","type":"int (const)","required":false,"line":14,"description":"Static constant for the Pro plan numeric id"},{"name":"EnterpriseId","type":"int (const)","required":false,"line":15,"description":"Static constant for the Enterprise plan numeric id"},{"name":"Id","type":"int","required":true,"line":18,"description":"Primary key for the subscription plan (annotated with [Key])"},{"name":"PlanName","type":"string","required":true,"line":22,"description":"Human-readable plan name (annotated with [Required] and [MaxLength(50)])"},{"name":"AITokenLimit","type":"int","required":false,"line":24,"description":"Per-period AI token allotment for this plan"},{"name":"IsUnlimitedTokens","type":"bool","required":false,"line":26,"description":"Flag indicating tokens are unlimited for this plan"},{"name":"MonthlyPrice","type":"decimal","required":false,"line":28,"description":"Monthly price for the plan"},{"name":"StripeProductId","type":"string","required":false,"line":31,"description":"Optional Stripe product identifier (MaxLength 50)"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Entity","EF Core DataAnnotations"],"domainConcepts":["SubscriptionPlan","Pricing","Billing/Stripe integration","AI token limits"],"keyDetails":"Simple EF-style entity with DataAnnotations for validation and length; includes static constants for well-known plan names and numeric IDs used application-wide.","orchestrationMethods":[],"typedContracts":[{"name":"SubscriptionPlan","kind":"entity","line":5,"fieldCount":14,"evidencePaths":["NexusReader.Domain/Entities/SubscriptionPlan.cs"]}],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[{"kind":"typed-contract","label":"SubscriptionPlan","line":5,"summary":"entity with 14 fields.","confidence":0.8,"evidencePaths":["NexusReader.Domain/Entities/SubscriptionPlan.cs"]}]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/Enums/KnowledgeUnitType.cs","purpose":"Defines the domain-level enumeration of different knowledge unit categories used across the NexusReader system.","classification":{"role":"entity","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","namespace NexusReader.Domain.Enums","file path indicates Domain/Enums and contains a single enum declaration"]},"className":"","methods":[],"types":[{"name":"KnowledgeUnitType","kind":"enum","line":3,"purpose":"Represents possible kinds of knowledge units (e.g., Section, Table, Definition) for classification and branching in domain logic.","fields":[{"name":"Section","type":"int","required":true,"line":5,"description":"A document section"},{"name":"Table","type":"int","required":true,"line":6,"description":"A tabular data unit"},{"name":"Definition","type":"int","required":true,"line":7,"description":"A definitional entry"},{"name":"ProcedureStep","type":"int","required":true,"line":8,"description":"A step in a procedure"},{"name":"PolicyRule","type":"int","required":true,"line":9,"description":"A policy or rule item"},{"name":"KeyConcept","type":"int","required":true,"line":10,"description":"An important concept or takeaway"},{"name":"Snippet","type":"int","required":true,"line":11,"description":"A short text/code snippet"}]}],"serviceRegistrations":[],"startupActions":[],"dependencies":[],"patterns":["Enum"],"domainConcepts":["KnowledgeUnit"],"keyDetails":"Simple, single-file enum used for domain classification; no runtime logic, methods, or external dependencies present.","orchestrationMethods":[],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[]}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
{"path":"NexusReader.Domain/NexusReader.Domain.csproj","purpose":"Project file for the NexusReader.Domain assembly: declares build settings (TargetFramework net10.0), compiler behaviors (implicit usings, nullable), runtime configuration generation, and package dependencies used by the Domain project.","classification":{"role":"config","layer":"domain","confidence":0.9,"evidence":["Domain/entity pattern","File name and path indicate the Domain project (NexusReader.Domain)","TargetFramework set to net10.0 (line 4)","PackageReference entries for Pgvector and Microsoft.Extensions.Identity.Stores (lines 11-12)","GenerateRuntimeConfigurationFiles enabled (line 7)"]},"className":"","methods":[],"types":[],"serviceRegistrations":[],"startupActions":[],"dependencies":["[object Object]","[object Object]"],"patterns":["project-file"],"domainConcepts":["Domain project boundary for NexusReader"],"keyDetails":"Targets .NET 10 (net10.0), enables implicit usings and nullable reference types, and instructs generation of runtime configuration files. Declares dependencies on Pgvector and Microsoft.Extensions.Identity.Stores.","orchestrationMethods":[],"typedContracts":[],"persistenceInteractions":[],"externalInteractions":[],"evidenceAnchors":[]}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user