# mliligenes/mini-project architecture

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

- Interactive diagram: https://gitdiagram.com/mliligenes/mini-project
- Repository: https://github.com/mliligenes/mini-project

## Overview

This is a library web application for browsing books, managing client accounts, and viewing loans. The user-facing flow enters through routed frontend pages; backend book, client, and loan services provide the domain APIs. Client changes also publish RabbitMQ events consumed by a notification service, which sends email and looks up client/book data over HTTP. Some domain controllers, frontend feature modules, and broker helpers are present in the tree but were not sampled, so their internal wiring is left unspecified.

Main entry points: [`frontend/src/App.jsx`](https://github.com/mliligenes/mini-project/blob/main/frontend/src/App.jsx) (Routed app), [`backend/notification/app.js`](https://github.com/mliligenes/mini-project/blob/main/backend/notification/app.js) (Email notifications), [`backend/client/routes/Client.js`](https://github.com/mliligenes/mini-project/blob/main/backend/client/routes/Client.js) (Client routes), [`backend/client/controllers/Client.js`](https://github.com/mliligenes/mini-project/blob/main/backend/client/controllers/Client.js) (Client operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_webapp["Routed app<br/>[App.jsx]"]
  node_bootstrap["UI bootstrap<br/>[main.jsx]"]
  node_home["Home page<br/>[home.jsx]"]
  node_booksui["Books pages<br/>[books.jsx]"]
  node_bookui["Book detail<br/>[book.jsx]"]
  node_loansui["My loans<br/>[loans.jsx]"]
  node_authui["Login and signup<br/>[login.jsx]"]
end

subgraph group_catalog["Book catalog"]
  node_bookapi["Book API<br/>[app.js]"]
  node_bookroutes["Book routes<br/>[Book.js]"]
  node_bookcontroller["Book operations<br/>[Book.js]"]
  node_bookmodel[("Book model<br/>[Book.js]")]
end

subgraph group_identity["Client accounts"]
  node_clientapi["Client API<br/>[app.js]"]
  node_clientroutes["Client routes<br/>[Client.js]"]
  node_clientcontroller["Client operations<br/>[Client.js]"]
  node_clientmodel[("Client model<br/>[Client.js]")]
  node_clientauth["Client auth<br/>[Client.js]"]
end

subgraph group_loans["Loan management"]
  node_loanapi["Loan API<br/>[app.js]"]
  node_loanroutes["Loan routes<br/>[Loan.js]"]
  node_loancontroller["Loan operations<br/>[Loan.js]"]
  node_loanmodel[("Loan model<br/>[Loan.js]")]
end

subgraph group_events["Notifications"]
  node_notify["Email notifications<br/>[app.js]"]
end

node_reader(("Reader"))
node_rabbit["RabbitMQ"]
node_mail["Email service"]

node_reader -->|"uses"| node_webapp
node_bootstrap -->|"renders"| node_webapp
node_webapp -->|"routes"| node_home
node_webapp -->|"routes"| node_booksui
node_webapp -->|"routes"| node_bookui
node_webapp -->|"routes"| node_loansui
node_webapp -->|"routes"| node_authui
node_bookapi -->|"mounts"| node_bookroutes
node_bookroutes -->|"dispatches"| node_bookcontroller
node_bookcontroller --> node_bookmodel
node_clientapi -->|"mounts"| node_clientroutes
node_clientroutes -->|"dispatches"| node_clientcontroller
node_clientroutes -->|"guards"| node_clientauth
node_clientcontroller -->|"reads/writes"| node_clientmodel
node_loanapi -->|"mounts"| node_loanroutes
node_loanroutes -->|"dispatches"| node_loancontroller
node_loancontroller --> node_loanmodel
node_notify -->|"consumes events"| node_rabbit
node_notify -->|"fetches emails"| node_clientapi
node_notify -->|"fetches client"| node_clientapi
node_notify -->|"fetches book"| node_bookapi
node_notify -->|"sends email"| node_mail
node_clientcontroller -->|"publishes client events"| node_rabbit

click node_webapp "https://github.com/mliligenes/mini-project/blob/main/frontend/src/App.jsx"
click node_bootstrap "https://github.com/mliligenes/mini-project/blob/main/frontend/src/main.jsx"
click node_home "https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/home.jsx"
click node_booksui "https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/books.jsx"
click node_bookui "https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/book.jsx"
click node_loansui "https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/loans.jsx"
click node_authui "https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/login.jsx"
click node_bookapi "https://github.com/mliligenes/mini-project/blob/main/backend/book/app.js"
click node_bookroutes "https://github.com/mliligenes/mini-project/blob/main/backend/book/routes/Book.js"
click node_bookcontroller "https://github.com/mliligenes/mini-project/blob/main/backend/book/controllers/Book.js"
click node_bookmodel "https://github.com/mliligenes/mini-project/blob/main/backend/book/models/Book.js"
click node_clientapi "https://github.com/mliligenes/mini-project/blob/main/backend/client/app.js"
click node_clientroutes "https://github.com/mliligenes/mini-project/blob/main/backend/client/routes/Client.js"
click node_clientcontroller "https://github.com/mliligenes/mini-project/blob/main/backend/client/controllers/Client.js"
click node_clientmodel "https://github.com/mliligenes/mini-project/blob/main/backend/client/models/Client.js"
click node_clientauth "https://github.com/mliligenes/mini-project/blob/main/backend/client/middlewares/Client.js"
click node_loanapi "https://github.com/mliligenes/mini-project/blob/main/backend/loan/app.js"
click node_loanroutes "https://github.com/mliligenes/mini-project/blob/main/backend/loan/routes/Loan.js"
click node_loancontroller "https://github.com/mliligenes/mini-project/blob/main/backend/loan/controllers/Loan.js"
click node_loanmodel "https://github.com/mliligenes/mini-project/blob/main/backend/loan/models/Loan.js"
click node_notify "https://github.com/mliligenes/mini-project/blob/main/backend/notification/app.js"

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_bootstrap,node_home,node_booksui,node_bookui,node_loansui,node_authui toneBlue
class node_bookapi,node_bookroutes,node_bookcontroller,node_bookmodel toneAmber
class node_clientapi,node_clientroutes,node_clientcontroller,node_clientmodel,node_clientauth toneMint
class node_loanapi,node_loanroutes,node_loancontroller,node_loanmodel toneRose
class node_notify,node_reader,node_rabbit,node_mail toneIndigo
```

## Components

### Web application

- [Routed app](https://github.com/mliligenes/mini-project/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [UI bootstrap](https://github.com/mliligenes/mini-project/blob/main/frontend/src/main.jsx): `frontend/src/main.jsx`
- [Home page](https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/home.jsx): `frontend/src/pages/home.jsx`
- [Books pages](https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/books.jsx): `frontend/src/pages/books.jsx`
- [Book detail](https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/book.jsx): `frontend/src/pages/book.jsx`
- [My loans](https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/loans.jsx): `frontend/src/pages/loans.jsx`
- [Login and signup](https://github.com/mliligenes/mini-project/blob/main/frontend/src/pages/login.jsx): `frontend/src/pages/login.jsx`

### Book catalog

- [Book API](https://github.com/mliligenes/mini-project/blob/main/backend/book/app.js): `backend/book/app.js`
- [Book routes](https://github.com/mliligenes/mini-project/blob/main/backend/book/routes/Book.js): `backend/book/routes/Book.js`
- [Book operations](https://github.com/mliligenes/mini-project/blob/main/backend/book/controllers/Book.js): `backend/book/controllers/Book.js`
- [Book model](https://github.com/mliligenes/mini-project/blob/main/backend/book/models/Book.js): `backend/book/models/Book.js`

### Client accounts

- [Client API](https://github.com/mliligenes/mini-project/blob/main/backend/client/app.js): `backend/client/app.js`
- [Client routes](https://github.com/mliligenes/mini-project/blob/main/backend/client/routes/Client.js): `backend/client/routes/Client.js`
- [Client operations](https://github.com/mliligenes/mini-project/blob/main/backend/client/controllers/Client.js): `backend/client/controllers/Client.js`
- [Client model](https://github.com/mliligenes/mini-project/blob/main/backend/client/models/Client.js): `backend/client/models/Client.js`
- [Client auth](https://github.com/mliligenes/mini-project/blob/main/backend/client/middlewares/Client.js): `backend/client/middlewares/Client.js`

### Loan management

- [Loan API](https://github.com/mliligenes/mini-project/blob/main/backend/loan/app.js): `backend/loan/app.js`
- [Loan routes](https://github.com/mliligenes/mini-project/blob/main/backend/loan/routes/Loan.js): `backend/loan/routes/Loan.js`
- [Loan operations](https://github.com/mliligenes/mini-project/blob/main/backend/loan/controllers/Loan.js): `backend/loan/controllers/Loan.js`
- [Loan model](https://github.com/mliligenes/mini-project/blob/main/backend/loan/models/Loan.js): `backend/loan/models/Loan.js`

### Notifications

- [Email notifications](https://github.com/mliligenes/mini-project/blob/main/backend/notification/app.js): `backend/notification/app.js`

### Other components

- **Reader**
- **RabbitMQ**
- **Email service**

## Connections

- Reader → Routed app: uses
- UI bootstrap → Routed app: renders
- Routed app → Home page: routes
- Routed app → Books pages: routes
- Routed app → Book detail: routes
- Routed app → My loans: routes
- Routed app → Login and signup: routes
- Book API → Book routes: mounts
- Book routes → Book operations: dispatches
- Book operations → Book model
- Client API → Client routes: mounts
- Client routes → Client operations: dispatches
- Client routes → Client auth: guards
- Client operations → Client model: reads/writes
- Loan API → Loan routes: mounts
- Loan routes → Loan operations: dispatches
- Loan operations → Loan model
- Email notifications → RabbitMQ: consumes events
- Email notifications → Client API: fetches emails
- Email notifications → Client API: fetches client
- Email notifications → Book API: fetches book
- Email notifications → Email service: sends email
- Client operations → RabbitMQ: publishes client events
