# yladraoui/book-network architecture

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

## Overview

Book Network is a web application for sharing books: users register and activate accounts, discover and manage books, request borrowing, track returns, and leave feedback; administrators manage users, books, and usage statistics. The Angular UI communicates with a Spring backend through HTTP APIs, with JWT-based access control. The graph preserves the distinct catalog, lending, feedback, account, and administration capabilities visible in the tree. Backend service implementations and most UI call sites were not sampled, so uncertain internal wiring is omitted.

Main entry points: [`book-network-ui/src/app/services/api.ts`](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/services/api.ts) (HTTP API client), [`book-network/src/main/java/com/yladraoui/book/book/BookService.java`](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookService.java) (Book service), [`book-network/src/main/java/com/yladraoui/book/auth/AuthenticationController.java`](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/auth/AuthenticationController.java) (Authentication API), [`book-network-ui/src/app/features/book/book.routes.ts`](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/book/book.routes.ts) (Book workflows)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Web interface"]
  node_book_ui["Book workflows<br/>[book.routes.ts]"]
  node_auth_ui["Account screens<br/>[auth.routes.ts]"]
  node_profile_ui["Profile screen<br/>[profile.ts]"]
  node_admin_ui["Admin dashboard<br/>[admin-dashboard.ts]"]
  node_feedback_ui["Feedback screens<br/>[feedback-list.ts]"]
  node_api_client["HTTP API client<br/>[api.ts]"]
end

subgraph group_identity["Accounts and security"]
  node_auth_controller["Authentication API"]
  node_auth_service["Authentication service"]
  node_security["JWT security"]
  node_user_controller["User API"]
  node_user_service["User service<br/>[UserService.java]"]
end

subgraph group_books["Books and lending"]
  node_book_controller["Book API"]
  node_book_service["Book service<br/>[BookService.java]"]
  node_book_store[("Book repository")]
  node_history_store[("Borrow history")]
end

subgraph group_community["Feedback and administration"]
  node_feedback_controller["Feedback API"]
  node_feedback_service["Feedback service"]
  node_feedback_store[("Feedback repository")]
  node_admin_controller["Admin API"]
  node_admin_service["Admin service<br/>[AdminService.java]"]
end

subgraph group_platform["Backend services and state"]
  node_user_store[("User repository")]
  node_email["Email service<br/>[EmailService.java]"]
  node_file_storage[("Cover storage")]
end

node_user(("User"))
node_mail_provider["Mail provider"]

node_user -->|"registers or signs in"| node_auth_ui
node_user -->|"browses and borrows"| node_book_ui
node_user -->|"manages profile"| node_profile_ui
node_user -->|"leaves feedback"| node_feedback_ui
node_user -->|"administers"| node_admin_ui
node_auth_ui -->|"sends account requests"| node_api_client
node_book_ui -->|"sends book requests"| node_api_client
node_profile_ui -->|"sends profile requests"| node_api_client
node_feedback_ui -->|"sends feedback requests"| node_api_client
node_admin_ui -->|"sends admin requests"| node_api_client
node_api_client -->|"HTTP requests"| node_auth_controller
node_api_client -->|"HTTP requests"| node_book_controller
node_api_client -->|"HTTP requests"| node_user_controller
node_api_client -->|"HTTP requests"| node_feedback_controller
node_api_client -->|"HTTP requests"| node_admin_controller
node_auth_controller -->|"delegates authentication"| node_auth_service
node_auth_service -.->|"sends activation mail"| node_email
node_email -.->|"sends email"| node_mail_provider
node_user_controller -->|"delegates profile work"| node_user_service
node_book_controller -->|"delegates book and loan work"| node_book_service
node_book_service -->|"stores cover images"| node_file_storage
node_feedback_controller -->|"delegates feedback work"| node_feedback_service
node_admin_controller -->|"delegates administration"| node_admin_service
node_book_service -->|"book state"| node_book_store
node_book_service -->|"loan history"| node_history_store
node_feedback_service -->|"feedback records"| node_feedback_store
node_user_service -->|"user records"| node_user_store
node_admin_service -->|"user administration"| node_user_store
node_security -->|"protects API"| node_auth_controller

