# yvvvan/coding-challenge-devops architecture

> Architecture diagram of the GitHub repository yvvvan/coding-challenge-devops, 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/yvvvan/coding-challenge-devops
- Repository: https://github.com/yvvvan/coding-challenge-devops

## Overview

This is an SMT order-management application: a browser user works through a Blazor web app and its API clients to manage components, assemble boards, create and track orders, and download an order JSON export. The API separates controllers, domain services, data managers, and EF Core persistence. The tree and README establish additional admin and authentication capabilities, though their detailed wiring and the web UI implementation are not included in the sampled source.

Main entry points: [`Source/src/CodingChallenge.Api/Services/OrderService.cs`](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/OrderService.cs) (Order service), [`Source/src/CodingChallenge.Api/Managers/BoardManager.cs`](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/BoardManager.cs) (Board manager), [`Source/src/CodingChallenge.Api/Managers/ComponentManager.cs`](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/ComponentManager.cs) (Component manager), [`Source/src/CodingChallenge.Api/Data/AppDbContext.cs`](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Data/AppDbContext.cs) (SQLite via EF Core)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web client"]
  node_webapp["Blazor web app<br/>[Startup.cs]"]
  node_session["User session<br/>[UserSession.cs]"]
  node_authclient["Auth client<br/>[AuthApiClient.cs]"]
  node_token["Token handler"]
  node_boardclient["Boards client<br/>[BoardsApiClient.cs]"]
  node_componentclient["Components client"]
  node_orderclient["Orders client<br/>[OrdersApiClient.cs]"]
  node_adminclient["Admin client<br/>[AdminApiClient.cs]"]
end

subgraph group_api["API endpoints"]
  node_authcontroller["Authentication API<br/>[AuthController.cs]"]
  node_boardscontroller["Boards API"]
  node_componentscontroller["Components API"]
  node_orderscontroller["Orders API"]
  node_admincontroller["Admin API<br/>[AdminController.cs]"]
end

subgraph group_domain["Order domain"]
  node_authservice["Authentication<br/>[AuthService.cs]"]
  node_boardservice["Board service<br/>[BoardService.cs]"]
  node_componentservice["Component service"]
  node_orderservice["Order service<br/>[OrderService.cs]"]
  node_adminservice["Admin service<br/>[AdminService.cs]"]
end

subgraph group_persistence["Persistence"]
  node_boardmanager["Board manager<br/>[BoardManager.cs]"]
  node_componentmanager["Component manager"]
  node_ordermanager["Order manager<br/>[OrderManager.cs]"]
  node_db[("SQLite via EF Core<br/>[AppDbContext.cs]")]
end

node_browser(("Browser user"))
node_filedownload["JSON download"]

node_browser -->|"uses"| node_webapp
node_authclient -->|"login request"| node_authcontroller
node_authclient -->|"stores credentials"| node_session
node_token -->|"reads token"| node_session
node_boardclient -->|"API requests"| node_boardscontroller
node_componentclient -->|"API requests"| node_componentscontroller
node_orderclient -->|"API requests"| node_orderscontroller
node_adminclient -->|"API requests"| node_admincontroller
node_boardscontroller -->|"delegates"| node_boardservice
node_componentscontroller -->|"delegates"| node_componentservice
node_orderscontroller -->|"delegates"| node_orderservice
node_orderservice -->|"returns JSON"| node_filedownload
node_admincontroller -->|"delegates"| node_adminservice
node_boardservice -->|"manages boards"| node_boardmanager
node_componentservice -->|"manages components"| node_componentmanager
node_orderservice -->|"manages orders"| node_ordermanager
node_orderservice -->|"reads boards"| node_boardmanager
node_orderservice -->|"reads components"| node_componentmanager
node_boardmanager -->|"reads and writes"| node_db
node_componentmanager -->|"reads and writes"| node_db
node_ordermanager -->|"reads and writes"| node_db

