# dhananjai543/booknest architecture

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

- Interactive diagram: https://gitdiagram.com/dhananjai543/booknest
- Repository: https://github.com/dhananjai543/booknest

## Overview

BookNest is a Spring-based library backend: members browse the catalog and submit loan requests through the gateway; loan placement checks copy availability, persists accepted loans, and publishes an asynchronous notification event. Catalog and availability are distinct domain capabilities, while discovery, identity, and monitoring support the services. The loan and availability excerpts show their internal calls; catalog persistence and several infrastructure connections are documented or only apparent from the module list, so uncertain links are omitted or marked unverified.

Main entry points: [`api-gateway/src/main/java/com/booknest/apigateway/ApiGatewayApplication.java`](https://github.com/dhananjai543/booknest/blob/master/api-gateway/src/main/java/com/booknest/apigateway/ApiGatewayApplication.java) (API gateway), [`loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java`](https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java) (Loan service), [`availability-service/src/main/java/com/booknest/availabilityservice/controller/AvailabilityController.java`](https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/controller/AvailabilityController.java) (Availability API), [`book-catalog-service/src/main/java/com/booknest/bookcatalogservice/controller/BookController.java`](https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/controller/BookController.java) (Book API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_edge["Entry and Identity"]
  node_gateway["API gateway"]
  node_keycloak["Keycloak"]
end

subgraph group_catalog["Catalog"]
  node_catalog_api["Book API"]
  node_book_service["Book service<br/>[BookService.java]"]
  node_book_store[("Book repository")]
end

subgraph group_loans["Borrowing"]
  node_loan_api["Loan API"]
  node_loan_service["Loan service<br/>[LoanService.java]"]
  node_loan_store[("Loan repository")]
  node_availability_api["Availability API"]
  node_availability_service["Availability service"]
  node_availability_store[("Copy repository")]
end

subgraph group_platform["Platform Services"]
  node_kafka["Kafka broker"]
  node_notification["Notification listener"]
  node_discovery["Eureka registry"]
  node_prometheus["Prometheus"]
  node_grafana["Grafana"]
end

node_member(("Library member"))

node_member -->|"uses"| node_gateway
node_gateway -.->|"secures with"| node_keycloak
node_gateway -.->|"routes to"| node_catalog_api
node_gateway -.->|"routes to"| node_loan_api
node_gateway -.->|"routes to"| node_availability_api
node_catalog_api -->|"delegates to"| node_book_service
node_book_service -.->|"persists via"| node_book_store
node_loan_api -->|"delegates to"| node_loan_service
node_loan_service -->|"checks copies"| node_availability_api
node_availability_api -->|"delegates to"| node_availability_service
node_availability_service -->|"reads copies"| node_availability_store
node_loan_service -->|"saves loans"| node_loan_store
node_loan_service -->|"publishes event"| node_kafka
node_kafka -->|"delivers event"| node_notification
node_prometheus -->|"feeds dashboards"| node_grafana
node_discovery -.->|"supports discovery"| node_gateway

click node_gateway "https://github.com/dhananjai543/booknest/blob/master/api-gateway/src/main/java/com/booknest/apigateway/ApiGatewayApplication.java"
click node_catalog_api "https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/controller/BookController.java"
click node_book_service "https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/service/BookService.java"
click node_book_store "https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/repository/BookRepository.java"
click node_loan_api "https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/controller/LoanController.java"
click node_loan_service "https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java"
click node_loan_store "https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/repository/LoanRepository.java"
click node_availability_api "https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/controller/AvailabilityController.java"
click node_availability_service "https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/service/AvailabilityService.java"
click node_availability_store "https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/repository/AvailabilityRepository.java"
click node_notification "https://github.com/dhananjai543/booknest/blob/master/notification-service/src/main/java/com/booknest/notificationservice/NotificationListener.java"
click node_discovery "https://github.com/dhananjai543/booknest/blob/master/discovery-server/src/main/java/com/booknest/discoveryserver/DiscoveryServerApplication.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_gateway,node_keycloak toneBlue
class node_catalog_api,node_book_service,node_book_store toneAmber
class node_loan_api,node_loan_service,node_loan_store,node_availability_api,node_availability_service,node_availability_store toneMint
class node_kafka,node_notification,node_discovery,node_prometheus,node_grafana toneRose
class node_member toneIndigo
```

## Components

### Entry and Identity

- [API gateway](https://github.com/dhananjai543/booknest/blob/master/api-gateway/src/main/java/com/booknest/apigateway/ApiGatewayApplication.java): `api-gateway/src/main/java/com/booknest/apigateway/ApiGatewayApplication.java`
- **Keycloak**

### Catalog

- [Book API](https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/controller/BookController.java): `book-catalog-service/src/main/java/com/booknest/bookcatalogservice/controller/BookController.java`
- [Book service](https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/service/BookService.java): `book-catalog-service/src/main/java/com/booknest/bookcatalogservice/service/BookService.java`
- [Book repository](https://github.com/dhananjai543/booknest/blob/master/book-catalog-service/src/main/java/com/booknest/bookcatalogservice/repository/BookRepository.java): `book-catalog-service/src/main/java/com/booknest/bookcatalogservice/repository/BookRepository.java`

### Borrowing

- [Loan API](https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/controller/LoanController.java): `loan-service/src/main/java/com/booknest/loanservice/controller/LoanController.java`
- [Loan service](https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java): `loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java`
- [Loan repository](https://github.com/dhananjai543/booknest/blob/master/loan-service/src/main/java/com/booknest/loanservice/repository/LoanRepository.java): `loan-service/src/main/java/com/booknest/loanservice/repository/LoanRepository.java`
- [Availability API](https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/controller/AvailabilityController.java): `availability-service/src/main/java/com/booknest/availabilityservice/controller/AvailabilityController.java`
- [Availability service](https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/service/AvailabilityService.java): `availability-service/src/main/java/com/booknest/availabilityservice/service/AvailabilityService.java`
- [Copy repository](https://github.com/dhananjai543/booknest/blob/master/availability-service/src/main/java/com/booknest/availabilityservice/repository/AvailabilityRepository.java): `availability-service/src/main/java/com/booknest/availabilityservice/repository/AvailabilityRepository.java`

### Platform Services

- **Kafka broker**
- [Notification listener](https://github.com/dhananjai543/booknest/blob/master/notification-service/src/main/java/com/booknest/notificationservice/NotificationListener.java): `notification-service/src/main/java/com/booknest/notificationservice/NotificationListener.java`
- [Eureka registry](https://github.com/dhananjai543/booknest/blob/master/discovery-server/src/main/java/com/booknest/discoveryserver/DiscoveryServerApplication.java): `discovery-server/src/main/java/com/booknest/discoveryserver/DiscoveryServerApplication.java`
- **Prometheus**
- **Grafana**

### Other components

- **Library member**

## Connections

- Library member → API gateway: uses (evidence: `README.md`)
- API gateway → Keycloak: secures with
- API gateway → Book API: routes to (evidence: `README.md`)
- API gateway → Loan API: routes to (evidence: `README.md`)
- API gateway → Availability API: routes to (evidence: `README.md`)
- Book API → Book service: delegates to (evidence: `book-catalog-service/src/main/java/com/booknest/bookcatalogservice/controller/BookController.java`)
- Book service → Book repository: persists via
- Loan API → Loan service: delegates to (evidence: `loan-service/src/main/java/com/booknest/loanservice/controller/LoanController.java`)
- Loan service → Availability API: checks copies (evidence: `loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java`)
- Availability API → Availability service: delegates to (evidence: `availability-service/src/main/java/com/booknest/availabilityservice/controller/AvailabilityController.java`)
- Availability service → Copy repository: reads copies (evidence: `availability-service/src/main/java/com/booknest/availabilityservice/service/AvailabilityService.java`)
- Loan service → Loan repository: saves loans (evidence: `loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java`)
- Loan service → Kafka broker: publishes event (evidence: `loan-service/src/main/java/com/booknest/loanservice/service/LoanService.java`)
- Kafka broker → Notification listener: delivers event (evidence: `notification-service/src/main/java/com/booknest/notificationservice/NotificationListener.java`)
- Prometheus → Grafana: feeds dashboards (evidence: `README.md`)
- Eureka registry → API gateway: supports discovery
