# tajwarul23/library_management_backend architecture

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

## Overview

This is a library-management backend: clients use authenticated APIs to discover books, reserve or borrow them, and manage student, inventory, and circulation records; the API returns operation results. Authentication also supports registration, verification, login, and password recovery. Scheduled jobs expire reservations and process overdue returns, while email supports account and circulation notifications. The README gives no further capability details; unsampled routes and controllers are represented only where the source index supports them.

Main entry points: [`Controllers/Admin.controller.js`](https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Admin.controller.js) (Admin operations), [`server.js`](https://github.com/tajwarul23/library_management_backend/blob/main/server.js) (Express server), [`Controllers/Student.controller.js`](https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Student.controller.js) (Student operations), [`Utils/notifyWaitlistUsers.js`](https://github.com/tajwarul23/library_management_backend/blob/main/Utils/notifyWaitlistUsers.js) (Waitlist notifications)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and access"]
  node_server["Express server<br/>[server.js]"]
  node_auth_routes["Auth routes<br/>[Auth.routes.js]"]
  node_student_routes["Student routes<br/>[Student.router.js]"]
  node_admin_routes["Admin routes<br/>[Admin.router.js]"]
  node_user_routes["User routes<br/>[User.router.js]"]
  node_auth_middleware["Auth middleware<br/>[Auth.js]"]
end

subgraph group_circulation["Library operations"]
  node_admin_ops["Admin operations"]
  node_student_ops["Student operations"]
  node_books[("Book inventory<br/>[Book.model.js]")]
  node_reservations[("Reservations")]
  node_issued_books[("Issued books")]
  node_waitlist[("Waitlist<br/>[Waitlist.model.js]")]
end

subgraph group_identity["Identity and accounts"]
  node_user_ops["User operations<br/>[User.controller.js]"]
  node_auth_ops["Authentication<br/>[Auth.controller.js]"]
  node_student_records[("Student records<br/>[Student.model.js]")]
  node_student_accounts[("Student accounts")]
  node_admin_accounts[("Admin accounts")]
end

subgraph group_messaging["Notifications and jobs"]
  node_expiry_reservations["Reservation expiry<br/>[expireservation.js]"]
  node_expiry_returns["Return expiry"]
  node_waitlist_notify["Waitlist notifications"]
  node_issue_email["Issue email"]
  node_mail_transport["Mail transport<br/>[transporter.js]"]
end

node_client(("API client"))
node_mail_service(("Gmail SMTP"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_auth_routes
node_server -->|"mounts routes"| node_student_routes
node_server -->|"mounts routes"| node_admin_routes
node_server -->|"mounts routes"| node_user_routes
node_auth_routes -->|"dispatches to"| node_auth_ops
node_student_routes -->|"dispatches to"| node_student_ops
node_admin_routes -->|"dispatches to"| node_admin_ops
node_user_routes -->|"dispatches to"| node_user_ops
node_student_routes -->|"guards routes"| node_auth_middleware
node_admin_routes -->|"guards routes"| node_auth_middleware
node_user_routes -->|"guards routes"| node_auth_middleware
node_auth_middleware -->|"loads student"| node_student_accounts
node_auth_middleware -->|"loads admin"| node_admin_accounts
node_auth_ops -->|"manages accounts"| node_student_accounts
node_auth_ops -->|"manages accounts"| node_admin_accounts
node_auth_ops -->|"checks enrollment"| node_student_records
node_admin_ops -->|"manages inventory"| node_books
node_admin_ops -->|"handles reservations"| node_reservations
node_admin_ops -->|"manages loans"| node_issued_books
node_admin_ops -->|"manages students"| node_student_records
node_admin_ops -->|"looks up users"| node_student_accounts
node_student_ops -->|"searches inventory"| node_books
node_student_ops -->|"creates reservations"| node_reservations
node_student_ops -->|"checks loans"| node_issued_books
node_student_ops -->|"notifies on release"| node_waitlist_notify
node_admin_ops -->|"notifies on return"| node_waitlist_notify
node_admin_ops -->|"sends issue notice"| node_issue_email
node_waitlist_notify -->|"reads book"| node_books
node_waitlist_notify -->|"reads and clears"| node_waitlist
node_waitlist_notify -->|"sends mail"| node_mail_transport
node_issue_email -->|"sends mail"| node_mail_transport
node_mail_transport -->|"connects SMTP"| node_mail_service
node_server -->|"starts job"| node_expiry_reservations
node_server -->|"starts job"| node_expiry_returns
node_expiry_reservations -->|"expires records"| node_reservations
node_expiry_reservations -->|"updates availability"| node_books
node_expiry_returns -->|"checks overdue loans"| node_issued_books
node_expiry_returns -->|"loads borrowers"| node_student_accounts
node_expiry_returns -->|"sends reminders"| node_issue_email
node_user_ops -->|"manages profile"| node_student_accounts

click node_server "https://github.com/tajwarul23/library_management_backend/blob/main/server.js"
click node_auth_routes "https://github.com/tajwarul23/library_management_backend/blob/main/Routes/Auth.routes.js"
click node_student_routes "https://github.com/tajwarul23/library_management_backend/blob/main/Routes/Student.router.js"
click node_admin_routes "https://github.com/tajwarul23/library_management_backend/blob/main/Routes/Admin.router.js"
click node_user_routes "https://github.com/tajwarul23/library_management_backend/blob/main/Routes/User.router.js"
click node_auth_middleware "https://github.com/tajwarul23/library_management_backend/blob/main/Middlewares/Auth.js"
click node_admin_ops "https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Admin.controller.js"
click node_student_ops "https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Student.controller.js"
click node_user_ops "https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/User.controller.js"
click node_auth_ops "https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Auth.controller.js"
click node_student_records "https://github.com/tajwarul23/library_management_backend/blob/main/Models/Student.model.js"
click node_student_accounts "https://github.com/tajwarul23/library_management_backend/blob/main/Models/student_user.model.js"
click node_admin_accounts "https://github.com/tajwarul23/library_management_backend/blob/main/Models/admin_user.model.js"
click node_books "https://github.com/tajwarul23/library_management_backend/blob/main/Models/Book.model.js"
click node_reservations "https://github.com/tajwarul23/library_management_backend/blob/main/Models/ReserveBook.model.js"
click node_issued_books "https://github.com/tajwarul23/library_management_backend/blob/main/Models/IssuedBook.model.js"
click node_waitlist "https://github.com/tajwarul23/library_management_backend/blob/main/Models/Waitlist.model.js"
click node_expiry_reservations "https://github.com/tajwarul23/library_management_backend/blob/main/cron/expireservation.js"
click node_expiry_returns "https://github.com/tajwarul23/library_management_backend/blob/main/cron/expirereturnbook.js"
click node_waitlist_notify "https://github.com/tajwarul23/library_management_backend/blob/main/Utils/notifyWaitlistUsers.js"
click node_issue_email "https://github.com/tajwarul23/library_management_backend/blob/main/Utils/sendBookIssuedEmail.js"
click node_mail_transport "https://github.com/tajwarul23/library_management_backend/blob/main/Utils/transporter.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_server,node_auth_routes,node_student_routes,node_admin_routes,node_user_routes,node_auth_middleware,node_client toneBlue
class node_admin_ops,node_student_ops,node_books,node_reservations,node_issued_books,node_waitlist toneAmber
class node_user_ops,node_auth_ops,node_student_records,node_student_accounts,node_admin_accounts toneMint
class node_expiry_reservations,node_expiry_returns,node_waitlist_notify,node_issue_email,node_mail_transport toneRose
class node_mail_service toneIndigo
```

## Components

### API and access

- [Express server](https://github.com/tajwarul23/library_management_backend/blob/main/server.js): `server.js`
- [Auth routes](https://github.com/tajwarul23/library_management_backend/blob/main/Routes/Auth.routes.js): `Routes/Auth.routes.js`
- [Student routes](https://github.com/tajwarul23/library_management_backend/blob/main/Routes/Student.router.js): `Routes/Student.router.js`
- [Admin routes](https://github.com/tajwarul23/library_management_backend/blob/main/Routes/Admin.router.js): `Routes/Admin.router.js`
- [User routes](https://github.com/tajwarul23/library_management_backend/blob/main/Routes/User.router.js): `Routes/User.router.js`
- [Auth middleware](https://github.com/tajwarul23/library_management_backend/blob/main/Middlewares/Auth.js): `Middlewares/Auth.js`

### Library operations

- [Admin operations](https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Admin.controller.js): `Controllers/Admin.controller.js`
- [Student operations](https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Student.controller.js): `Controllers/Student.controller.js`
- [Book inventory](https://github.com/tajwarul23/library_management_backend/blob/main/Models/Book.model.js): `Models/Book.model.js`
- [Reservations](https://github.com/tajwarul23/library_management_backend/blob/main/Models/ReserveBook.model.js): `Models/ReserveBook.model.js`
- [Issued books](https://github.com/tajwarul23/library_management_backend/blob/main/Models/IssuedBook.model.js): `Models/IssuedBook.model.js`
- [Waitlist](https://github.com/tajwarul23/library_management_backend/blob/main/Models/Waitlist.model.js): `Models/Waitlist.model.js`

### Identity and accounts

- [User operations](https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/User.controller.js): `Controllers/User.controller.js`
- [Authentication](https://github.com/tajwarul23/library_management_backend/blob/main/Controllers/Auth.controller.js): `Controllers/Auth.controller.js`
- [Student records](https://github.com/tajwarul23/library_management_backend/blob/main/Models/Student.model.js): `Models/Student.model.js`
- [Student accounts](https://github.com/tajwarul23/library_management_backend/blob/main/Models/student_user.model.js): `Models/student_user.model.js`
- [Admin accounts](https://github.com/tajwarul23/library_management_backend/blob/main/Models/admin_user.model.js): `Models/admin_user.model.js`

### Notifications and jobs

- [Reservation expiry](https://github.com/tajwarul23/library_management_backend/blob/main/cron/expireservation.js): `cron/expireservation.js`
- [Return expiry](https://github.com/tajwarul23/library_management_backend/blob/main/cron/expirereturnbook.js): `cron/expirereturnbook.js`
- [Waitlist notifications](https://github.com/tajwarul23/library_management_backend/blob/main/Utils/notifyWaitlistUsers.js): `Utils/notifyWaitlistUsers.js`
- [Issue email](https://github.com/tajwarul23/library_management_backend/blob/main/Utils/sendBookIssuedEmail.js): `Utils/sendBookIssuedEmail.js`
- [Mail transport](https://github.com/tajwarul23/library_management_backend/blob/main/Utils/transporter.js): `Utils/transporter.js`

### Other components

- **API client**
- **Gmail SMTP**

## Connections

- API client → Express server: sends requests
- Express server → Auth routes: mounts routes (evidence: `server.js`)
- Express server → Student routes: mounts routes (evidence: `server.js`)
- Express server → Admin routes: mounts routes (evidence: `server.js`)
- Express server → User routes: mounts routes (evidence: `server.js`)
- Auth routes → Authentication: dispatches to (evidence: `Routes/Auth.routes.js`)
- Student routes → Student operations: dispatches to (evidence: `Routes/Student.router.js`)
- Admin routes → Admin operations: dispatches to (evidence: `Routes/Admin.router.js`)
- User routes → User operations: dispatches to (evidence: `Routes/User.router.js`)
- Student routes → Auth middleware: guards routes (evidence: `Routes/Student.router.js`)
- Admin routes → Auth middleware: guards routes (evidence: `Routes/Admin.router.js`)
- User routes → Auth middleware: guards routes (evidence: `Routes/User.router.js`)
- Auth middleware → Student accounts: loads student (evidence: `Middlewares/Auth.js`)
- Auth middleware → Admin accounts: loads admin (evidence: `Middlewares/Auth.js`)
- Authentication → Student accounts: manages accounts (evidence: `Controllers/Auth.controller.js`)
- Authentication → Admin accounts: manages accounts (evidence: `Controllers/Auth.controller.js`)
- Authentication → Student records: checks enrollment (evidence: `Controllers/Auth.controller.js`)
- Admin operations → Book inventory: manages inventory (evidence: `Controllers/Admin.controller.js`)
- Admin operations → Reservations: handles reservations (evidence: `Controllers/Admin.controller.js`)
- Admin operations → Issued books: manages loans (evidence: `Controllers/Admin.controller.js`)
- Admin operations → Student records: manages students (evidence: `Controllers/Admin.controller.js`)
- Admin operations → Student accounts: looks up users (evidence: `Controllers/Admin.controller.js`)
- Student operations → Book inventory: searches inventory (evidence: `Controllers/Student.controller.js`)
- Student operations → Reservations: creates reservations (evidence: `Controllers/Student.controller.js`)
- Student operations → Issued books: checks loans (evidence: `Controllers/Student.controller.js`)
- Student operations → Waitlist notifications: notifies on release (evidence: `Controllers/Student.controller.js`)
- Admin operations → Waitlist notifications: notifies on return (evidence: `Controllers/Admin.controller.js`)
- Admin operations → Issue email: sends issue notice (evidence: `Controllers/Admin.controller.js`)
- Waitlist notifications → Book inventory: reads book (evidence: `Utils/notifyWaitlistUsers.js`)
- Waitlist notifications → Waitlist: reads and clears (evidence: `Utils/notifyWaitlistUsers.js`)
- Waitlist notifications → Mail transport: sends mail (evidence: `Utils/notifyWaitlistUsers.js`)
- Issue email → Mail transport: sends mail (evidence: `Utils/sendBookIssuedEmail.js`)
- Mail transport → Gmail SMTP: connects SMTP (evidence: `Utils/transporter.js`)
- Express server → Reservation expiry: starts job (evidence: `server.js`)
- Express server → Return expiry: starts job (evidence: `server.js`)
- Reservation expiry → Reservations: expires records (evidence: `cron/expireservation.js`)
- Reservation expiry → Book inventory: updates availability (evidence: `cron/expireservation.js`)
- Return expiry → Issued books: checks overdue loans (evidence: `cron/expirereturnbook.js`)
- Return expiry → Student accounts: loads borrowers (evidence: `cron/expirereturnbook.js`)
- Return expiry → Issue email: sends reminders (evidence: `cron/expirereturnbook.js`)
- User operations → Student accounts: manages profile (evidence: `Controllers/User.controller.js`)
