# pererohit/create-your-pizza architecture

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

- Interactive diagram: https://gitdiagram.com/pererohit/create-your-pizza
- Repository: https://github.com/pererohit/create-your-pizza

## Overview

CreateYourPizza provides two independent services: auth-service manages administrator and trusted-system identities, credentials, JWTs, and JWKS; catalog-service manages products and options, serves filtered catalog reads, and generates public versioned PDF menus. The main trusted-system flow is registration, administrator approval, credential exchange for a JWT, then catalog reads; administrators also log in and maintain catalog data. The README documents the service boundary, Redis responsibilities, and JWKS verification. Some wiring is inferred only where documented; unsampled service details are not expanded.

Main entry points: [`catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationService.java`](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationService.java) (PDF generation), [`catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogQueryService.java`](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogQueryService.java) (Catalog queries), [`catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogWriteService.java`](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogWriteService.java) (Catalog writes), [`auth-service/src/main/java/com/createyourpizza/auth/web/AuthController.java`](https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/web/AuthController.java) (Auth endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_auth["Identity and access"]
  node_auth_api["Auth endpoints"]
  node_auth_service["Identity workflows<br/>[AuthService.java]"]
  node_jwt["JWT issuer<br/>[JwtIssuer.java]"]
  node_signing["Signing keys"]
  node_jwks_api["JWKS endpoint"]
end

subgraph group_catalog["Catalog APIs"]
  node_catalog_query["Catalog queries"]
  node_catalog_write["Catalog writes"]
  node_product_query_api["Product query API"]
  node_option_query_api["Option query API"]
  node_product_write_api["Product write API"]
  node_option_write_api["Option write API"]
  node_catalog_auth["JWT verification"]
end

subgraph group_menu["Public menu PDF"]
  node_scheduler["PDF scheduler"]
  node_pdf_generation["PDF generation"]
  node_pdf_renderer["PDF renderer"]
  node_pdf_query_api["Menu PDF API"]
  node_pdf_query["Menu PDF lookup"]
end

subgraph group_state["Persistence and coordination"]
  node_auth_repo["Auth repositories"]
  node_auth_db[("Auth database")]
  node_catalog_db[("Catalog database")]
  node_cache[("Catalog cache")]
  node_redis[("Redis service")]
  node_menu_store["Latest menu store"]
  node_catalog_lock["Catalog locks"]
end

node_admin(("Administrator"))
node_trusted(("Trusted system"))
node_public(("Public visitor"))

node_admin -->|"logs in"| node_auth_api
node_trusted -->|"registers / exchanges"| node_auth_api
node_admin -->|"administers users"| node_auth_api
node_auth_api -->|"dispatches"| node_auth_service
node_auth_service -->|"reads / writes"| node_auth_repo
node_auth_repo -->|"persists"| node_auth_db
node_auth_service -->|"issues tokens"| node_jwt
node_jwt -->|"signs with"| node_signing
node_jwks_api -->|"reads public key"| node_signing
node_jwks_api -->|"publishes keys"| node_trusted
node_admin -->|"maintains catalog"| node_product_write_api
node_admin -->|"maintains options"| node_option_write_api
node_trusted -->|"presents JWT"| node_catalog_auth
node_catalog_auth -.->|"fetches JWKS"| node_jwks_api
node_product_query_api -->|"dispatches"| node_catalog_query
node_option_query_api -->|"dispatches"| node_catalog_query
node_catalog_query -->|"queries catalog"| node_catalog_db
node_catalog_query -->|"reads / writes"| node_cache
node_product_write_api -->|"dispatches"| node_catalog_write
node_option_write_api -->|"dispatches"| node_catalog_write
node_catalog_write -->|"mutates catalog"| node_catalog_db
node_catalog_write -->|"acquires / releases"| node_catalog_lock
node_cache -.->|"stores cache entries"| node_redis
node_catalog_lock -.->|"stores locks"| node_redis
node_scheduler -->|"triggers generation"| node_pdf_generation
node_pdf_generation -->|"reads catalog; saves PDF"| node_catalog_db
node_pdf_generation -->|"renders model"| node_pdf_renderer
node_pdf_generation -->|"updates latest menu"| node_menu_store
node_pdf_generation -->|"coordinates generation"| node_catalog_lock
node_public -->|"requests menu"| node_pdf_query_api
node_pdf_query_api -->|"dispatches"| node_pdf_query
node_pdf_query -->|"checks latest PDF"| node_menu_store
node_pdf_query -->|"reads historical PDF"| node_catalog_db
node_menu_store -.->|"stores latest PDF"| node_redis

click node_auth_api "https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/web/AuthController.java"
click node_auth_service "https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/service/AuthService.java"
click node_jwt "https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/jwt/JwtIssuer.java"
click node_signing "https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/jwt/SigningKeyService.java"
click node_jwks_api "https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/web/JwksController.java"
click node_auth_repo "https://github.com/pererohit/create-your-pizza/tree/main/auth-service/src/main/java/com/createyourpizza/auth/repository"
click node_catalog_query "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogQueryService.java"
click node_catalog_write "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogWriteService.java"
click node_product_query_api "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/ProductQueryController.java"
click node_option_query_api "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/OptionQueryController.java"
click node_product_write_api "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/ProductWriteController.java"
click node_option_write_api "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/OptionWriteController.java"
click node_catalog_auth "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/config/CachingRemoteJwkSource.java"
click node_cache "https://github.com/pererohit/create-your-pizza/tree/main/catalog-service/src/main/java/com/createyourpizza/catalog/cache"
click node_scheduler "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationScheduler.java"
click node_pdf_generation "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationService.java"
click node_pdf_renderer "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/pdf/MenuPdfRenderer.java"
click node_pdf_query_api "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/MenuPdfController.java"
click node_pdf_query "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/MenuPdfQueryService.java"
click node_menu_store "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/menu/LatestMenuStore.java"
click node_catalog_lock "https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/lock/CatalogLockStore.java"

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_auth_api,node_auth_service,node_jwt,node_signing,node_jwks_api toneBlue
class node_catalog_query,node_catalog_write,node_product_query_api,node_option_query_api,node_product_write_api,node_option_write_api,node_catalog_auth toneAmber
class node_scheduler,node_pdf_generation,node_pdf_renderer,node_pdf_query_api,node_pdf_query toneMint
class node_auth_repo,node_auth_db,node_catalog_db,node_cache,node_redis,node_menu_store,node_catalog_lock toneRose
class node_admin,node_trusted,node_public toneIndigo
```

## Components

### Identity and access

- [Auth endpoints](https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/web/AuthController.java): `auth-service/src/main/java/com/createyourpizza/auth/web/AuthController.java`
- [Identity workflows](https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/service/AuthService.java): `auth-service/src/main/java/com/createyourpizza/auth/service/AuthService.java`
- [JWT issuer](https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/jwt/JwtIssuer.java): `auth-service/src/main/java/com/createyourpizza/auth/jwt/JwtIssuer.java`
- [Signing keys](https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/jwt/SigningKeyService.java): `auth-service/src/main/java/com/createyourpizza/auth/jwt/SigningKeyService.java`
- [JWKS endpoint](https://github.com/pererohit/create-your-pizza/blob/main/auth-service/src/main/java/com/createyourpizza/auth/web/JwksController.java): `auth-service/src/main/java/com/createyourpizza/auth/web/JwksController.java`

### Catalog APIs

- [Catalog queries](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogQueryService.java): `catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogQueryService.java`
- [Catalog writes](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogWriteService.java): `catalog-service/src/main/java/com/createyourpizza/catalog/service/CatalogWriteService.java`
- [Product query API](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/ProductQueryController.java): `catalog-service/src/main/java/com/createyourpizza/catalog/web/ProductQueryController.java`
- [Option query API](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/OptionQueryController.java): `catalog-service/src/main/java/com/createyourpizza/catalog/web/OptionQueryController.java`
- [Product write API](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/ProductWriteController.java): `catalog-service/src/main/java/com/createyourpizza/catalog/web/ProductWriteController.java`
- [Option write API](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/OptionWriteController.java): `catalog-service/src/main/java/com/createyourpizza/catalog/web/OptionWriteController.java`
- [JWT verification](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/config/CachingRemoteJwkSource.java): `catalog-service/src/main/java/com/createyourpizza/catalog/config/CachingRemoteJwkSource.java`

### Public menu PDF

- [PDF scheduler](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationScheduler.java): `catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationScheduler.java`
- [PDF generation](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationService.java): `catalog-service/src/main/java/com/createyourpizza/catalog/service/PdfGenerationService.java`
- [PDF renderer](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/pdf/MenuPdfRenderer.java): `catalog-service/src/main/java/com/createyourpizza/catalog/pdf/MenuPdfRenderer.java`
- [Menu PDF API](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/web/MenuPdfController.java): `catalog-service/src/main/java/com/createyourpizza/catalog/web/MenuPdfController.java`
- [Menu PDF lookup](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/service/MenuPdfQueryService.java): `catalog-service/src/main/java/com/createyourpizza/catalog/service/MenuPdfQueryService.java`

### Persistence and coordination

- [Auth repositories](https://github.com/pererohit/create-your-pizza/tree/main/auth-service/src/main/java/com/createyourpizza/auth/repository): `auth-service/src/main/java/com/createyourpizza/auth/repository`
- **Auth database**
- **Catalog database**
- [Catalog cache](https://github.com/pererohit/create-your-pizza/tree/main/catalog-service/src/main/java/com/createyourpizza/catalog/cache): `catalog-service/src/main/java/com/createyourpizza/catalog/cache`
- **Redis service**
- [Latest menu store](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/menu/LatestMenuStore.java): `catalog-service/src/main/java/com/createyourpizza/catalog/menu/LatestMenuStore.java`
- [Catalog locks](https://github.com/pererohit/create-your-pizza/blob/main/catalog-service/src/main/java/com/createyourpizza/catalog/lock/CatalogLockStore.java): `catalog-service/src/main/java/com/createyourpizza/catalog/lock/CatalogLockStore.java`

### Other components

- **Administrator**
- **Trusted system**
- **Public visitor**

## Connections

- Administrator → Auth endpoints: logs in
- Trusted system → Auth endpoints: registers / exchanges
- Administrator → Auth endpoints: administers users
- Auth endpoints → Identity workflows: dispatches
- Identity workflows → Auth repositories: reads / writes
- Auth repositories → Auth database: persists
- Identity workflows → JWT issuer: issues tokens
- JWT issuer → Signing keys: signs with
- JWKS endpoint → Signing keys: reads public key
- JWKS endpoint → Trusted system: publishes keys
- Administrator → Product write API: maintains catalog
- Administrator → Option write API: maintains options
- Trusted system → JWT verification: presents JWT
- JWT verification → JWKS endpoint: fetches JWKS
- Product query API → Catalog queries: dispatches
- Option query API → Catalog queries: dispatches
- Catalog queries → Catalog database: queries catalog
- Catalog queries → Catalog cache: reads / writes
- Product write API → Catalog writes: dispatches
- Option write API → Catalog writes: dispatches
- Catalog writes → Catalog database: mutates catalog
- Catalog writes → Catalog locks: acquires / releases
- Catalog cache → Redis service: stores cache entries
- Catalog locks → Redis service: stores locks
- PDF scheduler → PDF generation: triggers generation
- PDF generation → Catalog database: reads catalog; saves PDF
- PDF generation → PDF renderer: renders model
- PDF generation → Latest menu store: updates latest menu
- PDF generation → Catalog locks: coordinates generation
- Public visitor → Menu PDF API: requests menu
- Menu PDF API → Menu PDF lookup: dispatches
- Menu PDF lookup → Latest menu store: checks latest PDF
- Menu PDF lookup → Catalog database: reads historical PDF
- Latest menu store → Redis service: stores latest PDF
