# huynhvanchi/lib-manager-web architecture

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

- Interactive diagram: https://gitdiagram.com/huynhvanchi/lib-manager-web
- Repository: https://github.com/huynhvanchi/lib-manager-web

## Overview

LibraryOS is a Java Servlet/JSP library-management website for administrators and staff. Its principal workflow is staff authentication followed by cataloging physical copies, managing reader membership, and recording circulation; administrators also review operational metrics and audit history. The README documents recommendations, staff roles, fines, and soft-delete/restore capabilities. The graph includes these documented product areas, but sampled excerpts do not establish every servlet-to-view or servlet-to-service route, so those connections are omitted or marked unverified.

Main entry points: [`src/main/java/common/DBConnection.java`](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/common/DBConnection.java) (JDBC Connection), [`src/main/java/book/BookServlet.java`](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookServlet.java) (Book Catalog), [`src/main/java/borrowtereturn/BorrowReturnServlet.java`](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnServlet.java) (Borrow / Return), [`src/main/java/borrowtereturn/BorrowReturnService.java`](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnService.java) (Circulation & Fines)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access &amp; Security"]
  node_auth["Authentication<br/>[AuthServlet.java]"]
  node_accounts["Staff Accounts<br/>[TaiKhoanDAO.java]"]
end

subgraph group_catalog["Catalog &amp; Inventory"]
  node_books["Book Catalog<br/>[BookServlet.java]"]
  node_bookdata["Book Records<br/>[BookDAO.java]"]
  node_copies["Physical Copies<br/>[BookCopyDAO.java]"]
  node_categories["Categories"]
  node_categorydata["Category Records<br/>[CategoryDAO.java]"]
end

subgraph group_operations["Library Operations"]
  node_readers["Reader Membership<br/>[ReaderServlet.java]"]
  node_readerlogic["Reader Validation<br/>[ReaderService.java]"]
  node_readerdata["Reader Records<br/>[ReaderDAO.java]"]
  node_circulation["Borrow / Return"]
  node_circulationlogic["Circulation &amp; Fines"]
  node_circulationdata["Borrow Records"]
  node_recommendations["Book Recommendations"]
  node_recommendationdata["Recommendation Records"]
end

subgraph group_oversight["Oversight &amp; Audit"]
  node_dashboard["Dashboard Metrics"]
  node_dashboarddata["Analytics Queries<br/>[DashboardDAO.java]"]
  node_audit["Audit History"]
  node_auditdata["Audit Records<br/>[AuditLogDAO.java]"]
  node_logger["Audit Writer<br/>[AuditLogger.java]"]
end

subgraph group_platform["Persistence"]
  node_connection["JDBC Connection<br/>[DBConnection.java]"]
  node_database[("MySQL Database")]
end

node_staff(("Admin / Staff"))

node_staff -.->|"signs in"| node_auth
node_staff -.->|"manages catalog"| node_books
node_staff -.->|"manages readers"| node_readers
node_staff -.->|"records loans"| node_circulation
node_staff -.->|"reviews requests"| node_recommendations
node_books -->|"uses"| node_bookdata
node_books -->|"manages copies"| node_copies
node_books -->|"loads categories"| node_categorydata
node_categories -->|"uses"| node_categorydata
node_categories -->|"loads related books"| node_bookdata
node_readerlogic -->|"validates against"| node_readerdata
node_circulation -->|"dispatches to"| node_circulationlogic
node_circulation -->|"queries records"| node_circulationdata
node_circulationlogic -->|"uses"| node_circulationdata
node_circulationlogic -->|"records changes"| node_logger
node_recommendations -->|"uses"| node_recommendationdata
node_dashboard -->|"loads metrics"| node_dashboarddata
node_audit -->|"loads history"| node_auditdata
node_accounts -->|"records changes"| node_logger
node_logger -->|"obtains connection"| node_connection
node_bookdata -->|"obtains connection"| node_connection
node_copies -->|"obtains connection"| node_connection
node_categorydata -->|"obtains connection"| node_connection
node_readerdata -->|"obtains connection"| node_connection
node_circulationdata -->|"obtains connection"| node_connection
node_recommendationdata -->|"obtains connection"| node_connection
node_dashboarddata -->|"obtains connection"| node_connection
node_auditdata -->|"obtains connection"| node_connection
node_connection -->|"connects via JDBC"| node_database

