# braxon2/bookmeci-cd architecture

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

- Interactive diagram: https://gitdiagram.com/braxon2/bookmeci-cd
- Repository: https://github.com/braxon2/bookmeci-cd

## Overview

Bookme is a lodging marketplace and booking application: users search available units, inspect unit details and pricing, and can create and manage bookings; property owners administer listings, units, amenities, prices, add-ons, and images. The frontend routes these experiences, while the Spring backend exposes domain APIs and services. The excerpts show several service relationships and the unit-search/storage behavior, but do not show frontend API calls or all controller/service wiring, so those connections are omitted rather than assumed.

Main entry points: [`frontend/src/App.jsx`](https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/App.jsx) (Route application), [`backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java`](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java) (Unit search and details), [`backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java`](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java) (Unit API), [`backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java`](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java) (Review rules)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_webapp["Route application<br/>[App.jsx]"]
  node_searchui["Search and listings"]
  node_managementui["Owner tools"]
  node_imageui["Image manager<br/>[ImageManager.jsx]"]
  node_authui["Authentication context<br/>[AuthContext.jsx]"]
  node_fetchhook["Authenticated fetch<br/>[useFetch.js]"]
end

subgraph group_identity["Identity and security"]
  node_authapi["Authentication API"]
  node_authservice["Authentication service"]
  node_jwt["JWT service<br/>[JwtService.java]"]
end

subgraph group_catalog["Lodging catalog"]
  node_unitapi["Unit API"]
  node_unitsvc["Unit search and details"]
  node_catalogapi["Catalog APIs"]
  node_pricing["Pricing and add-ons"]
end

subgraph group_booking["Booking and feedback"]
  node_bookingsvc["Booking workflow"]
  node_reviewapi["Review API"]
  node_reviewsvc["Review rules<br/>[ReviewService.java]"]
end

subgraph group_infrastructure["Persistence and media"]
  node_unitrepo[("Unit repository")]
  node_domainmodels["Lodging domain models"]
  node_s3service["Image storage service<br/>[S3Service.java]"]
  node_s3[("AWS S3")]
  node_reviewrepo[("Review repository")]
end

node_guest(("Guest or owner"))

node_guest -->|"uses"| node_webapp
node_webapp -->|"routes to"| node_searchui
node_webapp -->|"routes to"| node_managementui
node_webapp -->|"routes to"| node_authui
node_imageui -->|"uses"| node_fetchhook
node_fetchhook -->|"reads auth"| node_authui
node_authapi -.->|"delegates to"| node_authservice
node_authservice -->|"generates token"| node_jwt
node_unitapi -->|"delegates to"| node_unitsvc
node_unitapi -->|"delegates to"| node_pricing
node_unitapi -->|"delegates to"| node_s3service
node_unitsvc -->|"searches units"| node_unitrepo
node_unitsvc -->|"calculates prices"| node_pricing
node_unitsvc -->|"gets image URLs"| node_s3service
node_unitrepo -->|"queries"| node_domainmodels
node_bookingsvc -.->|"creates booking entities"| node_domainmodels
node_reviewapi -->|"delegates to"| node_reviewsvc
node_reviewsvc -->|"uses"| node_reviewrepo
node_reviewsvc -->|"checks booking state"| node_domainmodels
node_s3service -.->|"stores images"| node_s3

