# vijeemani/book_app architecture

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

- Interactive diagram: https://gitdiagram.com/vijeemani/book_app
- Repository: https://github.com/vijeemani/book_app

## Overview

Pubhub is a Spring MVC bookstore with user registration and account administration alongside book browsing, cart/order handling, and order-history management. The main workflow routes web requests through controllers and services to Spring Data repositories; JSPs render responses. The README specifically documents listing, editing, deleting, activating, and deactivating users, though sampled code does not establish the detailed routes for each operation. Relationships for unsampled controllers and services use SOURCE INDEX references; uncertain integrations are omitted.

Main entry points: [`src/main/java/com/rev/pubhub/service/UserService.java`](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/UserService.java) (User service), [`src/main/java/com/rev/pubhub/controller/AdminController.java`](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/AdminController.java) (Admin controller), [`src/main/java/com/rev/pubhub/controller/OrderController.java`](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/OrderController.java) (Order controller), [`src/main/java/com/rev/pubhub/service/BookService.java`](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/BookService.java) (Book service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflows"]
  node_user_ctrl["User controller"]
  node_admin_ctrl["Admin controller"]
  node_book_ctrl["Book controller"]
  node_order_ctrl["Order controller"]
  node_ordered_item_ctrl["Cart controller"]
  node_profile_ctrl["Profile controller"]
  node_user_views["User pages"]
  node_book_views["Book pages"]
  node_order_views["Order pages"]
end

subgraph group_services["Application services"]
  node_user_service["User service<br/>[UserService.java]"]
  node_book_service["Book service<br/>[BookService.java]"]
  node_order_service["Order service<br/>[OrderService.java]"]
  node_item_service["Order-item service"]
  node_validation["Registration validation"]
end

subgraph group_data["Domain and persistence"]
  node_user_repo["User repository"]
  node_book_repo["Book repository"]
  node_order_repo["Order repository"]
  node_item_repo["Order-item repository"]
  node_user_model["User entity<br/>[User.java]"]
  node_book_model["Book entity<br/>[Book.java]"]
  node_order_model["Order entity<br/>[Order.java]"]
  node_item_model["Order-item entity<br/>[OrderItem.java]"]
end

subgraph group_integrations["Supporting components"]
  node_email_util["Email utility<br/>[EmailUtil.java]"]
end

node_customer(("Customer"))
node_admin(("Administrator"))

node_customer -->|"registers or logs in"| node_user_ctrl
node_customer -.->|"browses books"| node_book_ctrl
node_customer -.->|"manages orders"| node_order_ctrl
node_admin -.->|"administers"| node_admin_ctrl
node_user_ctrl -->|"authenticates and registers"| node_user_service
node_user_ctrl -->|"validates registration"| node_validation
node_user_ctrl -->|"returns pages"| node_user_views
node_admin_ctrl -->|"manages users"| node_user_service
node_admin_ctrl -->|"requests book operations"| node_book_service
node_admin_ctrl -->|"requests order operations"| node_order_service
node_admin_ctrl -->|"requests item operations"| node_item_service
node_book_ctrl -->|"lists and searches"| node_book_service
node_book_ctrl -->|"returns book pages"| node_book_views
node_order_ctrl -->|"loads books"| node_book_service
node_order_ctrl -->|"places and lists orders"| node_order_service
node_order_ctrl -->|"sends order details"| node_user_service
node_order_ctrl -->|"returns order pages"| node_order_views
node_ordered_item_ctrl -->|"loads cart books"| node_book_service
node_profile_ctrl -->|"loads profile data"| node_user_service
node_user_service -->|"reads and saves users"| node_user_repo
node_user_service -->|"sends order email"| node_email_util
node_book_service -->|"queries books"| node_book_repo
node_order_service -->|"reads and saves orders"| node_order_repo
node_item_service -->|"queries order items"| node_item_repo
node_user_repo -->|"persists"| node_user_model
node_book_repo -->|"persists"| node_book_model
node_order_repo -->|"persists"| node_order_model
node_item_repo -->|"persists"| node_item_model

click node_user_ctrl "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/UserController.java"
click node_admin_ctrl "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/AdminController.java"
click node_book_ctrl "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/BookController.java"
click node_order_ctrl "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/OrderController.java"
click node_ordered_item_ctrl "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/OrderedItemController.java"
click node_profile_ctrl "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/ProfileController.java"
click node_user_views "https://github.com/vijeemani/book_app/tree/master/src/main/webapp/auth"
click node_book_views "https://github.com/vijeemani/book_app/tree/master/src/main/webapp/bookDisplay"
click node_order_views "https://github.com/vijeemani/book_app/tree/master/src/main/webapp/orders"
click node_user_service "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/UserService.java"
click node_book_service "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/BookService.java"
click node_order_service "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/OrderService.java"
click node_item_service "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/OrderItemService.java"
click node_validation "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/form/RegistrationValidation.java"
click node_user_repo "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/UserRepository.java"
click node_book_repo "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/BookRepository.java"
click node_order_repo "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/OrderRepository.java"
click node_item_repo "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/OrderItemRepository.java"
click node_user_model "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/User.java"
click node_book_model "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/Book.java"
click node_order_model "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/Order.java"
click node_item_model "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/OrderItem.java"
click node_email_util "https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/util/EmailUtil.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_user_ctrl,node_admin_ctrl,node_book_ctrl,node_order_ctrl,node_ordered_item_ctrl,node_profile_ctrl,node_user_views,node_book_views,node_order_views toneBlue
class node_user_service,node_book_service,node_order_service,node_item_service,node_validation toneAmber
class node_user_repo,node_book_repo,node_order_repo,node_item_repo,node_user_model,node_book_model,node_order_model,node_item_model toneMint
class node_email_util toneRose
class node_customer,node_admin toneIndigo
```

## Components

### Web workflows

- [User controller](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/UserController.java): `src/main/java/com/rev/pubhub/controller/UserController.java`
- [Admin controller](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/AdminController.java): `src/main/java/com/rev/pubhub/controller/AdminController.java`
- [Book controller](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/BookController.java): `src/main/java/com/rev/pubhub/controller/BookController.java`
- [Order controller](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/OrderController.java): `src/main/java/com/rev/pubhub/controller/OrderController.java`
- [Cart controller](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/OrderedItemController.java): `src/main/java/com/rev/pubhub/controller/OrderedItemController.java`
- [Profile controller](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/controller/ProfileController.java): `src/main/java/com/rev/pubhub/controller/ProfileController.java`
- [User pages](https://github.com/vijeemani/book_app/tree/master/src/main/webapp/auth): `src/main/webapp/auth`
- [Book pages](https://github.com/vijeemani/book_app/tree/master/src/main/webapp/bookDisplay): `src/main/webapp/bookDisplay`
- [Order pages](https://github.com/vijeemani/book_app/tree/master/src/main/webapp/orders): `src/main/webapp/orders`

### Application services

- [User service](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/UserService.java): `src/main/java/com/rev/pubhub/service/UserService.java`
- [Book service](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/BookService.java): `src/main/java/com/rev/pubhub/service/BookService.java`
- [Order service](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/OrderService.java): `src/main/java/com/rev/pubhub/service/OrderService.java`
- [Order-item service](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/service/OrderItemService.java): `src/main/java/com/rev/pubhub/service/OrderItemService.java`
- [Registration validation](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/form/RegistrationValidation.java): `src/main/java/com/rev/pubhub/form/RegistrationValidation.java`

### Domain and persistence

- [User repository](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/UserRepository.java): `src/main/java/com/rev/pubhub/repo/UserRepository.java`
- [Book repository](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/BookRepository.java): `src/main/java/com/rev/pubhub/repo/BookRepository.java`
- [Order repository](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/OrderRepository.java): `src/main/java/com/rev/pubhub/repo/OrderRepository.java`
- [Order-item repository](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/repo/OrderItemRepository.java): `src/main/java/com/rev/pubhub/repo/OrderItemRepository.java`
- [User entity](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/User.java): `src/main/java/com/rev/pubhub/model/User.java`
- [Book entity](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/Book.java): `src/main/java/com/rev/pubhub/model/Book.java`
- [Order entity](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/Order.java): `src/main/java/com/rev/pubhub/model/Order.java`
- [Order-item entity](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/model/OrderItem.java): `src/main/java/com/rev/pubhub/model/OrderItem.java`

### Supporting components

- [Email utility](https://github.com/vijeemani/book_app/blob/master/src/main/java/com/rev/pubhub/util/EmailUtil.java): `src/main/java/com/rev/pubhub/util/EmailUtil.java`

### Other components

- **Customer**
- **Administrator**

## Connections

- Customer → User controller: registers or logs in (evidence: `src/main/java/com/rev/pubhub/controller/UserController.java`)
- Customer → Book controller: browses books
- Customer → Order controller: manages orders
- Administrator → Admin controller: administers
- User controller → User service: authenticates and registers (evidence: `src/main/java/com/rev/pubhub/controller/UserController.java`)
- User controller → Registration validation: validates registration (evidence: `src/main/java/com/rev/pubhub/controller/UserController.java`)
- User controller → User pages: returns pages (evidence: `src/main/java/com/rev/pubhub/controller/UserController.java`)
- Admin controller → User service: manages users (evidence: `src/main/java/com/rev/pubhub/controller/AdminController.java`)
- Admin controller → Book service: requests book operations (evidence: `src/main/java/com/rev/pubhub/controller/AdminController.java`)
- Admin controller → Order service: requests order operations (evidence: `src/main/java/com/rev/pubhub/controller/AdminController.java`)
- Admin controller → Order-item service: requests item operations (evidence: `src/main/java/com/rev/pubhub/controller/AdminController.java`)
- Book controller → Book service: lists and searches (evidence: `src/main/java/com/rev/pubhub/controller/BookController.java`)
- Book controller → Book pages: returns book pages (evidence: `src/main/java/com/rev/pubhub/controller/BookController.java`)
- Order controller → Book service: loads books (evidence: `src/main/java/com/rev/pubhub/controller/OrderController.java`)
- Order controller → Order service: places and lists orders (evidence: `src/main/java/com/rev/pubhub/controller/OrderController.java`)
- Order controller → User service: sends order details (evidence: `src/main/java/com/rev/pubhub/controller/OrderController.java`)
- Order controller → Order pages: returns order pages (evidence: `src/main/java/com/rev/pubhub/controller/OrderController.java`)
- Cart controller → Book service: loads cart books (evidence: `src/main/java/com/rev/pubhub/controller/OrderedItemController.java`)
- Profile controller → User service: loads profile data (evidence: `src/main/java/com/rev/pubhub/controller/ProfileController.java`)
- User service → User repository: reads and saves users (evidence: `src/main/java/com/rev/pubhub/service/UserService.java`)
- User service → Email utility: sends order email (evidence: `src/main/java/com/rev/pubhub/service/UserService.java`)
- Book service → Book repository: queries books (evidence: `src/main/java/com/rev/pubhub/service/BookService.java`)
- Order service → Order repository: reads and saves orders (evidence: `src/main/java/com/rev/pubhub/service/OrderService.java`)
- Order-item service → Order-item repository: queries order items (evidence: `src/main/java/com/rev/pubhub/service/OrderItemService.java`)
- User repository → User entity: persists (evidence: `src/main/java/com/rev/pubhub/repo/UserRepository.java`)
- Book repository → Book entity: persists (evidence: `src/main/java/com/rev/pubhub/repo/BookRepository.java`)
- Order repository → Order entity: persists (evidence: `src/main/java/com/rev/pubhub/repo/OrderRepository.java`)
- Order-item repository → Order-item entity: persists (evidence: `src/main/java/com/rev/pubhub/repo/OrderItemRepository.java`)
