# ltilibrary/ltiadvantageplatform architecture

> Architecture diagram of the GitHub repository ltilibrary/ltiadvantageplatform, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ltilibrary/ltiadvantageplatform
- Repository: https://github.com/ltilibrary/ltiadvantageplatform

## Overview

This ASP.NET Core sample is an LTI 1.3 / LTI Advantage platform. Platform users manage tenant-specific platforms, courses, people, and tool registrations; a tool’s LTI/OIDC interaction produces a launch, after which tools can use course membership, gradebook, and deep-linking capabilities. The README documents the broader service set; sampled controller code confirms access checks and persistence for membership and gradebook operations. Some subsystem wiring is unsampled, so the graph omits uncertain call relationships.

Main entry points: [`src/Data/ApplicationDbContext.cs`](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Data/ApplicationDbContext.cs) (Application data context), [`src/Controllers/AuthorizationController.cs`](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/AuthorizationController.cs) (Authorization endpoints), [`src/Utility/ToolClientManager.cs`](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Utility/ToolClientManager.cs) (OIDC client manager), [`src/Pages/OidcLaunch.cshtml.cs`](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/OidcLaunch.cshtml.cs) (OIDC launch)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Accounts and setup"]
  node_identityui["Identity management"]
end

subgraph group_launch["LTI launch and OIDC"]
  node_clientmanager["OIDC client manager"]
  node_oidclaunch["OIDC launch"]
  node_authorization["Authorization endpoints"]
  node_claims["LTI claims handler"]
  node_deeplink["Deep-link response"]
end

subgraph group_services["LTI services"]
  node_membership["Course membership"]
  node_lineitems["Gradebook line items"]
  node_scores["Score submission"]
  node_results["Grade results"]
end

subgraph group_management["Platform management"]
  node_home["Platform home<br/>[Index.cshtml.cs]"]
  node_manage["Tenant setup"]
  node_toolpages["Tool registration"]
  node_coursepages["Course links"]
  node_platformpages["Platform links"]
end

subgraph group_data["Persistence"]
  node_dbcontext["Application data context"]
  node_database[("SQLite and OpenIddict store")]
end

node_admin(("Platform user"))
node_tool(("LTI tool"))

node_admin -->|"registers"| node_identityui
node_admin -->|"views platform"| node_home
node_admin -->|"manages tenant"| node_manage
node_admin -->|"registers tools"| node_toolpages
node_admin -->|"manages course links"| node_coursepages
node_admin -->|"manages platform links"| node_platformpages
node_toolpages -->|"manages clients"| node_clientmanager
node_tool -->|"requests authorization"| node_authorization
node_authorization -->|"adds launch claims"| node_claims
node_authorization -->|"continues launch"| node_oidclaunch
node_oidclaunch -->|"redirects launch"| node_tool
node_tool -->|"returns deep link"| node_deeplink
node_tool -->|"requests members"| node_membership
node_tool -->|"manages line items"| node_lineitems
node_tool -->|"posts scores"| node_scores
node_tool -->|"reads results"| node_results
node_home -->|"reads tenant"| node_dbcontext
node_membership -->|"reads membership"| node_dbcontext
node_lineitems -->|"reads and writes"| node_dbcontext
node_scores -->|"reads and writes"| node_dbcontext
node_dbcontext -->|"persists data"| node_database
node_clientmanager -->|"stores clients"| node_database

