# pazzo2005/insurance-project architecture

> Architecture diagram of the GitHub repository pazzo2005/insurance-project, 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/pazzo2005/insurance-project
- Repository: https://github.com/pazzo2005/insurance-project

## Overview

Claims Microservices accepts claim submissions and queries through REST, GraphQL, and a browser UI; the claims service persists lifecycle changes and emits shared domain events, which the notification service consumes and exposes as recorded notifications. The README documents local Spring-event and Kafka transports. Sampled code confirms the claims lifecycle, REST/GraphQL delegation, Kafka publishing and consuming, and notification storage/API; local listener wiring and some configuration details are represented only where documented.

Main entry points: [`claims-service/src/main/java/com/akinluyi/claims/service/ClaimService.java`](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/service/ClaimService.java) (Claim lifecycle), [`claims-service/src/main/java/com/akinluyi/claims/web/ClaimController.java`](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/web/ClaimController.java) (Claims REST API), [`claims-service/src/main/java/com/akinluyi/claims/events/EventPublisher.java`](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/EventPublisher.java) (Event publisher), [`notification-service/src/main/java/com/akinluyi/notifications/store/NotificationStore.java`](https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/store/NotificationStore.java) (Notification store)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_claims["Claims service"]
  node_rest["Claims REST API"]
  node_graphql["Claims GraphQL API"]
  node_errors["API error mapping"]
  node_lifecycle["Claim lifecycle<br/>[ClaimService.java]"]
  node_claim["Claim aggregate<br/>[Claim.java]"]
  node_repository["Claim repository"]
  node_claimdb[("Claims database<br/>[Claim.java]")]
end

subgraph group_events["Event transport"]
  node_publisher["Event publisher"]
  node_localpublisher["Local publisher"]
  node_kafkapublisher["Kafka publisher"]
  node_eventbus["Spring event bus"]
end

subgraph group_notifications["Notification service"]
  node_locallistener["Local event listener"]
  node_kafkalistener["Kafka event listener"]
  node_store[("Notification store")]
  node_notificationapi["Notifications API"]
end

subgraph group_shared["Shared domain"]
  node_event["Claim domain events<br/>[ClaimEvent.java]"]
end

node_client(("API client"))
node_browser["Claims browser UI<br/>[app.js]"]
node_kafka["Kafka broker"]

node_client -->|"calls REST"| node_rest
node_client -->|"queries GraphQL"| node_graphql
node_browser -->|"calls REST"| node_rest
node_rest -->|"delegates"| node_lifecycle
node_graphql -->|"delegates reads"| node_lifecycle
node_lifecycle -->|"reads and saves"| node_repository
node_repository -->|"persists claims"| node_claimdb
node_lifecycle -->|"creates and updates"| node_claim
node_lifecycle -->|"publishes events"| node_publisher
node_publisher -.->|"uses local profile"| node_localpublisher
node_publisher -.->|"uses Kafka profile"| node_kafkapublisher
node_localpublisher -.->|"dispatches in process"| node_eventbus
node_eventbus -.->|"delivers events"| node_locallistener
node_kafkapublisher -.->|"sends events"| node_kafka
node_kafka -.->|"delivers events"| node_kafkalistener
node_locallistener -.->|"records notifications"| node_store
node_kafkalistener -.->|"records notifications"| node_store
node_notificationapi -->|"reads notifications"| node_store
node_client -->|"gets notifications"| node_notificationapi
node_rest -->|"maps API errors"| node_errors

