# smbc-digital/iag-webapp architecture

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

- Interactive diagram: https://gitdiagram.com/smbc-digital/iag-webapp
- Repository: https://github.com/smbc-digital/iag-webapp

## Overview

Stockport Web App is a business-ID-aware ASP.NET public website that serves council content supplied by a separate ContentAPI. Its principal request path is browser request through business selection and a content controller, then repository/API retrieval and a rendered response. The tree also shows distinct news, events, directory, payment, contact and search capabilities, plus content transformation and shared web safeguards. Source excerpts confirm the news/events retrieval pattern and repository HTTP calls; other feature wiring is represented by its modules, not inferred. The README documents the ContentAPI dependency and supported business IDs.

Main entry points: [`src/StockportWebapp/Controllers/EventsController.cs`](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/EventsController.cs) (Events and calendar), [`src/StockportWebapp/Controllers/NewsController.cs`](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/NewsController.cs) (News and RSS), [`src/StockportWebapp/Repositories/Repository.cs`](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Repositories/Repository.cs) (Content repository), [`src/StockportWebapp/Controllers`](https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Controllers) (Page controllers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web entry and pages"]
  node_program["Application startup<br/>[Program.cs]"]
  node_controllers["Page controllers"]
  node_models["Page and view models"]
  node_views["Rendered pages"]
end

subgraph group_content["Content access and shaping"]
  node_repo["Content repository<br/>[Repository.cs]"]
  node_processedrepo["Processed content access"]
  node_factories["Content factories"]
  node_http["HTTP client<br/>[HttpClient.cs]"]
end

subgraph group_features["Public features"]
  node_news["News and RSS<br/>[NewsController.cs]"]
  node_events["Events and calendar"]
  node_directory["Directory browsing"]
  node_directoryservice["Directory filtering"]
  node_payments["Payments"]
  node_contact["Contact forms"]
  node_search["Site search"]
  node_sitemap["Sitemaps"]
end

subgraph group_platform["Shared platform"]
  node_business["Business selection"]
  node_middleware["Request safeguards"]
  node_rediskeys[("Protection key store")]
end

node_visitor(("Site visitor"))
node_contentapi{{"ContentAPI"}}

node_visitor -->|"sends request"| node_business
node_business -->|"routes request"| node_controllers
node_program -->|"configures middleware"| node_business
node_controllers -->|"dispatches"| node_news
node_controllers -->|"dispatches"| node_events
node_visitor -->|"requests news"| node_news
node_visitor -->|"requests events"| node_events
node_news -->|"fetches news"| node_repo
node_events -->|"fetches events"| node_repo
node_events -->|"fetches event detail"| node_processedrepo
node_sitemap -->|"fetches sitemap content"| node_repo
node_repo -->|"sends API request"| node_http
node_processedrepo -->|"uses HTTP access"| node_http
node_http -->|"calls"| node_contentapi
node_news -->|"renders response"| node_views
node_events -->|"renders response"| node_views
node_directory --> node_directoryservice
node_news -->|"builds view data"| node_models
node_events -->|"builds view data"| node_models

click node_program "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Program.cs"
click node_business "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Middleware/BusinessIdMiddleware.cs"
click node_controllers "https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Controllers"
click node_news "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/NewsController.cs"
click node_events "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/EventsController.cs"
click node_directory "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/DirectoryController.cs"
click node_directoryservice "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Services/DirectoryService.cs"
click node_payments "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/PaymentController.cs"
click node_contact "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/ContactUsController.cs"
click node_search "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/SearchController.cs"
click node_sitemap "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/SitemapController.cs"
click node_repo "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Repositories/Repository.cs"
click node_processedrepo "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Repositories/ProcessedContentRepository.cs"
click node_factories "https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/ContentFactory"
click node_http "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Client/HttpClient.cs"
click node_models "https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Models"
click node_middleware "https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Middleware"
click node_rediskeys "https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/DataProtection/RedisXmlRepository.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_program,node_controllers,node_models,node_views toneBlue
class node_repo,node_processedrepo,node_factories,node_http toneAmber
class node_news,node_events,node_directory,node_directoryservice,node_payments,node_contact,node_search,node_sitemap,node_contentapi toneMint
class node_business,node_middleware,node_rediskeys toneRose
class node_visitor toneIndigo
```

## Components

### Web entry and pages

- [Application startup](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Program.cs): `src/StockportWebapp/Program.cs`
- [Page controllers](https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Controllers): `src/StockportWebapp/Controllers`
- [Page and view models](https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Models): `src/StockportWebapp/Models`
- **Rendered pages**

### Content access and shaping

- [Content repository](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Repositories/Repository.cs): `src/StockportWebapp/Repositories/Repository.cs`
- [Processed content access](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Repositories/ProcessedContentRepository.cs): `src/StockportWebapp/Repositories/ProcessedContentRepository.cs`
- [Content factories](https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/ContentFactory): `src/StockportWebapp/ContentFactory`
- [HTTP client](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Client/HttpClient.cs): `src/StockportWebapp/Client/HttpClient.cs`

### Public features

- [News and RSS](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/NewsController.cs): `src/StockportWebapp/Controllers/NewsController.cs`
- [Events and calendar](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/EventsController.cs): `src/StockportWebapp/Controllers/EventsController.cs`
- [Directory browsing](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/DirectoryController.cs): `src/StockportWebapp/Controllers/DirectoryController.cs`
- [Directory filtering](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Services/DirectoryService.cs): `src/StockportWebapp/Services/DirectoryService.cs`
- [Payments](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/PaymentController.cs): `src/StockportWebapp/Controllers/PaymentController.cs`
- [Contact forms](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/ContactUsController.cs): `src/StockportWebapp/Controllers/ContactUsController.cs`
- [Site search](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/SearchController.cs): `src/StockportWebapp/Controllers/SearchController.cs`
- [Sitemaps](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Controllers/SitemapController.cs): `src/StockportWebapp/Controllers/SitemapController.cs`

### Shared platform

- [Business selection](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/Middleware/BusinessIdMiddleware.cs): `src/StockportWebapp/Middleware/BusinessIdMiddleware.cs`
- [Request safeguards](https://github.com/smbc-digital/iag-webapp/tree/main/src/StockportWebapp/Middleware): `src/StockportWebapp/Middleware`
- [Protection key store](https://github.com/smbc-digital/iag-webapp/blob/main/src/StockportWebapp/DataProtection/RedisXmlRepository.cs): `src/StockportWebapp/DataProtection/RedisXmlRepository.cs`

### Other components

- **Site visitor**
- **ContentAPI**

## Connections

- Site visitor → Business selection: sends request
- Business selection → Page controllers: routes request
- Application startup → Business selection: configures middleware
- Page controllers → News and RSS: dispatches
- Page controllers → Events and calendar: dispatches
- Site visitor → News and RSS: requests news
- Site visitor → Events and calendar: requests events
- News and RSS → Content repository: fetches news
- Events and calendar → Content repository: fetches events
- Events and calendar → Processed content access: fetches event detail
- Sitemaps → Content repository: fetches sitemap content
- Content repository → HTTP client: sends API request
- Processed content access → HTTP client: uses HTTP access
- HTTP client → ContentAPI: calls
- News and RSS → Rendered pages: renders response
- Events and calendar → Rendered pages: renders response
- Directory browsing → Directory filtering
- News and RSS → Page and view models: builds view data
- Events and calendar → Page and view models: builds view data