click node_book_ui "https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/book/book.routes.ts"
click node_auth_ui "https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/auth/auth.routes.ts"
click node_profile_ui "https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/profile/pages/profile/profile.ts"
click node_admin_ui "https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/admin/pages/admin-dashboard/admin-dashboard.ts"
click node_feedback_ui "https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/feedback/pages/feedback-list/feedback-list.ts"
click node_api_client "https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/services/api.ts"
click node_auth_controller "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/auth/AuthenticationController.java"
click node_auth_service "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/auth/AuthenticationService.java"
click node_security "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/security/SecurityConfig.java"
click node_user_controller "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/user/UserController.java"
click node_user_service "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/user/UserService.java"
click node_book_controller "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookController.java"
click node_book_service "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookService.java"
click node_book_store "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookRepository.java"
click node_history_store "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/history/BookTransactionHistoryRepository.java"
click node_feedback_controller "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/feedback/FeedbackController.java"
click node_feedback_service "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/feedback/FeedbackService.java"
click node_feedback_store "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/feedback/FeedbackRepository.java"
click node_admin_controller "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/admin/AdminController.java"
click node_admin_service "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/admin/AdminService.java"
click node_user_store "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/user/UserRepository.java"
click node_email "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/email/EmailService.java"
click node_file_storage "https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/file/FileStorageService.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_book_ui,node_auth_ui,node_profile_ui,node_admin_ui,node_feedback_ui,node_api_client,node_user toneBlue
class node_auth_controller,node_auth_service,node_security,node_user_controller,node_user_service toneAmber
class node_book_controller,node_book_service,node_book_store,node_history_store toneMint
class node_feedback_controller,node_feedback_service,node_feedback_store,node_admin_controller,node_admin_service toneRose
class node_user_store,node_email,node_file_storage,node_mail_provider toneIndigo
```

## Components

### Web interface

- [Book workflows](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/book/book.routes.ts): `book-network-ui/src/app/features/book/book.routes.ts`
- [Account screens](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/auth/auth.routes.ts): `book-network-ui/src/app/features/auth/auth.routes.ts`
- [Profile screen](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/profile/pages/profile/profile.ts): `book-network-ui/src/app/features/profile/pages/profile/profile.ts`
- [Admin dashboard](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/admin/pages/admin-dashboard/admin-dashboard.ts): `book-network-ui/src/app/features/admin/pages/admin-dashboard/admin-dashboard.ts`
- [Feedback screens](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/features/feedback/pages/feedback-list/feedback-list.ts): `book-network-ui/src/app/features/feedback/pages/feedback-list/feedback-list.ts`
- [HTTP API client](https://github.com/yladraoui/book-network/blob/main/book-network-ui/src/app/services/api.ts): `book-network-ui/src/app/services/api.ts`

### Accounts and security

- [Authentication API](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/auth/AuthenticationController.java): `book-network/src/main/java/com/yladraoui/book/auth/AuthenticationController.java`
- [Authentication service](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/auth/AuthenticationService.java): `book-network/src/main/java/com/yladraoui/book/auth/AuthenticationService.java`
- [JWT security](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/security/SecurityConfig.java): `book-network/src/main/java/com/yladraoui/book/security/SecurityConfig.java`
- [User API](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/user/UserController.java): `book-network/src/main/java/com/yladraoui/book/user/UserController.java`
- [User service](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/user/UserService.java): `book-network/src/main/java/com/yladraoui/book/user/UserService.java`

### Books and lending

- [Book API](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookController.java): `book-network/src/main/java/com/yladraoui/book/book/BookController.java`
- [Book service](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookService.java): `book-network/src/main/java/com/yladraoui/book/book/BookService.java`
- [Book repository](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/book/BookRepository.java): `book-network/src/main/java/com/yladraoui/book/book/BookRepository.java`
- [Borrow history](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/history/BookTransactionHistoryRepository.java): `book-network/src/main/java/com/yladraoui/book/history/BookTransactionHistoryRepository.java`

### Feedback and administration

- [Feedback API](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/feedback/FeedbackController.java): `book-network/src/main/java/com/yladraoui/book/feedback/FeedbackController.java`
- [Feedback service](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/feedback/FeedbackService.java): `book-network/src/main/java/com/yladraoui/book/feedback/FeedbackService.java`
- [Feedback repository](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/feedback/FeedbackRepository.java): `book-network/src/main/java/com/yladraoui/book/feedback/FeedbackRepository.java`
- [Admin API](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/admin/AdminController.java): `book-network/src/main/java/com/yladraoui/book/admin/AdminController.java`
- [Admin service](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/admin/AdminService.java): `book-network/src/main/java/com/yladraoui/book/admin/AdminService.java`

### Backend services and state

- [User repository](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/user/UserRepository.java): `book-network/src/main/java/com/yladraoui/book/user/UserRepository.java`
- [Email service](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/email/EmailService.java): `book-network/src/main/java/com/yladraoui/book/email/EmailService.java`
- [Cover storage](https://github.com/yladraoui/book-network/blob/main/book-network/src/main/java/com/yladraoui/book/file/FileStorageService.java): `book-network/src/main/java/com/yladraoui/book/file/FileStorageService.java`

### Other components

- **User**
- **Mail provider**

## Connections

- User → Account screens: registers or signs in
- User → Book workflows: browses and borrows
- User → Profile screen: manages profile
- User → Feedback screens: leaves feedback
- User → Admin dashboard: administers
- Account screens → HTTP API client: sends account requests
- Book workflows → HTTP API client: sends book requests
- Profile screen → HTTP API client: sends profile requests
- Feedback screens → HTTP API client: sends feedback requests
- Admin dashboard → HTTP API client: sends admin requests
- HTTP API client → Authentication API: HTTP requests
- HTTP API client → Book API: HTTP requests
- HTTP API client → User API: HTTP requests
- HTTP API client → Feedback API: HTTP requests
- HTTP API client → Admin API: HTTP requests
- Authentication API → Authentication service: delegates authentication
- Authentication service → Email service: sends activation mail
- Email service → Mail provider: sends email
- User API → User service: delegates profile work
- Book API → Book service: delegates book and loan work
- Book service → Cover storage: stores cover images
- Feedback API → Feedback service: delegates feedback work
- Admin API → Admin service: delegates administration
- Book service → Book repository: book state
- Book service → Borrow history: loan history
- Feedback service → Feedback repository: feedback records
- User service → User repository: user records
- Admin service → User repository: user administration
- JWT security → Authentication API: protects API