click node_identityui "https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Areas/Identity"
click node_home "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/Index.cshtml.cs"
click node_manage "https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Areas/Identity/Pages/Account/Manage"
click node_toolpages "https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Pages/Tools"
click node_clientmanager "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Utility/ToolClientManager.cs"
click node_oidclaunch "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/OidcLaunch.cshtml.cs"
click node_authorization "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/AuthorizationController.cs"
click node_claims "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Utility/LtiAdvantageClaimsHandler.cs"
click node_deeplink "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/DeepLinks.cshtml.cs"
click node_membership "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/MembershipController.cs"
click node_lineitems "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/LineItemsController.cs"
click node_scores "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/ScoresController.cs"
click node_results "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/ResultsController.cs"
click node_coursepages "https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Pages/CourseLinks"
click node_platformpages "https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Pages/PlatformLinks"
click node_dbcontext "https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Data/ApplicationDbContext.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_identityui,node_admin toneBlue
class node_clientmanager,node_oidclaunch,node_authorization,node_claims,node_deeplink toneAmber
class node_membership,node_lineitems,node_scores,node_results toneMint
class node_home,node_manage,node_toolpages,node_coursepages,node_platformpages toneRose
class node_dbcontext,node_database,node_tool toneIndigo
```

## Components

### Accounts and setup

- [Identity management](https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Areas/Identity): `src/Areas/Identity`

### LTI launch and OIDC

- [OIDC client manager](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Utility/ToolClientManager.cs): `src/Utility/ToolClientManager.cs`
- [OIDC launch](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/OidcLaunch.cshtml.cs): `src/Pages/OidcLaunch.cshtml.cs`
- [Authorization endpoints](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/AuthorizationController.cs): `src/Controllers/AuthorizationController.cs`
- [LTI claims handler](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Utility/LtiAdvantageClaimsHandler.cs): `src/Utility/LtiAdvantageClaimsHandler.cs`
- [Deep-link response](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/DeepLinks.cshtml.cs): `src/Pages/DeepLinks.cshtml.cs`

### LTI services

- [Course membership](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/MembershipController.cs): `src/Controllers/MembershipController.cs`
- [Gradebook line items](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/LineItemsController.cs): `src/Controllers/LineItemsController.cs`
- [Score submission](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/ScoresController.cs): `src/Controllers/ScoresController.cs`
- [Grade results](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Controllers/ResultsController.cs): `src/Controllers/ResultsController.cs`

### Platform management

- [Platform home](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Pages/Index.cshtml.cs): `src/Pages/Index.cshtml.cs`
- [Tenant setup](https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Areas/Identity/Pages/Account/Manage): `src/Areas/Identity/Pages/Account/Manage`
- [Tool registration](https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Pages/Tools): `src/Pages/Tools`
- [Course links](https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Pages/CourseLinks): `src/Pages/CourseLinks`
- [Platform links](https://github.com/ltilibrary/ltiadvantageplatform/tree/master/src/Pages/PlatformLinks): `src/Pages/PlatformLinks`

### Persistence

- [Application data context](https://github.com/ltilibrary/ltiadvantageplatform/blob/master/src/Data/ApplicationDbContext.cs): `src/Data/ApplicationDbContext.cs`
- **SQLite and OpenIddict store**

### Other components

- **Platform user**
- **LTI tool**

## Connections

- Platform user → Identity management: registers
- Platform user → Platform home: views platform
- Platform user → Tenant setup: manages tenant
- Platform user → Tool registration: registers tools
- Platform user → Course links: manages course links
- Platform user → Platform links: manages platform links
- Tool registration → OIDC client manager: manages clients
- LTI tool → Authorization endpoints: requests authorization
- Authorization endpoints → LTI claims handler: adds launch claims
- Authorization endpoints → OIDC launch: continues launch
- OIDC launch → LTI tool: redirects launch
- LTI tool → Deep-link response: returns deep link
- LTI tool → Course membership: requests members
- LTI tool → Gradebook line items: manages line items
- LTI tool → Score submission: posts scores
- LTI tool → Grade results: reads results
- Platform home → Application data context: reads tenant
- Course membership → Application data context: reads membership
- Gradebook line items → Application data context: reads and writes
- Score submission → Application data context: reads and writes
- Application data context → SQLite and OpenIddict store: persists data
- OIDC client manager → SQLite and OpenIddict store: stores clients