click node_webapp "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/Startup.cs"
click node_session "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/UserSession.cs"
click node_authclient "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/AuthApiClient.cs"
click node_token "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/AuthTokenHandler.cs"
click node_boardclient "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/BoardsApiClient.cs"
click node_componentclient "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/ComponentsApiClient.cs"
click node_orderclient "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/OrdersApiClient.cs"
click node_adminclient "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/AdminApiClient.cs"
click node_authcontroller "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/AuthController.cs"
click node_boardscontroller "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/BoardsController.cs"
click node_componentscontroller "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/ComponentsController.cs"
click node_orderscontroller "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/OrdersController.cs"
click node_admincontroller "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/AdminController.cs"
click node_authservice "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/AuthService.cs"
click node_boardservice "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/BoardService.cs"
click node_componentservice "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/ComponentService.cs"
click node_orderservice "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/OrderService.cs"
click node_adminservice "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/AdminService.cs"
click node_boardmanager "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/BoardManager.cs"
click node_componentmanager "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/ComponentManager.cs"
click node_ordermanager "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/OrderManager.cs"
click node_db "https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Data/AppDbContext.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_webapp,node_session,node_authclient,node_token,node_boardclient,node_componentclient,node_orderclient,node_adminclient,node_browser toneBlue
class node_authcontroller,node_boardscontroller,node_componentscontroller,node_orderscontroller,node_admincontroller toneAmber
class node_authservice,node_boardservice,node_componentservice,node_orderservice,node_adminservice toneMint
class node_boardmanager,node_componentmanager,node_ordermanager,node_db toneRose
class node_filedownload toneIndigo
```

## Components

### Web client

- [Blazor web app](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/Startup.cs): `Source/src/CodingChallenge.Web/Startup.cs`
- [User session](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/UserSession.cs): `Source/src/CodingChallenge.Web/ApiClients/UserSession.cs`
- [Auth client](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/AuthApiClient.cs): `Source/src/CodingChallenge.Web/ApiClients/AuthApiClient.cs`
- [Token handler](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/AuthTokenHandler.cs): `Source/src/CodingChallenge.Web/ApiClients/AuthTokenHandler.cs`
- [Boards client](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/BoardsApiClient.cs): `Source/src/CodingChallenge.Web/ApiClients/BoardsApiClient.cs`
- [Components client](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/ComponentsApiClient.cs): `Source/src/CodingChallenge.Web/ApiClients/ComponentsApiClient.cs`
- [Orders client](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/OrdersApiClient.cs): `Source/src/CodingChallenge.Web/ApiClients/OrdersApiClient.cs`
- [Admin client](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Web/ApiClients/AdminApiClient.cs): `Source/src/CodingChallenge.Web/ApiClients/AdminApiClient.cs`

### API endpoints

- [Authentication API](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/AuthController.cs): `Source/src/CodingChallenge.Api/Controllers/AuthController.cs`
- [Boards API](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/BoardsController.cs): `Source/src/CodingChallenge.Api/Controllers/BoardsController.cs`
- [Components API](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/ComponentsController.cs): `Source/src/CodingChallenge.Api/Controllers/ComponentsController.cs`
- [Orders API](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/OrdersController.cs): `Source/src/CodingChallenge.Api/Controllers/OrdersController.cs`
- [Admin API](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Controllers/AdminController.cs): `Source/src/CodingChallenge.Api/Controllers/AdminController.cs`

### Order domain

- [Authentication](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/AuthService.cs): `Source/src/CodingChallenge.Api/Services/AuthService.cs`
- [Board service](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/BoardService.cs): `Source/src/CodingChallenge.Api/Services/BoardService.cs`
- [Component service](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/ComponentService.cs): `Source/src/CodingChallenge.Api/Services/ComponentService.cs`
- [Order service](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/OrderService.cs): `Source/src/CodingChallenge.Api/Services/OrderService.cs`
- [Admin service](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Services/AdminService.cs): `Source/src/CodingChallenge.Api/Services/AdminService.cs`

### Persistence

- [Board manager](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/BoardManager.cs): `Source/src/CodingChallenge.Api/Managers/BoardManager.cs`
- [Component manager](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/ComponentManager.cs): `Source/src/CodingChallenge.Api/Managers/ComponentManager.cs`
- [Order manager](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Managers/OrderManager.cs): `Source/src/CodingChallenge.Api/Managers/OrderManager.cs`
- [SQLite via EF Core](https://github.com/yvvvan/coding-challenge-devops/blob/main/Source/src/CodingChallenge.Api/Data/AppDbContext.cs): `Source/src/CodingChallenge.Api/Data/AppDbContext.cs`

### Other components

- **Browser user**
- **JSON download**

## Connections

- Browser user → Blazor web app: uses
- Auth client → Authentication API: login request
- Auth client → User session: stores credentials
- Token handler → User session: reads token
- Boards client → Boards API: API requests
- Components client → Components API: API requests
- Orders client → Orders API: API requests
- Admin client → Admin API: API requests
- Boards API → Board service: delegates
- Components API → Component service: delegates
- Orders API → Order service: delegates
- Order service → JSON download: returns JSON
- Admin API → Admin service: delegates
- Board service → Board manager: manages boards
- Component service → Component manager: manages components
- Order service → Order manager: manages orders
- Order service → Board manager: reads boards
- Order service → Component manager: reads components
- Board manager → SQLite via EF Core: reads and writes
- Component manager → SQLite via EF Core: reads and writes
- Order manager → SQLite via EF Core: reads and writes