click node_browser "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/resources/static/app.js"
click node_rest "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/web/ClaimController.java"
click node_graphql "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/graphql/ClaimGraphqlController.java"
click node_errors "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/web/GlobalExceptionHandler.java"
click node_lifecycle "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/service/ClaimService.java"
click node_claim "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/domain/Claim.java"
click node_repository "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/repository/ClaimRepository.java"
click node_claimdb "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/domain/Claim.java"
click node_publisher "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/EventPublisher.java"
click node_localpublisher "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/LocalEventPublisher.java"
click node_kafkapublisher "https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/KafkaEventPublisher.java"
click node_event "https://github.com/pazzo2005/insurance-project/blob/main/common/src/main/java/com/akinluyi/claims/common/event/ClaimEvent.java"
click node_locallistener "https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/listener/LocalEventListener.java"
click node_kafkalistener "https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/listener/KafkaEventListener.java"
click node_store "https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/store/NotificationStore.java"
click node_notificationapi "https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/web/NotificationController.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_rest,node_graphql,node_errors,node_lifecycle,node_claim,node_repository,node_claimdb,node_client,node_browser toneBlue
class node_publisher,node_localpublisher,node_kafkapublisher,node_eventbus toneAmber
class node_locallistener,node_kafkalistener,node_store,node_notificationapi toneMint
class node_event toneRose
class node_kafka toneIndigo
```

## Components

### Claims service

- [Claims REST API](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/web/ClaimController.java): `claims-service/src/main/java/com/akinluyi/claims/web/ClaimController.java`
- [Claims GraphQL API](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/graphql/ClaimGraphqlController.java): `claims-service/src/main/java/com/akinluyi/claims/graphql/ClaimGraphqlController.java`
- [API error mapping](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/web/GlobalExceptionHandler.java): `claims-service/src/main/java/com/akinluyi/claims/web/GlobalExceptionHandler.java`
- [Claim lifecycle](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/service/ClaimService.java): `claims-service/src/main/java/com/akinluyi/claims/service/ClaimService.java`
- [Claim aggregate](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/domain/Claim.java): `claims-service/src/main/java/com/akinluyi/claims/domain/Claim.java`
- [Claim repository](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/repository/ClaimRepository.java): `claims-service/src/main/java/com/akinluyi/claims/repository/ClaimRepository.java`
- [Claims database](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/domain/Claim.java): `claims-service/src/main/java/com/akinluyi/claims/domain/Claim.java`

### Event transport

- [Event publisher](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/EventPublisher.java): `claims-service/src/main/java/com/akinluyi/claims/events/EventPublisher.java`
- [Local publisher](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/LocalEventPublisher.java): `claims-service/src/main/java/com/akinluyi/claims/events/LocalEventPublisher.java`
- [Kafka publisher](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/java/com/akinluyi/claims/events/KafkaEventPublisher.java): `claims-service/src/main/java/com/akinluyi/claims/events/KafkaEventPublisher.java`
- **Spring event bus**

### Notification service

- [Local event listener](https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/listener/LocalEventListener.java): `notification-service/src/main/java/com/akinluyi/notifications/listener/LocalEventListener.java`
- [Kafka event listener](https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/listener/KafkaEventListener.java): `notification-service/src/main/java/com/akinluyi/notifications/listener/KafkaEventListener.java`
- [Notification store](https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/store/NotificationStore.java): `notification-service/src/main/java/com/akinluyi/notifications/store/NotificationStore.java`
- [Notifications API](https://github.com/pazzo2005/insurance-project/blob/main/notification-service/src/main/java/com/akinluyi/notifications/web/NotificationController.java): `notification-service/src/main/java/com/akinluyi/notifications/web/NotificationController.java`

### Shared domain

- [Claim domain events](https://github.com/pazzo2005/insurance-project/blob/main/common/src/main/java/com/akinluyi/claims/common/event/ClaimEvent.java): `common/src/main/java/com/akinluyi/claims/common/event/ClaimEvent.java`

### Other components

- **API client**
- [Claims browser UI](https://github.com/pazzo2005/insurance-project/blob/main/claims-service/src/main/resources/static/app.js): `claims-service/src/main/resources/static/app.js`
- **Kafka broker**

## Connections

- API client → Claims REST API: calls REST
- API client → Claims GraphQL API: queries GraphQL
- Claims browser UI → Claims REST API: calls REST
- Claims REST API → Claim lifecycle: delegates
- Claims GraphQL API → Claim lifecycle: delegates reads
- Claim lifecycle → Claim repository: reads and saves
- Claim repository → Claims database: persists claims
- Claim lifecycle → Claim aggregate: creates and updates
- Claim lifecycle → Event publisher: publishes events
- Event publisher → Local publisher: uses local profile
- Event publisher → Kafka publisher: uses Kafka profile
- Local publisher → Spring event bus: dispatches in process
- Spring event bus → Local event listener: delivers events
- Kafka publisher → Kafka broker: sends events
- Kafka broker → Kafka event listener: delivers events
- Local event listener → Notification store: records notifications
- Kafka event listener → Notification store: records notifications
- Notifications API → Notification store: reads notifications
- API client → Notifications API: gets notifications
- Claims REST API → API error mapping: maps API errors
