# couturierb/sandbox-spring architecture

> Architecture diagram of the GitHub repository couturierb/sandbox-spring, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/couturierb/sandbox-spring
- Repository: https://github.com/couturierb/sandbox-spring

## Overview

Spring Sandbox is a small Spring Boot demonstration app. Its main workflows are HTTP health checks, Kafka message publishing and consumption (when the `kafka` profile is enabled), and SSE streaming, including forwarding Kafka events to connected clients. The graph includes the distinct controllers, messaging services, event DTO, and Kafka configuration. Kafka-to-SSE event forwarding is documented in the README; the sampled consumer and service show the event-publishing and listening sides, but not their runtime wiring.

Main entry points: [`src/main/java/com/sandbox/sse/internal/SseService.java`](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/internal/SseService.java) (SSE service), [`src/main/java/com/sandbox/kafka/KafkaConsumer.java`](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaConsumer.java) (Kafka consumer), [`src/main/java/com/sandbox/kafka/KafkaController.java`](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaController.java) (Publish endpoint), [`src/main/java/com/sandbox/kafka/KafkaProducer.java`](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaProducer.java) (Kafka producer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_application["Spring Boot app"]
end

subgraph group_health["Health endpoint"]
  node_health_controller["Health endpoint"]
end

subgraph group_kafka["Kafka messaging"]
  node_kafka_controller["Publish endpoint"]
  node_producer["Kafka producer<br/>[KafkaProducer.java]"]
  node_consumer["Kafka consumer<br/>[KafkaConsumer.java]"]
  node_producer_config["Producer config"]
  node_consumer_config["Consumer config"]
  node_topic_config["Topic config"]
end

subgraph group_sse["SSE streaming"]
  node_sse_controller["SSE endpoints<br/>[SseController.java]"]
  node_sse_service["SSE service<br/>[SseService.java]"]
  node_event_dto["SSE event<br/>[SseEventDTO.java]"]
end

node_broker[("Kafka broker")]
node_http_client(("HTTP client"))
node_sse_client(("SSE client"))

node_http_client -->|"checks health"| node_health_controller
node_http_client -->|"publishes message"| node_kafka_controller
node_kafka_controller -->|"sends message"| node_producer
node_producer -->|"publishes to"| node_broker
node_consumer -->|"listens to"| node_broker
node_consumer -->|"publishes event"| node_event_dto
node_consumer -->|"event forwarded"| node_sse_service
node_sse_service -->|"handles event"| node_event_dto
node_http_client -->|"requests stream"| node_sse_controller
node_sse_controller -->|"gets stream"| node_sse_service
node_sse_service -->|"sends events"| node_sse_client
node_producer_config -->|"configures connection"| node_broker
node_consumer_config -->|"configures connection"| node_broker
node_topic_config -->|"declares topic"| node_broker

click node_application "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/SandboxApplication.java"
click node_health_controller "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/health/HealthController.java"
click node_kafka_controller "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaController.java"
click node_producer "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaProducer.java"
click node_consumer "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaConsumer.java"
click node_producer_config "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/config/KafkaProducerConfig.java"
click node_consumer_config "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/config/KafkaConsumerConfig.java"
click node_topic_config "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/config/KafkaTopicConfig.java"
click node_sse_controller "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/SseController.java"
click node_sse_service "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/internal/SseService.java"
click node_event_dto "https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/SseEventDTO.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_application,node_http_client,node_sse_client toneBlue
class node_health_controller,node_broker toneAmber
class node_kafka_controller,node_producer,node_consumer,node_producer_config,node_consumer_config,node_topic_config toneMint
class node_sse_controller,node_sse_service,node_event_dto toneRose
```

## Components

### Application

- [Spring Boot app](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/SandboxApplication.java): `src/main/java/com/sandbox/SandboxApplication.java`

### Health endpoint

- [Health endpoint](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/health/HealthController.java): `src/main/java/com/sandbox/health/HealthController.java`

### Kafka messaging

- [Publish endpoint](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaController.java): `src/main/java/com/sandbox/kafka/KafkaController.java`
- [Kafka producer](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaProducer.java): `src/main/java/com/sandbox/kafka/KafkaProducer.java`
- [Kafka consumer](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/KafkaConsumer.java): `src/main/java/com/sandbox/kafka/KafkaConsumer.java`
- [Producer config](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/config/KafkaProducerConfig.java): `src/main/java/com/sandbox/kafka/config/KafkaProducerConfig.java`
- [Consumer config](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/config/KafkaConsumerConfig.java): `src/main/java/com/sandbox/kafka/config/KafkaConsumerConfig.java`
- [Topic config](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/kafka/config/KafkaTopicConfig.java): `src/main/java/com/sandbox/kafka/config/KafkaTopicConfig.java`

### SSE streaming

- [SSE endpoints](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/SseController.java): `src/main/java/com/sandbox/sse/SseController.java`
- [SSE service](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/internal/SseService.java): `src/main/java/com/sandbox/sse/internal/SseService.java`
- [SSE event](https://github.com/couturierb/sandbox-spring/blob/main/src/main/java/com/sandbox/sse/SseEventDTO.java): `src/main/java/com/sandbox/sse/SseEventDTO.java`

### Other components

- **Kafka broker**
- **HTTP client**
- **SSE client**

## Connections

- HTTP client → Health endpoint: checks health (evidence: `README.md`)
- HTTP client → Publish endpoint: publishes message (evidence: `README.md`)
- Publish endpoint → Kafka producer: sends message (evidence: `src/main/java/com/sandbox/kafka/KafkaController.java`)
- Kafka producer → Kafka broker: publishes to (evidence: `src/main/java/com/sandbox/kafka/KafkaProducer.java`)
- Kafka consumer → Kafka broker: listens to (evidence: `src/main/java/com/sandbox/kafka/KafkaConsumer.java`)
- Kafka consumer → SSE event: publishes event (evidence: `src/main/java/com/sandbox/kafka/KafkaConsumer.java`)
- Kafka consumer → SSE service: event forwarded (evidence: `README.md`)
- SSE service → SSE event: handles event (evidence: `src/main/java/com/sandbox/sse/internal/SseService.java`)
- HTTP client → SSE endpoints: requests stream (evidence: `README.md`)
- SSE endpoints → SSE service: gets stream (evidence: `src/main/java/com/sandbox/sse/SseController.java`)
- SSE service → SSE client: sends events (evidence: `src/main/java/com/sandbox/sse/internal/SseService.java`)
- Producer config → Kafka broker: configures connection (evidence: `src/main/java/com/sandbox/kafka/config/KafkaProducerConfig.java`)
- Consumer config → Kafka broker: configures connection (evidence: `src/main/java/com/sandbox/kafka/config/KafkaConsumerConfig.java`)
- Topic config → Kafka broker: declares topic (evidence: `src/main/java/com/sandbox/kafka/config/KafkaTopicConfig.java`)
