graph TD
%% Define nodes
greetings_ui["greetings-ui: Greetings User Interface"]
greetings["greetings-service: Create Greetings Messages"]
greetings_db["Greetings DB: PostgreSQL"]
stats["greetings-stats-service: Records Statistics"]
stats_db["Statistics DB: PostgreSQL"]
kafka["Kafka: greeting_topic"]
%% Relationships
greetings_ui -->|" GET/POST/PUT "| greetings
greetings_ui -->|" GET /stats "| stats
greetings -->|" Reads/Writes "| greetings_db
stats -->|" Reads/Writes "| stats_db
greetings -->|" Produces Events "| kafka
stats -->|" Consumes Events "| kafka
stats -->|" GET /greetings/{id} "| greetings
- Hexagonal Architecture
- Multimodules Spring Boot Project
- REST API with Spring MVC (greeting service) and Spring Web Reactive (stat service)
- Kafka Consumer (stat service) / producer (greeting service)
- Reactive implementation (stat service)
- Test : Unit tests with Mockito and AssertJ
- Test : Integration tests with Spring Slice Tests Annotations
- Test : Integration tests with
@EmbeddedKafka - Test : Integration tests with Wiremock and Spring Cloud Contract Stub Runner
- Test : CDC tests with Pact
- Test : BDD tests with Cucumber and JUnit 5
- Implement Error Handling in API to customize responses
- Implement Outbox pattern for greeting-producer
- Create a UI to interact with APIs
- Create an SSE endpoint to send events to UI