|
1 | | -<div align="center"> |
| 1 | +# AuctionPlatformJava - Hệ thống đấu giá trực tuyến |
2 | 2 |
|
3 | | -# 🧾 BÀI TẬP LỚN LẬP TRÌNH NÂNG CAO |
4 | | -## 🌐 Phát Triển Hệ Thống Đấu Giá Trực Tuyến |
5 | | -### 👥 Nhóm 2 – CS7 – UET |
| 3 | +## Mô tả bài toán và phạm vi |
6 | 4 |
|
7 | | -</div> |
| 5 | +AuctionPlatformJava là ứng dụng đấu giá trực tuyến gồm server HTTP/WebSocket và client desktop JavaFX. Hệ thống hỗ trợ người bán đăng sản phẩm, mở phiên đấu giá, người mua đặt giá, theo dõi lịch sử đấu giá và nhận cập nhật tự động khi dữ liệu thay đổi. |
8 | 6 |
|
9 | | ---- |
| 7 | +Phạm vi hiện tại tập trung vào chạy local hoặc trong mạng nội bộ: |
10 | 8 |
|
11 | | -## 📌 Thành viên |
12 | | -- **Hồ Văn Hợp** |
13 | | -- **Lê Nguyễn Minh Hiếu** |
14 | | -- **Kim Gia Huy** |
15 | | -- **Võ Văn Quốc** |
| 9 | +- Quản lý tài khoản theo vai trò `Bidder`, `Seller`, `Admin`. |
| 10 | +- Quản lý sản phẩm đấu giá, phiên đấu giá và trạng thái phiên. |
| 11 | +- Đặt giá thủ công, auto-bid, lịch sử bid và cập nhật realtime qua WebSocket. |
| 12 | +- Lưu dữ liệu bằng SQLite trong file `auction_data.db`. |
| 13 | +- Chưa tích hợp cổng thanh toán thật, email/SMS hay triển khai production cloud. |
16 | 14 |
|
17 | | ---- |
| 15 | +## Công nghệ, môi trường và yêu cầu cài đặt |
18 | 16 |
|
19 | | -## 🛠️ To-Do (Các điểm cần bổ sung / sửa chữa) |
| 17 | +### Công nghệ sử dụng |
20 | 18 |
|
21 | | -### 💰 Xử lý nhập số khi rút tiền |
22 | | -- [x] Giới hạn định dạng nhập (chỉ cho phép số như `1000`, `1000.0`) |
23 | | -- [X] thông báo nhập sai mật khẩu sau khi tạo tài khoản mới hiện xanh -> sửa lại đỏ |
24 | | -- [x] xử lí username và pass khi tạo tk, hiện tại nhập " c " nhận "c" và "c c" nhận "c c" , yêu cầu user và pass không được có dấu cách |
| 19 | +- Java 21. |
| 20 | +- Gradle Wrapper 9.5.0. |
| 21 | +- JavaFX 21 cho giao diện desktop. |
| 22 | +- Javalin 6.4.0 cho REST API và WebSocket server. |
| 23 | +- SQLite JDBC cho lưu trữ dữ liệu. |
| 24 | +- Jackson, Gson và OkHttp cho JSON/HTTP client. |
| 25 | +- JUnit 5 cho kiểm thử. |
| 26 | +- GitHub Actions cho CI. |
| 27 | + |
| 28 | +### Yêu cầu môi trường |
| 29 | + |
| 30 | +- Cài JDK 21 và đặt `JAVA_HOME` trỏ tới JDK 21. |
| 31 | +- Không cần cài Gradle riêng vì dự án dùng Gradle Wrapper. |
| 32 | +- Windows: dùng `gradlew.bat`. |
| 33 | +- Linux/macOS: dùng `./gradlew`; nếu file chưa có quyền chạy, chạy: |
| 34 | + |
| 35 | +```bash |
| 36 | +chmod +x ./gradlew |
| 37 | +``` |
| 38 | + |
| 39 | +## Cấu trúc thư mục |
| 40 | + |
| 41 | +```text |
| 42 | +AuctionPlatformJava/ |
| 43 | +├── client/ # JavaFX desktop client, FXML, CSS, REST client |
| 44 | +├── server/ # Javalin server, REST/WebSocket API, SQLite repositories |
| 45 | +├── shared/ # Model, service nghiệp vụ, repository interface, exception, test |
| 46 | +├── gradle/wrapper/ # Gradle Wrapper |
| 47 | +├── .github/workflows/ # GitHub Actions CI |
| 48 | +├── build.gradle # Cấu hình Gradle chung |
| 49 | +├── settings.gradle # Khai báo module shared/server/client |
| 50 | +├── gradlew # Gradle Wrapper cho Linux/macOS |
| 51 | +└── gradlew.bat # Gradle Wrapper cho Windows |
| 52 | +``` |
| 53 | + |
| 54 | +## Câu lệnh chạy chương trình |
| 55 | + |
| 56 | +Tất cả lệnh dưới đây chạy từ thư mục gốc của dự án. |
| 57 | + |
| 58 | +### Kiểm tra và build |
| 59 | + |
| 60 | +Windows PowerShell: |
| 61 | + |
| 62 | +```powershell |
| 63 | +.\gradlew.bat test |
| 64 | +.\gradlew.bat build |
| 65 | +``` |
| 66 | + |
| 67 | +Linux/macOS: |
| 68 | + |
| 69 | +```bash |
| 70 | +./gradlew test |
| 71 | +./gradlew build |
| 72 | +``` |
| 73 | + |
| 74 | +### Chạy server |
| 75 | + |
| 76 | +Server mặc định chạy tại `http://localhost:8080/api`. |
| 77 | + |
| 78 | +Windows PowerShell: |
| 79 | + |
| 80 | +```powershell |
| 81 | +.\gradlew.bat :server:run |
| 82 | +``` |
| 83 | + |
| 84 | +Linux/macOS: |
| 85 | + |
| 86 | +```bash |
| 87 | +./gradlew :server:run |
| 88 | +``` |
| 89 | + |
| 90 | +Có thể đổi port bằng tham số dòng lệnh: |
| 91 | + |
| 92 | +Windows PowerShell: |
| 93 | + |
| 94 | +```powershell |
| 95 | +.\gradlew.bat :server:run --args="8081" |
| 96 | +``` |
| 97 | + |
| 98 | +Linux/macOS: |
| 99 | + |
| 100 | +```bash |
| 101 | +./gradlew :server:run --args='8081' |
| 102 | +``` |
| 103 | + |
| 104 | +### Chạy client |
| 105 | + |
| 106 | +Mở terminal mới, giữ server đang chạy, sau đó chạy client. |
| 107 | + |
| 108 | +Windows PowerShell: |
| 109 | + |
| 110 | +```powershell |
| 111 | +.\gradlew.bat :client:run |
| 112 | +``` |
| 113 | + |
| 114 | +Linux/macOS: |
| 115 | + |
| 116 | +```bash |
| 117 | +./gradlew :client:run |
| 118 | +``` |
| 119 | + |
| 120 | +Client mặc định kết nối tới `http://localhost:8080/api`. Nếu server chạy ở địa chỉ khác, nhập URL server ở màn hình đăng nhập. |
| 121 | + |
| 122 | +## Hướng dẫn chạy Server/Client theo thứ tự |
| 123 | + |
| 124 | +1. Mở terminal tại thư mục gốc dự án. |
| 125 | +2. Chạy server bằng `.\gradlew.bat :server:run` trên Windows hoặc `./gradlew :server:run` trên Linux/macOS. |
| 126 | +3. Chờ log server báo đã khởi động tại `http://localhost:8080/api`. |
| 127 | +4. Mở terminal thứ hai. |
| 128 | +5. Chạy client bằng `.\gradlew.bat :client:run` trên Windows hoặc `./gradlew :client:run` trên Linux/macOS. |
| 129 | +6. Đăng nhập hoặc đăng ký tài khoản mới để sử dụng. |
| 130 | + |
| 131 | +Tài khoản admin mặc định được tạo khi server khởi động lần đầu: |
| 132 | + |
| 133 | +- Username: `admin` |
| 134 | +- Password: `admin` |
| 135 | + |
| 136 | +## Danh sách chức năng đã hoàn thành |
| 137 | + |
| 138 | +- Đăng ký, đăng nhập và xác thực bằng token. |
| 139 | +- Phân quyền theo vai trò `Bidder`, `Seller`, `Admin`. |
| 140 | +- Tạo, sửa, xóa và xem danh sách sản phẩm đấu giá. |
| 141 | +- Hỗ trợ nhiều loại sản phẩm bằng kế thừa và factory: đồ điện tử, tác phẩm nghệ thuật, phương tiện, loại khác. |
| 142 | +- Người bán mở phiên đấu giá cho sản phẩm. |
| 143 | +- Admin có thể bắt đầu, kết thúc sớm hoặc hủy phiên đấu giá. |
| 144 | +- Đặt giá thủ công với kiểm tra giá hợp lệ, số dư và trạng thái phiên. |
| 145 | +- Auto-bid với giới hạn giá tối đa và cooldown 5 giây giữa các lượt auto-bid. |
| 146 | +- Chống sniping: tự gia hạn phiên khi có bid trong những giây cuối. |
| 147 | +- Tự động đóng phiên đấu giá khi hết thời gian. |
| 148 | +- Cập nhật trạng thái `OPEN`, `RUNNING`, `FINISHED`, `PAID`, `CANCELED`. |
| 149 | +- Cập nhật danh sách và màn hình bid realtime qua WebSocket. |
| 150 | +- Xem lịch sử bid và biểu đồ diễn biến giá. |
| 151 | +- Quản lý số dư người dùng, nạp/rút tiền và thanh toán sau khi kết thúc đấu giá. |
| 152 | +- Lưu dữ liệu bằng SQLite. |
| 153 | +- Kiểm thử tự động bằng JUnit 5. |
| 154 | +- CI GitHub Actions chạy `./gradlew test` trên Ubuntu. |
0 commit comments