Skip to content

Repository files navigation

📚 Hệ Thống Quản Lý Thư Viện PTIT

Ứng dụng web quản lý thư viện được xây dựng với Node.js, Express, MongoDB và Pug template engine. Hỗ trợ quản lý sách, danh mục, người dùng và phiếu mượn/trả sách.


🛠️ Công Nghệ Sử Dụng

Công nghệ Phiên bản Mô tả
Node.js Runtime JavaScript phía server
Express 5.x Web framework
MongoDB Atlas Cơ sở dữ liệu NoSQL
Mongoose 9.x ODM cho MongoDB
Pug 3.x Template engine
JWT Xác thực người dùng
bcryptjs Mã hóa mật khẩu
Bootstrap 5.3 CSS framework

📁 Cấu Trúc Dự Án

quan-ly-thu-vien/
├── index.js                          # Entry point - khởi động server Express
├── package.json
├── .env                              # Biến môi trường (PORT, MONGODB_URI, JWT_SECRET)
├── .gitignore
│
├── config/
│   ├── database.js                   # Kết nối MongoDB Atlas
│   └── system.js                     # Cấu hình hệ thống (prefix admin)
│
├── models/
│   ├── Book.js                       # Model Sách
│   ├── Category.js                   # Model Danh mục
│   ├── User.js                       # Model Người dùng
│   └── borrowRecord.js              # Model Phiếu mượn sách
│
├── controllers/
│   ├── admin/                        # Controllers trang quản trị
│   │   ├── books.controller.js       # CRUD sách
│   │   ├── borrows.controller.js     # Quản lý mượn/trả
│   │   ├── categories.controller.js  # CRUD danh mục
│   │   ├── dashboard.controller.js   # Trang tổng quan
│   │   └── users.controller.js       # Quản lý người dùng
│   └── client/                       # Controllers trang người dùng
│       ├── books.controller.js       # Xem sách
│       ├── borrows.controller.js     # Mượn sách, lịch sử
│       ├── home.controller.js        # Trang chủ
│       └── users.controller.js       # Đăng ký, đăng nhập, đổi mật khẩu
│
├── routes/
│   ├── admin/                        # Routes quản trị (/admin/...)
│   │   ├── index.routes.js
│   │   ├── books.routes.js
│   │   ├── borrows.routes.js
│   │   ├── categories.routes.js
│   │   ├── dashboard.routes.js
│   │   └── users.routes.js
│   └── client/                       # Routes người dùng
│       ├── index.routes.js
│       ├── books.routes.js
│       ├── borrows.routes.js
│       ├── home.routes.js
│       └── users.routes.js
│
├── middleware/
│   ├── auth.js                       # Xác thực JWT (header: x-auth-token)
│   └── role.js                       # Phân quyền theo vai trò
│
├── helpers/
│   ├── filterStatus.js               # Lọc theo trạng thái
│   ├── pagination.js                 # Phân trang
│   └── search.js                     # Tìm kiếm
│
├── views/
│   ├── admin/                        # Giao diện quản trị (Pug templates)
│   │   ├── layouts/
│   │   ├── pages/
│   │   ├── partials/
│   │   └── mixins/
│   └── client/                       # Giao diện người dùng (Pug templates)
│       ├── layouts/
│       ├── pages/
│       ├── partials/
│       └── mixins/
│
└── public/
    ├── admin/                        # Static files trang quản trị
    ├── client/                       # Static files trang người dùng
    └── css/                          # Stylesheets

🚀 Cài Đặt & Chạy Dự Án

Yêu cầu

Các bước cài đặt

1. Clone repository

git clone https://github.com/justHuyle/library-management.git
cd library-management

2. Cài đặt dependencies

npm install

3. Tạo file .env

Tạo file .env tại thư mục gốc của dự án với nội dung:

PORT=3000
MONGODB_URI=mongodb+srv://<username>:<password>@<cluster>.mongodb.net/<dbname>
JWT_SECRET=your_jwt_secret_key

4. Chạy ứng dụng

# Chế độ development (auto-reload)
npm run dev