click node_auth "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/security/AuthServlet.java"
click node_accounts "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/security/TaiKhoanDAO.java"
click node_books "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookServlet.java"
click node_bookdata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookDAO.java"
click node_copies "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookCopyDAO.java"
click node_categories "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/categories/CategoryServlet.java"
click node_categorydata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/categories/CategoryDAO.java"
click node_readers "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/reader/ReaderServlet.java"
click node_readerlogic "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/reader/ReaderService.java"
click node_readerdata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/reader/ReaderDAO.java"
click node_circulation "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnServlet.java"
click node_circulationlogic "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnService.java"
click node_circulationdata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnDAO.java"
click node_recommendations "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/recommend/RecommendServlet.java"
click node_recommendationdata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/recommend/BookRecommendationDAO.java"
click node_dashboard "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/dashboard/DashboardServlet.java"
click node_dashboarddata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/dashboard/DashboardDAO.java"
click node_audit "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/auditlog/AuditLogServlet.java"
click node_auditdata "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/auditlog/AuditLogDAO.java"
click node_logger "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/common/AuditLogger.java"
click node_connection "https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/common/DBConnection.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_auth,node_accounts toneBlue
class node_books,node_bookdata,node_copies,node_categories,node_categorydata toneAmber
class node_readers,node_readerlogic,node_readerdata,node_circulation,node_circulationlogic,node_circulationdata,node_recommendations,node_recommendationdata toneMint
class node_dashboard,node_dashboarddata,node_audit,node_auditdata,node_logger toneRose
class node_connection,node_database,node_staff toneIndigo
```

## Components

### Access & Security

- [Authentication](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/security/AuthServlet.java): `src/main/java/security/AuthServlet.java`
- [Staff Accounts](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/security/TaiKhoanDAO.java): `src/main/java/security/TaiKhoanDAO.java`

### Catalog & Inventory

- [Book Catalog](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookServlet.java): `src/main/java/book/BookServlet.java`
- [Book Records](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookDAO.java): `src/main/java/book/BookDAO.java`
- [Physical Copies](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/book/BookCopyDAO.java): `src/main/java/book/BookCopyDAO.java`
- [Categories](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/categories/CategoryServlet.java): `src/main/java/categories/CategoryServlet.java`
- [Category Records](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/categories/CategoryDAO.java): `src/main/java/categories/CategoryDAO.java`

### Library Operations

- [Reader Membership](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/reader/ReaderServlet.java): `src/main/java/reader/ReaderServlet.java`
- [Reader Validation](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/reader/ReaderService.java): `src/main/java/reader/ReaderService.java`
- [Reader Records](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/reader/ReaderDAO.java): `src/main/java/reader/ReaderDAO.java`
- [Borrow / Return](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnServlet.java): `src/main/java/borrowtereturn/BorrowReturnServlet.java`
- [Circulation & Fines](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnService.java): `src/main/java/borrowtereturn/BorrowReturnService.java`
- [Borrow Records](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/borrowtereturn/BorrowReturnDAO.java): `src/main/java/borrowtereturn/BorrowReturnDAO.java`
- [Book Recommendations](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/recommend/RecommendServlet.java): `src/main/java/recommend/RecommendServlet.java`
- [Recommendation Records](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/recommend/BookRecommendationDAO.java): `src/main/java/recommend/BookRecommendationDAO.java`

### Oversight & Audit

- [Dashboard Metrics](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/dashboard/DashboardServlet.java): `src/main/java/dashboard/DashboardServlet.java`
- [Analytics Queries](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/dashboard/DashboardDAO.java): `src/main/java/dashboard/DashboardDAO.java`
- [Audit History](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/auditlog/AuditLogServlet.java): `src/main/java/auditlog/AuditLogServlet.java`
- [Audit Records](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/auditlog/AuditLogDAO.java): `src/main/java/auditlog/AuditLogDAO.java`
- [Audit Writer](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/common/AuditLogger.java): `src/main/java/common/AuditLogger.java`

### Persistence

- [JDBC Connection](https://github.com/huynhvanchi/lib-manager-web/blob/main/src/main/java/common/DBConnection.java): `src/main/java/common/DBConnection.java`
- **MySQL Database**

### Other components

- **Admin / Staff**

## Connections

- Admin / Staff → Authentication: signs in (evidence: `README.md`)
- Admin / Staff → Book Catalog: manages catalog (evidence: `README.md`)
- Admin / Staff → Reader Membership: manages readers (evidence: `README.md`)
- Admin / Staff → Borrow / Return: records loans (evidence: `README.md`)
- Admin / Staff → Book Recommendations: reviews requests (evidence: `README.md`)
- Book Catalog → Book Records: uses (evidence: `src/main/java/book/BookServlet.java`)
- Book Catalog → Physical Copies: manages copies (evidence: `src/main/java/book/BookServlet.java`)
- Book Catalog → Category Records: loads categories (evidence: `src/main/java/book/BookServlet.java`)
- Categories → Category Records: uses (evidence: `src/main/java/categories/CategoryServlet.java`)
- Categories → Book Records: loads related books (evidence: `src/main/java/categories/CategoryServlet.java`)
- Reader Validation → Reader Records: validates against (evidence: `src/main/java/reader/ReaderService.java`)
- Borrow / Return → Circulation & Fines: dispatches to (evidence: `src/main/java/borrowtereturn/BorrowReturnServlet.java`)
- Borrow / Return → Borrow Records: queries records (evidence: `src/main/java/borrowtereturn/BorrowReturnServlet.java`)
- Circulation & Fines → Borrow Records: uses (evidence: `src/main/java/borrowtereturn/BorrowReturnService.java`)
- Circulation & Fines → Audit Writer: records changes (evidence: `src/main/java/borrowtereturn/BorrowReturnService.java`)
- Book Recommendations → Recommendation Records: uses (evidence: `src/main/java/recommend/RecommendServlet.java`)
- Dashboard Metrics → Analytics Queries: loads metrics (evidence: `src/main/java/dashboard/DashboardServlet.java`)
- Audit History → Audit Records: loads history (evidence: `src/main/java/auditlog/AuditLogServlet.java`)
- Staff Accounts → Audit Writer: records changes (evidence: `src/main/java/security/TaiKhoanDAO.java`)
- Audit Writer → JDBC Connection: obtains connection (evidence: `src/main/java/common/AuditLogger.java`)
- Book Records → JDBC Connection: obtains connection (evidence: `src/main/java/book/BookDAO.java`)
- Physical Copies → JDBC Connection: obtains connection (evidence: `src/main/java/book/BookCopyDAO.java`)
- Category Records → JDBC Connection: obtains connection (evidence: `src/main/java/categories/CategoryDAO.java`)
- Reader Records → JDBC Connection: obtains connection (evidence: `src/main/java/reader/ReaderDAO.java`)
- Borrow Records → JDBC Connection: obtains connection (evidence: `src/main/java/borrowtereturn/BorrowReturnDAO.java`)
- Recommendation Records → JDBC Connection: obtains connection (evidence: `src/main/java/recommend/BookRecommendationDAO.java`)
- Analytics Queries → JDBC Connection: obtains connection (evidence: `src/main/java/dashboard/DashboardDAO.java`)
- Audit Records → JDBC Connection: obtains connection (evidence: `src/main/java/auditlog/AuditLogDAO.java`)
- JDBC Connection → MySQL Database: connects via JDBC (evidence: `README.md`)
