GIỚI THIỆU ĐỀ TÀI
GIỚI THIỆU DỰ ÁN
Hiện nay, mô hình cho thuê nhà trọ tại Việt Nam đang phát triển mạnh mẽ, đáp ứng nhu cầu nhà ở của nhiều đối tượng khách hàng, từ người lao động đến sinh viên Nhu cầu thuê nhà trọ vẫn rất lớn, đặc biệt tại các thành phố lớn như Hà Nội và TP Hồ Chí Minh Để đáp ứng nhu cầu này, các mô hình cho thuê nhà trọ ngày càng trở nên phong phú và đa dạng, từ nhà trọ cấp 4, nhà trọ bình dân, đến chung cư mini và căn hộ cho thuê Việc phát triển một trang web cho thuê phòng trọ không chỉ là một xu hướng tất yếu mà còn là cầu nối hiệu quả giữa người thuê và chủ nhà Sự kết hợp giữa công nghệ hiện đại và dịch vụ cho thuê nhà trọ đang bước vào kỷ nguyên số, hứa hẹn bứt phá mạnh mẽ trong tương lai.
BAN DỰ ÁN
- Chiêm Nguyễn Trí Nguyên (NT)
KHẢO SÁT
YÊU CẦU CỦA KHÁCH HÀNG
- Đăng nhập, đăng kí, quên mật khẩu, đổi mật khẩu
- Thay đổi thông tin cá nhân
- Xem nhà trọ, xem chi tiết nhà trọ, comment
- Kết nối ví Solana và thanh toán bằng Sol
- Thanh toán qua momo, vnpay
- Xuất báo cáo qua Excel
- Thông báo sắp hết hạn thuê qua email
- Thông báo giao dịch thành công và gửi kèm file PDF thông tin giao dịch qua email
- Quản lý người dùng, loại nhà trọ, nhà trọ
THIẾT KẾ DỰ ÁN
Xác định yêu cầu chính của dự án, gồm các chức năng cần có, giao diện người dùng, và yêu cầu bảo mật.
- Xây Dựng Sơ Đồ Dự Án:
Xây dựng sơ đồ kiến trúc hệ thống và xác định các thành phần chính như server, database,
Sử dụng trello để phân chia task giữa các thành viên nhóm, đặt ưu tiên cho các công việc quan trọng nhất.
- Tạo Wireframes và Thiết Kế Giao Diện:
Sử dụng công cụ thiết kế để tạo wireframes và thiết kế giao diện người dùng để có cái nhìn rõ ràng về cấu trúc và trải nghiệm người dùng.
Xác định cấu trúc database, bao gồm bảng, mối quan hệ, và các trường cần thiết.
CODE FRONT-END
Bắt đầu việc lập kế hoạch và thiết kế front-end dựa trên wireframes và giao diện đã được xác định trước đó.
- Xây Dựng Giao Diện Người Dùng:
Sử dụng HTML + Bootstrap, Nextjs + Tailwin để xây dựng giao diện người dùng, kết hợp với các thư viện.
CODE BACK-END
Xác định các API và endpoints cần thiết cho ứng dụng, đảm bảo tính mở rộng và tái sử dụng.
- Xây Dựng Logic Back-end:
Sử dụng Java Spring boot để triển khai logic back-end, bao gồm xử lý yêu cầu, quản lý người dùng, và gửi và nhận dữ liệu từ database.
TEST
Thực hiện kiểm thử đơn vị cho từng thành phần riêng lẻ để đảm bảo chức năng đú\ng đắn.
Thực hiện kiểm thử hệ thống để đảm bảo tất cả các thành phần tương tác với nhau một cách chính xác.
Kiểm tra liên kết và tương tác giữa front-end và back-end để đảm bảo tính đồng bộ, hiệu suất.
Thực hiện kiểm thử bảo mật để đảm bảo an toàn cho dữ liệu và người dùng.
TRIỂN KHAI VÀ PHÁT HÀNH
Triển khai ứng dụng lên môi trường internet sử dụng công cụ triển khai được hỗ trợ bởi Nextjs Phát hành trang web cho người dùng và đảm bảo rằng tất cả các tính năng đều khả dụng và ổn định.
PHÂN TÍCH
SƠ ĐỒ USE CASES
3.2.1 USE CASES DÀNH CHO ADMIN
3.2.2 USE CASES DÀNH CHO POSTER
3.2.3 USE CASES DÀNH CHO USER
3.2.4 USE CASES DÀNH CHO AMONYOUS
LUỒNG HOẠT ĐỘNG – ACTIVITY DIAGRAM
Forgot Password (quên mật khẩu)
Rent Apartment ( thuê nhà trọ )
Apartment Management ( quản lý phòng trọ)
Register Poster ( đăng ký thành người đăng bài)
THIẾT KẾ - DESIGN
THIẾT KẾ GIAO DIỆN
Phác thảo giao diện cho các chức năng và mô tả hoạt động cho các tương tác của người sử dụng lên giao diện.
Giao diện đăng nhập/đăng ký
Giao diện trang chủ & chi tiết
Giao diện trang thanh toán
THIẾT KẾ DỮ LIỆU
Thuộc tính Mô tả Kiểu Ràng buộc wallet_id ID ví tiền long PK balance Số dư double password_payment mật khẩu thanh toán varchar
Account_id ID tài khoản long FK
Thực thể wallet transaction wallet_transaction
Thuộc tính Mô tả Kiểu Ràng buộc wallet_transaction_i d ID giao dịch ví long PK receiver người nhận varchar amount tiền double receiver_number số người nhận varchar txig Đường link thanh toán varchar create_date ngày khởi tạo date wallet_id ID ví tiền long FK
Thuộc tính Mô tả Kiểu Ràng buộc rent_apartment_id ID phòng trọ thuê long PK rent_date_start Ngày thuê bắt đầu date rent_date_end Ngày thuê kết thúc date status Trạng thái varchar account_id ID tài khoản long FK apartment_id ID phòng trọ varchar FK transaction_id ID giao dịch long FK
Thuộc tính Mô tả Kiểu Ràng buộc account_id ID bình luận long FK apartment_id ID tài khoản long FK
Thuộc tính Mô tả Kiểu Ràng buộc payment_info_id ID thông tin thanh toán long PK name Tên varchar payment_number Số thanh toán int wallet_id ID ví tiền long FK Thực thể Comment
Bảng "comment" có bốn cột: - `comment_id`: ID của bình luận (kiểu dữ liệu: long, khóa chính).- `account_id`: ID của tài khoản (kiểu dữ liệu: long, khóa ngoại).- `apartment_id`: ID của phòng trọ (kiểu dữ liệu: varchar, khóa ngoại).- `content`: Nội dung của bình luận (kiểu dữ liệu: nvarchar).- `time`: Thời gian bình luận (kiểu dữ liệu: datetime).
Thuộc tính Mô tả Kiểu Ràng buộc apartment_id ID phòng trọ varchar PK content nội dung nvarchar ward Phường nvarchar district Quận nvarchar city Thành Phố nvarchar address Địa chỉ nvarchar price Giá tiền double acreage Diện tích double create_date Ngày khởi tạo date imageTitle Nội dung hình ảnh varchar image1 Hình ảnh 1 varchar image2 HÌnh ảnh 2 varchar image3 Hình ảnh 3 varchar description Mô tả nvarchar apartment_type_id ID loại phòng trọ varchar FK
The Accounts table encompasses various attributes, including "accounts_id" (long integer, primary key), "username" (varchar denoting username), "password" (varchar for password), "firstname" (nvarchar for first name), "lastname" (nvarchar for last name), "email" (varchar for email address), "phone" (varchar for phone number), "gender" (boolean for gender), "isEnable" (boolean for activation status), and "gmail" (boolean for Gmail integration).
User role Thuộc tính Kiểu Mô tả Ràng buộc account_id long ID account FK, NOT NULL role_id int ID role FK, NOT NULL
Thuộc tính Kiểu Mô tả Ràng buộcRole role_id int ID role PK, NOT NULL name vachar Tên role NOT NULL
Apartment_Type Thuộc tính Kiểu Mô tả Ràng buộc apartment_type_i d varchar ID loại phòng PK, NOT NULL name varchar tên loại phòng NOT NULL
THỰC HIỆN – IMPLEMENT
Layout
Giao diện trang đăng nhập
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Contact" onClick Hiển thị trang liên hệ
5 Button "Register" onClick Hiển thị trang đăng ký
6 Button "Forgot Pass" onClick Hiển thị trang quên mật khẩu
7 Button "Google" onClick Đăng nhập bằng Google
Giao diện trang đăng ký
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Contact" onClick Hiển thị trang liên hệ
5 Button "Login" onClick Hiển thị trang đăng nhập
6 Button "Forgot Pass" onClick Hiển thị trang quên mật khẩu
7 Button "Google" onClick Đăng nhập bằng Google
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Contact" onClick Hiển thị trang liên hệ
5 Button "Login" onClick Hiển thị trang đăng nhập
6 Button "Sign Up" onClick Hiển thị đăng ký
7 Button "Favorite" onClick Hiển thị trang nhà trọ yêu thích
8 Select "City" onChange Lọc thông tin nhà trọ theo city
9 Select "District" onChange Lọc thông tin nhà trọ theo quận
10 Select "Ward" onChange Lọc thông tin nhà trọ theo phường
11 Select "Apart Type" onChange Lọc thông tin theo loại phòng
12 Slider "Price" onChange Lọc thông tin theo Gía
13 Slider "Acreage" onChange Lọc thông tin theo m2
14 Button "Pagnigate" onChange Phân trang
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Contact" onClick Hiển thị trang liên hệ
5 Button "Login" onClick Hiển thị trang đăng nhập
6 Button "Sign Up" onClick Hiển thị đăng ký
7 Button "Favorite" onClick Hiển thị trang nhà trọ yêu thích
8 Button "Heart" onClick Bỏ thích phòng trọ
Giao diện trang chi tiết phòng trọ
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Contact" onClick Hiển thị trang liên hệ
5 Button "Login" onClick Hiển thị trang đăng nhập
6 Button "Sign Up" onClick Hiển thị đăng ký
7 Button "Favorite" onClick Hiển thị trang nhà trọ yêu thích
8 Button "Rent" onClick Hiển thị trang thuê phòng trọ
9 Butotn Comment onChick Comment nhà trọ
Giao diện trang thanh toán
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Contact" onClick Hiển thị trang liên hệ
5 Button "Login" onClick Hiển thị trang đăng nhập
6 Button "Sign Up" onClick Hiển thị đăng ký
7 Button "Favorite" onClick Hiển thị trang nhà trọ yêu thích
Choose Date onClick Chọn ngày bắt đầu thuê
Select "Month" onClick Chọn mấy tháng thuê
Select Payment onChange Chọn phương thức thanh toán Button "Rent" onClick Thực hiện chức năng thuê phòng
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Upload" onClick Hiển thị đăng phòng trọ
5 Button "Apartment" onClick Hiển thị quản lý phòng trọ
6 Button "Transaction" onClick Hiển thị giao dịch
7 Button "Deposite" onClick Hiển thị modal nạp tiền
Button "Withdraw" onClick Hiển thị modal rút tiền
Nút "Thêm phương thức thanh toán" hiển thị giao diện thêm phương thức thanh toán Nút "Thanh toán" cho phép xem phương thức thanh toán Nút "Đổi mật khẩu thanh toán" hiển thị giao diện đổi mật khẩu thanh toán Nút "Thêm mật khẩu" hiển thị giao diện thêm mật khẩu Nút "Cập nhật" cập nhật thông tin cá nhân.
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Upload" onClick Hiển thị đăng phòng trọ
5 Button "Apartment" onClick Hiển thị quản lý phòng trọ
6 Button "Transaction" onClick Hiển thị giao dịch
7 Button "Deposite" onClick Hiển thị modal nạp tiền
8 Button "Withdraw" onClick Hiển thị modal rút tiền
9 Button "Add payment" onClick Hiển thị modal thêm phương thức
10 Button " payment" onClick Xem phương thức thanh toán
11 Button " pass payment" onClick Hiển thị modal mật khẩu thanh toán
12 Button add payment" onClick Hiển thị modal thêm mật khẩu
13 Button "Create" onClick Cập nhật thêm phòng trọ
14 Select "City" onChange Hiển thị thông tin district
15 Select District onChange Hiển thị thông tin ward
16 Button Add new onClick Clear Form
17 Button Update onClick Update thông tin phòng trọ
Hiển thị trang quản lý phòng trọ
TT Điều khiển Sự kiện Mô tả hoạt động
1 Cửa sổ Initiate Hiển thị trang đăng nhập
2 Header Initiate hiển thị thanh header
3 Button "Home" onClick Hiển thị trang chủ
4 Button "Upload" onClick Hiển thị đăng phòng trọ
5 Button "Apartment" onClick Hiển thị quản lý phòng trọ
6 Button "Transaction" onClick Hiển thị giao dịch
7 Button "Deposite" onClick Hiển thị modal nạp tiền
8 Button "Withdraw" onClick Hiển thị modal rút tiền
9 Button "Add payment" onClick Hiển thị modal thêm phương thức
10 Button " payment" onClick Xem phương thức thanh toán
11 Button " pass payment" onClick Hiển thị modal mật khẩu thanh toán
12 Button add payment" onClick Hiển thị modal thêm mật khẩu
13 Button "Rubbish" onClick Hiển thị modal xóa phòng
14 Button "Edit" onClick Hiển thị trang upload
API
/api/exchange-rate Mô tả hoạt động
@GetMapping("/api/exchange-rate") Lấy tỉ giá VND
/rest/accounts Mô tả hoạt động
@GetMapping("/rest/accounts") Lấy ra tất cả account
/{username}") Lấy ra account bằng username
@GetMapping("/rest/account") Lấy ra 1 account cụ thể
@GetMapping("/rest/checkPass") Kiểm tra mật khẩu
@PutMapping("/rest/addRole/{id}") Thêm vai trò
@PutMapping("/rest/accounts/{id}") Sửa thông tin account
/{id}") Đổi thông tin account
@DeleteMapping("/rest/accounts/{id}") Xóa account
/rest/apartments Mô tả hoạt động
@GetMapping("/rest/apartments") Lấy ra mọi nhà trọ
/{id}") Lấy ra nhà trọ cụ thể
Lấy ra phòng trọ theo Id account
@PostMapping("/rest/apartments") Thêm mới phòng trọ
@PostMapping("/{id}/images") Lấy ra hình ảnh của phòng đó
/apartments/bulk-upload") Upload hình
/apartments/{id}") Sửa phòng trọ
/rest/aparttypes Mô tả hoạt động
@GetMapping("/rest/aparttypes") Lấy ra mọi loại nhà trọ
/{id}") Lấy ra loại nhà trọ cụ thể
@PostMapping("/rest/aparttypes") Thêm mới loại nhà trọ
/{id}") Đổi thông tin loại nhà trọ
/{id}") Xóa loại nhà trọ
/rest/getApprove Mô tả hoạt động
@GetMapping("/rest/getApprove") Lấy ra các đơn phê duyệt
/{id}") Lấy ra thông tin phê duyệt cụ thể
/createRegisterPoster") Tạo mới một đơn kiểm duyệt
/updateApprovePoster/{id}") Update đơn kiểm duyệt
/deleteApprovePoster/{id}") Xóa đơn kiểm duyệt
/cloudinary Mô tả hoạt động
@GetMapping("/list") Lấy ra tất cả hình ảnh
@GetMapping("/{id}") Lấy ra hình ảnh theo id
@PostMapping("/upload") Thêm mới hình ảnh
@DeleteMapping("/delete/{id}") Xóa hình ảnh
/rest/favorites Mô tả hoạt động
@PostMapping("/rest/favorites") Thêm mới một yêu thích
/{account_id}") Lấy ra mục thích cụ thể
@GetMapping("/rest/favorites") Lấy ra tất cả mục yêu thích
@PutMapping("/rest/favorites/{id}") Update yêu thích
@DeleteMapping("/rest/favorites/{id}") Xóa yêu thích
/rest/paymentinfo Mô tả hoạt động
@GetMapping("/rest/paymentinfo") Lấy ra thông tin phương thức
{id}") Lấy ra thông tin phương thức cụ thể
@PostMapping("/rest/paymentinfo") Thêm mới một phương thức
@PutMapping("/rest/paymentinfo/{id}") Update phương thức
/{id}") Xóa phương thức thanh toán
/rest/rentapartments Mô tả hoạt động
@GetMapping("/rest/rentapartments") Lấy ra tất cả lượt thuê nhà trọ
/{id}") Lấy ra phòng trọ được thuê theo id account
/{id}") Lấy ra phòng trọ được thuê theo id cụ
@PostMapping("/rest/rentapartments") thểThêm mới lượt thuê phòng trọ
/{id}") Update phong trọ được thuê
/{id}") Xóa thông tin thuê phòng
/rest/role Mô tả hoạt động
@GetMapping("/rest/role") Lấy ra vai trò
@GetMapping("/rest/role/{id}") Lấy ra vai trò theo id
@PostMapping("/rest/role") Thêm mới vai trò
@PutMapping("/rest/role/{id}") Update vai trò
@DeleteMapping("/rest/role/{id}") Xóa vai trò
/rest/sendContract Mô tả hoạt động
@GetMapping("/rest/sendContract") Lấy ra thông tin hợp đồng
/rest/confirmtokenregister Mô tả hoạt động
/rest/wallet Mô tả hoạt động
@GetMapping("/rest/wallet") Lấy ra mọi thông tin ví
@GetMapping("/rest/wallet/{id}") Lấy ra ví cụ thể
@PostMapping("/rest/wallet") Thêm mới ví cá nhân
@PutMapping("/rest/wallet/{id}") Update ví
/passwordpayment/{id}") Thêm mật khẩu ví
Lấy ra mật khẩu ví theo id
@DeleteMapping("/rest/wallet/{id}") Xóa mật khẩu ví
/rest/wallettransaction Mô tả hoạt động
@GetMapping("/rest/ wallettransaction") Lấy ra tất cả giao dịch
@GetMapping("/rest/ wallettransaction/{id}") Lấy ra giao dịch cụ thể theo id
@GetMapping("/rest/ totalrented") Lấy ra tất cả giao dịch bằng loại “Rent”
@GetMapping("/rest/ totalcommission") Lấy ra tất cả giao dịch bằng loại
@GetMapping("/rest/ totalusersrented") Lấy ra tổng user thuê phòng
Lấy ra tổng tiền thuê theo tháng
Lấy ra tổng tiền hoa hồng theo tháng
Lấy ra tổng tiền nạp vào theo tháng
Lấy ra tổng tiền rút ra theo tháng
/wallettransaction") Thêm mới giao dịch
/rest/ Mô tả hoạt động
/create_payment_vnpay") Tạo thanh toán bằng VNPAY
/create_payment_momo") Tạo thanh toán bằng MOMO
@GetMapping("/rest/deposite_momo") Tạo thanh toán bằng nạp tiền MOMO
@GetMapping("/rest/deposite_vnpay") Tạo thanh toán bằng nạp tiền VNPAY
DEPLOY
KIỂM THỬ - TESTING
Test case thêm phòng trọ
Test case thêm loại phòng trọ
Test case sửa phòng trọ