# felixsfd/lp-concerts-feed architecture

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

- Interactive diagram: https://gitdiagram.com/felixsfd/lp-concerts-feed
- Repository: https://github.com/felixsfd/lp-concerts-feed

## Overview

This repository implements LPshows.live, a concert-calendar application with a web client, an HTTP API, and Lambda-based features. The principal workflow is browsing concerts: API controllers request concert data from tour services, which are configured alongside the tours database. Administrators can also manage concerts and locations; the tree additionally shows setlist management and imports, bookmark and calendar features, concert synchronization, and push notifications. The excerpts confirm only selected controller, service-registration, authentication, and synchronization wiring, so uncertain calls between other subsystems are omitted.

Main entry points: [`Server.Api/Program.cs`](https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Program.cs) (ASP.NET API), [`frontend/lp-calendar-web/src/app/app.routes.ts`](https://github.com/felixsfd/lp-concerts-feed/blob/main/frontend/lp-calendar-web/src/app/app.routes.ts) (Angular application), [`Server.Api/Controllers/ConcertsController.cs`](https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Controllers/ConcertsController.cs) (Concert endpoints), [`Server.Api/Controllers/CountriesController.cs`](https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Controllers/CountriesController.cs) (Location endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_web["Angular application<br/>[app.routes.ts]"]
  node_auth["OIDC authentication<br/>[auth.service.ts]"]
end

subgraph group_http["HTTP API"]
  node_api["ASP.NET API<br/>[Program.cs]"]
  node_concerts["Concert endpoints"]
  node_locations["Location endpoints"]
end

subgraph group_domain["Domain and storage"]
  node_concertsvc["Concert service<br/>[ConcertService.cs]"]
  node_locationsvc["Location service<br/>[LocationService.cs]"]
  node_toursdb[("Tours database<br/>[ToursDbContext.cs]")]
  node_concertrepo["Concert repository"]
  node_setlistsvc["Setlist service<br/>[SetlistService.cs]"]
  node_setlistsdb[("Setlists database")]
  node_wiki["MediaWiki client"]
end

subgraph group_workers["Lambda features"]
  node_sync["Concert synchronization"]
  node_listlambda["Concert list Lambda<br/>[Function.cs]"]
  node_bookmarklambda["Bookmark Lambdas<br/>[Function.cs]"]
  node_calendarlambda["Calendar feed Lambda<br/>[Function.cs]"]
  node_pushlambda["Push notification Lambdas<br/>[Function.cs]"]
end

node_visitor(("Calendar user"))
node_sns["Amazon SNS"]
node_mysql[("MySQL")]
node_dynamo[("DynamoDB")]

node_visitor -->|"browses"| node_web
node_web -->|"checks identity"| node_auth
node_concerts -->|"requests data"| node_concertsvc
node_locations -->|"requests data"| node_locationsvc
node_api -->|"configures context"| node_toursdb
node_api -->|"registers client"| node_wiki
node_sync -->|"loads changes"| node_concertrepo
node_listlambda -->|"runs sync"| node_sync
node_pushlambda -.->|"receives messages"| node_sns

click node_web "https://github.com/felixsfd/lp-concerts-feed/blob/main/frontend/lp-calendar-web/src/app/app.routes.ts"
click node_auth "https://github.com/felixsfd/lp-concerts-feed/blob/main/frontend/lp-calendar-web/src/app/auth/auth.service.ts"
click node_api "https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Program.cs"
click node_concerts "https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Controllers/ConcertsController.cs"
click node_locations "https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Controllers/CountriesController.cs"
click node_concertsvc "https://github.com/felixsfd/lp-concerts-feed/blob/main/Service.Tours/ConcertService.cs"
click node_locationsvc "https://github.com/felixsfd/lp-concerts-feed/blob/main/Service.Tours/LocationService.cs"
click node_toursdb "https://github.com/felixsfd/lp-concerts-feed/blob/main/Database.Tours/ToursDbContext.cs"
click node_concertrepo "https://github.com/felixsfd/lp-concerts-feed/blob/main/Database.Concerts/IConcertRepository.cs"
click node_setlistsvc "https://github.com/felixsfd/lp-concerts-feed/blob/main/Service.Setlists/SetlistService.cs"
click node_setlistsdb "https://github.com/felixsfd/lp-concerts-feed/blob/main/Database.Setlists/SetlistsDbContext.cs"
click node_wiki "https://github.com/felixsfd/lp-concerts-feed/blob/main/Common.WikiMedia/Repositories/WikiMediaRepository.cs"
click node_listlambda "https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.ListConcerts/src/Lambda.ListConcerts/Function.cs"
click node_bookmarklambda "https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.BookmarksRead/src/Lambda.BookmarksRead/Function.cs"
click node_calendarlambda "https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.CalendarFeed/src/Lambda.CalendarFeed/Function.cs"
click node_pushlambda "https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.Push.Sender/src/Lambda.Push.Sender/Function.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_web,node_auth,node_visitor toneBlue
class node_api,node_concerts,node_locations,node_mysql,node_dynamo toneAmber
class node_concertsvc,node_locationsvc,node_toursdb,node_concertrepo,node_setlistsvc,node_setlistsdb,node_wiki toneMint
class node_sync,node_listlambda,node_bookmarklambda,node_calendarlambda,node_pushlambda toneRose
class node_sns toneIndigo
```

## Components

### Web client

- [Angular application](https://github.com/felixsfd/lp-concerts-feed/blob/main/frontend/lp-calendar-web/src/app/app.routes.ts): `frontend/lp-calendar-web/src/app/app.routes.ts`
- [OIDC authentication](https://github.com/felixsfd/lp-concerts-feed/blob/main/frontend/lp-calendar-web/src/app/auth/auth.service.ts): `frontend/lp-calendar-web/src/app/auth/auth.service.ts`

### HTTP API

- [ASP.NET API](https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Program.cs): `Server.Api/Program.cs`
- [Concert endpoints](https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Controllers/ConcertsController.cs): `Server.Api/Controllers/ConcertsController.cs`
- [Location endpoints](https://github.com/felixsfd/lp-concerts-feed/blob/main/Server.Api/Controllers/CountriesController.cs): `Server.Api/Controllers/CountriesController.cs`

### Domain and storage

- [Concert service](https://github.com/felixsfd/lp-concerts-feed/blob/main/Service.Tours/ConcertService.cs): `Service.Tours/ConcertService.cs`
- [Location service](https://github.com/felixsfd/lp-concerts-feed/blob/main/Service.Tours/LocationService.cs): `Service.Tours/LocationService.cs`
- [Tours database](https://github.com/felixsfd/lp-concerts-feed/blob/main/Database.Tours/ToursDbContext.cs): `Database.Tours/ToursDbContext.cs`
- [Concert repository](https://github.com/felixsfd/lp-concerts-feed/blob/main/Database.Concerts/IConcertRepository.cs): `Database.Concerts/IConcertRepository.cs`
- [Setlist service](https://github.com/felixsfd/lp-concerts-feed/blob/main/Service.Setlists/SetlistService.cs): `Service.Setlists/SetlistService.cs`
- [Setlists database](https://github.com/felixsfd/lp-concerts-feed/blob/main/Database.Setlists/SetlistsDbContext.cs): `Database.Setlists/SetlistsDbContext.cs`
- [MediaWiki client](https://github.com/felixsfd/lp-concerts-feed/blob/main/Common.WikiMedia/Repositories/WikiMediaRepository.cs): `Common.WikiMedia/Repositories/WikiMediaRepository.cs`

### Lambda features

- **Concert synchronization**
- [Concert list Lambda](https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.ListConcerts/src/Lambda.ListConcerts/Function.cs): `Lambda.ListConcerts/src/Lambda.ListConcerts/Function.cs`
- [Bookmark Lambdas](https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.BookmarksRead/src/Lambda.BookmarksRead/Function.cs): `Lambda.BookmarksRead/src/Lambda.BookmarksRead/Function.cs`
- [Calendar feed Lambda](https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.CalendarFeed/src/Lambda.CalendarFeed/Function.cs): `Lambda.CalendarFeed/src/Lambda.CalendarFeed/Function.cs`
- [Push notification Lambdas](https://github.com/felixsfd/lp-concerts-feed/blob/main/Lambda.Push.Sender/src/Lambda.Push.Sender/Function.cs): `Lambda.Push.Sender/src/Lambda.Push.Sender/Function.cs`

### Other components

- **Calendar user**
- **Amazon SNS**
- **MySQL**
- **DynamoDB**

## Connections

- Calendar user → Angular application: browses
- Angular application → OIDC authentication: checks identity
- Concert endpoints → Concert service: requests data
- Location endpoints → Location service: requests data
- ASP.NET API → Tours database: configures context
- ASP.NET API → MediaWiki client: registers client
- Concert synchronization → Concert repository: loads changes
- Concert list Lambda → Concert synchronization: runs sync
- Push notification Lambdas → Amazon SNS: receives messages
