================================================================================
DANH SÁCH CHỨC NĂNG HỆ THỐNG - NIKESHOP
Hệ thống bán giày Nike trực tuyến
================================================================================
CÔNG NGHỆ SỬ DỤNG:
- Backend : Java 17, Spring Boot 3.2.5, Spring Security 6, JWT
- Frontend : Thymeleaf, Bootstrap 5.3.2, Bootstrap Icons
- Database : MySQL 8.0 (Hibernate JPA)
- AI : OpenAI GPT / Google Gemini / DeepSeek (tuỳ chọn)
- Deploy : Docker + Docker Compose
- Other : Apache POI (Excel), BCrypt, JJWT
================================================================================
PHẦN 1 – CHỨC NĂNG NGƯỜI DÙNG (PUBLIC)
================================================================================
1.1 TRANG CHỦ
[x] Hiển thị banner hero với CTA mua ngay
[x] Hiển thị mã khuyến mãi công khai đang hoạt động (copy 1 click)
[x] Hiển thị danh mục sản phẩm (dạng card lưới)
[x] Hiển thị 8 sản phẩm mới nhất
[x] Hiển thị 8 sản phẩm bán chạy nhất
[x] Hiển thị 8 sản phẩm xem nhiều nhất
[x] Hiển thị 3 bài viết blog mới nhất
[x] Section "Tại sao chọn NikeShop" (chính hãng, giao nhanh, đổi trả, hỗ trợ)
1.2 SẢN PHẨM
[x] Xem danh sách tất cả sản phẩm (phân trang 12/trang)
[x] Lọc sản phẩm theo danh mục (radio button sidebar)
[x] Lọc sản phẩm theo thương hiệu
[x] Lọc sản phẩm theo khoảng giá (min/max)
[x] Tìm kiếm theo tên sản phẩm (full-text)
[x] Sắp xếp: Mới nhất / Giá tăng / Giá giảm / Bán chạy / Xem nhiều
[x] Hiển thị bộ lọc đang áp dụng dạng badge (có thể xóa từng filter)
[x] Xem chi tiết sản phẩm:
- Ảnh gallery với thumbnail (click đổi ảnh chính)
- Thông tin: tên, thương hiệu, danh mục, giá, lượt xem, lượt bán
- Hiển thị đánh giá sao trung bình
- Chọn size (button, disabled + gạch chân nếu hết hàng)
- Điều chỉnh số lượng (+/-)
- Thêm vào giỏ hàng (AJAX, không reload trang)
- Nút "Mua ngay" (thêm vào giỏ + redirect checkout)
- Mô tả sản phẩm (hỗ trợ HTML content)
- Ảnh feedback từ khách hàng (section riêng)
- Đếm tự động lượt xem khi vào trang
1.3 GIỎ HÀNG
[x] Thêm sản phẩm vào giỏ (theo productId + size + quantity)
[x] Kiểm tra tồn kho trước khi thêm
[x] Gộp sản phẩm trùng size vào 1 dòng
[x] Xem giỏ hàng (ảnh, tên, size, giá, tổng phụ)
[x] Cập nhật số lượng từng sản phẩm
[x] Xóa từng sản phẩm khỏi giỏ
[x] Xóa toàn bộ giỏ hàng
[x] Hiển thị số lượng sản phẩm trên icon giỏ (tự cập nhật qua AJAX)
[x] Giỏ hàng lưu trong HTTP Session (không cần đăng nhập)
1.4 ĐẶT HÀNG & THANH TOÁN
[x] Trang checkout với thông tin khách hàng
[x] Tự điền thông tin nếu đã đăng nhập
[x] Cho phép khách vãng lai đặt hàng (không cần tài khoản)
[x] Nhập mã khuyến mãi (AJAX validate & tính giảm giá real-time)
[x] Hiển thị tóm tắt đơn hàng (sản phẩm, tổng, giảm giá, thành tiền)
[x] Phương thức thanh toán: COD (Cash on Delivery)
[x] Xác nhận đặt hàng thành công (trang success với orderId)
[x] Xóa giỏ hàng sau khi đặt thành công
1.5 KHUYẾN MÃI
[x] Nhập mã khuyến mãi khi checkout
[x] Validate mã: hợp lệ, còn hạn, chưa hết lượt, đủ giá trị đơn tối thiểu
[x] Tính giảm giá theo % hoặc tiền trực tiếp
[x] Áp dụng giới hạn giảm tối đa (maxDiscount)
[x] Tự động tăng usedCount sau khi áp dụng
[x] Hiển thị các mã công khai trên trang chủ
1.6 BLOG / BÀI VIẾT
[x] Danh sách blog (phân trang 9/trang)
[x] Layout 2 cột: bài viết chính + sidebar bài mới
[x] Xem chi tiết bài viết (HTML content)
[x] Đếm lượt xem tự động
[x] Bình luận bài viết (cần đăng nhập)
[x] Hiển thị danh sách bình luận
1.7 TÌM KIẾM
[x] Thanh tìm kiếm trên navbar (desktop + mobile)
[x] Redirect sang /san-pham?q=keyword
[x] Tìm theo nhiều tiêu chí kết hợp
1.8 CHAT TƯ VẤN AI (tính năng mới)
[x] Trang tư vấn tại /tu-van
[x] Giao diện chat với lịch sử hội thoại
[x] Gợi ý câu hỏi nhanh (8 chips)
[x] RAG context: sản phẩm từ DB + knowledge tĩnh về giày
[x] Hỗ trợ 3 AI provider: OpenAI, Google Gemini, DeepSeek
[x] Hiển thị tên provider đang dùng
[x] Xóa và bắt đầu hội thoại mới
[x] Lịch sử hội thoại giữ tối đa 20 lượt (tiết kiệm token)
[x] Animation typing khi AI đang trả lời
[x] Nút chat nổi (floating) trên mọi trang
================================================================================
PHẦN 2 – CHỨC NĂNG THÀNH VIÊN (ĐĂNG NHẬP)
================================================================================
2.1 ĐĂNG KÝ / ĐĂNG NHẬP
[x] Đăng ký tài khoản (username, password, email, họ tên, SĐT)
[x] Validate username/email trùng
[x] Mã hóa mật khẩu BCrypt
[x] Đăng nhập bằng username + password (Spring Security Form Login)
[x] Xác thực JWT (cho API endpoints)
[x] Redirect đúng trang sau đăng nhập
[x] Đăng xuất (xóa session + cookie)
[x] Khóa tài khoản: từ chối đăng nhập nếu active = false
2.2 QUẢN LÝ TÀI KHOẢN
[x] Xem thông tin cá nhân (username, email, họ tên, SĐT, địa chỉ, avatar)
[x] Cập nhật hồ sơ (họ tên, SĐT, địa chỉ, email)
[x] Upload ảnh đại diện
[x] Đổi mật khẩu (cần nhập mật khẩu cũ, validate khớp)
2.3 ĐÁNH GIÁ & BÌNH LUẬN
[x] Bình luận sản phẩm (cần đăng nhập)
[x] Đánh giá sao (1-5) kèm bình luận
[x] Hiển thị điểm sao trung bình trên trang sản phẩm
[x] Bình luận bài viết blog (cần đăng nhập)
2.4 QUẢN LÝ ĐƠN HÀNG CÁ NHÂN
[x] Xem danh sách đơn hàng của tôi
[x] Xem trạng thái từng đơn hàng
[x] Xem chi tiết sản phẩm trong đơn
[x] Hủy đơn hàng khi đang ở trạng thái "Chờ lấy hàng" (PENDING)
================================================================================
PHẦN 3 – CHỨC NĂNG QUẢN TRỊ (ADMIN)
================================================================================
3.1 DASHBOARD
[x] Thống kê tổng quan:
- Số sản phẩm, danh mục, thương hiệu
- Số đơn hàng, người dùng, bài viết
[x] Thống kê đơn hàng theo trạng thái (5 trạng thái)
[x] Doanh thu 30 ngày gần đây
[x] Doanh thu tháng hiện tại
[x] Biểu đồ doanh số 7 ngày (Chart.js bar chart)
[x] Top 5 sản phẩm bán chạy nhất
[x] 5 đơn hàng mới nhất
3.2 QUẢN LÝ SẢN PHẨM
[x] Danh sách sản phẩm (phân trang 15/trang, sort theo ngày tạo)
[x] Thêm sản phẩm mới (tên, mô tả, giá, danh mục, thương hiệu, ảnh, active)
[x] Sửa thông tin sản phẩm
[x] Xóa sản phẩm
[x] Upload ảnh chính (file upload hoặc URL)
[x] Quản lý size & số lượng tồn kho (thêm/xóa size động)
[x] Upload ảnh gallery và feedback riêng biệt
[x] Xóa từng ảnh sản phẩm
[x] Ẩn/hiện sản phẩm (active toggle)
[x] Xuất danh sách sản phẩm ra file Excel (.xlsx)
3.3 QUẢN LÝ DANH MỤC
[x] Danh sách danh mục (phân trang)
[x] Thêm / sửa / xóa danh mục
[x] Upload ảnh danh mục (file hoặc URL)
3.4 QUẢN LÝ THƯƠNG HIỆU
[x] Danh sách thương hiệu (phân trang)
[x] Thêm / sửa / xóa thương hiệu
[x] Upload logo thương hiệu (file hoặc URL)
3.5 QUẢN LÝ KHUYẾN MÃI
[x] Danh sách mã khuyến mãi (phân trang)
[x] Thêm mã khuyến mãi với đầy đủ thông tin:
- Code, tên, loại (% hoặc tiền trực tiếp)
- Giá trị giảm, đơn hàng tối thiểu, giảm tối đa
- Số lượt dùng tối đa, ngày bắt đầu, ngày kết thúc
- Kích hoạt / ẩn / hiện công khai
[x] Sửa khuyến mãi
[x] Xóa khuyến mãi
[x] Hiển thị lượt đã dùng / tổng lượt
3.6 QUẢN LÝ ĐƠN HÀNG
[x] Danh sách tất cả đơn hàng (phân trang, sort mới nhất)
[x] Lọc đơn hàng theo trạng thái (tab/button filter)
[x] Xem chi tiết đơn hàng:
- Thông tin khách hàng (tên, SĐT, email, địa chỉ)
- Danh sách sản phẩm trong đơn (tên, size, số lượng, giá)
- Tổng tiền, giảm giá, thành tiền
- Mã khuyến mãi đã dùng
[x] Cập nhật trạng thái đơn hàng:
PENDING → CONFIRMED → SHIPPING → DELIVERED / CANCELLED
[x] Hiển thị badge màu theo trạng thái
3.7 QUẢN LÝ BÀI VIẾT BLOG
[x] Danh sách blog (phân trang)
[x] Thêm / sửa bài viết (tiêu đề, tóm tắt, nội dung HTML, tác giả, ảnh)
[x] Xóa bài viết
[x] Đặt trạng thái Đăng / Nháp (published toggle)
[x] Upload ảnh bài viết
3.8 QUẢN LÝ HÌNH ẢNH
[x] Upload nhiều ảnh cùng lúc (multi-file)
[x] Phân loại ảnh: GALLERY hoặc FEEDBACK
[x] Xem toàn bộ ảnh đã upload
[x] Xóa từng ảnh
3.9 QUẢN LÝ NGƯỜI DÙNG
[x] Danh sách người dùng (phân trang)
[x] Kích hoạt / vô hiệu hóa tài khoản
[x] Xóa tài khoản
[x] Reset mật khẩu người dùng (admin đặt lại)
[x] Phân biệt role USER / ADMIN
3.10 CÀI ĐẶT AI CHAT (tính năng mới)
[x] Chọn AI provider: OpenAI / Google Gemini / DeepSeek
[x] Nhập API Key cho từng provider
[x] Chọn model (có gợi ý datalist)
[x] Cập nhật cài đặt ngay không cần restart server
[x] Hiển thị trạng thái đã cấu hình / chưa cấu hình
[x] Link test chat trực tiếp
================================================================================
PHẦN 4 – CHỨC NĂNG KỸ THUẬT
================================================================================
4.1 BẢO MẬT
[x] Spring Security 6 với Form Login
[x] JWT Authentication Filter cho API
[x] BCrypt password hashing
[x] CSRF protection (bỏ qua /api/**)
[x] Role-based access control (USER / ADMIN)
[x] Session management (tối đa 1 session/user)
[x] Tự động redirect đăng nhập khi truy cập trang cần auth
4.2 FILE & MEDIA
[x] Upload file ảnh (multipart, tối đa 10MB)
[x] Lưu file vào thư mục uploads/ (cấu hình qua application.properties)
[x] Serve file tĩnh qua /uploads/** URL
[x] Preview ảnh trước khi upload (FileReader JS)
[x] Xóa file khỏi server khi xóa entity
4.3 EXCEL EXPORT
[x] Xuất danh sách sản phẩm ra file .xlsx (Apache POI)
[x] Download trực tiếp từ trình duyệt
4.4 RAG & AI KNOWLEDGE BASE
[x] Tự động lấy sản phẩm, danh mục, thương hiệu từ DB làm context
[x] Knowledge tĩnh về giày: sizing guide, dòng sản phẩm, công nghệ,
hướng dẫn chăm sóc, chính sách cửa hàng
[x] Hỗ trợ lịch sử hội thoại (gửi cả history lên API)
[x] Trim history tối đa 20 tin nhắn để tiết kiệm token
[x] Hỗ trợ cả 3 format API: OpenAI, DeepSeek (OpenAI-compat), Gemini
4.5 INFRASTRUCTURE
[x] Docker multi-stage build (Maven build + JRE run)
[x] Docker Compose với MySQL service + health check
[x] Volume persistent cho MySQL data và uploads
[x] Environment variable override qua .env file
[x] Tự tạo database nếu chưa có (createDatabaseIfNotExist)
[x] Hibernate auto-create/update schema
4.6 UX/UI
[x] Responsive design (mobile-first Bootstrap)
[x] Toast notifications (thêm giỏ hàng, thành công/lỗi)
[x] Auto-dismiss alerts (4 giây)
[x] Scroll to top button
[x] Floating chat button
[x] Lazy load cart count (AJAX /gio-hang/so-luong)
[x] Confirm dialog trước khi xóa
[x] Admin sidebar toggle trên mobile
[x] Đồng hồ thời gian thực trên admin topbar
================================================================================
PHẦN 5 – CÁC LUỒNG CHÍNH
================================================================================
LUỒNG MUA HÀNG:
Trang chủ → Xem sản phẩm → Chi tiết → Chọn size → Thêm giỏ
→ Giỏ hàng → Checkout → Nhập thông tin → (Áp mã) → Đặt hàng → Thành công
LUỒNG ĐĂNG KÝ / ĐĂNG NHẬP:
Đăng ký → Redirect đăng nhập → Đăng nhập → Trang chủ
LUỒNG QUẢN LÝ ĐƠN HÀNG (ADMIN):
Đơn PENDING → Admin xác nhận → CONFIRMED
→ Admin giao vận → SHIPPING
→ Giao thành công → DELIVERED
(Có thể hủy ở bất kỳ bước nào → CANCELLED)
LUỒNG AI CHAT:
Khách nhập câu hỏi → POST /api/chat → AiChatService
→ Lấy context từ DB (RAG) → Gọi AI API → Trả lời → Hiển thị
LUỒNG ADMIN CÀI ĐẶT AI:
/admin/ai-cai-dat → Chọn provider → Nhập API key → Lưu
→ AiSettingsService cập nhật in-memory (không restart)
================================================================================
THỐNG KÊ HỆ THỐNG
================================================================================
Controllers : 16 (7 public + 9 admin)
Services : 12 (interface + implementation)
Entities/Tables : 11
Repositories : 11
HTML Templates : 29
DTOs : 6
Config classes : 5
Tổng file Java : ~70 files
Tổng file HTML : 29 files
================================================================================
GHI CHÚ
================================================================================
(*) AI Chat cần API key hợp lệ để hoạt động.
Cài đặt tại: http://localhost:8080/admin/ai-cai-dat
Hoặc qua biến môi trường trong .env / docker-compose.yml
(*) File .env.example chứa mẫu cấu hình.
Copy thành .env và điền key trước khi chạy Docker.
(*) Cơ sở dữ liệu được khởi tạo tự động qua Hibernate.
Tài khoản admin mặc định tạo bởi DataInitializer.java
================================================================================
XEM THÊM ==> Hướng dẫn cài đặt chi tiết
HƯỚNG DẪN CÀI ĐẶT
================================================================================
QUICKSTART
Hướng dẫn chạy nhanh project trong 2-5 phút
================================================================================
I. CÁCH NHANH NHẤT (SỬ DỤNG DOCKER)
--------------------------------------------------------------------------------
1. Di chuyển vào thư mục project:
cd C:\Users\huand\Documents\topcode\shopgiay
2. (Tùy chọn) Tạo file .env từ mẫu để cấu hình AI/payment:
Copy-Item .env.example .env
3. Build và chạy app + mysql:
docker compose up -d --build app
4. Mở trình duyệt:
- http://localhost:8080
- http://localhost:8080/tu-van
5. Xem log nếu app chưa lên:
docker compose logs -f app
6. Dừng hệ thống:
docker compose down
II. CÁCH LOCAL (SỬ DỤNG MAVEN)
--------------------------------------------------------------------------------
1. Đảm bảo đã có MySQL 8 và database "shopgiay".
2. Kiểm tra thông số trong file src/main/resources/application.properties
3. Chạy lệnh:
mvn spring-boot:run
III. NẾU GẶP LỖI
--------------------------------------------------------------------------------
- "mvn" không tồn tại: cài Maven hoặc dùng Docker.
- Port 8080 bị trùng: tắt app khác đang dùng cổng này.
- Port 3306 bị trùng: tắt MySQL khác hoặc đổi mapping trong docker-compose.yml.
Nguồn: Topcode.vn