click node_webapp "https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/App.jsx"
click node_searchui "https://github.com/braxon2/bookmeci-cd/tree/main/frontend/src/pages"
click node_managementui "https://github.com/braxon2/bookmeci-cd/tree/main/frontend/src/pages"
click node_imageui "https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/components/ImageManager.jsx"
click node_authui "https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/context/AuthContext.jsx"
click node_fetchhook "https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/hooks/useFetch.js"
click node_authapi "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationController.java"
click node_authservice "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationService.java"
click node_jwt "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/config/JwtService.java"
click node_unitapi "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java"
click node_unitsvc "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java"
click node_catalogapi "https://github.com/braxon2/bookmeci-cd/tree/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers"
click node_pricing "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/PricingService.java"
click node_bookingsvc "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookingService.java"
click node_reviewapi "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/ReviewController.java"
click node_reviewsvc "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java"
click node_unitrepo "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/BookableUnitRepository.java"
click node_domainmodels "https://github.com/braxon2/bookmeci-cd/tree/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/models"
click node_s3service "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/S3Service.java"
click node_reviewrepo "https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/ReviewRepository.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_webapp,node_searchui,node_managementui,node_imageui,node_authui,node_fetchhook toneBlue
class node_authapi,node_authservice,node_jwt toneAmber
class node_unitapi,node_unitsvc,node_catalogapi,node_pricing toneMint
class node_bookingsvc,node_reviewapi,node_reviewsvc toneRose
class node_unitrepo,node_domainmodels,node_s3service,node_s3,node_reviewrepo,node_guest toneIndigo
```

## Components

### Web client

- [Route application](https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Search and listings](https://github.com/braxon2/bookmeci-cd/tree/main/frontend/src/pages): `frontend/src/pages`
- [Owner tools](https://github.com/braxon2/bookmeci-cd/tree/main/frontend/src/pages): `frontend/src/pages`
- [Image manager](https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/components/ImageManager.jsx): `frontend/src/components/ImageManager.jsx`
- [Authentication context](https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/context/AuthContext.jsx): `frontend/src/context/AuthContext.jsx`
- [Authenticated fetch](https://github.com/braxon2/bookmeci-cd/blob/main/frontend/src/hooks/useFetch.js): `frontend/src/hooks/useFetch.js`

### Identity and security

- [Authentication API](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationController.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationController.java`
- [Authentication service](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationService.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationService.java`
- [JWT service](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/config/JwtService.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/config/JwtService.java`

### Lodging catalog

- [Unit API](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java`
- [Unit search and details](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java`
- [Catalog APIs](https://github.com/braxon2/bookmeci-cd/tree/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers): `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers`
- [Pricing and add-ons](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/PricingService.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/PricingService.java`

### Booking and feedback

- [Booking workflow](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookingService.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookingService.java`
- [Review API](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/ReviewController.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/ReviewController.java`
- [Review rules](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java`

### Persistence and media

- [Unit repository](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/BookableUnitRepository.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/BookableUnitRepository.java`
- [Lodging domain models](https://github.com/braxon2/bookmeci-cd/tree/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/models): `backend/bookme/src/main/java/com/dusanbranovic/bookme/models`
- [Image storage service](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/service/S3Service.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/S3Service.java`
- **AWS S3**
- [Review repository](https://github.com/braxon2/bookmeci-cd/blob/main/backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/ReviewRepository.java): `backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/ReviewRepository.java`

### Other components

- **Guest or owner**

## Connections

- Guest or owner → Route application: uses (evidence: `frontend/src/App.jsx`)
- Route application → Search and listings: routes to (evidence: `frontend/src/App.jsx`)
- Route application → Owner tools: routes to (evidence: `frontend/src/App.jsx`)
- Route application → Authentication context: routes to (evidence: `frontend/src/App.jsx`)
- Image manager → Authenticated fetch: uses (evidence: `frontend/src/components/ImageManager.jsx`)
- Authenticated fetch → Authentication context: reads auth (evidence: `frontend/src/hooks/useFetch.js`)
- Authentication API → Authentication service: delegates to (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationController.java`)
- Authentication service → JWT service: generates token (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/auth/AuthenticationService.java`)
- Unit API → Unit search and details: delegates to (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java`)
- Unit API → Pricing and add-ons: delegates to (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java`)
- Unit API → Image storage service: delegates to (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/BookableUnitController.java`)
- Unit search and details → Unit repository: searches units (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java`)
- Unit search and details → Pricing and add-ons: calculates prices (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java`)
- Unit search and details → Image storage service: gets image URLs (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookableUnitService.java`)
- Unit repository → Lodging domain models: queries (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/repository/BookableUnitRepository.java`)
- Booking workflow → Lodging domain models: creates booking entities (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/BookingService.java`)
- Review API → Review rules: delegates to (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/controllers/ReviewController.java`)
- Review rules → Review repository: uses (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java`)
- Review rules → Lodging domain models: checks booking state (evidence: `backend/bookme/src/main/java/com/dusanbranovic/bookme/service/ReviewService.java`)
- Image storage service → AWS S3: stores images