# Chế độ production
npm start

5. Truy cập

Mở trình duyệt tại: http://localhost:3000


🔐 Hệ Thống Phân Quyền

Hệ thống có 3 vai trò (roles) với các quyền hạn khác nhau:

Vai trò Mô tả Quyền hạn
reader Độc giả Xem sách, mượn sách, xem lịch sử mượn, gia hạn, đổi mật khẩu
librarian Thủ thư Xem tất cả phiếu mượn, xác nhận trả sách
admin Quản trị viên Quản lý người dùng (CRUD), toàn quyền thủ thư

Luồng xác thực

  1. Đăng nhập qua POST /api/users/login → nhận JWT token + role
  2. Token lưu trong localStorage (keys: token, role, hoTen)
  3. Các API request gửi kèm header x-auth-token
  4. Frontend tự động chuyển hướng theo vai trò

📊 Models (Cơ Sở Dữ Liệu)

📖 Book (Sách)

Trường Kiểu Mô tả
maSach String Mã sách
tenSach String Tên sách
tacGia String Tác giả
nhaXuatBan String Nhà xuất bản
namXuatBan Number Năm xuất bản
danhMuc String Danh mục
soLuongTong Number Tổng số lượng
soLuongConLai Number Số lượng còn lại

📂 Category (Danh mục)

Trường Kiểu Mô tả
title String Tên danh mục

👤 User (Người dùng)

Trường Kiểu Mô tả
maNguoiDung String Mã người dùng
hoTen String Họ tên
email String Email
matKhau String Mật khẩu (đã mã hóa)
soDienThoai String Số điện thoại
diaChi String Địa chỉ
role String Vai trò (reader / librarian / admin)
soSachDuocMuon Number Số sách được mượn

📋 BorrowRecord (Phiếu mượn)

Trường Kiểu Mô tả
maNguoiDung ObjectId (ref User) Người mượn
maSach ObjectId (ref Book) Sách được mượn
ngayMuon Date Ngày mượn
ngayPhaiTra Date Ngày phải trả (mặc định: +7 ngày)
ngayTraThucTe Date Ngày trả thực tế
trangThai String Trạng thái (đang mượn / đã trả / quá hạn)

📡 API Endpoints

Sách (Books)

Method Endpoint Auth Mô tả
GET /api/books Danh sách sách (tìm kiếm, lọc, sắp xếp)
POST /api/books Thêm sách mới
GET /api/books/:id Chi tiết sách

Người dùng (Users)

Method Endpoint Auth Role Mô tả
POST /api/users/register Đăng ký tài khoản
POST /api/users/login Đăng nhập
GET /api/users admin Danh sách người dùng
DELETE /api/users/:id admin Xóa người dùng
PUT /api/users/change-password Đổi mật khẩu

Phiếu mượn (Borrows)

Method Endpoint Auth Role Mô tả
POST /api/borrows Tạo phiếu mượn
GET /api/borrows librarian/admin Tất cả phiếu mượn
GET /api/borrows/history Lịch sử mượn của bản thân
PUT /api/borrows/:id/return librarian Xác nhận trả sách
PUT /api/borrows/:id/extend Gia hạn thêm 7 ngày

✨ Tính Năng Chính

  • 🔍 Tìm kiếm & Lọc sách — Tìm kiếm theo tên, tác giả, lọc theo danh mục
  • 📖 Quản lý sách — Thêm, sửa, xóa sách (Admin)
  • 📂 Quản lý danh mục — CRUD danh mục sách (Admin)
  • 👥 Quản lý người dùng — Thêm, xóa tài khoản (Admin)
  • 📋 Mượn/Trả sách — Tạo phiếu mượn, xác nhận trả, gia hạn
  • 📊 Dashboard — Tổng quan thống kê (Admin)
  • 🔐 Phân quyền — 3 cấp: reader, librarian, admin
  • 📄 Phân trang — Hỗ trợ phân trang danh sách
  • 🔒 Bảo mật — JWT authentication, mã hóa mật khẩu bcrypt

👨‍💻 Tác Giả

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages