# i-m-js/qts-spring-ms-app architecture

> Architecture diagram of the GitHub repository i-m-js/qts-spring-ms-app, 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/i-m-js/qts-spring-ms-app
- Repository: https://github.com/i-m-js/qts-spring-ms-app

## Overview

This is an experimental quotes application: users log in, view a random or selected quote, and like or dislike it; the app exposes quote and user statistics. The README also documents quote CRUD and importing quotes from a placeholder service. The UI and service source establish the main API workflow, while repository and infrastructure wiring is only partly sampled. Kafka/Flink/Redis trending and a trending UI are explicitly unfinished, so they are shown as planned capabilities, not active runtime stages.

Main entry points: [`infra/gateway-service/src/main/java/com/example/qtsapp/GatewayServiceApplication.java`](https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/gateway-service/src/main/java/com/example/qtsapp/GatewayServiceApplication.java) (API gateway), [`services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteServiceImpl.java`](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteServiceImpl.java) (Quote operations), [`services/quotes-ui/src/main/ui/src/app`](https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-ui/src/main/ui/src/app) (Quotes UI), [`services/quotes-service/src/main/java/com/example/qtsapp/controller/QuotesController.java`](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/controller/QuotesController.java) (Quotes API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User interface"]
  node_ui["Quotes UI"]
  node_authui["Login UI<br/>[login.component.ts]"]
  node_dashboard["Quote dashboard"]
  node_authclient["Auth client<br/>[auth.service.ts]"]
  node_quoteclient["Quote client<br/>[quote.service.ts]"]
end

subgraph group_quotes["Quotes service"]
  node_quotesapi["Quotes API"]
  node_authapi["Auth API"]
  node_quoteservice["Quote operations"]
  node_statservice["Statistics"]
  node_authservice["Authentication"]
  node_repositories["Quote repositories"]
  node_database[("Quote database")]
  node_feign["Quote import client"]
end

subgraph group_platform["Service platform"]
  node_gateway{{"API gateway"}}
  node_eureka{{"Service registry<br/>[EurekaServer.java]"}}
  node_config["Config server<br/>[ConfigServer.java]"]
  node_admin["Admin app<br/>[AdminApp.java]"]
end

subgraph group_planned["Planned trending"]
  node_kafka["Kafka topics"]
  node_flink["Flink processing"]
  node_redis[("Trending cache")]
  node_trendui["Trending page"]
end

node_user(("User"))
node_placeholder["Placeholder quote site"]

node_user -->|"uses"| node_ui
node_ui -->|"routes to"| node_authui
node_ui -->|"routes to"| node_dashboard
node_authui -->|"submits login"| node_authclient
node_dashboard -->|"requests quotes"| node_quoteclient
node_authclient -->|"sends API request"| node_gateway
node_quoteclient -->|"sends API request"| node_gateway
node_gateway -->|"routes API"| node_quotesapi
node_gateway -->|"routes API"| node_authapi
node_quotesapi -->|"delegates quote work"| node_quoteservice
node_quotesapi -->|"requests statistics"| node_statservice
node_authapi -->|"delegates login"| node_authservice
node_quoteservice -->|"reads and writes"| node_repositories
node_statservice -->|"reads events"| node_repositories
node_repositories -->|"persists data"| node_database
node_quoteservice -.->|"imports quotes"| node_feign
node_feign -.->|"fetches quotes"| node_placeholder
node_gateway -.->|"discovers services"| node_eureka
node_quoteservice -.->|"planned event publishing"| node_kafka
node_kafka -.->|"planned event stream"| node_flink
node_flink -.->|"planned trending writes"| node_redis
node_user -.->|"planned browsing"| node_trendui

click node_ui "https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-ui/src/main/ui/src/app"
click node_authui "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/components/login/login.component.ts"
click node_dashboard "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/components/dashboard/dashboard.component.ts"
click node_authclient "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/services/auth.service.ts"
click node_quoteclient "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/services/quote.service.ts"
click node_gateway "https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/gateway-service/src/main/java/com/example/qtsapp/GatewayServiceApplication.java"
click node_quotesapi "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/controller/QuotesController.java"
click node_authapi "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/controller/AuthController.java"
click node_quoteservice "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteServiceImpl.java"
click node_statservice "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteStatServiceImpl.java"
click node_authservice "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/MockAuthServiceImpl.java"
click node_repositories "https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-service/src/main/java/com/example/qtsapp/repository"
click node_database "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/resources/db/migration/V1__IntialDbSchema.sql"
click node_feign "https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/feign/JsonQuoteFeignClient.java"
click node_eureka "https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/eureka-server/src/main/java/com/example/qtsapp/EurekaServer.java"
click node_config "https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/config-server/src/main/java/com/example/qtsapp/ConfigServer.java"
click node_admin "https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/admin-app/src/main/java/com/example/qtsapp/AdminApp.java"
click node_trendui "https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-ui/src/main/ui/src/app"

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_ui,node_authui,node_dashboard,node_authclient,node_quoteclient,node_user toneBlue
class node_quotesapi,node_authapi,node_quoteservice,node_statservice,node_authservice,node_repositories,node_database,node_feign toneAmber
class node_gateway,node_eureka,node_config,node_admin toneMint
class node_kafka,node_flink,node_redis,node_trendui toneRose
class node_placeholder toneIndigo
```

## Components

### User interface

- [Quotes UI](https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-ui/src/main/ui/src/app): `services/quotes-ui/src/main/ui/src/app`
- [Login UI](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/components/login/login.component.ts): `services/quotes-ui/src/main/ui/src/app/components/login/login.component.ts`
- [Quote dashboard](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/components/dashboard/dashboard.component.ts): `services/quotes-ui/src/main/ui/src/app/components/dashboard/dashboard.component.ts`
- [Auth client](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/services/auth.service.ts): `services/quotes-ui/src/main/ui/src/app/services/auth.service.ts`
- [Quote client](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-ui/src/main/ui/src/app/services/quote.service.ts): `services/quotes-ui/src/main/ui/src/app/services/quote.service.ts`

### Quotes service

- [Quotes API](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/controller/QuotesController.java): `services/quotes-service/src/main/java/com/example/qtsapp/controller/QuotesController.java`
- [Auth API](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/controller/AuthController.java): `services/quotes-service/src/main/java/com/example/qtsapp/controller/AuthController.java`
- [Quote operations](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteServiceImpl.java): `services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteServiceImpl.java`
- [Statistics](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteStatServiceImpl.java): `services/quotes-service/src/main/java/com/example/qtsapp/service/impl/QuoteStatServiceImpl.java`
- [Authentication](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/service/MockAuthServiceImpl.java): `services/quotes-service/src/main/java/com/example/qtsapp/service/MockAuthServiceImpl.java`
- [Quote repositories](https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-service/src/main/java/com/example/qtsapp/repository): `services/quotes-service/src/main/java/com/example/qtsapp/repository`
- [Quote database](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/resources/db/migration/V1__IntialDbSchema.sql): `services/quotes-service/src/main/resources/db/migration/V1__IntialDbSchema.sql`
- [Quote import client](https://github.com/i-m-js/qts-spring-ms-app/blob/main/services/quotes-service/src/main/java/com/example/qtsapp/feign/JsonQuoteFeignClient.java): `services/quotes-service/src/main/java/com/example/qtsapp/feign/JsonQuoteFeignClient.java`

### Service platform

- [API gateway](https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/gateway-service/src/main/java/com/example/qtsapp/GatewayServiceApplication.java): `infra/gateway-service/src/main/java/com/example/qtsapp/GatewayServiceApplication.java`
- [Service registry](https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/eureka-server/src/main/java/com/example/qtsapp/EurekaServer.java): `infra/eureka-server/src/main/java/com/example/qtsapp/EurekaServer.java`
- [Config server](https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/config-server/src/main/java/com/example/qtsapp/ConfigServer.java): `infra/config-server/src/main/java/com/example/qtsapp/ConfigServer.java`
- [Admin app](https://github.com/i-m-js/qts-spring-ms-app/blob/main/infra/admin-app/src/main/java/com/example/qtsapp/AdminApp.java): `infra/admin-app/src/main/java/com/example/qtsapp/AdminApp.java`

### Planned trending

- **Kafka topics**
- **Flink processing**
- **Trending cache**
- [Trending page](https://github.com/i-m-js/qts-spring-ms-app/tree/main/services/quotes-ui/src/main/ui/src/app): `services/quotes-ui/src/main/ui/src/app`

### Other components

- **User**
- **Placeholder quote site**

## Connections

- User → Quotes UI: uses
- Quotes UI → Login UI: routes to
- Quotes UI → Quote dashboard: routes to
- Login UI → Auth client: submits login
- Quote dashboard → Quote client: requests quotes
- Auth client → API gateway: sends API request
- Quote client → API gateway: sends API request
- API gateway → Quotes API: routes API
- API gateway → Auth API: routes API
- Quotes API → Quote operations: delegates quote work
- Quotes API → Statistics: requests statistics
- Auth API → Authentication: delegates login
- Quote operations → Quote repositories: reads and writes
- Statistics → Quote repositories: reads events
- Quote repositories → Quote database: persists data
- Quote operations → Quote import client: imports quotes
- Quote import client → Placeholder quote site: fetches quotes
- API gateway → Service registry: discovers services
- Quote operations → Kafka topics: planned event publishing
- Kafka topics → Flink processing: planned event stream
- Flink processing → Trending cache: planned trending writes
- User → Trending page: planned browsing
