# ibrahimgoja/demo architecture

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

## Overview

This is a Spring-based bookstore API. Its main purchase flow lets a user manage a cart, then check out: checkout validates the user and stock, calculates totals, creates an order, reduces book stock, and clears the cart. Other documented-by-code capabilities include book search and CRUD, user management, and direct order-item operations. The README provides no product overview; the graph relies on the sampled source and SOURCE INDEX, so unsampled controller and persistence details are shown only where their references support them.

Main entry points: [`src/main/java/com/bookStore/bookstore/Models/mappers`](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/mappers) (Entity mappers), [`src/main/java/com/bookStore/bookstore/repositories`](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/repositories) (JPA repositories), [`src/main/java/com/bookStore/bookstore/Controllers`](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Controllers) (REST controllers), [`src/main/java/com/bookStore/bookstore/Services/BookService.java`](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/BookService.java) (Book service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API entry points"]
  node_controllers["REST controllers"]
  node_booksapi["Books API delegate"]
end

subgraph group_catalog["Catalog and users"]
  node_bookservice["Book service<br/>[BookService.java]"]
  node_booksearch["Book search"]
  node_userservice["User service<br/>[UserService.java]"]
end

subgraph group_commerce["Cart and orders"]
  node_cartservice["Cart service"]
  node_orderservice["Order service<br/>[OrderService.java]"]
  node_orderitemservice["Order item service"]
end

subgraph group_data["Domain and persistence"]
  node_mappers["Entity mappers"]
  node_dtos["Request and response DTOs"]
  node_entities["Bookstore entities"]
  node_repositories["JPA repositories"]
end

node_shopper(("API client"))

node_shopper -->|"sends requests"| node_controllers
node_shopper -.->|"calls books API"| node_booksapi
node_controllers -->|"delegates cart"| node_cartservice
node_controllers -->|"delegates orders"| node_orderservice
node_controllers -->|"delegates items"| node_orderitemservice
node_controllers -->|"delegates users"| node_userservice
node_booksapi -->|"calls catalog"| node_bookservice
node_booksapi -->|"maps API data"| node_mappers
node_bookservice -->|"builds search"| node_booksearch
node_bookservice -->|"queries books"| node_repositories
node_bookservice -->|"maps results"| node_mappers
node_userservice -->|"queries users"| node_repositories
node_userservice -->|"maps users"| node_mappers
node_cartservice -->|"reads and writes"| node_repositories
node_cartservice -->|"maps cart items"| node_mappers
node_orderservice -->|"checks and persists"| node_repositories
node_orderservice -->|"maps orders"| node_mappers
node_orderitemservice -->|"reads and writes"| node_repositories
node_orderitemservice -->|"maps order items"| node_mappers
node_repositories -->|"persists entities"| node_entities
node_mappers -->|"maps API data"| node_dtos
node_mappers -->|"maps domain data"| node_entities

click node_controllers "https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Controllers"
click node_booksapi "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/openapi/support/BooksApiDelegateImpl.java"
click node_bookservice "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/BookService.java"
click node_booksearch "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Specifications/BookSearchSpecifications.java"
click node_userservice "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/UserService.java"
click node_cartservice "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/CartItemService.java"
click node_orderservice "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/OrderService.java"
click node_orderitemservice "https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/OrderItemService.java"
click node_mappers "https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/mappers"
click node_dtos "https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/dto"
click node_entities "https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/entity"
click node_repositories "https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/repositories"

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_controllers,node_booksapi,node_shopper toneBlue
class node_bookservice,node_booksearch,node_userservice toneAmber
class node_cartservice,node_orderservice,node_orderitemservice toneMint
class node_mappers,node_dtos,node_entities,node_repositories toneRose
```

## Components

### API entry points

- [REST controllers](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Controllers): `src/main/java/com/bookStore/bookstore/Controllers`
- [Books API delegate](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/openapi/support/BooksApiDelegateImpl.java): `src/main/java/com/bookStore/bookstore/openapi/support/BooksApiDelegateImpl.java`

### Catalog and users

- [Book service](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/BookService.java): `src/main/java/com/bookStore/bookstore/Services/BookService.java`
- [Book search](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Specifications/BookSearchSpecifications.java): `src/main/java/com/bookStore/bookstore/Specifications/BookSearchSpecifications.java`
- [User service](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/UserService.java): `src/main/java/com/bookStore/bookstore/Services/UserService.java`

### Cart and orders

- [Cart service](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/CartItemService.java): `src/main/java/com/bookStore/bookstore/Services/CartItemService.java`
- [Order service](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/OrderService.java): `src/main/java/com/bookStore/bookstore/Services/OrderService.java`
- [Order item service](https://github.com/ibrahimgoja/demo/blob/main/src/main/java/com/bookStore/bookstore/Services/OrderItemService.java): `src/main/java/com/bookStore/bookstore/Services/OrderItemService.java`

### Domain and persistence

- [Entity mappers](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/mappers): `src/main/java/com/bookStore/bookstore/Models/mappers`
- [Request and response DTOs](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/dto): `src/main/java/com/bookStore/bookstore/Models/dto`
- [Bookstore entities](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/Models/entity): `src/main/java/com/bookStore/bookstore/Models/entity`
- [JPA repositories](https://github.com/ibrahimgoja/demo/tree/main/src/main/java/com/bookStore/bookstore/repositories): `src/main/java/com/bookStore/bookstore/repositories`

### Other components

- **API client**

## Connections

- API client → REST controllers: sends requests (evidence: `src/main/java/com/bookStore/bookstore/Controllers/CartItemController.java`)
- API client → Books API delegate: calls books API
- REST controllers → Cart service: delegates cart (evidence: `src/main/java/com/bookStore/bookstore/Controllers/CartItemController.java`)
- REST controllers → Order service: delegates orders (evidence: `src/main/java/com/bookStore/bookstore/Controllers/OrderController.java`)
- REST controllers → Order item service: delegates items (evidence: `src/main/java/com/bookStore/bookstore/Controllers/OrderItemController.java`)
- REST controllers → User service: delegates users (evidence: `src/main/java/com/bookStore/bookstore/Controllers/UserController.java`)
- Books API delegate → Book service: calls catalog (evidence: `src/main/java/com/bookStore/bookstore/openapi/support/BooksApiDelegateImpl.java`)
- Books API delegate → Entity mappers: maps API data (evidence: `src/main/java/com/bookStore/bookstore/openapi/support/BooksApiDelegateImpl.java`)
- Book service → Book search: builds search (evidence: `src/main/java/com/bookStore/bookstore/Services/BookService.java`)
- Book service → JPA repositories: queries books (evidence: `src/main/java/com/bookStore/bookstore/Services/BookService.java`)
- Book service → Entity mappers: maps results (evidence: `src/main/java/com/bookStore/bookstore/Services/BookService.java`)
- User service → JPA repositories: queries users (evidence: `src/main/java/com/bookStore/bookstore/Services/UserService.java`)
- User service → Entity mappers: maps users (evidence: `src/main/java/com/bookStore/bookstore/Services/UserService.java`)
- Cart service → JPA repositories: reads and writes (evidence: `src/main/java/com/bookStore/bookstore/Services/CartItemService.java`)
- Cart service → Entity mappers: maps cart items (evidence: `src/main/java/com/bookStore/bookstore/Services/CartItemService.java`)
- Order service → JPA repositories: checks and persists (evidence: `src/main/java/com/bookStore/bookstore/Services/OrderService.java`)
- Order service → Entity mappers: maps orders (evidence: `src/main/java/com/bookStore/bookstore/Services/OrderService.java`)
- Order item service → JPA repositories: reads and writes (evidence: `src/main/java/com/bookStore/bookstore/Services/OrderItemService.java`)
- Order item service → Entity mappers: maps order items (evidence: `src/main/java/com/bookStore/bookstore/Services/OrderItemService.java`)
- JPA repositories → Bookstore entities: persists entities (evidence: `src/main/java/com/bookStore/bookstore/repositories/BookRepository.java`)
- Entity mappers → Request and response DTOs: maps API data (evidence: `src/main/java/com/bookStore/bookstore/Models/mappers/BookMapper.java`)
- Entity mappers → Bookstore entities: maps domain data (evidence: `src/main/java/com/bookStore/bookstore/Models/mappers/BookMapper.java`)
