421 lines
113 KiB
Markdown
421 lines
113 KiB
Markdown
## Application Layer: Commands, Queries and DTOs
|
|
|
|
Overview: Describes the Application project's command/query patterns, key handlers (ebook ingestion, AI verification, semantic search, reader and user queries), DTO shapes, and mapping/startup registration.
|
|
|
|
```mermaid
|
|
---
|
|
config:
|
|
flowchart:
|
|
defaultRenderer: "elk"
|
|
---
|
|
flowchart TD
|
|
flow_file_nexusreader_application_abstractions_services_iknowledgeservice_cs_file_1["IKnowledgeService"]
|
|
flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1["ICommand.cs"]
|
|
flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1["ICommandHandler"]
|
|
flow_file_nexusreader_application_abstractions_messaging_iquery_cs_file_1["IQuery.cs"]
|
|
flow_file_nexusreader_application_abstractions_messaging_iqueryhandler_cs_file_1["IQueryHandler<TQuery, TResponse>"]
|
|
flow_file_nexusreader_application_commands_ai_verifygroundednesscommand_cs_file_1["VerifyGroundednessCommandHandler"]
|
|
flow_file_nexusreader_application_commands_library_ingestebookcommand_cs_file_1["IngestEbookCommand"]
|
|
flow_file_nexusreader_application_commands_library_ingestebookcommandhandler_cs_file_1["IngestEbookCommandHandler"]
|
|
flow_file_nexusreader_application_commands_library_ingestebookrequest_cs_file_1["IngestEbookRequest"]
|
|
flow_file_nexusreader_application_commands_quiz_submitanswercommand_cs_file_1["SubmitAnswerCommand"]
|
|
flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_6[/"ICommand"/]
|
|
flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_tresponse_10[/"ICommand<TResponse>"/]
|
|
flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_6[/"ICommandHandler<TCommand>"/]
|
|
flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_tresponse_11[/"ICommandHandler<TCommand, TResponse>"/]
|
|
flow_type_nexusreader_application_abstractions_messaging_iquery_cs_iquery_tresponse_6[/"IQuery<TResponse>"/]
|
|
flow_type_nexusreader_application_abstractions_messaging_iqueryhandler_cs_iqueryhandler_6[/"IQueryHandler"/]
|
|
flow_type_nexusreader_application_commands_ai_verifygroundednesscommand_cs_verifygroundednesscommand_7[/"VerifyGroundednessCommand"/]
|
|
flow_type_nexusreader_application_commands_library_ingestebookcommand_cs_ingestebookcommand_15[/"IngestEbookCommand"/]
|
|
flow_type_nexusreader_application_commands_library_ingestebookrequest_cs_ingestebookrequest_3[/"IngestEbookRequest"/]
|
|
flow_type_nexusreader_application_commands_quiz_submitanswercommand_cs_submitanswercommand_5[/"SubmitAnswerCommand"/]
|
|
flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1 -->|interface ICommand| flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_6
|
|
flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1 -->|interface ICommand TResponse>| flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_tresponse_10
|
|
flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1 -->|interface ICommandHandler TCommand>| flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_6
|
|
flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1 -->|interface ICommandHandler TCommand, TResponse>| flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_tresponse_11
|
|
flow_file_nexusreader_application_abstractions_messaging_iquery_cs_file_1 -->|interface IQuery TResponse>| flow_type_nexusreader_application_abstractions_messaging_iquery_cs_iquery_tresponse_6
|
|
flow_file_nexusreader_application_abstractions_messaging_iqueryhandler_cs_file_1 -->|interface IQueryHandler| flow_type_nexusreader_application_abstractions_messaging_iqueryhandler_cs_iqueryhandler_6
|
|
flow_file_nexusreader_application_commands_ai_verifygroundednesscommand_cs_file_1 -->|command VerifyGroundednessCommand| flow_type_nexusreader_application_commands_ai_verifygroundednesscommand_cs_verifygroundednesscommand_7
|
|
flow_file_nexusreader_application_commands_library_ingestebookcommand_cs_file_1 -->|command IngestEbookCommand| flow_type_nexusreader_application_commands_library_ingestebookcommand_cs_ingestebookcommand_15
|
|
flow_file_nexusreader_application_commands_library_ingestebookrequest_cs_file_1 -->|command IngestEbookRequest| flow_type_nexusreader_application_commands_library_ingestebookrequest_cs_ingestebookrequest_3
|
|
flow_file_nexusreader_application_commands_quiz_submitanswercommand_cs_file_1 -->|command SubmitAnswerCommand| flow_type_nexusreader_application_commands_quiz_submitanswercommand_cs_submitanswercommand_5
|
|
click flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1 href "vscode://file/NexusReader.Application/Abstractions/Messaging/ICommand.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_6 href "vscode://file/NexusReader.Application/Abstractions/Messaging/ICommand.cs:6:1" "Open source"
|
|
click flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_tresponse_10 href "vscode://file/NexusReader.Application/Abstractions/Messaging/ICommand.cs:10:1" "Open source"
|
|
click flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1 href "vscode://file/NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_6 href "vscode://file/NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs:6:1" "Open source"
|
|
click flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_tresponse_11 href "vscode://file/NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs:11:1" "Open source"
|
|
click flow_file_nexusreader_application_abstractions_messaging_iquery_cs_file_1 href "vscode://file/NexusReader.Application/Abstractions/Messaging/IQuery.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_abstractions_messaging_iquery_cs_iquery_tresponse_6 href "vscode://file/NexusReader.Application/Abstractions/Messaging/IQuery.cs:6:1" "Open source"
|
|
click flow_file_nexusreader_application_abstractions_messaging_iqueryhandler_cs_file_1 href "vscode://file/NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_abstractions_messaging_iqueryhandler_cs_iqueryhandler_6 href "vscode://file/NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs:6:1" "Open source"
|
|
click flow_file_nexusreader_application_commands_ai_verifygroundednesscommand_cs_file_1 href "vscode://file/NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs:1:1" "Open source"
|
|
click flow_file_nexusreader_application_abstractions_services_iknowledgeservice_cs_file_1 href "vscode://file/NexusReader.Application/Abstractions/Services/IKnowledgeService.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_commands_ai_verifygroundednesscommand_cs_verifygroundednesscommand_7 href "vscode://file/NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs:7:1" "Open source"
|
|
click flow_file_nexusreader_application_commands_library_ingestebookcommand_cs_file_1 href "vscode://file/NexusReader.Application/Commands/Library/IngestEbookCommand.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_commands_library_ingestebookcommand_cs_ingestebookcommand_15 href "vscode://file/NexusReader.Application/Commands/Library/IngestEbookCommand.cs:15:1" "Open source"
|
|
click flow_file_nexusreader_application_commands_library_ingestebookcommandhandler_cs_file_1 href "vscode://file/NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs:1:1" "Open source"
|
|
click flow_file_nexusreader_application_commands_library_ingestebookrequest_cs_file_1 href "vscode://file/NexusReader.Application/Commands/Library/IngestEbookRequest.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_commands_library_ingestebookrequest_cs_ingestebookrequest_3 href "vscode://file/NexusReader.Application/Commands/Library/IngestEbookRequest.cs:3:1" "Open source"
|
|
click flow_file_nexusreader_application_commands_quiz_submitanswercommand_cs_file_1 href "vscode://file/NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_commands_quiz_submitanswercommand_cs_submitanswercommand_5 href "vscode://file/NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs:5:1" "Open source"
|
|
```
|
|
|
|
This diagram maps messaging abstractions (ICommand/IQuery and handler interfaces) to concrete commands and handlers such as IngestEbookCommand/Handler and VerifyGroundednessCommandHandler. It shows the ICommand/IQuery generic contracts used by the mediator-like invocation pattern and links IKnowledgeService and DTO request types.
|
|
|
|
```mermaid
|
|
---
|
|
config:
|
|
flowchart:
|
|
defaultRenderer: "elk"
|
|
---
|
|
flowchart TD
|
|
subgraph flow_1_nexusreader_web_client_program_cs["Program.cs"]
|
|
end
|
|
flow_file_nexusreader_web_client_program_cs_file_1["Program.cs"]
|
|
flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88["FindAuthorByNameAsync"]
|
|
flow_method_nexusreader_web_client_program_cs_getservice_71["GetService"]
|
|
flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15["Program (top-level startup)"]
|
|
flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88["Reads repository or persistence state"]
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1["GroundedResponseDto"]
|
|
flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1["SemanticSearchResultDto"]
|
|
flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1["MappingConfig"]
|
|
flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11[/"CitationDto"/]
|
|
flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5[/"GroundedResponseDto"/]
|
|
flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3[/"SemanticSearchResultDto"/]
|
|
flow_type_nexusreader_application_mappings_mappingconfig_cs_servicemapper_20[/"ServiceMapper"/]
|
|
flow_type_nexusreader_application_mappings_mappingconfig_cs_typeadapterconfig_instance_19[/"TypeAdapterConfig (instance)"/]
|
|
flow_type_nexusreader_web_client_program_cs_configured_httpclient_40[/"configured HttpClient"/]
|
|
flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33[/"NexusAuthenticationStateProvider"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74[/"ThrowingBookStorageService"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49[/"ThrowingDbContextFactory"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61[/"ThrowingDbContextFactory"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84[/"ThrowingEbookRepository"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66[/"ThrowingEmbeddingGenerator"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94[/"ThrowingSyncBroadcaster"/]
|
|
flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38[/"WasmKnowledgeService"/]
|
|
flow_type_nexusreader_web_client_program_cs_webplatformservice_18[/"WebPlatformService"/]
|
|
flow_action_nexusreader_web_client_program_cs_getservice_return_71_71(["returns null"])
|
|
flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1 -->|IMapper| flow_type_nexusreader_application_mappings_mappingconfig_cs_servicemapper_20
|
|
flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1 -->|TypeAdapterConfig| flow_type_nexusreader_application_mappings_mappingconfig_cs_typeadapterconfig_instance_19
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|uses| flow_type_nexusreader_web_client_program_cs_configured_httpclient_40
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|NexusAuthenticationStateProvider| flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IDbContextFactory AppDbContext>| flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IKnowledgeService| flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IPlatformService| flow_type_nexusreader_web_client_program_cs_webplatformservice_18
|
|
click flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:5:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:11:1" "Open source"
|
|
click flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:3:1" "Open source"
|
|
click flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1 href "vscode://file/NexusReader.Application/Mappings/MappingConfig.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_mappings_mappingconfig_cs_typeadapterconfig_instance_19 href "vscode://file/NexusReader.Application/Mappings/MappingConfig.cs:19:1" "Open source"
|
|
click flow_type_nexusreader_application_mappings_mappingconfig_cs_servicemapper_20 href "vscode://file/NexusReader.Application/Mappings/MappingConfig.cs:20:1" "Open source"
|
|
click flow_file_nexusreader_web_client_program_cs_file_1 href "vscode://file/NexusReader.Web.Client/Program.cs:1:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15 href "vscode://file/NexusReader.Web.Client/Program.cs:15:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_getservice_71 href "vscode://file/NexusReader.Web.Client/Program.cs:71:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61 href "vscode://file/NexusReader.Web.Client/Program.cs:61:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66 href "vscode://file/NexusReader.Web.Client/Program.cs:66:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74 href "vscode://file/NexusReader.Web.Client/Program.cs:74:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84 href "vscode://file/NexusReader.Web.Client/Program.cs:84:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94 href "vscode://file/NexusReader.Web.Client/Program.cs:94:1" "Open source"
|
|
```
|
|
|
|
This startup/service-registration view shows MappingConfig registering mapping adapters and DTO types (GroundedResponseDto, SemanticSearchResultDto). It also shows Program.cs providing platform and knowledge service implementations (WasmKnowledgeService, WebPlatformService) and some test/throwing stubs.
|
|
|
|
```mermaid
|
|
---
|
|
config:
|
|
flowchart:
|
|
defaultRenderer: "elk"
|
|
---
|
|
flowchart TD
|
|
subgraph flow_1_nexusreader_web_client_program_cs["Program.cs"]
|
|
end
|
|
flow_file_nexusreader_web_client_program_cs_file_1["Program.cs"]
|
|
flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88["FindAuthorByNameAsync"]
|
|
flow_method_nexusreader_web_client_program_cs_getservice_71["GetService"]
|
|
flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15["Program (top-level startup)"]
|
|
flow_method_nexusreader_web_client_program_cs_run_wasm_host_59["Run WASM Host"]
|
|
flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88["Reads repository or persistence state"]
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1["GroundedResponseDto"]
|
|
flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1["SemanticSearchResultDto"]
|
|
flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11[/"CitationDto"/]
|
|
flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5[/"GroundedResponseDto"/]
|
|
flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3[/"SemanticSearchResultDto"/]
|
|
flow_type_nexusreader_web_client_program_cs_configured_httpclient_40[/"configured HttpClient"/]
|
|
flow_type_nexusreader_web_client_program_cs_n_a_55[/"N/A"/]
|
|
flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33[/"NexusAuthenticationStateProvider"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74[/"ThrowingBookStorageService"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49[/"ThrowingDbContextFactory"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61[/"ThrowingDbContextFactory"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84[/"ThrowingEbookRepository"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66[/"ThrowingEmbeddingGenerator"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94[/"ThrowingSyncBroadcaster"/]
|
|
flow_type_nexusreader_web_client_program_cs_wasmepubreader_56[/"WasmEpubReader"/]
|
|
flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38[/"WasmKnowledgeService"/]
|
|
flow_type_nexusreader_web_client_program_cs_webplatformservice_18[/"WebPlatformService"/]
|
|
flow_action_nexusreader_web_client_program_cs_getservice_return_71_71(["returns null"])
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 -->|dto CitationDto| flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 -->|dto GroundedResponseDto| flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5
|
|
flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 -->|dto SemanticSearchResultDto| flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|FindAuthorByNameAsync| flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|GetService| flow_method_nexusreader_web_client_program_cs_getservice_71
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|Program top-level startup| flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|unknown| flow_method_nexusreader_web_client_program_cs_run_wasm_host_59
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|uses| flow_type_nexusreader_web_client_program_cs_configured_httpclient_40
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|application services via extension| flow_type_nexusreader_web_client_program_cs_n_a_55
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|NexusAuthenticationStateProvider| flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingBookStorageService| flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IDbContextFactory AppDbContext>| flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingDbContextFactory| flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingEbookRepository| flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingEmbeddingGenerator| flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingSyncBroadcaster| flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IEpubReader| flow_type_nexusreader_web_client_program_cs_wasmepubreader_56
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IKnowledgeService| flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IPlatformService| flow_type_nexusreader_web_client_program_cs_webplatformservice_18
|
|
flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88 -->|Reads repository or persistence state| flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88
|
|
flow_method_nexusreader_web_client_program_cs_getservice_71 -->|returns null| flow_action_nexusreader_web_client_program_cs_getservice_return_71_71
|
|
click flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:5:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:11:1" "Open source"
|
|
click flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:3:1" "Open source"
|
|
click flow_file_nexusreader_web_client_program_cs_file_1 href "vscode://file/NexusReader.Web.Client/Program.cs:1:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15 href "vscode://file/NexusReader.Web.Client/Program.cs:15:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_getservice_71 href "vscode://file/NexusReader.Web.Client/Program.cs:71:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_getservice_return_71_71 href "vscode://file/NexusReader.Web.Client/Program.cs:71:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61 href "vscode://file/NexusReader.Web.Client/Program.cs:61:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66 href "vscode://file/NexusReader.Web.Client/Program.cs:66:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74 href "vscode://file/NexusReader.Web.Client/Program.cs:74:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84 href "vscode://file/NexusReader.Web.Client/Program.cs:84:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94 href "vscode://file/NexusReader.Web.Client/Program.cs:94:1" "Open source"
|
|
```
|
|
|
|
Program.cs flow highlights startup vs runtime flows: Run WASM host, FindAuthorByNameAsync reading persistence, and the DTOs bound into mapping. It surfaces which services are provided to the frontend (e.g., WasmEpubReader, WasmKnowledgeService) and where test stubs are used.
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
subgraph NexusReader_Web_Client_Program["Program"]
|
|
end
|
|
flow_file_nexusreader_web_client_program_cs_file_1["Program.cs"]
|
|
flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88["FindAuthorByNameAsync"]
|
|
flow_method_nexusreader_web_client_program_cs_getservice_71["GetService"]
|
|
flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15["Program (top-level startup)"]
|
|
flow_method_nexusreader_web_client_program_cs_run_wasm_host_59["Run WASM Host"]
|
|
flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88["Reads repository or persistence state"]
|
|
flow_action_nexusreader_web_client_program_cs_getservice_return_71_71(["returns null"])
|
|
flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88 -->|Reads repository or persistence state| flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88
|
|
flow_method_nexusreader_web_client_program_cs_getservice_71 -->|returns null| flow_action_nexusreader_web_client_program_cs_getservice_return_71_71
|
|
click flow_file_nexusreader_web_client_program_cs_file_1 href "vscode://file/NexusReader.Web.Client/Program.cs:1:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15 href "vscode://file/NexusReader.Web.Client/Program.cs:15:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_getservice_71 href "vscode://file/NexusReader.Web.Client/Program.cs:71:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_getservice_return_71_71 href "vscode://file/NexusReader.Web.Client/Program.cs:71:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_method_nexusreader_web_client_program_cs_run_wasm_host_59 href "vscode://file/NexusReader.Web.Client/Program.cs:59:1" "Open source"
|
|
```
|
|
|
|
This control-flow view isolates the key Program methods and shows where repository access occurs (FindAuthorByNameAsync) and that GetService may return null in some contexts. Use this to trace invocation paths for queries.
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class flow_file_nexusreader_web_client_program_cs_file_1["Program.cs"]
|
|
class flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1["GroundedResponseDto"]
|
|
class flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1["SemanticSearchResultDto"]
|
|
class flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11["CitationDto"]
|
|
class flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5["GroundedResponseDto"]
|
|
class flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3["SemanticSearchResultDto"]
|
|
class flow_type_nexusreader_web_client_program_cs_configured_httpclient_40["configured HttpClient"]
|
|
class flow_type_nexusreader_web_client_program_cs_n_a_55["N/A"]
|
|
class flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33["NexusAuthenticationStateProvider"]
|
|
class flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74["ThrowingBookStorageService"]
|
|
class flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49["ThrowingDbContextFactory"]
|
|
class flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61["ThrowingDbContextFactory"]
|
|
class flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84["ThrowingEbookRepository"]
|
|
class flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66["ThrowingEmbeddingGenerator"]
|
|
class flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94["ThrowingSyncBroadcaster"]
|
|
class flow_type_nexusreader_web_client_program_cs_wasmepubreader_56["WasmEpubReader"]
|
|
class flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38["WasmKnowledgeService"]
|
|
class flow_type_nexusreader_web_client_program_cs_webplatformservice_18["WebPlatformService"]
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 --> flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11 : dto CitationDto
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 --> flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5 : dto GroundedResponseDto
|
|
flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 --> flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3 : dto SemanticSearchResultDto
|
|
flow_file_nexusreader_web_client_program_cs_file_1 --> flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74 : model ThrowingBookStorageService
|
|
flow_file_nexusreader_web_client_program_cs_file_1 --> flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61 : model ThrowingDbContextFactory
|
|
flow_file_nexusreader_web_client_program_cs_file_1 --> flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84 : model ThrowingEbookRepository
|
|
flow_file_nexusreader_web_client_program_cs_file_1 --> flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66 : model ThrowingEmbeddingGenerator
|
|
flow_file_nexusreader_web_client_program_cs_file_1 --> flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94 : model ThrowingSyncBroadcaster
|
|
click flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:5:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:11:1" "Open source"
|
|
click flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:3:1" "Open source"
|
|
click flow_file_nexusreader_web_client_program_cs_file_1 href "vscode://file/NexusReader.Web.Client/Program.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61 href "vscode://file/NexusReader.Web.Client/Program.cs:61:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66 href "vscode://file/NexusReader.Web.Client/Program.cs:66:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74 href "vscode://file/NexusReader.Web.Client/Program.cs:74:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84 href "vscode://file/NexusReader.Web.Client/Program.cs:84:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94 href "vscode://file/NexusReader.Web.Client/Program.cs:94:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_webplatformservice_18 href "vscode://file/NexusReader.Web.Client/Program.cs:18:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33 href "vscode://file/NexusReader.Web.Client/Program.cs:33:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38 href "vscode://file/NexusReader.Web.Client/Program.cs:38:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_configured_httpclient_40 href "vscode://file/NexusReader.Web.Client/Program.cs:40:1" "Open source"
|
|
```
|
|
|
|
This class-diagram view shows DTO classes (GroundedResponseDto, CitationDto, SemanticSearchResultDto) and Program-level service/test doubles. Use it to inspect DTO shapes and which runtime implementations are wired.
|
|
|
|
```mermaid
|
|
---
|
|
config:
|
|
flowchart:
|
|
defaultRenderer: "elk"
|
|
---
|
|
flowchart LR
|
|
subgraph layer_application["application"]
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1["GroundedResponseDto"]
|
|
flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1["SemanticSearchResultDto"]
|
|
flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11[/"CitationDto"/]
|
|
flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5[/"GroundedResponseDto"/]
|
|
flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3[/"SemanticSearchResultDto"/]
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 -->|dto CitationDto| flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11
|
|
flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 -->|dto GroundedResponseDto| flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5
|
|
flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 -->|dto SemanticSearchResultDto| flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3
|
|
end
|
|
subgraph layer_frontend["frontend"]
|
|
flow_file_nexusreader_web_client_program_cs_file_1["Program.cs"]
|
|
flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88["Reads repository or persistence state"]
|
|
flow_type_nexusreader_web_client_program_cs_configured_httpclient_40[/"configured HttpClient"/]
|
|
flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33[/"NexusAuthenticationStateProvider"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74[/"ThrowingBookStorageService"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49[/"ThrowingDbContextFactory"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61[/"ThrowingDbContextFactory"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84[/"ThrowingEbookRepository"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66[/"ThrowingEmbeddingGenerator"/]
|
|
flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94[/"ThrowingSyncBroadcaster"/]
|
|
flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38[/"WasmKnowledgeService"/]
|
|
flow_type_nexusreader_web_client_program_cs_webplatformservice_18[/"WebPlatformService"/]
|
|
flow_action_nexusreader_web_client_program_cs_getservice_return_71_71(["returns null"])
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|uses| flow_type_nexusreader_web_client_program_cs_configured_httpclient_40
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|NexusAuthenticationStateProvider| flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingBookStorageService| flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IDbContextFactory AppDbContext>| flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingDbContextFactory| flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingEbookRepository| flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingEmbeddingGenerator| flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|model ThrowingSyncBroadcaster| flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IKnowledgeService| flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38
|
|
flow_file_nexusreader_web_client_program_cs_file_1 -->|IPlatformService| flow_type_nexusreader_web_client_program_cs_webplatformservice_18
|
|
end
|
|
click flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:5:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11 href "vscode://file/NexusReader.Application/DTOs/AI/GroundedResponseDto.cs:11:1" "Open source"
|
|
click flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:1:1" "Open source"
|
|
click flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3 href "vscode://file/NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs:3:1" "Open source"
|
|
click flow_file_nexusreader_web_client_program_cs_file_1 href "vscode://file/NexusReader.Web.Client/Program.cs:1:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_getservice_return_71_71 href "vscode://file/NexusReader.Web.Client/Program.cs:71:1" "Open source"
|
|
click flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88 href "vscode://file/NexusReader.Web.Client/Program.cs:88:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61 href "vscode://file/NexusReader.Web.Client/Program.cs:61:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66 href "vscode://file/NexusReader.Web.Client/Program.cs:66:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74 href "vscode://file/NexusReader.Web.Client/Program.cs:74:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84 href "vscode://file/NexusReader.Web.Client/Program.cs:84:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94 href "vscode://file/NexusReader.Web.Client/Program.cs:94:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_webplatformservice_18 href "vscode://file/NexusReader.Web.Client/Program.cs:18:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33 href "vscode://file/NexusReader.Web.Client/Program.cs:33:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38 href "vscode://file/NexusReader.Web.Client/Program.cs:38:1" "Open source"
|
|
click flow_type_nexusreader_web_client_program_cs_configured_httpclient_40 href "vscode://file/NexusReader.Web.Client/Program.cs:40:1" "Open source"
|
|
```
|
|
|
|
Layer view separates application DTOs from frontend wiring, making it clear which DTOs (AI responses, citations, semantic results) are part of the Application layer and which runtime services the frontend depends on.
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
subgraph NexusReader_Infrastructure_RealTime_SyncHub["SyncHub"]
|
|
end
|
|
subgraph NexusReader_Infrastructure_Services_EpubReaderService["EpubReaderService"]
|
|
end
|
|
subgraph NexusReader_Infrastructure_Services_BookStorageService["BookStorageService"]
|
|
end
|
|
flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1["BookStorageService"]
|
|
flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1["EpubReaderService"]
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28["OnConnectedAsync"]
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38["OnDisconnectedAsync"]
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_synchub_14["SyncHub"]
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19["UpdateProgress"]
|
|
flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66["EnsureDirectoryExists"]
|
|
flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175["CountWords"]
|
|
flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30["Reads repository or persistence state"]
|
|
flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40["Reads repository or persistence state"]
|
|
flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21["Reads repository or persistence state"]
|
|
flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68{"Check directory existence"}
|
|
flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177{"Empty text check"}
|
|
flow_action_nexusreader_web_program_cs_program_top_level_branch_237_237{"Evaluates branch condition"}
|
|
flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1["SyncHub"]
|
|
flow_action_nexusreader_web_program_cs_program_top_level_branch_237_237 -->|SyncHub| flow_method_nexusreader_infrastructure_realtime_synchub_cs_synchub_14
|
|
flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1 -->|OnConnectedAsync| flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28
|
|
flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1 -->|OnDisconnectedAsync| flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38
|
|
flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1 -->|UpdateProgress| flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19
|
|
flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1 -->|EnsureDirectoryExists| flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66
|
|
flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1 -->|CountWords| flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28 -->|Reads repository or persistence state| flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38 -->|Reads repository or persistence state| flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40
|
|
flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19 -->|Reads repository or persistence state| flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21
|
|
flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66 -->|create-directory / noop| flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68
|
|
flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175 -->|return 0 / continue| flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177
|
|
click flow_action_nexusreader_web_program_cs_program_top_level_branch_237_237 href "vscode://file/NexusReader.Web/Program.cs:237:1" "Open source"
|
|
click flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:1:1" "Open source"
|
|
click flow_method_nexusreader_infrastructure_realtime_synchub_cs_synchub_14 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:14:1" "Open source"
|
|
click flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1 href "vscode://file/NexusReader.Infrastructure/Services/EpubReaderService.cs:1:1" "Open source"
|
|
click flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1 href "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:1:1" "Open source"
|
|
click flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:19:1" "Open source"
|
|
click flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:21:1" "Open source"
|
|
click flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:28:1" "Open source"
|
|
click flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:30:1" "Open source"
|
|
click flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:38:1" "Open source"
|
|
click flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40 href "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:40:1" "Open source"
|
|
click flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175 href "vscode://file/NexusReader.Infrastructure/Services/EpubReaderService.cs:175:1" "Open source"
|
|
click flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwo
|
|
```
|
|
|
|
Method-flow focuses on SyncHub and infrastructure services used during ingestion and reader progress updates. It shows UpdateProgress/OnConnectedAsync reading persistence and EpubReaderService/BookStorageService guard clauses relevant to ingestion and counting.
|
|
|
|
### Key Files
|
|
- NexusReader.Application/Abstractions/Messaging/ICommand.cs
|
|
- NexusReader.Application/Abstractions/Messaging/IQuery.cs
|
|
- NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs
|
|
- NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs
|
|
- NexusReader.Application/Commands/Library/IngestEbookCommand.cs
|
|
- NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs
|
|
- NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs
|
|
- NexusReader.Application/DTOs/AI/GroundedResponseDto.cs
|
|
- NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs
|
|
- NexusReader.Application/Mappings/MappingConfig.cs
|
|
- NexusReader.Web.Client/Program.cs
|
|
|
|
<div hidden data-ai-mermaid-metadata-appendix>
|
|
<script type="application/json" data-ai-mermaid-metadata="0" data-ai-mermaid-diagram-id="dependency_map_graph">{"edges":[{"id":"edge_flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1_flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_6_defines_type_6","from":"flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1","to":"flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_6","relation":"transforms","semanticLabel":"interface ICommand","payload":{"outputSummary":"Marker/contract for a command that produces a FluentResults.Result when handled via MediatR.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1_flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_tresponse_10_defines_type_10","from":"flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1","to":"flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_tresponse_10","relation":"transforms","semanticLabel":"interface ICommand<TResponse>","payload":{"outputSummary":"Generic command contract that produces a FluentResults.Result<TResponse> when handled via MediatR.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1_flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_6_defines_type_6","from":"flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1","to":"flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_6","relation":"transforms","semanticLabel":"interface ICommandHandler<TCommand>","payload":{"outputSummary":"Represents a command handler that processes a command and returns a FluentResults.Result (no data).","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1_flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_tresponse_11_defines_type_11","from":"flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1","to":"flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_tresponse_11","relation":"transforms","semanticLabel":"interface ICommandHandler<TCommand, TResponse>","payload":{"outputSummary":"Represents a command handler that processes a command and returns a FluentResults.Result with a typed response.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_abstractions_messaging_iquery_cs_file_1_flow_type_nexusreader_application_abstractions_messaging_iquery_cs_iquery_tresponse_6_defines_type_6","from":"flow_file_nexusreader_application_abstractions_messaging_iquery_cs_file_1","to":"flow_type_nexusreader_application_abstractions_messaging_iquery_cs_iquery_tresponse_6","relation":"transforms","semanticLabel":"interface IQuery<TResponse>","payload":{"outputSummary":"Marker interface representing a CQRS query that returns a Result-wrapped TResponse via MediatR.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_abstractions_messaging_iqueryhandler_cs_file_1_flow_type_nexusreader_application_abstractions_messaging_iqueryhandler_cs_iqueryhandler_6_defines_type_6","from":"flow_file_nexusreader_application_abstractions_messaging_iqueryhandler_cs_file_1","to":"flow_type_nexusreader_application_abstractions_messaging_iqueryhandler_cs_iqueryhandler_6","relation":"transforms","semanticLabel":"interface IQueryHandler","payload":{"outputSummary":"Generic abstraction for query handlers that process TQuery and return Result<TResponse> via MediatR.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_commands_ai_verifygroundednesscommand_cs_file_1_flow_type_nexusreader_application_commands_ai_verifygroundednesscommand_cs_verifygroundednesscommand_7_defines_type_7","from":"flow_file_nexusreader_application_commands_ai_verifygroundednesscommand_cs_file_1","to":"flow_type_nexusreader_application_commands_ai_verifygroundednesscommand_cs_verifygroundednesscommand_7","relation":"transforms","semanticLabel":"command VerifyGroundednessCommand","payload":{"outputSummary":"Carries the answer, context, and tenant id for a groundedness verification request through MediatR.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_commands_library_ingestebookcommand_cs_file_1_flow_type_nexusreader_application_commands_library_ingestebookcommand_cs_ingestebookcommand_15_defines_type_15","from":"flow_file_nexusreader_application_commands_library_ingestebookcommand_cs_file_1","to":"flow_type_nexusreader_application_commands_library_ingestebookcommand_cs_ingestebookcommand_15","relation":"transforms","semanticLabel":"command IngestEbookCommand","payload":{"outputSummary":"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.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_commands_library_ingestebookrequest_cs_file_1_flow_type_nexusreader_application_commands_library_ingestebookrequest_cs_ingestebookrequest_3_defines_type_3","from":"flow_file_nexusreader_application_commands_library_ingestebookrequest_cs_file_1","to":"flow_type_nexusreader_application_commands_library_ingestebookrequest_cs_ingestebookrequest_3","relation":"transforms","semanticLabel":"command IngestEbookRequest","payload":{"outputSummary":"Represents the data required to ingest an ebook: metadata, optional cover image, and the EPUB payload (base64).","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_application_commands_quiz_submitanswercommand_cs_file_1_flow_type_nexusreader_application_commands_quiz_submitanswercommand_cs_submitanswercommand_5_defines_type_5","from":"flow_file_nexusreader_application_commands_quiz_submitanswercommand_cs_file_1","to":"flow_type_nexusreader_application_commands_quiz_submitanswercommand_cs_submitanswercommand_5","relation":"transforms","semanticLabel":"command SubmitAnswerCommand","payload":{"outputSummary":"Represents a request to submit an answer for a quiz question carrying the selected and correct indices.","expandedLabel":"defines-type"}}],"nodes":[{"id":"flow_file_nexusreader_application_abstractions_messaging_icommand_cs_file_1","kind":"dependency","label":"ICommand.cs","sourcePath":"NexusReader.Application/Abstractions/Messaging/ICommand.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_6","kind":"dependency","label":"ICommand","sourcePath":"NexusReader.Application/Abstractions/Messaging/ICommand.cs","sourceLine":6},{"id":"flow_type_nexusreader_application_abstractions_messaging_icommand_cs_icommand_tresponse_10","kind":"dependency","label":"ICommand<TResponse>","sourcePath":"NexusReader.Application/Abstractions/Messaging/ICommand.cs","sourceLine":10},{"id":"flow_file_nexusreader_application_abstractions_messaging_icommandhandler_cs_file_1","kind":"dependency","label":"ICommandHandler","sourcePath":"NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_6","kind":"dependency","label":"ICommandHandler<TCommand>","sourcePath":"NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs","sourceLine":6},{"id":"flow_type_nexusreader_application_abstractions_messaging_icommandhandler_cs_icommandhandler_tcommand_tresponse_11","kind":"dependency","label":"ICommandHandler<TCommand, TResponse>","sourcePath":"NexusReader.Application/Abstractions/Messaging/ICommandHandler.cs","sourceLine":11},{"id":"flow_file_nexusreader_application_abstractions_messaging_iquery_cs_file_1","kind":"dependency","label":"IQuery.cs","sourcePath":"NexusReader.Application/Abstractions/Messaging/IQuery.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_abstractions_messaging_iquery_cs_iquery_tresponse_6","kind":"dependency","label":"IQuery<TResponse>","sourcePath":"NexusReader.Application/Abstractions/Messaging/IQuery.cs","sourceLine":6},{"id":"flow_file_nexusreader_application_abstractions_messaging_iqueryhandler_cs_file_1","kind":"dependency","label":"IQueryHandler<TQuery, TResponse>","sourcePath":"NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_abstractions_messaging_iqueryhandler_cs_iqueryhandler_6","kind":"dependency","label":"IQueryHandler","sourcePath":"NexusReader.Application/Abstractions/Messaging/IQueryHandler.cs","sourceLine":6},{"id":"flow_file_nexusreader_application_commands_ai_verifygroundednesscommand_cs_file_1","kind":"dependency","label":"VerifyGroundednessCommandHandler","sourcePath":"NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs","sourceLine":1},{"id":"flow_file_nexusreader_application_abstractions_services_iknowledgeservice_cs_file_1","kind":"service","label":"IKnowledgeService","sourcePath":"NexusReader.Application/Abstractions/Services/IKnowledgeService.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_commands_ai_verifygroundednesscommand_cs_verifygroundednesscommand_7","kind":"dependency","label":"VerifyGroundednessCommand","sourcePath":"NexusReader.Application/Commands/AI/VerifyGroundednessCommand.cs","sourceLine":7},{"id":"flow_file_nexusreader_application_commands_library_ingestebookcommand_cs_file_1","kind":"dependency","label":"IngestEbookCommand","sourcePath":"NexusReader.Application/Commands/Library/IngestEbookCommand.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_commands_library_ingestebookcommand_cs_ingestebookcommand_15","kind":"dependency","label":"IngestEbookCommand","sourcePath":"NexusReader.Application/Commands/Library/IngestEbookCommand.cs","sourceLine":15},{"id":"flow_file_nexusreader_application_commands_library_ingestebookcommandhandler_cs_file_1","kind":"dependency","label":"IngestEbookCommandHandler","sourcePath":"NexusReader.Application/Commands/Library/IngestEbookCommandHandler.cs","sourceLine":1},{"id":"flow_file_nexusreader_application_commands_library_ingestebookrequest_cs_file_1","kind":"dependency","label":"IngestEbookRequest","sourcePath":"NexusReader.Application/Commands/Library/IngestEbookRequest.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_commands_library_ingestebookrequest_cs_ingestebookrequest_3","kind":"dependency","label":"IngestEbookRequest","sourcePath":"NexusReader.Application/Commands/Library/IngestEbookRequest.cs","sourceLine":3},{"id":"flow_file_nexusreader_application_commands_quiz_submitanswercommand_cs_file_1","kind":"dependency","label":"SubmitAnswerCommand","sourcePath":"NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_commands_quiz_submitanswercommand_cs_submitanswercommand_5","kind":"dependency","label":"SubmitAnswerCommand","sourcePath":"NexusReader.Application/Commands/Quiz/SubmitAnswerCommand.cs","sourceLine":5}]}</script>
|
|
<script type="application/json" data-ai-mermaid-metadata="1" data-ai-mermaid-diagram-id="startup_runtime_graph">{"edges":[{"id":"edge_flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1_flow_type_nexusreader_application_mappings_mappingconfig_cs_typeadapterconfig_instance_19_registers_service_19","from":"flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1","to":"flow_type_nexusreader_application_mappings_mappingconfig_cs_typeadapterconfig_instance_19","relation":"uses","semanticLabel":"TypeAdapterConfig","payload":{"outputSummary":"Registers the global Mapster TypeAdapterConfig instance as a singleton","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1_flow_type_nexusreader_application_mappings_mappingconfig_cs_servicemapper_20_registers_service_20","from":"flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1","to":"flow_type_nexusreader_application_mappings_mappingconfig_cs_servicemapper_20","relation":"uses","semanticLabel":"IMapper","payload":{"outputSummary":"Registers Mapster ServiceMapper as the application's IMapper implementation","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_webplatformservice_18_registers_service_18","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","relation":"uses","semanticLabel":"IPlatformService","payload":{"outputSummary":"Registers platform abstraction for browser.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33_registers_service_33","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","relation":"uses","semanticLabel":"NexusAuthenticationStateProvider","payload":{"outputSummary":"Authentication state provider and wiring to AuthenticationStateProvider.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38_registers_service_38","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","relation":"uses","semanticLabel":"IKnowledgeService","payload":{"outputSummary":"Registers a WASM-specific knowledge service implementation.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_configured_httpclient_40_registers_service_40","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","relation":"uses","semanticLabel":"HttpClient (named 'NexusAPI')","payload":{"outputSummary":"Adds named HTTP client with base address and authentication header handler.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49_registers_service_49","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","relation":"uses","semanticLabel":"IDbContextFactory<AppDbContext>","payload":{"outputSummary":"Registers throw-only stub to avoid using DbContext in WASM.","expandedLabel":"registers-service"}}],"nodes":[{"id":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":5},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","kind":"dependency","label":"CitationDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":11},{"id":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":3},{"id":"flow_file_nexusreader_application_mappings_mappingconfig_cs_file_1","kind":"dependency","label":"MappingConfig","sourcePath":"NexusReader.Application/Mappings/MappingConfig.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_mappings_mappingconfig_cs_typeadapterconfig_instance_19","kind":"dependency","label":"TypeAdapterConfig (instance)","sourcePath":"NexusReader.Application/Mappings/MappingConfig.cs","sourceLine":19},{"id":"flow_type_nexusreader_application_mappings_mappingconfig_cs_servicemapper_20","kind":"dependency","label":"ServiceMapper","sourcePath":"NexusReader.Application/Mappings/MappingConfig.cs","sourceLine":20},{"id":"flow_file_nexusreader_web_client_program_cs_file_1","kind":"service","label":"Program.cs","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":1},{"id":"flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15","kind":"method","label":"Program (top-level startup)","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":15},{"id":"flow_method_nexusreader_web_client_program_cs_getservice_71","kind":"method","label":"GetService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_action_nexusreader_web_client_program_cs_getservice_return_71_71","kind":"return","label":"returns null","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88","kind":"method","label":"FindAuthorByNameAsync","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":61},{"id":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","kind":"dependency","label":"ThrowingEmbeddingGenerator","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":66},{"id":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","kind":"dependency","label":"ThrowingBookStorageService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":74},{"id":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","kind":"dependency","label":"ThrowingEbookRepository","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":84},{"id":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","kind":"dependency","label":"ThrowingSyncBroadcaster","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":94},{"id":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","kind":"dependency","label":"WebPlatformService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":18},{"id":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","kind":"dependency","label":"NexusAuthenticationStateProvider","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":33},{"id":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","kind":"dependency","label":"WasmKnowledgeService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":38},{"id":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","kind":"dependency","label":"configured HttpClient","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":40},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":49}]}</script>
|
|
<script type="application/json" data-ai-mermaid-metadata="2" data-ai-mermaid-diagram-id="primary_runtime_flow_1_nexusreader_web_client_program_cs">{"edges":[{"id":"edge_flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1_flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5_maps_dto_5","from":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","relation":"transforms","semanticLabel":"dto GroundedResponseDto","payload":{"outputSummary":"Carries an AI-generated answer and a list of provenance citations back to callers.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1_flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11_maps_dto_11","from":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","relation":"transforms","semanticLabel":"dto CitationDto","payload":{"outputSummary":"Represents a single provenance item (chunk id, snippet, and source) used to justify the answer.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1_flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3_maps_dto_3","from":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","relation":"transforms","semanticLabel":"dto SemanticSearchResultDto","payload":{"outputSummary":"Carries the result of a semantic search (content identifier, snippet, unit type, relevance and optional source/metadata) across application boundaries.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15_invokes_15","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15","relation":"calls","semanticLabel":"Program (top-level startup)","payload":{"outputSummary":"Create the WebAssemblyHostBuilder, register application and platform services, add HTTP client and dummy server-only stubs, then build and run the WASM host.","expandedLabel":"handles-route"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_method_nexusreader_web_client_program_cs_getservice_71_invokes_71","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_method_nexusreader_web_client_program_cs_getservice_71","relation":"calls","semanticLabel":"GetService","payload":{"outputSummary":"Fallback service resolver stub that always returns null.","expandedLabel":"handles-route"}},{"id":"edge_flow_method_nexusreader_web_client_program_cs_getservice_71_flow_action_nexusreader_web_client_program_cs_getservice_return_71_71_returns_71","from":"flow_method_nexusreader_web_client_program_cs_getservice_71","to":"flow_action_nexusreader_web_client_program_cs_getservice_return_71_71","relation":"returns","semanticLabel":"returns null","payload":{"outputSummary":"public object? GetService(...) => null","expandedLabel":"returns"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88_invokes_88","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88","relation":"calls","semanticLabel":"FindAuthorByNameAsync","payload":{"outputSummary":"Repository lookup stub that throws because repository access is unsupported in WASM.","expandedLabel":"handles-route"}},{"id":"edge_flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88_flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88_invokes_88","from":"flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88","to":"flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88","relation":"calls","semanticLabel":"Reads repository or persistence state","payload":{"outputSummary":"public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","expandedLabel":"invokes"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61_defines_type_61","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","relation":"transforms","semanticLabel":"model ThrowingDbContextFactory","payload":{"outputSummary":"IDbContextFactory implementation that prevents use of EF DbContext in WASM by throwing on creation.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66_defines_type_66","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","relation":"transforms","semanticLabel":"model ThrowingEmbeddingGenerator","payload":{"outputSummary":"IEmbeddingGenerator implementation that disables local embedding generation in WASM (throws on GenerateAsync).","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74_defines_type_74","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","relation":"transforms","semanticLabel":"model ThrowingBookStorageService","payload":{"outputSummary":"IBookStorageService implementation that throws for all file storage operations in WASM.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84_defines_type_84","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","relation":"transforms","semanticLabel":"model ThrowingEbookRepository","payload":{"outputSummary":"IEbookRepository implementation that throws for all repository operations in WASM.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94_defines_type_94","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","relation":"transforms","semanticLabel":"model ThrowingSyncBroadcaster","payload":{"outputSummary":"ISyncBroadcaster implementation that throws because real-time broadcasting must run on the server.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_webplatformservice_18_registers_service_18","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","relation":"uses","semanticLabel":"IPlatformService","payload":{"outputSummary":"Registers platform abstraction for browser.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33_registers_service_33","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","relation":"uses","semanticLabel":"NexusAuthenticationStateProvider","payload":{"outputSummary":"Authentication state provider and wiring to AuthenticationStateProvider.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38_registers_service_38","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","relation":"uses","semanticLabel":"IKnowledgeService","payload":{"outputSummary":"Registers a WASM-specific knowledge service implementation.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_configured_httpclient_40_registers_service_40","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","relation":"uses","semanticLabel":"HttpClient (named 'NexusAPI')","payload":{"outputSummary":"Adds named HTTP client with base address and authentication header handler.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49_registers_service_49","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","relation":"uses","semanticLabel":"IDbContextFactory<AppDbContext>","payload":{"outputSummary":"Registers throw-only stub to avoid using DbContext in WASM.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_n_a_55_registers_service_55","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_n_a_55","relation":"uses","semanticLabel":"application services (via extension)","payload":{"outputSummary":"Calls AddApplication() to register application-layer services.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_wasmepubreader_56_registers_service_56","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_wasmepubreader_56","relation":"uses","semanticLabel":"IEpubReader","payload":{"outputSummary":"Registers WASM epub reader implementation.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_method_nexusreader_web_client_program_cs_run_wasm_host_59_configures_pipeline_59","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_method_nexusreader_web_client_program_cs_run_wasm_host_59","relation":"calls","semanticLabel":"unknown","payload":{"outputSummary":"unknown","expandedLabel":"configures-pipeline"}}],"nodes":[{"id":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":5},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","kind":"dependency","label":"CitationDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":11},{"id":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":3},{"id":"flow_file_nexusreader_web_client_program_cs_file_1","kind":"service","label":"Program.cs","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":1},{"id":"flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15","kind":"method","label":"Program (top-level startup)","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":15},{"id":"flow_method_nexusreader_web_client_program_cs_getservice_71","kind":"method","label":"GetService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_action_nexusreader_web_client_program_cs_getservice_return_71_71","kind":"return","label":"returns null","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88","kind":"method","label":"FindAuthorByNameAsync","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":61},{"id":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","kind":"dependency","label":"ThrowingEmbeddingGenerator","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":66},{"id":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","kind":"dependency","label":"ThrowingBookStorageService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":74},{"id":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","kind":"dependency","label":"ThrowingEbookRepository","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":84},{"id":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","kind":"dependency","label":"ThrowingSyncBroadcaster","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":94},{"id":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","kind":"dependency","label":"WebPlatformService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":18},{"id":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","kind":"dependency","label":"NexusAuthenticationStateProvider","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":33},{"id":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","kind":"dependency","label":"WasmKnowledgeService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":38},{"id":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","kind":"dependency","label":"configured HttpClient","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":40},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":49},{"id":"flow_type_nexusreader_web_client_program_cs_n_a_55","kind":"dependency","label":"N/A","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":55},{"id":"flow_type_nexusreader_web_client_program_cs_wasmepubreader_56","kind":"dependency","label":"WasmEpubReader","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":56},{"id":"flow_method_nexusreader_web_client_program_cs_run_wasm_host_59","kind":"method","label":"Run WASM Host","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":59}]}</script>
|
|
<script type="application/json" data-ai-mermaid-metadata="3" data-ai-mermaid-diagram-id="control_flow_flow_1_nexusreader_web_client_program_cs">{"edges":[{"id":"edge_flow_method_nexusreader_web_client_program_cs_getservice_71_flow_action_nexusreader_web_client_program_cs_getservice_return_71_71_returns_71","from":"flow_method_nexusreader_web_client_program_cs_getservice_71","to":"flow_action_nexusreader_web_client_program_cs_getservice_return_71_71","relation":"returns","semanticLabel":"returns null","payload":{"outputSummary":"public object? GetService(...) => null","expandedLabel":"returns"}},{"id":"edge_flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88_flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88_invokes_88","from":"flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88","to":"flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88","relation":"calls","semanticLabel":"Reads repository or persistence state","payload":{"outputSummary":"public Task<Author?> FindAuthorByNameAsync(string name, CancellationToken cancellationToken = default) => throw new NotSupportedException(ErrorMessage);","expandedLabel":"invokes"}}],"nodes":[{"id":"flow_file_nexusreader_web_client_program_cs_file_1","kind":"service","label":"Program.cs","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":1},{"id":"flow_method_nexusreader_web_client_program_cs_program_top_level_startup_15","kind":"method","label":"Program (top-level startup)","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":15},{"id":"flow_method_nexusreader_web_client_program_cs_getservice_71","kind":"method","label":"GetService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_action_nexusreader_web_client_program_cs_getservice_return_71_71","kind":"return","label":"returns null","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_method_nexusreader_web_client_program_cs_findauthorbynameasync_88","kind":"method","label":"FindAuthorByNameAsync","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_method_nexusreader_web_client_program_cs_run_wasm_host_59","kind":"method","label":"Run WASM Host","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":59}]}</script>
|
|
<script type="application/json" data-ai-mermaid-metadata="4" data-ai-mermaid-diagram-id="contracts_flow_1_nexusreader_web_client_program_cs">{"edges":[{"id":"edge_flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1_flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5_maps_dto_5","from":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","relation":"transforms","semanticLabel":"dto GroundedResponseDto","payload":{"outputSummary":"Carries an AI-generated answer and a list of provenance citations back to callers.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1_flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11_maps_dto_11","from":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","relation":"transforms","semanticLabel":"dto CitationDto","payload":{"outputSummary":"Represents a single provenance item (chunk id, snippet, and source) used to justify the answer.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1_flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3_maps_dto_3","from":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","relation":"transforms","semanticLabel":"dto SemanticSearchResultDto","payload":{"outputSummary":"Carries the result of a semantic search (content identifier, snippet, unit type, relevance and optional source/metadata) across application boundaries.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61_defines_type_61","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","relation":"transforms","semanticLabel":"model ThrowingDbContextFactory","payload":{"outputSummary":"IDbContextFactory implementation that prevents use of EF DbContext in WASM by throwing on creation.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66_defines_type_66","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","relation":"transforms","semanticLabel":"model ThrowingEmbeddingGenerator","payload":{"outputSummary":"IEmbeddingGenerator implementation that disables local embedding generation in WASM (throws on GenerateAsync).","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74_defines_type_74","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","relation":"transforms","semanticLabel":"model ThrowingBookStorageService","payload":{"outputSummary":"IBookStorageService implementation that throws for all file storage operations in WASM.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84_defines_type_84","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","relation":"transforms","semanticLabel":"model ThrowingEbookRepository","payload":{"outputSummary":"IEbookRepository implementation that throws for all repository operations in WASM.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94_defines_type_94","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","relation":"transforms","semanticLabel":"model ThrowingSyncBroadcaster","payload":{"outputSummary":"ISyncBroadcaster implementation that throws because real-time broadcasting must run on the server.","expandedLabel":"defines-type"}}],"nodes":[{"id":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":5},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","kind":"dependency","label":"CitationDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":11},{"id":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":3},{"id":"flow_file_nexusreader_web_client_program_cs_file_1","kind":"service","label":"Program.cs","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":1},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":61},{"id":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","kind":"dependency","label":"ThrowingEmbeddingGenerator","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":66},{"id":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","kind":"dependency","label":"ThrowingBookStorageService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":74},{"id":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","kind":"dependency","label":"ThrowingEbookRepository","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":84},{"id":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","kind":"dependency","label":"ThrowingSyncBroadcaster","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":94},{"id":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","kind":"dependency","label":"WebPlatformService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":18},{"id":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","kind":"dependency","label":"NexusAuthenticationStateProvider","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":33},{"id":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","kind":"dependency","label":"WasmKnowledgeService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":38},{"id":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","kind":"dependency","label":"configured HttpClient","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":40},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":49},{"id":"flow_type_nexusreader_web_client_program_cs_n_a_55","kind":"dependency","label":"N/A","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":55},{"id":"flow_type_nexusreader_web_client_program_cs_wasmepubreader_56","kind":"dependency","label":"WasmEpubReader","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":56}]}</script>
|
|
<script type="application/json" data-ai-mermaid-metadata="5" data-ai-mermaid-diagram-id="layer_flow_1_nexusreader_web_client_program_cs">{"edges":[{"id":"edge_flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1_flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5_maps_dto_5","from":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","relation":"transforms","semanticLabel":"dto GroundedResponseDto","payload":{"outputSummary":"Carries an AI-generated answer and a list of provenance citations back to callers.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1_flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11_maps_dto_11","from":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","relation":"transforms","semanticLabel":"dto CitationDto","payload":{"outputSummary":"Represents a single provenance item (chunk id, snippet, and source) used to justify the answer.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1_flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3_maps_dto_3","from":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","to":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","relation":"transforms","semanticLabel":"dto SemanticSearchResultDto","payload":{"outputSummary":"Carries the result of a semantic search (content identifier, snippet, unit type, relevance and optional source/metadata) across application boundaries.","expandedLabel":"maps-dto"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61_defines_type_61","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","relation":"transforms","semanticLabel":"model ThrowingDbContextFactory","payload":{"outputSummary":"IDbContextFactory implementation that prevents use of EF DbContext in WASM by throwing on creation.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66_defines_type_66","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","relation":"transforms","semanticLabel":"model ThrowingEmbeddingGenerator","payload":{"outputSummary":"IEmbeddingGenerator implementation that disables local embedding generation in WASM (throws on GenerateAsync).","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74_defines_type_74","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","relation":"transforms","semanticLabel":"model ThrowingBookStorageService","payload":{"outputSummary":"IBookStorageService implementation that throws for all file storage operations in WASM.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84_defines_type_84","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","relation":"transforms","semanticLabel":"model ThrowingEbookRepository","payload":{"outputSummary":"IEbookRepository implementation that throws for all repository operations in WASM.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94_defines_type_94","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","relation":"transforms","semanticLabel":"model ThrowingSyncBroadcaster","payload":{"outputSummary":"ISyncBroadcaster implementation that throws because real-time broadcasting must run on the server.","expandedLabel":"defines-type"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_webplatformservice_18_registers_service_18","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","relation":"uses","semanticLabel":"IPlatformService","payload":{"outputSummary":"Registers platform abstraction for browser.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33_registers_service_33","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","relation":"uses","semanticLabel":"NexusAuthenticationStateProvider","payload":{"outputSummary":"Authentication state provider and wiring to AuthenticationStateProvider.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38_registers_service_38","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","relation":"uses","semanticLabel":"IKnowledgeService","payload":{"outputSummary":"Registers a WASM-specific knowledge service implementation.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_configured_httpclient_40_registers_service_40","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","relation":"uses","semanticLabel":"HttpClient (named 'NexusAPI')","payload":{"outputSummary":"Adds named HTTP client with base address and authentication header handler.","expandedLabel":"registers-service"}},{"id":"edge_flow_file_nexusreader_web_client_program_cs_file_1_flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49_registers_service_49","from":"flow_file_nexusreader_web_client_program_cs_file_1","to":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","relation":"uses","semanticLabel":"IDbContextFactory<AppDbContext>","payload":{"outputSummary":"Registers throw-only stub to avoid using DbContext in WASM.","expandedLabel":"registers-service"}}],"nodes":[{"id":"flow_file_nexusreader_application_dtos_ai_groundedresponsedto_cs_file_1","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_groundedresponsedto_5","kind":"dependency","label":"GroundedResponseDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":5},{"id":"flow_type_nexusreader_application_dtos_ai_groundedresponsedto_cs_citationdto_11","kind":"dependency","label":"CitationDto","sourcePath":"NexusReader.Application/DTOs/AI/GroundedResponseDto.cs","sourceLine":11},{"id":"flow_file_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_file_1","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":1},{"id":"flow_type_nexusreader_application_dtos_ai_semanticsearchresultdto_cs_semanticsearchresultdto_3","kind":"dependency","label":"SemanticSearchResultDto","sourcePath":"NexusReader.Application/DTOs/AI/SemanticSearchResultDto.cs","sourceLine":3},{"id":"flow_file_nexusreader_web_client_program_cs_file_1","kind":"service","label":"Program.cs","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":1},{"id":"flow_action_nexusreader_web_client_program_cs_getservice_return_71_71","kind":"return","label":"returns null","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":71},{"id":"flow_action_nexusreader_web_client_program_cs_findauthorbynameasync_repository_read_88_88","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":88},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_61","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":61},{"id":"flow_type_nexusreader_web_client_program_cs_throwingembeddinggenerator_66","kind":"dependency","label":"ThrowingEmbeddingGenerator","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":66},{"id":"flow_type_nexusreader_web_client_program_cs_throwingbookstorageservice_74","kind":"dependency","label":"ThrowingBookStorageService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":74},{"id":"flow_type_nexusreader_web_client_program_cs_throwingebookrepository_84","kind":"dependency","label":"ThrowingEbookRepository","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":84},{"id":"flow_type_nexusreader_web_client_program_cs_throwingsyncbroadcaster_94","kind":"dependency","label":"ThrowingSyncBroadcaster","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":94},{"id":"flow_type_nexusreader_web_client_program_cs_webplatformservice_18","kind":"dependency","label":"WebPlatformService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":18},{"id":"flow_type_nexusreader_web_client_program_cs_nexusauthenticationstateprovider_33","kind":"dependency","label":"NexusAuthenticationStateProvider","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":33},{"id":"flow_type_nexusreader_web_client_program_cs_wasmknowledgeservice_38","kind":"dependency","label":"WasmKnowledgeService","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":38},{"id":"flow_type_nexusreader_web_client_program_cs_configured_httpclient_40","kind":"dependency","label":"configured HttpClient","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":40},{"id":"flow_type_nexusreader_web_client_program_cs_throwingdbcontextfactory_49","kind":"dependency","label":"ThrowingDbContextFactory","sourcePath":"NexusReader.Web.Client/Program.cs","sourceLine":49}]}</script>
|
|
<script type="application/json" data-ai-mermaid-metadata="6" data-ai-mermaid-diagram-id="method_flows_graph">{"edges":[{"id":"edge_flow_action_nexusreader_web_program_cs_program_top_level_branch_237_237_flow_method_nexusreader_infrastructure_realtime_synchub_cs_synchub_14_uses_service_247","from":"flow_action_nexusreader_web_program_cs_program_top_level_branch_237_237","to":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_synchub_14","relation":"uses","semanticLabel":"SyncHub","payload":{"outputSummary":"Hub mapping for realtime sync","expandedLabel":"uses-service"}},{"id":"edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_invokes_19","from":"flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1","to":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19","relation":"calls","semanticLabel":"UpdateProgress","payload":{"outputSummary":"Receives client progress updates, obtains the calling user id and forwards an UpdateReadingProgressCommand via MediatR when user is present.","expandedLabel":"handles-route"}},{"id":"edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21_invokes_21","from":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19","to":"flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21","relation":"calls","semanticLabel":"Reads repository or persistence state","payload":{"outputSummary":"var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;","expandedLabel":"invokes"}},{"id":"edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_invokes_28","from":"flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1","to":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28","relation":"calls","semanticLabel":"OnConnectedAsync","payload":{"outputSummary":"When a client connects, adds their connection to a per-user SignalR group (User_{userId}) and calls base connection logic.","expandedLabel":"handles-route"}},{"id":"edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30_invokes_30","from":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28","to":"flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30","relation":"calls","semanticLabel":"Reads repository or persistence state","payload":{"outputSummary":"var userId = Context.UserIdentifier;","expandedLabel":"invokes"}},{"id":"edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_invokes_38","from":"flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1","to":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38","relation":"calls","semanticLabel":"OnDisconnectedAsync","payload":{"outputSummary":"When a client disconnects, removes their connection from the per-user SignalR group and invokes base disconnect logic.","expandedLabel":"handles-route"}},{"id":"edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40_invokes_40","from":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38","to":"flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40","relation":"calls","semanticLabel":"Reads repository or persistence state","payload":{"outputSummary":"var userId = Context.UserIdentifier;","expandedLabel":"invokes"}},{"id":"edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_invokes_175","from":"flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1","to":"flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175","relation":"calls","semanticLabel":"CountWords","payload":{"outputSummary":"Count words in a string using whitespace separators; returns 0 for null/whitespace.","expandedLabel":"invokes"}},{"id":"edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_evaluates_condition_177","from":"flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175","to":"flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177","relation":"calls","semanticLabel":"return 0 / continue","payload":{"outputSummary":"Empty text check","expandedLabel":"evaluates-condition"}},{"id":"edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66","from":"flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1","to":"flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66","relation":"calls","semanticLabel":"EnsureDirectoryExists","payload":{"outputSummary":"Checks for directory existence and creates it if missing.","expandedLabel":"invokes"}},{"id":"edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68","from":"flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66","to":"flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68","relation":"calls","semanticLabel":"create-directory / noop","payload":{"outputSummary":"if (!Directory.Exists(path)) { Directory.CreateDirectory(path); }","expandedLabel":"evaluates-condition"}}],"nodes":[{"id":"flow_action_nexusreader_web_program_cs_program_top_level_branch_237_237","kind":"step","label":"Evaluates branch condition","sourcePath":"NexusReader.Web/Program.cs","sourceLine":237},{"id":"flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1","kind":"dependency","label":"SyncHub","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":1},{"id":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_synchub_14","kind":"method","label":"SyncHub","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":14},{"id":"flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1","kind":"service","label":"EpubReaderService","sourcePath":"NexusReader.Infrastructure/Services/EpubReaderService.cs","sourceLine":1},{"id":"flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1","kind":"service","label":"BookStorageService","sourcePath":"NexusReader.Infrastructure/Services/BookStorageService.cs","sourceLine":1},{"id":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19","kind":"method","label":"UpdateProgress","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":19},{"id":"flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":21},{"id":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28","kind":"method","label":"OnConnectedAsync","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":28},{"id":"flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":30},{"id":"flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38","kind":"method","label":"OnDisconnectedAsync","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":38},{"id":"flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40","kind":"step","label":"Reads repository or persistence state","sourcePath":"NexusReader.Infrastructure/RealTime/SyncHub.cs","sourceLine":40},{"id":"flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175","kind":"method","label":"CountWords","sourcePath":"NexusReader.Infrastructure/Services/EpubReaderService.cs","sourceLine":175},{"id":"flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177","kind":"step","label":"Empty text check","sourcePath":"NexusReader.Infrastructure/Services/EpubReaderService.cs","sourceLine":177},{"id":"flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66","kind":"method","label":"EnsureDirectoryExists","sourcePath":"NexusReader.Infrastructure/Services/BookStorageService.cs","sourceLine":66},{"id":"flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68","kind":"step","label":"Check directory existence","sourcePath":"NexusReader.Infrastructure/Services/BookStorageService.cs","sourceLine":68}]}</script>
|
|
</div>
|
|
|
|
---
|
|
|
|
## See Also
|
|
|
|
- [Data Layer, EF Core and Repositories](data-and-persistence.md)
|
|
- [Infrastructure Services: Knowledge, AI, Billing, Storage, Epub](infrastructure-services.md)
|
|
- [Real-Time Sync, SignalR and Broadcast](../flows/realtime-and-sync.md)
|
|
- [Security, Identity and Authorization](../flows/security-identity-auth.md)
|
|
- [Blazor WebAssembly Client: hosting, handlers, and platform services](../flows/web-client-wasm.md)
|
|
- [MAUI Mobile Host: App wiring and platform services](maui-mobile.md)
|
|
- [Project Overview and Architecture](../collections/overview.md)
|