# karanmehta1806/library-management architecture

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

- Interactive diagram: https://gitdiagram.com/karanmehta1806/library-management
- Repository: https://github.com/karanmehta1806/library-management

## Overview

This is a MERN library-management application for students, librarians, and administrators. Its principal workflow is browsing books, requesting an issue, librarian approval, and tracking returns and fines; separate capabilities cover account management, catalog administration, analytics, contact messages, and password reset. The backend routes requests through role-protected Express routes to controllers and MongoDB models. The excerpts show this backend structure and frontend page routing, but not the frontend API-call implementations, so no frontend-to-backend request edges are asserted.

Main entry points: [`frontend/src/App.jsx`](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/App.jsx) (Page router), [`backend/routes/books.js`](https://github.com/karanmehta1806/library-management/blob/main/backend/routes/books.js) (Book routes), [`backend/controller/books.js`](https://github.com/karanmehta1806/library-management/blob/main/backend/controller/books.js) (Catalog and borrowing), [`backend/index.js`](https://github.com/karanmehta1806/library-management/blob/main/backend/index.js) (Express server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_app["Page router<br/>[App.jsx]"]
  node_browse["Book discovery<br/>[books.jsx]"]
  node_bookdetails["Book details<br/>[bookdetails.jsx]"]
  node_home["Home page<br/>[home.jsx]"]
  node_profile["Student profile<br/>[profile.jsx]"]
  node_admin_dashboard["Admin analytics<br/>[admindashboard.jsx]"]
  node_admin_books["Book administration<br/>[viewbook.jsx]"]
  node_issue_requests["Issue requests"]
  node_return_requests["Return requests<br/>[ReturnRequest.jsx]"]
end

subgraph group_api["API and access"]
  node_api_server["Express server<br/>[index.js]"]
  node_book_routes["Book routes<br/>[books.js]"]
  node_home_routes["Home routes<br/>[home.js]"]
  node_librarian_routes["Librarian routes<br/>[librarian.js]"]
  node_user_routes["User routes<br/>[user.js]"]
  node_auth["JWT authentication<br/>[userAuth.js]"]
  node_role_check["Role authorization<br/>[checkRole.js]"]
end

subgraph group_catalog["Catalog and circulation"]
  node_book_controller["Catalog and borrowing<br/>[books.js]"]
  node_librarian_controller["Circulation approvals<br/>[librarian.js]"]
  node_book_model[("Book records<br/>[BookModel.js]")]
  node_borrow_model[("Borrow records<br/>[BorrowModel.js]")]
  node_fine["Fine calculation<br/>[fineCalculator.js]"]
  node_cache["Home cache<br/>[cache.js]"]
  node_cloud["Image uploads<br/>[cloudConfig.js]"]
end

subgraph group_identity["Accounts and messaging"]
  node_user_controller["Account services<br/>[user.js]"]
  node_admin_controller["Admin services<br/>[admin.js]"]
  node_user_model[("User records<br/>[UserModel.js]")]
  node_contact_model[("Contact messages<br/>[ContactModel.js]")]
  node_otp_model[("OTP records<br/>[OtpModel.js]")]
end

node_student(("Student"))
node_librarian(("Librarian"))
node_admin(("Administrator"))

node_student -->|"browses"| node_browse
node_student -->|"views details"| node_bookdetails
node_student -->|"tracks borrowing"| node_profile
node_librarian -->|"reviews issues"| node_issue_requests
node_librarian -->|"reviews returns"| node_return_requests
node_admin -->|"views analytics"| node_admin_dashboard
node_admin -->|"manages books"| node_admin_books
node_app -->|"routes to"| node_home
node_app -->|"routes to"| node_browse
node_app -->|"routes to"| node_bookdetails
node_app -->|"routes to"| node_profile
node_app -->|"routes to"| node_admin_dashboard
node_app -->|"routes to"| node_admin_books
node_app -->|"routes to"| node_issue_requests
node_app -->|"routes to"| node_return_requests
node_api_server -->|"mounts"| node_book_routes
node_api_server -->|"mounts"| node_home_routes
node_api_server -->|"mounts"| node_librarian_routes
node_api_server -->|"mounts"| node_user_routes
node_book_routes -->|"checks token"| node_auth
node_book_routes -->|"checks role"| node_role_check
node_book_routes -->|"dispatches"| node_book_controller
node_librarian_routes -->|"checks token"| node_auth
node_librarian_routes -->|"checks role"| node_role_check
node_librarian_routes -->|"dispatches"| node_librarian_controller
node_book_controller -->|"reads and writes"| node_book_model
node_book_controller -->|"reads and writes"| node_borrow_model
node_book_controller -->|"calculates fines"| node_fine
node_book_controller -->|"clears cache"| node_cache
node_book_routes -->|"uses uploads"| node_cloud
node_librarian_controller -->|"queries users"| node_user_model
node_librarian_controller -->|"updates borrowing"| node_borrow_model
node_librarian_controller -->|"updates books"| node_book_model
node_user_routes -->|"dispatches"| node_user_controller
node_user_controller -->|"reads and writes"| node_user_model
node_user_controller -->|"saves messages"| node_contact_model
node_user_controller -->|"manages OTPs"| node_otp_model
node_user_routes -->|"checks token"| node_auth
node_user_routes -->|"checks role"| node_role_check
node_admin_controller -.->|"manages accounts"| node_user_model

click node_app "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/App.jsx"
click node_browse "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/books.jsx"
click node_bookdetails "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/bookdetails.jsx"
click node_home "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/home.jsx"
click node_profile "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/profile.jsx"
click node_admin_dashboard "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/admin/admindashboard.jsx"
click node_admin_books "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/admin/viewbook.jsx"
click node_issue_requests "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/librarian/LibrarianRequest.jsx"
click node_return_requests "https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/librarian/ReturnRequest.jsx"
click node_api_server "https://github.com/karanmehta1806/library-management/blob/main/backend/index.js"
click node_book_routes "https://github.com/karanmehta1806/library-management/blob/main/backend/routes/books.js"
click node_home_routes "https://github.com/karanmehta1806/library-management/blob/main/backend/routes/home.js"
click node_librarian_routes "https://github.com/karanmehta1806/library-management/blob/main/backend/routes/librarian.js"
click node_user_routes "https://github.com/karanmehta1806/library-management/blob/main/backend/routes/user.js"
click node_auth "https://github.com/karanmehta1806/library-management/blob/main/backend/middlewares/userAuth.js"
click node_role_check "https://github.com/karanmehta1806/library-management/blob/main/backend/middlewares/checkRole.js"
click node_book_controller "https://github.com/karanmehta1806/library-management/blob/main/backend/controller/books.js"
click node_librarian_controller "https://github.com/karanmehta1806/library-management/blob/main/backend/controller/librarian.js"
click node_book_model "https://github.com/karanmehta1806/library-management/blob/main/backend/model/BookModel.js"
click node_borrow_model "https://github.com/karanmehta1806/library-management/blob/main/backend/model/BorrowModel.js"
click node_fine "https://github.com/karanmehta1806/library-management/blob/main/backend/utils/fineCalculator.js"
click node_cache "https://github.com/karanmehta1806/library-management/blob/main/backend/utils/cache.js"
click node_cloud "https://github.com/karanmehta1806/library-management/blob/main/backend/utils/cloudConfig.js"
click node_user_controller "https://github.com/karanmehta1806/library-management/blob/main/backend/controller/user.js"
click node_admin_controller "https://github.com/karanmehta1806/library-management/blob/main/backend/controller/admin.js"
click node_user_model "https://github.com/karanmehta1806/library-management/blob/main/backend/model/UserModel.js"
click node_contact_model "https://github.com/karanmehta1806/library-management/blob/main/backend/model/ContactModel.js"
click node_otp_model "https://github.com/karanmehta1806/library-management/blob/main/backend/model/OtpModel.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_app,node_browse,node_bookdetails,node_home,node_profile,node_admin_dashboard,node_admin_books,node_issue_requests,node_return_requests toneBlue
class node_api_server,node_book_routes,node_home_routes,node_librarian_routes,node_user_routes,node_auth,node_role_check toneAmber
class node_book_controller,node_librarian_controller,node_book_model,node_borrow_model,node_fine,node_cache,node_cloud toneMint
class node_user_controller,node_admin_controller,node_user_model,node_contact_model,node_otp_model toneRose
class node_student,node_librarian,node_admin toneIndigo
```

## Components

### Web application

- [Page router](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Book discovery](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/books.jsx): `frontend/src/pages/user/books.jsx`
- [Book details](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/bookdetails.jsx): `frontend/src/pages/user/bookdetails.jsx`
- [Home page](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/home.jsx): `frontend/src/pages/user/home.jsx`
- [Student profile](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/user/profile.jsx): `frontend/src/pages/user/profile.jsx`
- [Admin analytics](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/admin/admindashboard.jsx): `frontend/src/pages/admin/admindashboard.jsx`
- [Book administration](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/admin/viewbook.jsx): `frontend/src/pages/admin/viewbook.jsx`
- [Issue requests](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/librarian/LibrarianRequest.jsx): `frontend/src/pages/librarian/LibrarianRequest.jsx`
- [Return requests](https://github.com/karanmehta1806/library-management/blob/main/frontend/src/pages/librarian/ReturnRequest.jsx): `frontend/src/pages/librarian/ReturnRequest.jsx`

### API and access

- [Express server](https://github.com/karanmehta1806/library-management/blob/main/backend/index.js): `backend/index.js`
- [Book routes](https://github.com/karanmehta1806/library-management/blob/main/backend/routes/books.js): `backend/routes/books.js`
- [Home routes](https://github.com/karanmehta1806/library-management/blob/main/backend/routes/home.js): `backend/routes/home.js`
- [Librarian routes](https://github.com/karanmehta1806/library-management/blob/main/backend/routes/librarian.js): `backend/routes/librarian.js`
- [User routes](https://github.com/karanmehta1806/library-management/blob/main/backend/routes/user.js): `backend/routes/user.js`
- [JWT authentication](https://github.com/karanmehta1806/library-management/blob/main/backend/middlewares/userAuth.js): `backend/middlewares/userAuth.js`
- [Role authorization](https://github.com/karanmehta1806/library-management/blob/main/backend/middlewares/checkRole.js): `backend/middlewares/checkRole.js`

### Catalog and circulation

- [Catalog and borrowing](https://github.com/karanmehta1806/library-management/blob/main/backend/controller/books.js): `backend/controller/books.js`
- [Circulation approvals](https://github.com/karanmehta1806/library-management/blob/main/backend/controller/librarian.js): `backend/controller/librarian.js`
- [Book records](https://github.com/karanmehta1806/library-management/blob/main/backend/model/BookModel.js): `backend/model/BookModel.js`
- [Borrow records](https://github.com/karanmehta1806/library-management/blob/main/backend/model/BorrowModel.js): `backend/model/BorrowModel.js`
- [Fine calculation](https://github.com/karanmehta1806/library-management/blob/main/backend/utils/fineCalculator.js): `backend/utils/fineCalculator.js`
- [Home cache](https://github.com/karanmehta1806/library-management/blob/main/backend/utils/cache.js): `backend/utils/cache.js`
- [Image uploads](https://github.com/karanmehta1806/library-management/blob/main/backend/utils/cloudConfig.js): `backend/utils/cloudConfig.js`

### Accounts and messaging

- [Account services](https://github.com/karanmehta1806/library-management/blob/main/backend/controller/user.js): `backend/controller/user.js`
- [Admin services](https://github.com/karanmehta1806/library-management/blob/main/backend/controller/admin.js): `backend/controller/admin.js`
- [User records](https://github.com/karanmehta1806/library-management/blob/main/backend/model/UserModel.js): `backend/model/UserModel.js`
- [Contact messages](https://github.com/karanmehta1806/library-management/blob/main/backend/model/ContactModel.js): `backend/model/ContactModel.js`
- [OTP records](https://github.com/karanmehta1806/library-management/blob/main/backend/model/OtpModel.js): `backend/model/OtpModel.js`

### Other components

- **Student**
- **Librarian**
- **Administrator**

## Connections

- Student → Book discovery: browses
- Student → Book details: views details
- Student → Student profile: tracks borrowing
- Librarian → Issue requests: reviews issues
- Librarian → Return requests: reviews returns
- Administrator → Admin analytics: views analytics
- Administrator → Book administration: manages books
- Page router → Home page: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Book discovery: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Book details: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Student profile: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Admin analytics: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Book administration: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Issue requests: routes to (evidence: `frontend/src/App.jsx`)
- Page router → Return requests: routes to (evidence: `frontend/src/App.jsx`)
- Express server → Book routes: mounts (evidence: `backend/index.js`)
- Express server → Home routes: mounts (evidence: `backend/index.js`)
- Express server → Librarian routes: mounts (evidence: `backend/index.js`)
- Express server → User routes: mounts (evidence: `backend/index.js`)
- Book routes → JWT authentication: checks token (evidence: `backend/routes/books.js`)
- Book routes → Role authorization: checks role (evidence: `backend/routes/books.js`)
- Book routes → Catalog and borrowing: dispatches (evidence: `backend/routes/books.js`)
- Librarian routes → JWT authentication: checks token (evidence: `backend/routes/librarian.js`)
- Librarian routes → Role authorization: checks role (evidence: `backend/routes/librarian.js`)
- Librarian routes → Circulation approvals: dispatches (evidence: `backend/routes/librarian.js`)
- Catalog and borrowing → Book records: reads and writes (evidence: `backend/controller/books.js`)
- Catalog and borrowing → Borrow records: reads and writes (evidence: `backend/controller/books.js`)
- Catalog and borrowing → Fine calculation: calculates fines (evidence: `backend/controller/books.js`)
- Catalog and borrowing → Home cache: clears cache (evidence: `backend/controller/books.js`)
- Book routes → Image uploads: uses uploads (evidence: `backend/routes/books.js`)
- Circulation approvals → User records: queries users (evidence: `backend/controller/librarian.js`)
- Circulation approvals → Borrow records: updates borrowing (evidence: `backend/controller/librarian.js`)
- Circulation approvals → Book records: updates books (evidence: `backend/controller/librarian.js`)
- User routes → Account services: dispatches (evidence: `backend/routes/user.js`)
- Account services → User records: reads and writes (evidence: `backend/controller/user.js`)
- Account services → Contact messages: saves messages (evidence: `backend/controller/user.js`)
- Account services → OTP records: manages OTPs (evidence: `backend/controller/user.js`)
- User routes → JWT authentication: checks token (evidence: `backend/routes/user.js`)
- User routes → Role authorization: checks role (evidence: `backend/routes/user.js`)
- Admin services → User records: manages accounts
