{
  "version": 1,
  "generatedAt": "2026-05-25T11:41:33.166Z",
  "fileId": "file:14qnurl:bookstorageservice-cs",
  "executableScope": true,
  "executableSymbolCount": 6,
  "fileNodeId": "file:14qnurl:bookstorageservice-cs",
  "symbolNodeIds": [
    "class:gamvik:bookstorageservice",
    "method:axmshz:bookstorageservice",
    "method:1iw78py:saveebookasync",
    "method:mpmpcx:saveebookasync",
    "method:1ouv7tw:savecoverasync",
    "method:1o0t990:savecoverasync",
    "method:je6l0s:ensuredirectoryexists",
    "type:9todq3:bookstorageservice"
  ],
  "containmentEdgeIds": [
    "edge:1azilkn:contains",
    "edge:1oliq7k:contains",
    "edge:wme3te:contains",
    "edge:1wgf4g6:contains",
    "edge:1qgos9b:contains",
    "edge:1iktrwm:contains",
    "edge:1nfmhoj:contains",
    "edge:8m9rj4:defines-type"
  ],
  "relationshipEdgeIds": [
    "edge:1azilkn:contains",
    "edge:1oliq7k:contains",
    "edge:wme3te:contains",
    "edge:1wgf4g6:contains",
    "edge:1qgos9b:contains",
    "edge:1iktrwm:contains",
    "edge:1nfmhoj:contains",
    "edge:8m9rj4:defines-type"
  ],
  "integrationEdgeIds": [],
  "controlFlowFragments": [
    {
      "fragmentId": "method:axmshz:bookstorageservice__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:axmshz:bookstorageservice",
      "ownerSymbolName": "BookStorageService",
      "entryNodeId": "method:axmshz:bookstorageservice__entry",
      "exitNodeIds": [
        "method:axmshz:bookstorageservice__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:axmshz:bookstorageservice__entry",
          "kind": "entry",
          "label": "BookStorageService entry",
          "line": 14,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Ctor; captures IWebHostEnvironment for resolving web root paths."
        },
        {
          "id": "method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "kind": "statement",
          "label": "Store IWebHostEnvironment",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "_environment = environment"
        },
        {
          "id": "method:axmshz:bookstorageservice__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:axmshz:bookstorageservice__entry__method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "from": "method:axmshz:bookstorageservice__entry",
          "to": "method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "kind": "next",
          "line": 16,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:axmshz:bookstorageservice__action_16_assign_16__linear__implicit_return",
          "from": "method:axmshz:bookstorageservice__action_16_assign_16__linear",
          "to": "method:axmshz:bookstorageservice__implicit_return",
          "kind": "return",
          "line": 17,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.76,
      "lineSpan": {
        "start": 14,
        "end": 17
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 14,
          "summary": "Control-flow fragment extracted for method BookStorageService.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mpmpcx:saveebookasync__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:mpmpcx:saveebookasync",
      "ownerSymbolName": "SaveEbookAsync",
      "entryNodeId": "method:mpmpcx:saveebookasync__entry",
      "exitNodeIds": [
        "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
        "method:mpmpcx:saveebookasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:mpmpcx:saveebookasync__entry",
          "kind": "entry",
          "label": "SaveEbookAsync entry",
          "line": 19,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook."
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "kind": "statement",
          "label": "Create MemoryStream for byte[]",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "using var stream = new MemoryStream(data)"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81,
          "detail": "return await SaveEbookAsync(stream, fileName);"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return await SaveEbookAsync(stream, fileName);"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "kind": "statement",
          "label": "Delegate to Stream-based save",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "await SaveEbookAsync(stream, fileName)"
        },
        {
          "id": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "kind": "call",
          "label": "SaveEbookAsync",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88,
          "detail": "MemoryStream(stream from data), fileName"
        },
        {
          "id": "method:mpmpcx:saveebookasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:mpmpcx:saveebookasync__entry__method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "from": "method:mpmpcx:saveebookasync__entry",
          "to": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "kind": "next",
          "line": 21,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear__method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "from": "method:mpmpcx:saveebookasync__action_21_resource_create_21__linear",
          "to": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await__method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "from": "method:mpmpcx:saveebookasync__action_22_saveebookasync_await_22_0__await",
          "to": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "kind": "return",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return__method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "from": "method:mpmpcx:saveebookasync__action_22_saveebookasync_return_22_1__return",
          "to": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "kind": "next",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear__call_method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "from": "method:mpmpcx:saveebookasync__action_22_delegate_22__linear",
          "to": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "kind": "call",
          "label": "MemoryStream(stream from data), fileName",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync__implicit_return",
          "from": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "to": "method:mpmpcx:saveebookasync__implicit_return",
          "kind": "return",
          "line": 23,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync__jump_NexusReader_Infrastructure_Services_BookStorageService_cs_SaveEbookAsync",
          "fromNodeId": "method:mpmpcx:saveebookasync__call_22_SaveEbookAsync",
          "kind": "call-target",
          "targetNodeId": "method:1iw78py:saveebookasync",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "SaveEbookAsync",
          "line": 22,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Call target SaveEbookAsync resolved to NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [],
      "language": "csharp",
      "confidence": 0.8799999999999999,
      "lineSpan": {
        "start": 19,
        "end": 23
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 19,
          "summary": "Control-flow fragment extracted for method SaveEbookAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:mpmpcx:saveebookasync__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:mpmpcx:saveebookasync",
      "ownerSymbolName": "SaveEbookAsync",
      "entryNodeId": "method:mpmpcx:saveebookasync__entry",
      "exitNodeIds": [
        "method:mpmpcx:saveebookasync__action_40_saveebookasync_return_40_1__return",
        "method:mpmpcx:saveebookasync__action_40_return_40__return"
      ],
      "nodes": [
        {
          "id": "method:mpmpcx:saveebookasync__entry",
          "kind": "entry",
          "label": "SaveEbookAsync entry",
          "line": 25,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash)."
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_27_compute_27__linear",
          "kind": "statement",
          "label": "Resolve uploads folder path",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "Path.Combine(_environment.WebRootPath, \"uploads\")"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition",
          "kind": "condition",
          "label": "!Directory.Exists(path)",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "EnsureDirectoryExists(uploadsFolder)"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__true",
          "kind": "branch-true",
          "label": "create-directory",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge",
          "kind": "statement",
          "label": "merge",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists",
          "kind": "call",
          "label": "EnsureDirectoryExists",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88,
          "detail": "uploadsFolder path (Path.Combine(_environment.WebRootPath, \"uploads\"))"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_30_generate_id_30__linear",
          "kind": "statement",
          "label": "Create unique filename",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "var uniqueFileName = $\"{Guid.NewGuid()}_{fileName}\""
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_33_persistence_write_33__linear",
          "kind": "statement",
          "label": "Write stream to file",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "using FileStream(filePath, FileMode.Create) and await data.CopyToAsync(fileStream)"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_35_saveebookasync_await_35_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81,
          "detail": "await data.CopyToAsync(fileStream);"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_40_saveebookasync_return_40_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return $\"uploads/{uniqueFileName}\";"
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_40_return_40__return",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return $\"uploads/{uniqueFileName}\""
        }
      ],
      "edges": [
        {
          "id": "method:mpmpcx:saveebookasync__entry__method:mpmpcx:saveebookasync__action_27_compute_27__linear",
          "from": "method:mpmpcx:saveebookasync__entry",
          "to": "method:mpmpcx:saveebookasync__action_27_compute_27__linear",
          "kind": "next",
          "line": 27,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_27_compute_27__linear__method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition",
          "from": "method:mpmpcx:saveebookasync__action_27_compute_27__linear",
          "to": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition__method:mpmpcx:saveebookasync__action_28_guard_clause_28__true",
          "from": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition",
          "to": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__true",
          "kind": "condition-true",
          "label": "create-directory",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition__method:mpmpcx:saveebookasync__action_28_guard_clause_28__false",
          "from": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__condition",
          "to": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__true__method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge",
          "from": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__true",
          "to": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__false__method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge",
          "from": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__false",
          "to": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge",
          "kind": "next",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge__call_method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists",
          "from": "method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge",
          "to": "method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists",
          "kind": "call",
          "label": "uploadsFolder path (Path.Combine(_environment.WebRootPath, \"uploads\"))",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists__method:mpmpcx:saveebookasync__action_30_generate_id_30__linear",
          "from": "method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists",
          "to": "method:mpmpcx:saveebookasync__action_30_generate_id_30__linear",
          "kind": "next",
          "line": 30,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_30_generate_id_30__linear__method:mpmpcx:saveebookasync__action_33_persistence_write_33__linear",
          "from": "method:mpmpcx:saveebookasync__action_30_generate_id_30__linear",
          "to": "method:mpmpcx:saveebookasync__action_33_persistence_write_33__linear",
          "kind": "next",
          "line": 33,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_33_persistence_write_33__linear__method:mpmpcx:saveebookasync__action_35_saveebookasync_await_35_0__await",
          "from": "method:mpmpcx:saveebookasync__action_33_persistence_write_33__linear",
          "to": "method:mpmpcx:saveebookasync__action_35_saveebookasync_await_35_0__await",
          "kind": "next",
          "line": 35,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_35_saveebookasync_await_35_0__await__method:mpmpcx:saveebookasync__action_40_saveebookasync_return_40_1__return",
          "from": "method:mpmpcx:saveebookasync__action_35_saveebookasync_await_35_0__await",
          "to": "method:mpmpcx:saveebookasync__action_40_saveebookasync_return_40_1__return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:mpmpcx:saveebookasync__action_40_saveebookasync_return_40_1__return__method:mpmpcx:saveebookasync__action_40_return_40__return",
          "from": "method:mpmpcx:saveebookasync__action_40_saveebookasync_return_40_1__return",
          "to": "method:mpmpcx:saveebookasync__action_40_return_40__return",
          "kind": "return",
          "line": 40,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists__jump_NexusReader_Infrastructure_Services_BookStorageService_cs_EnsureDirectoryExists",
          "fromNodeId": "method:mpmpcx:saveebookasync__call_28_EnsureDirectoryExists",
          "kind": "call-target",
          "targetNodeId": "method:je6l0s:ensuredirectoryexists",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "EnsureDirectoryExists",
          "line": 28,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Call target EnsureDirectoryExists resolved to NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:mpmpcx:saveebookasync__action_28_guard_clause_28__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 25,
        "end": 41
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 25,
          "summary": "Control-flow fragment extracted for method SaveEbookAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1o0t990:savecoverasync__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:1o0t990:savecoverasync",
      "ownerSymbolName": "SaveCoverAsync",
      "entryNodeId": "method:1o0t990:savecoverasync__entry",
      "exitNodeIds": [
        "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
        "method:1o0t990:savecoverasync__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:1o0t990:savecoverasync__entry",
          "kind": "entry",
          "label": "SaveCoverAsync entry",
          "line": 43,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input."
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "kind": "condition",
          "label": "data == null || data.Length == 0",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "if (data == null || data.Length == 0) return null;"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "kind": "branch-true",
          "label": "return-null",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "kind": "condition",
          "label": "data == null || data.Length == 0",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9,
          "detail": "if (data == null || data.Length == 0) return null;"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "kind": "branch-true",
          "label": "exit",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "kind": "statement",
          "label": "Create MemoryStream for byte[]",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "using var stream = new MemoryStream(data)"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81,
          "detail": "return await SaveCoverAsync(stream, fileName);"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "kind": "return",
          "label": "Returns result",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return await SaveCoverAsync(stream, fileName);"
        },
        {
          "id": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "kind": "call",
          "label": "SaveCoverAsync",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88,
          "detail": "MemoryStream(stream from data), fileName"
        },
        {
          "id": "method:1o0t990:savecoverasync__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:1o0t990:savecoverasync__entry__method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "from": "method:1o0t990:savecoverasync__entry",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition__method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "kind": "condition-true",
          "label": "return-null",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition__method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__condition",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true__method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__true",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false__method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__false",
          "to": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "from": "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "kind": "condition-true",
          "label": "exit",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false__method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
          "to": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "kind": "next",
          "line": 45,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.9
        },
        {
          "id": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge__method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "from": "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
          "to": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "kind": "next",
          "line": 46,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear__method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "from": "method:1o0t990:savecoverasync__action_46_resource_create_46__linear",
          "to": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "kind": "next",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await__method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "from": "method:1o0t990:savecoverasync__action_47_savecoverasync_await_47_1__await",
          "to": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "kind": "return",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return__call_method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "from": "method:1o0t990:savecoverasync__action_47_savecoverasync_return_47_2__return",
          "to": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "kind": "call",
          "label": "MemoryStream(stream from data), fileName",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync__implicit_return",
          "from": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "to": "method:1o0t990:savecoverasync__implicit_return",
          "kind": "return",
          "line": 48,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync__jump_NexusReader_Infrastructure_Services_BookStorageService_cs_SaveCoverAsync",
          "fromNodeId": "method:1o0t990:savecoverasync__call_47_SaveCoverAsync",
          "kind": "call-target",
          "targetNodeId": "method:1ouv7tw:savecoverasync",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "SaveCoverAsync",
          "line": 47,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Call target SaveCoverAsync resolved to NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1o0t990:savecoverasync__action_45_guard_clause_45__merge",
        "method:1o0t990:savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 43,
        "end": 48
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 43,
          "summary": "Control-flow fragment extracted for method SaveCoverAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:1o0t990:savecoverasync__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:1o0t990:savecoverasync",
      "ownerSymbolName": "SaveCoverAsync",
      "entryNodeId": "method:1o0t990:savecoverasync__entry",
      "exitNodeIds": [
        "method:1o0t990:savecoverasync__action_63_savecoverasync_return_63_1__return",
        "method:1o0t990:savecoverasync__action_63_return_63__return"
      ],
      "nodes": [
        {
          "id": "method:1o0t990:savecoverasync__entry",
          "kind": "entry",
          "label": "SaveCoverAsync entry",
          "line": 50,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable)."
        },
        {
          "id": "method:1o0t990:savecoverasync__action_52_compute_52__linear",
          "kind": "statement",
          "label": "Resolve covers folder path",
          "line": 52,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "Path.Combine(_environment.WebRootPath, \"covers\")"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__condition",
          "kind": "condition",
          "label": "!Directory.Exists(path)",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "EnsureDirectoryExists(coversFolder)"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__true",
          "kind": "branch-true",
          "label": "create-directory",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__merge",
          "kind": "statement",
          "label": "merge",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists",
          "kind": "call",
          "label": "EnsureDirectoryExists",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88,
          "detail": "coversFolder path (Path.Combine(_environment.WebRootPath, \"covers\"))"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_55_generate_id_55__linear",
          "kind": "statement",
          "label": "Create unique filename",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "var uniqueFileName = $\"{Guid.NewGuid()}_{fileName}\""
        },
        {
          "id": "method:1o0t990:savecoverasync__action_58_persistence_write_58__linear",
          "kind": "statement",
          "label": "Write stream to file",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "using FileStream(filePath, FileMode.Create) and await data.CopyToAsync(fileStream)"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_60_savecoverasync_await_60_0__await",
          "kind": "await",
          "label": "Waits for async work",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81,
          "detail": "await data.CopyToAsync(fileStream);"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_63_savecoverasync_return_63_1__return",
          "kind": "return",
          "label": "Returns result",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return $\"covers/{uniqueFileName}\";"
        },
        {
          "id": "method:1o0t990:savecoverasync__action_63_return_63__return",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "return $\"covers/{uniqueFileName}\""
        }
      ],
      "edges": [
        {
          "id": "method:1o0t990:savecoverasync__entry__method:1o0t990:savecoverasync__action_52_compute_52__linear",
          "from": "method:1o0t990:savecoverasync__entry",
          "to": "method:1o0t990:savecoverasync__action_52_compute_52__linear",
          "kind": "next",
          "line": 52,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_52_compute_52__linear__method:1o0t990:savecoverasync__action_53_guard_clause_53__condition",
          "from": "method:1o0t990:savecoverasync__action_52_compute_52__linear",
          "to": "method:1o0t990:savecoverasync__action_53_guard_clause_53__condition",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__condition__method:1o0t990:savecoverasync__action_53_guard_clause_53__true",
          "from": "method:1o0t990:savecoverasync__action_53_guard_clause_53__condition",
          "to": "method:1o0t990:savecoverasync__action_53_guard_clause_53__true",
          "kind": "condition-true",
          "label": "create-directory",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__condition__method:1o0t990:savecoverasync__action_53_guard_clause_53__false",
          "from": "method:1o0t990:savecoverasync__action_53_guard_clause_53__condition",
          "to": "method:1o0t990:savecoverasync__action_53_guard_clause_53__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__true__method:1o0t990:savecoverasync__action_53_guard_clause_53__merge",
          "from": "method:1o0t990:savecoverasync__action_53_guard_clause_53__true",
          "to": "method:1o0t990:savecoverasync__action_53_guard_clause_53__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__false__method:1o0t990:savecoverasync__action_53_guard_clause_53__merge",
          "from": "method:1o0t990:savecoverasync__action_53_guard_clause_53__false",
          "to": "method:1o0t990:savecoverasync__action_53_guard_clause_53__merge",
          "kind": "next",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_53_guard_clause_53__merge__call_method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists",
          "from": "method:1o0t990:savecoverasync__action_53_guard_clause_53__merge",
          "to": "method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists",
          "kind": "call",
          "label": "coversFolder path (Path.Combine(_environment.WebRootPath, \"covers\"))",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.88
        },
        {
          "id": "method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists__method:1o0t990:savecoverasync__action_55_generate_id_55__linear",
          "from": "method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists",
          "to": "method:1o0t990:savecoverasync__action_55_generate_id_55__linear",
          "kind": "next",
          "line": 55,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_55_generate_id_55__linear__method:1o0t990:savecoverasync__action_58_persistence_write_58__linear",
          "from": "method:1o0t990:savecoverasync__action_55_generate_id_55__linear",
          "to": "method:1o0t990:savecoverasync__action_58_persistence_write_58__linear",
          "kind": "next",
          "line": 58,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_58_persistence_write_58__linear__method:1o0t990:savecoverasync__action_60_savecoverasync_await_60_0__await",
          "from": "method:1o0t990:savecoverasync__action_58_persistence_write_58__linear",
          "to": "method:1o0t990:savecoverasync__action_60_savecoverasync_await_60_0__await",
          "kind": "next",
          "line": 60,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.81
        },
        {
          "id": "method:1o0t990:savecoverasync__action_60_savecoverasync_await_60_0__await__method:1o0t990:savecoverasync__action_63_savecoverasync_return_63_1__return",
          "from": "method:1o0t990:savecoverasync__action_60_savecoverasync_await_60_0__await",
          "to": "method:1o0t990:savecoverasync__action_63_savecoverasync_return_63_1__return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:1o0t990:savecoverasync__action_63_savecoverasync_return_63_1__return__method:1o0t990:savecoverasync__action_63_return_63__return",
          "from": "method:1o0t990:savecoverasync__action_63_savecoverasync_return_63_1__return",
          "to": "method:1o0t990:savecoverasync__action_63_return_63__return",
          "kind": "return",
          "line": 63,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        }
      ],
      "jumpTargets": [
        {
          "id": "method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists__jump_NexusReader_Infrastructure_Services_BookStorageService_cs_EnsureDirectoryExists",
          "fromNodeId": "method:1o0t990:savecoverasync__call_53_EnsureDirectoryExists",
          "kind": "call-target",
          "targetNodeId": "method:je6l0s:ensuredirectoryexists",
          "targetPath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "targetHint": "EnsureDirectoryExists",
          "line": 53,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Call target EnsureDirectoryExists resolved to NexusReader.Infrastructure/Services/BookStorageService.cs.",
          "status": "resolved"
        }
      ],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:1o0t990:savecoverasync__action_53_guard_clause_53__merge"
      ],
      "language": "csharp",
      "confidence": 0.98,
      "lineSpan": {
        "start": 50,
        "end": 64
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 50,
          "summary": "Control-flow fragment extracted for method SaveCoverAsync.",
          "kind": "file-summary"
        }
      ]
    },
    {
      "fragmentId": "method:je6l0s:ensuredirectoryexists__fragment",
      "ownerFileId": "file:14qnurl:bookstorageservice-cs",
      "ownerSymbolId": "method:je6l0s:ensuredirectoryexists",
      "ownerSymbolName": "EnsureDirectoryExists",
      "entryNodeId": "method:je6l0s:ensuredirectoryexists__entry",
      "exitNodeIds": [
        "method:je6l0s:ensuredirectoryexists__implicit_return"
      ],
      "nodes": [
        {
          "id": "method:je6l0s:ensuredirectoryexists__entry",
          "kind": "entry",
          "label": "EnsureDirectoryExists entry",
          "line": 66,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.99,
          "detail": "Checks for the existence of a directory and creates it if missing."
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "kind": "condition",
          "label": "!Directory.Exists(path)",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78,
          "detail": "if (!Directory.Exists(path))"
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "kind": "branch-true",
          "label": "true",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "kind": "branch-false",
          "label": "false",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "kind": "statement",
          "label": "merge",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "kind": "condition",
          "label": "!Directory.Exists(path)",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7,
          "detail": "Directory.CreateDirectory(path)"
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "kind": "branch-true",
          "label": "create-directory",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "kind": "branch-false",
          "label": "continue",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "kind": "statement",
          "label": "merge",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__implicit_return",
          "kind": "return",
          "label": "return",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72,
          "detail": "Implicit method exit inferred from method boundary."
        }
      ],
      "edges": [
        {
          "id": "method:je6l0s:ensuredirectoryexists__entry__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "from": "method:je6l0s:ensuredirectoryexists__entry",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "kind": "condition-true",
          "label": "true",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "kind": "condition-false",
          "label": "false",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false__method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.78
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "kind": "condition-true",
          "label": "create-directory",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__condition",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "kind": "condition-false",
          "label": "continue",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__true",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false__method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__false",
          "to": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "kind": "next",
          "line": 68,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.7
        },
        {
          "id": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge__implicit_return",
          "from": "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge",
          "to": "method:je6l0s:ensuredirectoryexists__implicit_return",
          "kind": "return",
          "line": 72,
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "confidence": 0.72
        }
      ],
      "jumpTargets": [],
      "exceptionTargets": [],
      "loopBackEdges": [],
      "mergeNodeIds": [
        "method:je6l0s:ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
        "method:je6l0s:ensuredirectoryexists__action_68_guard_clause_68__merge"
      ],
      "language": "csharp",
      "confidence": 0.97,
      "lineSpan": {
        "start": 66,
        "end": 72
      },
      "unsupportedConstructs": [],
      "evidence": [
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "line": 66,
          "summary": "Control-flow fragment extracted for method EnsureDirectoryExists.",
          "kind": "file-summary"
        }
      ]
    }
  ],
  "unresolvedJumps": [],
  "diagrams": [
    {
      "id": "file_14qnurl_bookstorageservice_cs_neighborhood_view",
      "purpose": "neighborhood-view",
      "title": "BookStorageService Neighborhood",
      "required": true,
      "diagram": {
        "id": "file_14qnurl_bookstorageservice_cs_neighborhood_view",
        "kind": "dependency-map",
        "title": "BookStorageService Neighborhood",
        "direction": "LR",
        "nodes": [
          {
            "id": "file_14qnurl_bookstorageservice_cs",
            "kind": "service",
            "label": "BookStorageService",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs"
          },
          {
            "id": "class_gamvik_bookstorageservice",
            "kind": "service",
            "label": "BookStorageService",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs"
          },
          {
            "id": "method_axmshz_bookstorageservice",
            "kind": "method",
            "label": "BookStorageService()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 14
          },
          {
            "id": "method_1iw78py_saveebookasync",
            "kind": "method",
            "label": "SaveEbookAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 19
          },
          {
            "id": "method_mpmpcx_saveebookasync",
            "kind": "method",
            "label": "SaveEbookAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 25
          },
          {
            "id": "method_1ouv7tw_savecoverasync",
            "kind": "method",
            "label": "SaveCoverAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 43
          },
          {
            "id": "method_1o0t990_savecoverasync",
            "kind": "method",
            "label": "SaveCoverAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 50
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists",
            "kind": "method",
            "label": "EnsureDirectoryExists()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 66
          },
          {
            "id": "type_9todq3_bookstorageservice",
            "kind": "document",
            "label": "BookStorageService",
            "shape": "doc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 10
          }
        ],
        "edges": [],
        "metadata": {
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ]
        },
        "subgraphs": []
      },
      "mermaidSource": "flowchart LR\n    class_gamvik_bookstorageservice(\"BookStorageService\")\n    file_14qnurl_bookstorageservice_cs(\"BookStorageService\")\n    method_1iw78py_saveebookasync[[\"SaveEbookAsync()\"]]\n    method_1o0t990_savecoverasync[[\"SaveCoverAsync()\"]]\n    method_1ouv7tw_savecoverasync[[\"SaveCoverAsync()\"]]\n    method_axmshz_bookstorageservice[[\"BookStorageService()\"]]\n    method_je6l0s_ensuredirectoryexists[[\"EnsureDirectoryExists()\"]]\n    method_mpmpcx_saveebookasync[[\"SaveEbookAsync()\"]]\n    type_9todq3_bookstorageservice[/\"BookStorageService\"/]",
      "warnings": []
    },
    {
      "id": "file_14qnurl_bookstorageservice_cs_execution_view",
      "purpose": "execution-overview",
      "title": "BookStorageService Execution Overview",
      "required": true,
      "diagram": {
        "id": "file_14qnurl_bookstorageservice_cs_execution_view",
        "kind": "method-flow",
        "title": "BookStorageService Execution Overview",
        "direction": "TD",
        "nodes": [
          {
            "id": "class_gamvik_bookstorageservice",
            "kind": "service",
            "label": "BookStorageService",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs"
          },
          {
            "id": "method_axmshz_bookstorageservice",
            "kind": "method",
            "label": "BookStorageService()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 14
          },
          {
            "id": "method_1iw78py_saveebookasync",
            "kind": "method",
            "label": "SaveEbookAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 19
          },
          {
            "id": "method_mpmpcx_saveebookasync",
            "kind": "method",
            "label": "SaveEbookAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 25
          },
          {
            "id": "method_1ouv7tw_savecoverasync",
            "kind": "method",
            "label": "SaveCoverAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 43
          },
          {
            "id": "method_1o0t990_savecoverasync",
            "kind": "method",
            "label": "SaveCoverAsync()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 50
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists",
            "kind": "method",
            "label": "EnsureDirectoryExists()",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 66
          },
          {
            "id": "unresolved_unresolved_1p1xq63_call_target",
            "kind": "prompt",
            "label": "Unresolved: SaveEbookAsync",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 22
          },
          {
            "id": "unresolved_unresolved_1a9m2p_call_target",
            "kind": "prompt",
            "label": "Unresolved: EnsureDirectoryExists",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 28
          },
          {
            "id": "unresolved_unresolved_zjmxe8_call_target",
            "kind": "prompt",
            "label": "Unresolved: SaveCoverAsync",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "unresolved_unresolved_wakoep_call_target",
            "kind": "prompt",
            "label": "Unresolved: EnsureDirectoryExists",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 53
          }
        ],
        "edges": [
          {
            "id": "class_gamvik_bookstorageservice_contains_method_axmshz_bookstorageservice",
            "from": "class_gamvik_bookstorageservice",
            "to": "method_axmshz_bookstorageservice",
            "semanticLabel": "contains executable method",
            "visibleLabel": "contains",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 14
          },
          {
            "id": "class_gamvik_bookstorageservice_contains_method_1iw78py_saveebookasync",
            "from": "class_gamvik_bookstorageservice",
            "to": "method_1iw78py_saveebookasync",
            "semanticLabel": "contains executable method",
            "visibleLabel": "contains",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 19
          },
          {
            "id": "class_gamvik_bookstorageservice_contains_method_mpmpcx_saveebookasync",
            "from": "class_gamvik_bookstorageservice",
            "to": "method_mpmpcx_saveebookasync",
            "semanticLabel": "contains executable method",
            "visibleLabel": "contains",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 25
          },
          {
            "id": "class_gamvik_bookstorageservice_contains_method_1ouv7tw_savecoverasync",
            "from": "class_gamvik_bookstorageservice",
            "to": "method_1ouv7tw_savecoverasync",
            "semanticLabel": "contains executable method",
            "visibleLabel": "contains",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 43
          },
          {
            "id": "class_gamvik_bookstorageservice_contains_method_1o0t990_savecoverasync",
            "from": "class_gamvik_bookstorageservice",
            "to": "method_1o0t990_savecoverasync",
            "semanticLabel": "contains executable method",
            "visibleLabel": "contains",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 50
          },
          {
            "id": "class_gamvik_bookstorageservice_contains_method_je6l0s_ensuredirectoryexists",
            "from": "class_gamvik_bookstorageservice",
            "to": "method_je6l0s_ensuredirectoryexists",
            "semanticLabel": "contains executable method",
            "visibleLabel": "contains",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 66
          },
          {
            "id": "unresolved_1p1xq63_call_target_edge",
            "from": "method_mpmpcx_saveebookasync",
            "to": "unresolved_unresolved_1p1xq63_call_target",
            "semanticLabel": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
            "visibleLabel": "unresolved call",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 22
          },
          {
            "id": "unresolved_1a9m2p_call_target_edge",
            "from": "method_mpmpcx_saveebookasync",
            "to": "unresolved_unresolved_1a9m2p_call_target",
            "semanticLabel": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
            "visibleLabel": "unresolved call",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 28
          },
          {
            "id": "unresolved_zjmxe8_call_target_edge",
            "from": "method_1o0t990_savecoverasync",
            "to": "unresolved_unresolved_zjmxe8_call_target",
            "semanticLabel": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
            "visibleLabel": "unresolved call",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "unresolved_wakoep_call_target_edge",
            "from": "method_1o0t990_savecoverasync",
            "to": "unresolved_unresolved_wakoep_call_target",
            "semanticLabel": "Call target was discovered in the summary but could not be matched to an extracted method symbol.",
            "visibleLabel": "unresolved call",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 53
          }
        ],
        "metadata": {
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "warnings": [
            "Execution overview includes unresolved targets. Use validation artifacts before treating the flow as complete."
          ]
        },
        "subgraphs": []
      },
      "mermaidSource": "flowchart TD\n    class_gamvik_bookstorageservice(\"BookStorageService\")\n    method_1iw78py_saveebookasync[[\"SaveEbookAsync()\"]]\n    method_1o0t990_savecoverasync[[\"SaveCoverAsync()\"]]\n    method_1ouv7tw_savecoverasync[[\"SaveCoverAsync()\"]]\n    method_axmshz_bookstorageservice[[\"BookStorageService()\"]]\n    method_je6l0s_ensuredirectoryexists[[\"EnsureDirectoryExists()\"]]\n    method_mpmpcx_saveebookasync[[\"SaveEbookAsync()\"]]\n    unresolved_unresolved_1a9m2p_call_target{\"Unresolved: EnsureDirectoryExists\"}\n    unresolved_unresolved_1p1xq63_call_target{\"Unresolved: SaveEbookAsync\"}\n    unresolved_unresolved_wakoep_call_target{\"Unresolved: EnsureDirectoryExists\"}\n    unresolved_unresolved_zjmxe8_call_target{\"Unresolved: SaveCoverAsync\"}\n    class_gamvik_bookstorageservice -->|contains| method_1iw78py_saveebookasync\n    class_gamvik_bookstorageservice -->|contains| method_1o0t990_savecoverasync\n    class_gamvik_bookstorageservice -->|contains| method_1ouv7tw_savecoverasync\n    class_gamvik_bookstorageservice -->|contains| method_axmshz_bookstorageservice\n    class_gamvik_bookstorageservice -->|contains| method_je6l0s_ensuredirectoryexists\n    class_gamvik_bookstorageservice -->|contains| method_mpmpcx_saveebookasync\n    method_1o0t990_savecoverasync -->|unresolved call| unresolved_unresolved_wakoep_call_target\n    method_1o0t990_savecoverasync -->|unresolved call| unresolved_unresolved_zjmxe8_call_target\n    method_mpmpcx_saveebookasync -->|unresolved call| unresolved_unresolved_1a9m2p_call_target\n    method_mpmpcx_saveebookasync -->|unresolved call| unresolved_unresolved_1p1xq63_call_target",
      "warnings": []
    },
    {
      "id": "method_1o0t990_savecoverasync__fragment_diagram",
      "purpose": "control-flow",
      "title": "SaveCoverAsync() Control Flow",
      "required": true,
      "diagram": {
        "id": "method_1o0t990_savecoverasync__fragment_diagram",
        "kind": "control-flow",
        "title": "SaveCoverAsync() Control Flow",
        "direction": "TD",
        "nodes": [
          {
            "id": "method_1o0t990_savecoverasync__entry",
            "kind": "step",
            "label": "SaveCoverAsync entry",
            "shape": "stadium",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 43
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__condition",
            "kind": "step",
            "label": "data == null || data.Length == 0",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__true",
            "kind": "step",
            "label": "return-null",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__false",
            "kind": "step",
            "label": "continue",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__merge",
            "kind": "step",
            "label": "merge",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
            "kind": "step",
            "label": "data == null || data.Length == 0",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
            "kind": "step",
            "label": "exit",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
            "kind": "step",
            "label": "continue",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
            "kind": "step",
            "label": "merge",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_46_resource_create_46__linear",
            "kind": "step",
            "label": "Create MemoryStream for byte[]",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 46
          },
          {
            "id": "method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await",
            "kind": "step",
            "label": "Waits for async work",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return",
            "kind": "return",
            "label": "Returns result",
            "shape": "stadium",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "method_1o0t990_savecoverasync__call_47_SaveCoverAsync",
            "kind": "method",
            "label": "SaveCoverAsync",
            "shape": "subproc",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "method_1o0t990_savecoverasync__implicit_return",
            "kind": "return",
            "label": "return",
            "shape": "stadium",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 48
          }
        ],
        "edges": [
          {
            "id": "method_1o0t990_savecoverasync__entry__method_1o0t990_savecoverasync__action_45_guard_clause_45__condition",
            "from": "method_1o0t990_savecoverasync__entry",
            "to": "method_1o0t990_savecoverasync__action_45_guard_clause_45__condition",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__condition__method_1o0t990_savecoverasync__action_45_guard_clause_45__true",
            "from": "method_1o0t990_savecoverasync__action_45_guard_clause_45__condition",
            "to": "method_1o0t990_savecoverasync__action_45_guard_clause_45__true",
            "semanticLabel": "return-null",
            "visibleLabel": "return-null",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__condition__method_1o0t990_savecoverasync__action_45_guard_clause_45__false",
            "from": "method_1o0t990_savecoverasync__action_45_guard_clause_45__condition",
            "to": "method_1o0t990_savecoverasync__action_45_guard_clause_45__false",
            "semanticLabel": "continue",
            "visibleLabel": "continue",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__true__method_1o0t990_savecoverasync__action_45_guard_clause_45__merge",
            "from": "method_1o0t990_savecoverasync__action_45_guard_clause_45__true",
            "to": "method_1o0t990_savecoverasync__action_45_guard_clause_45__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__false__method_1o0t990_savecoverasync__action_45_guard_clause_45__merge",
            "from": "method_1o0t990_savecoverasync__action_45_guard_clause_45__false",
            "to": "method_1o0t990_savecoverasync__action_45_guard_clause_45__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_guard_clause_45__merge__method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
            "from": "method_1o0t990_savecoverasync__action_45_guard_clause_45__merge",
            "to": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition__method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
            "from": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
            "to": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
            "semanticLabel": "exit",
            "visibleLabel": "exit",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition__method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
            "from": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition",
            "to": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
            "semanticLabel": "continue",
            "visibleLabel": "continue",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true__method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
            "from": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true",
            "to": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false__method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
            "from": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false",
            "to": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 45
          },
          {
            "id": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge__method_1o0t990_savecoverasync__action_46_resource_create_46__linear",
            "from": "method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge",
            "to": "method_1o0t990_savecoverasync__action_46_resource_create_46__linear",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 46
          },
          {
            "id": "method_1o0t990_savecoverasync__action_46_resource_create_46__linear__method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await",
            "from": "method_1o0t990_savecoverasync__action_46_resource_create_46__linear",
            "to": "method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await__method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return",
            "from": "method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await",
            "to": "method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return",
            "semanticLabel": "return",
            "visibleLabel": "return",
            "relation": "returns",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return__call_method_1o0t990_savecoverasync__call_47_SaveCoverAsync",
            "from": "method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return",
            "to": "method_1o0t990_savecoverasync__call_47_SaveCoverAsync",
            "semanticLabel": "MemoryStream(stream from data), fileName",
            "visibleLabel": "MemoryStream stream from data, fileName",
            "relation": "calls",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 47
          },
          {
            "id": "method_1o0t990_savecoverasync__call_47_SaveCoverAsync__implicit_return",
            "from": "method_1o0t990_savecoverasync__call_47_SaveCoverAsync",
            "to": "method_1o0t990_savecoverasync__implicit_return",
            "semanticLabel": "return",
            "visibleLabel": "return",
            "relation": "returns",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 48
          }
        ],
        "metadata": {
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "warnings": []
        },
        "subgraphs": []
      },
      "mermaidSource": "flowchart TD\n    method_1o0t990_savecoverasync__call_47_SaveCoverAsync[[\"SaveCoverAsync\"]]\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__condition{\"data == null || data.Length == 0\"}\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__false(\"continue\")\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__merge(\"merge\")\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__true(\"return-null\")\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition{\"data == null || data.Length == 0\"}\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false(\"continue\")\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge(\"merge\")\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true(\"exit\")\n    method_1o0t990_savecoverasync__action_46_resource_create_46__linear(\"Create MemoryStream for byte[]\")\n    method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await[[\"Waits for async work\"]]\n    method_1o0t990_savecoverasync__entry([\"SaveCoverAsync entry\"])\n    method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return([\"Returns result\"])\n    method_1o0t990_savecoverasync__implicit_return([\"return\"])\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__condition -->|continue| method_1o0t990_savecoverasync__action_45_guard_clause_45__false\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__condition -->|return-null| method_1o0t990_savecoverasync__action_45_guard_clause_45__true\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__false -->|next| method_1o0t990_savecoverasync__action_45_guard_clause_45__merge\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__merge -->|next| method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition\n    method_1o0t990_savecoverasync__action_45_guard_clause_45__true -->|next| method_1o0t990_savecoverasync__action_45_guard_clause_45__merge\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition -->|continue| method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__condition -->|exit| method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__false -->|next| method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge -->|next| method_1o0t990_savecoverasync__action_46_resource_create_46__linear\n    method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__true -->|next| method_1o0t990_savecoverasync__action_45_savecoverasync_guard_clause_45_0__merge\n    method_1o0t990_savecoverasync__action_46_resource_create_46__linear -->|next| method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await\n    method_1o0t990_savecoverasync__action_47_savecoverasync_await_47_1__await -->|return| method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return\n    method_1o0t990_savecoverasync__action_47_savecoverasync_return_47_2__return -->|MemoryStream stream from data, fileName| method_1o0t990_savecoverasync__call_47_SaveCoverAsync\n    method_1o0t990_savecoverasync__call_47_SaveCoverAsync -->|return| method_1o0t990_savecoverasync__implicit_return\n    method_1o0t990_savecoverasync__entry -->|next| method_1o0t990_savecoverasync__action_45_guard_clause_45__condition",
      "warnings": []
    },
    {
      "id": "method_je6l0s_ensuredirectoryexists__fragment_diagram",
      "purpose": "control-flow",
      "title": "EnsureDirectoryExists() Control Flow",
      "required": true,
      "diagram": {
        "id": "method_je6l0s_ensuredirectoryexists__fragment_diagram",
        "kind": "control-flow",
        "title": "EnsureDirectoryExists() Control Flow",
        "direction": "TD",
        "nodes": [
          {
            "id": "method_je6l0s_ensuredirectoryexists__entry",
            "kind": "step",
            "label": "EnsureDirectoryExists entry",
            "shape": "stadium",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 66
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
            "kind": "step",
            "label": "!Directory.Exists(path)",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
            "kind": "step",
            "label": "true",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
            "kind": "step",
            "label": "false",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
            "kind": "step",
            "label": "merge",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition",
            "kind": "step",
            "label": "!Directory.Exists(path)",
            "shape": "diamond",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true",
            "kind": "step",
            "label": "create-directory",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false",
            "kind": "step",
            "label": "continue",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge",
            "kind": "step",
            "label": "merge",
            "shape": "rounded",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__implicit_return",
            "kind": "return",
            "label": "return",
            "shape": "stadium",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 72
          }
        ],
        "edges": [
          {
            "id": "method_je6l0s_ensuredirectoryexists__entry__method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
            "from": "method_je6l0s_ensuredirectoryexists__entry",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition__method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
            "semanticLabel": "true",
            "visibleLabel": "true",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition__method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
            "semanticLabel": "false",
            "visibleLabel": "false",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true__method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false__method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge__method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition__method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true",
            "semanticLabel": "create-directory",
            "visibleLabel": "create-directory",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition__method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false",
            "semanticLabel": "continue",
            "visibleLabel": "continue",
            "relation": "transforms",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true__method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false__method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false",
            "to": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge",
            "semanticLabel": "next",
            "visibleLabel": "next",
            "relation": "uses",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 68
          },
          {
            "id": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge__implicit_return",
            "from": "method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge",
            "to": "method_je6l0s_ensuredirectoryexists__implicit_return",
            "semanticLabel": "return",
            "visibleLabel": "return",
            "relation": "returns",
            "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "sourceLine": 72
          }
        ],
        "metadata": {
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "warnings": []
        },
        "subgraphs": []
      },
      "mermaidSource": "flowchart TD\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition{\"!Directory.Exists(path)\"}\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false(\"false\")\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge(\"merge\")\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true(\"true\")\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition{\"!Directory.Exists(path)\"}\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false(\"continue\")\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge(\"merge\")\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true(\"create-directory\")\n    method_je6l0s_ensuredirectoryexists__entry([\"EnsureDirectoryExists entry\"])\n    method_je6l0s_ensuredirectoryexists__implicit_return([\"return\"])\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition -->|false| method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition -->|true| method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__false -->|next| method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge -->|next| method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition\n    method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__true -->|next| method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__merge\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition -->|continue| method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__condition -->|create-directory| method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__false -->|next| method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge -->|return| method_je6l0s_ensuredirectoryexists__implicit_return\n    method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__true -->|next| method_je6l0s_ensuredirectoryexists__action_68_guard_clause_68__merge\n    method_je6l0s_ensuredirectoryexists__entry -->|next| method_je6l0s_ensuredirectoryexists__action_68_ensuredirectoryexists_branch_68_0__condition",
      "warnings": []
    }
  ],
  "renderHints": {
    "preferredSurface": "three-d",
    "defaultDiagramId": "file_14qnurl_bookstorageservice_cs_execution_view",
    "controlFlowDiagramIds": [
      "method_1o0t990_savecoverasync__fragment_diagram",
      "method_je6l0s_ensuredirectoryexists__fragment_diagram"
    ],
    "defaultControlFlowDiagramIdsBySymbolId": {
      "method:1o0t990:savecoverasync": "method_1o0t990_savecoverasync__fragment_diagram",
      "method:je6l0s:ensuredirectoryexists": "method_je6l0s_ensuredirectoryexists__fragment_diagram"
    }
  }
}