Giới thiệu dự án
Thị trường bất động sản cho thuê tại các đô thị lớn tại Việt Nam, đặc biệt là thành phố Đà Nẵng – trung tâm kinh tế, giáo dục với quy mô dân số trên 1,1 triệu người và hơn 120.000 sinh viên, giảng viên, công nhân nhập cư – luôn đối mặt với tình trạng mất cân đối thông tin nghiêm trọng. Theo thống kê thực tế, hơn 75% sinh viên năm nhất và người lao động ngoại tỉnh gặp khó khăn khi tìm kiếm nhà trọ phù hợp trong 2 tuần đầu chuyển đến thành phố; trên 60% giao dịch truyền thống qua tờ rơi hoặc môi giới trung gian phát sinh chi phí phụ từ 30%–50% tiền cọc và tiềm ẩn rủi ro lừa đảo.
+-----------------------------------------------------------------------------------+
| VẤN ĐỀ TRUYỀN THỐNG |
| - Tin đăng rác, thông tin sai lệch (>45%) |
| - Giá phòng không minh bạch, phụ phí phát sinh |
| - Tình trạng phòng thực tế không cập nhật (đã thuê vẫn hiển thị) |
| - Rủi ro mất cọc không có hợp đồng/biên nhận số hóa |
+-----------------------------------------+-----------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| GIẢI PHÁP HỆ THỐNG ĐỀ XUẤT |
| - Nền tảng Web MERN Stack (React 18.2, Node.js 18.16, Express 4.18, MongoDB 6.0) |
| - Cơ chế kiểm duyệt tin đăng nghiêm ngặt (Admin Verification Workflow) |
| - Cập nhật trạng thái thời gian thực: [Còn trống] -> [Đang đặt] -> [Đã thuê] |
| - Tích hợp đặt cọc trực tuyến, tạo hợp đồng điện tử và quản lý hóa đơn |
+-----------------------------------------------------------------------------------+
Vấn đề cụ thể cần giải quyết (Problem Statement)
- Thiếu kênh thông tin tập trung, chuyên biệt: Các trang mạng xã hội (Facebook Groups) có tốc độ trôi tin nhanh, không có bộ lọc có cấu trúc theo vị trí địa lý, khoảng giá và tiện ích.
- Sai lệch thông tin và tin ảo: Tỷ lệ tin đăng trọ không còn trống hoặc sai hình ảnh thực tế chiếm tới 40–50% trên các diễn đàn rao vặt mở.
- Quy trình đặt cọc và hợp đồng thiếu minh bạch: Người thuê không có công cụ đảm bảo đặt chỗ (booking verification), trong khi chủ trọ khó quản lý danh sách khách thuê và vòng đời phòng.
Mục tiêu dự án
- Xây dựng nền tảng website thương mại dịch vụ phòng trọ toàn diện phục vụ 4 nhóm tác nhân: Khách vãng lai, Khách thành viên, Chủ trọ và Quản trị viên (Admin).
- Tối ưu hóa công cụ tìm kiếm và bộ lọc đa tiêu chí (khu vực quận/huyện tại Đà Nẵng, khoảng giá, loại phòng, tiện nghi).
- Chuẩn hóa quy trình đặt phòng (Booking System) kèm cơ chế đặt cọc 50% và xác nhận tự động.
- Xây dựng phân hệ quản lý hợp đồng thuê, lịch sử hóa đơn nạp tiền (Invoices) và phân quyền chặt chẽ.
- Cung cấp bảng điều khiển quản trị (Admin Dashboard) với công cụ thống kê trực quan, kiểm duyệt bài viết và khóa tài khoản vi phạm.
Giải pháp kỹ thuật và cơ sở lựa chọn
Dự án áp dụng kiến trúc MERN Stack (MongoDB, Express.js, React.js, Node.js):
- Node.js runtime (v18.16.0 LTS) kết hợp Express.js (v4.18.2): Cung cấp mô hình I/O bất đồng bộ (Non-blocking I/O) điều hướng sự kiện (Event-driven) trên nền Google V8 Engine, xử lý đồng thời hàng nghìn request I/O với mức tiêu thụ tài nguyên tối thiểu.
- React.js (v18.2.0): Tận dụng Virtual DOM và cơ chế reconciliation để tái render UI tối ưu, phân tách component độc lập, nâng cao trải nghiệm người dùng (UX) Single Page Application (SPA).
- MongoDB (v6.0): Hệ quản trị cơ sở dữ liệu NoSQL hướng tài liệu (Document-oriented), lưu trữ JSON-like BSON documents, hỗ trợ đánh chỉ mục
_id, compound indexes và cho phép mở rộng quy mô linh hoạt (Horizontal Scalability) thông qua Sharding/Replica Sets.
Phạm vi và chỉ số kỳ vọng
- Phạm vi địa lý: 6 quận nội thành và 2 huyện thuộc thành phố Đà Nẵng (Hải Châu, Thanh Khê, Liên Chiểu, Ngũ Hành Sơn, Sơn Trà, Cẩm Lệ, Hòa Vang, Hoàng Sa).
- Chỉ số hiệu năng (KPIs): Thời gian phản hồi API trung bình $\le 120\text{ ms}$; thời gian tải trang ban đầu (FCP) $\le 1.2\text{ s}$; giảm thời gian kết nối giữa chủ trọ và người thuê từ trung bình 4 ngày xuống dưới 6 giờ.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí so sánh |
Nền tảng đề xuất (Web Thuê Trọ ĐN) |
Chợ Tốt (chotot.com) |
Batdongsan.com.vn |
Nhóm Facebook / Diễn đàn |
| Mục tiêu cốt lõi |
Chuyên biệt phòng trọ Đà Nẵng |
Rao vặt đa ngành |
Bất động sản thương mại cao cấp |
Mạng xã hội kết nối tự do |
| Phí trung gian/môi giới |
0% |
Miễn phí/Thu phí đẩy tin |
Phí đăng tin cao theo ngày |
0% |
| Cơ chế xác thực tin |
100% duyệt bởi Admin/Chuyên viên |
Kiểm duyệt tự động/hậu kiểm |
Hậu kiểm bài đăng |
Hoàn toàn không kiểm duyệt |
| Quy trình đặt cọc/hợp đồng |
Tích hợp luồng đặt phòng + Hóa đơn |
Không hỗ trợ |
Không hỗ trợ |
Tự thỏa thuận miệng/chuyển khoản |
| Trạng thái phòng thực tế |
Cập nhật động (Trống / Đang đặt / Đã thuê) |
Thường xuyên lỗi thời |
Không cập nhật |
Không theo dõi được |
+-----------------------------------------------------------------------------------+
| MA TRẬN ƯU TIÊN YÊU CẦU (MoSCoW) |
+-----------------------------------------------------------------------------------+
| [M - MUST HAVE] |
| - Xác thực người dùng (JWT, Bcrypt) & Phân quyền 4 Roles |
| - Đăng bài, upload ảnh, quản lý danh mục phòng trọ |
| - Tìm kiếm & bộ lọc đa điều kiện (Quận, Giá, Loại phòng) |
| - Kiểm duyệt tin đăng và khóa tài khoản vi phạm (Admin) |
+-----------------------------------------------------------------------------------+
| [S - SHOULD HAVE] |
| - Luồng đặt phòng trực tuyến (Booking Workflow) + Đặt cọc 50% |
| - Quản lý hợp đồng thuê phòng ngắn hạn/dài hạn |
| - Hệ thống đánh giá sao (Rating) và bình luận tương tác (Reviews) |
+-----------------------------------------------------------------------------------+
| [C - COULD HAVE] |
| - Lịch sử giao dịch, hóa đơn (Invoices) |
| - Đánh dấu tin VIP và gói đẩy bài ưu tiên |
+-----------------------------------------------------------------------------------+
| [W - WON'T HAVE THIS RELEASE] |
| - Tích hợp cổng thanh toán quốc tế (Stripe, PayPal) |
| - Tự động gợi ý phòng bằng học máy (AI Recommendation) |
+-----------------------------------------------------------------------------------+
Thiết kế hệ thống
+-----------------------------------------------------------------------------------+
| KIẾN TRÚC HỆ THỐNG |
+-----------------------------------------------------------------------------------+
| [CLIENT TIER] React.js 18.2 SPA + React Router DOM v6 + Axios Client |
| (UI Components, State Management, Virtual DOM Render) |
+-----------------------------------------+-----------------------------------------+
| HTTP/HTTPS (RESTful JSON APIs)
v
+-----------------------------------------------------------------------------------+
| [SERVER TIER] Node.js 18.16 + Express.js 4.18 REST API Controller |
| Middlewares: JWT Auth, Multer (Image Upload), CORS, Error Handler |
| Business Logic: User, Place, Booking, Invoice Services |
+-----------------------------------------+-----------------------------------------+
| Mongoose ODM 7.5.0 Drivers
v
+-----------------------------------------------------------------------------------+
| [DATA TIER] MongoDB 6.0 NoSQL Database Engine |
| Collections: users, places, bookings, invoices |
+-----------------------------------------------------------------------------------+
Thiết kế cơ sở dữ liệu (Database Schema Detailed)
// Cấu trúc Schema Collection "places" (Mongoose ODM Definition)
const placeSchema = new mongoose.Schema({
owner: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true, index: true },
title: { type: String, required: true, trim: true },
address: { type: String, required: true },
areas: { type: String, required: true, index: true }, // Vị trí: Hải Châu, Liên Chiểu...
photos: [{ type: String }],
description: { type: String, required: true },
perks: [{ type: String }], // Tiện ích: Wifi, Máy giặt, Điều hòa, Bếp
TypeRoom: { type: String, enum: ['Phòng trọ', 'Nhà nguyên căn', 'Căn hộ mini'], required: true },
Price: { type: Number, required: true, min: 0, index: true },
extraInfo: { type: String },
numberBed: { type: Number, default: 1 },
Status: { type: Boolean, default: false }, // Duyệt bởi Admin
memberStatus: { type: String, enum: ['Còn trống', 'Đang đặt', 'Đã thuê'], default: 'Còn trống' },
isExpired: { type: Boolean, default: false },
isVip: { type: Boolean, default: false },
packageShort: { price: Number, enabled: Boolean },
packageLong: { price: Number, enabled: Boolean },
reviews: [{
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
rating: { type: Number, min: 1, max: 5 },
comment: String,
createdAt: { type: Date, default: Date.now }
}]
}, { timestamps: true });
// Cấu trúc Schema Collection "bookings"
const bookingSchema = new mongoose.Schema({
place: { type: mongoose.Schema.Types.ObjectId, ref: 'Place', required: true, index: true },
user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true, index: true },
checkIn: { type: Date, required: true },
checkOut: { type: Date },
TypeOption: { type: String, enum: ['Ngắn hạn', 'Dài hạn'], required: true },
numberOfNights: { type: Number, default: 1 },
price: { type: Number, required: true },
depositAmount: { type: Number, required: true }, // Đặt cọc 50%
status: { type: String, enum: ['Chờ duyệt', 'Đã duyệt', 'Đã hủy', 'Hoàn tất'], default: 'Chờ duyệt' }
}, { timestamps: true });
Thiết kế RESTful API Specifications
| Method |
Endpoint |
Mô tả chức năng |
Quyền truy cập |
Mã phản hồi chuẩn |
POST |
/api/v1/auth/register |
Đăng ký tài khoản mới |
Public |
201 Created / 400 Bad Request |
POST |
/api/v1/auth/login |
Đăng nhập hệ thống & cấp JWT |
Public |
200 OK / 401 Unauthorized |
GET |
/api/v1/places |
Lấy danh sách bài đăng có bộ lọc |
Public |
200 OK |
POST |
/api/v1/places |
Đăng bài phòng trọ mới |
Chủ trọ (Landlord) |
201 Created / 403 Forbidden |
PUT |
/api/v1/places/:id |
Cập nhật thông tin phòng |
Chủ bài đăng / Admin |
200 OK / 404 Not Found |
DELETE |
/api/v1/places/:id |
Xóa bài đăng phòng trọ |
Chủ bài đăng / Admin |
200 OK / 403 Forbidden |
POST |
/api/v1/bookings |
Tạo yêu cầu đặt phòng + cọc 50% |
Khách thành viên |
201 Created / 409 Conflict |
PUT |
/api/v1/admin/places/:id/approve |
Duyệt/Từ chối bài đăng |
Quản trị viên (Admin) |
200 OK / 403 Forbidden |
Quy trình phát triển và kiểm soát chất lượng
Dự án áp dụng mô hình phát triển Agile/Scrum tinh gọn trong thời gian 12 tuần:
+-----------------------------------------------------------------------------------+
| LỘ TRÌNH PHÁT TRIỂN (12 TUẦN) |
+-----------------------------------------------------------------------------------+
| Tuần 01 - 03: Khảo sát thực tế, Phân tích Use-case, Thiết kế ERD & Wireframe |
| Tuần 04 - 06: Phát triển Module Xác thực (Auth), Data Schema & REST API CRUD |
| Tuần 07 - 09: Xây dựng Giao diện React SPA, Module Tìm kiếm, Đặt phòng & Upload |
| Tuần 10 - 11: Phát triển Module Admin, Quản trị hợp đồng & Testing (Unit/UAT) |
| Tuần 12 : Tối ưu hiệu năng, Đóng gói Docker, Viết tài liệu & Bảo vệ khóa luận |
+-----------------------------------------------------------------------------------+
Implementation và kết quả
Development Process và hiện thực thuật toán
1. Bộ lọc tìm kiếm động đa tiêu chí (Dynamic Filter Engine)
Hệ thống sử dụng MongoDB Query DSL để tổng hợp các điều kiện lọc không bắt buộc một cách tối ưu:
// Controller: Xử lý tìm kiếm và lọc bài đăng phòng trọ
exports.getFilteredPlaces = async (req, res) => {
try {
const { area, minPrice, maxPrice, typeRoom, perks } = req.query;
let queryConditions = { Status: true, isExpired: false };
if (area && area !== 'all') {
queryConditions.areas = new RegExp(area, 'i');
}
if (minPrice || maxPrice) {
queryConditions.Price = {};
if (minPrice) queryConditions.Price.$gte = Number(minPrice);
if (maxPrice) queryConditions.Price.$lte = Number(maxPrice);
}
if (typeRoom) {
queryConditions.TypeRoom = typeRoom;
}
if (perks) {
const perksArray = perks.split(',');
queryConditions.perks = { $all: perksArray };
}
const places = await Place.find(queryConditions)
.populate('owner', 'Name email avatar')
.sort({ isVip: -1, createdAt: -1 })
.lean();
return res.status(200).json({ success: true, count: places.length, data: places });
} catch (error) {
return res.status(500).json({ success: false, message: error.message });
}
};
2. Xử lý đặt cọc và chống xung đột phòng (Concurrency Control)
Để ngăn chặn trường hợp hai người dùng cùng đặt một phòng tại một thời điểm, hệ thống kiểm tra trạng thái phòng nguyên tử (Atomic Checking):
// Controller: Xử lý Đặt phòng với kiểm tra trạng thái phòng
exports.createBooking = async (req, res) => {
const session = await mongoose.startSession();
session.startTransaction();
try {
const { placeId, checkIn, checkOut, typeOption, price } = req.body;
const userId = req.user.id;
// Kiểm tra trạng thái phòng trực tiếp trong transaction
const targetPlace = await Place.findById(placeId).session(session);
if (!targetPlace || targetPlace.memberStatus !== 'Còn trống') {
await session.abortTransaction();
return res.status(400).json({ success: false, message: 'Phòng đã được đặt hoặc không khả dụng!' });
}
const deposit = price * 0.5; // Quy định đặt cọc 50%
const newBooking = await Booking.create([{
place: placeId,
user: userId,
checkIn,
checkOut,
TypeOption: typeOption,
price,
depositAmount: deposit,
status: 'Chờ duyệt'
}], { session });
// Cập nhật trạng thái phòng sang Đang đặt
targetPlace.memberStatus = 'Đang đặt';
await targetPlace.save({ session });
await session.commitTransaction();
session.endSession();
return res.status(201).json({ success: true, data: newBooking[0] });
} catch (error) {
await session.abortTransaction();
session.endSession();
return res.status(500).json({ success: false, message: error.message });
}
};
Kết quả kiểm thử và đánh giá hiệu năng
+-----------------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ VÀ BENCHMARK HỆ THỐNG |
+-----------------------------------------------------------------------------------+
| - Unit Tests Coverage (Jest/Supertest) : 84.5% Codebase (48/55 Test Suites Passed)|
| - Integration API Tests (Postman CLI) : 100% (32/32 Endpoints Passed) |
| - Tải đồng thời tối đa (Artillery Load) : 350 req/sec (P95 Latency = 185ms) |
| - Điểm Google Lighthouse Web Vitals : Performance: 91 | Accessibility: 95 |
| Best Practices: 92 | SEO: 96 |
| - Tỷ lệ sửa lỗi (Bug Resolution Rate) : 95.7% (45/47 bugs đóng trước nghiệm thu)|
+-----------------------------------------------------------------------------------+
Đánh giá đáp ứng mục tiêu đồ án
| Hạng mục chức năng |
Trạng thái kế hoạch |
Hiện thực thực tế |
Đánh giá hoàn thành |
| Tìm kiếm, lọc phòng theo tiêu chí |
Bắt buộc |
Hoàn thành với 5 tiêu chí lọc linh hoạt |
100% |
| Xác thực phân quyền (4 Roles) |
Bắt buộc |
Đăng ký, đăng nhập JWT, phân quyền Admin |
100% |
| Quản trị tin đăng (CRUD + Upload) |
Bắt buộc |
Tích hợp thư viện xử lý ảnh + Mongoose |
100% |
| Đặt phòng & Quy trình đặt cọc 50% |
Bắt buộc |
Đồng bộ trạng thái Booking + Transaction |
100% |
| Hệ thống hóa đơn & Hợp đồng thuê |
Mở rộng |
Quản lý hóa đơn Invoices + Hợp đồng |
100% |
| Dashboard thống kê cho Quản trị viên |
Mở rộng |
Thống kê số lượng bài, top chủ trọ |
95% |
Đổi mới và đóng góp
- Cơ chế quản lý vòng đời phòng trọ 3 trạng thái: Khác với các trang rao vặt thông thường chỉ có chức năng đăng tin tĩnh, hệ thống thiết lập máy trạng thái (State Machine) rõ ràng:
Còn trống $\rightarrow$ Đang đặt (khi khách gửi yêu cầu cọc) $\rightarrow$ Đã thuê (khi chủ trọ duyệt hợp đồng) hoặc tự động hoàn về Còn trống nếu hủy yêu cầu, giúp loại bỏ 100% tình trạng "tin ảo trên phòng đã cho thuê".
- Mô hình thuê kép linh hoạt (Dual-Package Rental): Hỗ trợ cấu hình song song hai gói thuê ngắn hạn (theo ngày/tuần) và dài hạn (theo tháng/năm) trong cùng một bản ghi dữ liệu, mở rộng phân khúc khách hàng từ sinh viên đến khách du lịch, công tác tại Đà Nẵng.
- Phân tách trách nhiệm dữ liệu chặt chẽ: Sử dụng kiến trúc dữ liệu NoSQL tối ưu hóa với việc liên kết khóa ngoại thông qua
ObjectId và cơ chế populate của Mongoose, giảm 40% dung lượng dư thừa so với việc nhúng lồng toàn bộ dữ liệu phức tạp.
- Cắt giảm chi phí trung gian: Loại bỏ hoàn toàn phí môi giới cho sinh viên và giảm hơn 60% thời gian tìm được phòng trọ ưng ý so với phương pháp khảo sát thực tế truyền thống.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế (Use-case Scenarios)
- Kịch bản 1 (Tân sinh viên nhập học): Một sinh viên Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng truy cập website, lọc phòng tại quận Liên Chiểu, mức giá dưới 2.000.000 VNĐ, có sẵn điều hòa và wifi. Sinh viên xem chi tiết phòng, hình ảnh thực tế, đánh giá từ khách trước và nhấn Đặt phòng với mức cọc 50% thông qua hướng dẫn trên hệ thống.
- Kịch bản 2 (Chủ nhà trọ quản lý cơ sở): Một chủ nhà trọ tại đường Ngô Sĩ Liên sở hữu dãy 10 phòng trọ. Sau khi đăng nhập, chủ trọ đăng bài kèm hình ảnh giấy tờ xác minh, theo dõi danh sách khách đặt chỗ, thực hiện xác nhận duyệt phòng và in hợp đồng cho thuê trực tiếp từ giao diện phần mềm.
+-----------------------------------------------------------------------------------+
| MÔ HÌNH TRIỂN KHAI HỆ THỐNG (DEPLOYMENT) |
+-----------------------------------------------------------------------------------+
| [CLIENT SPA] --> NGINX Reverse Proxy (Static Build, Port 80/443 SSL) |
| [NODE.JS BACKEND] --> PM2 Process Manager (Cluster Mode, 4 Workers, Port 5000) |
| [DATABASE CLOUD] --> MongoDB Atlas Cluster (3-Node Replica Set, Auto-backup) |
| [MEDIA STORAGE] --> Cloudinary CDN API (Tối ưu nén WebP và phân phối ảnh) |
+-----------------------------------------------------------------------------------+
Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit Analysis)
- Chi phí hạ tầng: 1 VPS Ubuntu 22.04 LTS (2 vCPU, 4GB RAM) trị giá ~150.000 VNĐ/tháng; MongoDB Atlas Free Tier & Cloudinary Free Tier (đủ phục vụ 5.000 người dùng hàng tháng).
- Hiệu quả kinh tế: Hệ thống có thể vận hành sinh lời thông qua việc thu phí gói đẩy bài VIP cho chủ trọ (50.000 VNĐ/bài/tháng) và phí xác thực tin nhanh, ước tính hòa vốn và đạt lợi nhuận dương sau 4 tháng triển khai thực tế.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Mô hình Single Page Application (SPA): Sử dụng Client-side Rendering thuần bằng ReactJS khiến việc tối ưu SEO cho từng bài đăng phòng trọ cụ thể trên Google Search Console gặp hạn chế so với kiến trúc Server-Side Rendering (SSR).
- Cổng thanh toán: Giai đoạn hiện tại hệ thống mô phỏng việc đặt cọc 50% và xác nhận hóa đơn qua chuyển khoản/MoMo trung gian nội bộ, chưa tích hợp Webhook thanh toán tự động thời gian thực của các ngân hàng thương mại (NAPAS/VietQR SDK).
- Tính toán khoảng cách địa lý: Chưa tích hợp bản đồ số tương tác trực tiếp (Google Maps API / Mapbox GL) để đo bán kính thực từ phòng trọ đến các trường đại học.
Hướng phát triển trong tương lai
- Chuyển đổi sang Next.js (v14+): Áp dụng React Server Components (RSC) và Server-Side Rendering (SSR) để tối ưu chỉ số Core Web Vitals và đưa thứ hạng SEO từ khóa phòng trọ Đà Nẵng lên Top 1 Google.
- Tích hợp Bản đồ số thông minh (Geospatial Search): Ứng dụng chỉ mục
$nearSphere và tọa độ Geospatial GeoJSON trong MongoDB để người dùng có thể kéo thả bán kính tìm trọ quanh trường đại học trong phạm vi 1km - 3km.
- Phát triển Ứng dụng di động (Mobile App): Xây dựng ứng dụng đa nền tảng bằng React Native tái sử dụng 70% logic từ Backend Node.js hiện có, bổ sung tính năng Push Notification nhắc lịch thanh toán tiền trọ hàng tháng.
Đối tượng hưởng lợi
+-----------------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+-----------------------------------------------------------------------------------+
| SINH VIÊN & NGƯỜI THUÊ |
| - Tiếp cận 100% nguồn tin trọ xác thực, minh bạch giá cả |
| - Tiết kiệm 100% phí môi giới trung gian, giảm 65% thời gian tìm trọ |
+-----------------------------------------------------------------------------------+
| CHỦ NHÀ TRỌ TẠI ĐÀ NẴNG |
| - Tiếp cận trực tiếp hàng nghìn người thuê mỗi tháng mà không qua môi giới |
| - Số hóa quy trình quản lý bài đăng, trạng thái phòng và lịch sử hợp đồng |
+-----------------------------------------------------------------------------------+
| LẬP TRÌNH VIÊN & SINH VIÊN CNTT |
| - Cung cấp mã nguồn tham khảo chuẩn mực về kiến trúc MERN Stack |
| - Tài liệu hoàn chỉnh về phân tích thiết kế hệ thống theo chuẩn UML/RUP |
+-----------------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?
Hệ thống yêu cầu tối thiểu môi trường máy chủ chạy hệ điều hành Linux (Ubuntu 20.04/22.04 LTS), 1 Core CPU, 1GB RAM và 10GB dung lượng ổ cứng để chạy Node.js runtime v18+ và Web server Nginx. Cơ sở dữ liệu có thể đặt trực tiếp trên máy chủ hoặc sử dụng cụm phân tán MongoDB Atlas.
2. Hệ thống xử lý thế nào khi có nhiều người cùng đặt một phòng trọ?
Hệ thống sử dụng cơ chế MongoDB Multi-Document ACID Transactions kết hợp cập nhật trường điều kiện nguyên tử (atomic update). Ngay khi một giao dịch gửi yêu cầu cọc thành công, trạng thái memberStatus của phòng lập tức chuyển thành Đang đặt, ngăn chặn toàn bộ các request đặt phòng tiếp theo phát sinh đối với phòng đó.
3. Trang web có thể tích hợp với các hệ thống thanh toán tự động không?
Có. Kiến trúc Backend của hệ thống được module hóa theo chuẩn RESTful API, cho phép dễ dàng mở rộng thêm controller và route mới để tích hợp các SDK thanh toán trực tuyến như MoMo Payment Gateway, VNPay, ZaloPay hoặc cổng thanh toán tự động qua VietQR PayOS Webhook.
4. Chi phí vận hành và bảo trì hàng tháng của dự án là bao nhiêu?
Trong giai đoạn đầu với quy mô dưới 10.000 lượt truy cập/tháng, chi phí vận hành chỉ rơi vào khoảng 150.000 – 300.000 VNĐ/tháng cho tiền thuê Cloud VPS. Khi lượng truy cập tăng trưởng, hệ thống có thể mở rộng tài nguyên theo chiều ngang mà không cần tái cấu trúc mã nguồn.
5. Làm thế nào để đảm bảo tính an toàn dữ liệu mật khẩu người dùng?
Mật khẩu người dùng được băm một chiều bằng thuật toán bcryptjs với 10 salt rounds trước khi lưu vào collection users. Phía API sử dụng cơ chế xác thực không trạng thái (Stateless Authentication) qua JSON Web Token (JWT) được ký bảo mật với secret key mã hóa cao, đảm bảo không thể giải mã ngược dữ liệu nhạy cảm.
Kết luận
Đồ án tốt nghiệp "Xây dựng Website Thuê Phòng Trọ tại Đà Nẵng" của sinh viên Lê Huỳnh Bảo (Khoa Công nghệ số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) đã giải quyết triệt để bài toán kết nối cung - cầu nhà trọ trong kỷ nguyên chuyển đổi số. Bằng việc ứng dụng thành công ngăn xếp công nghệ hiện đại Node.js, Express.js, React.js và MongoDB, đề tài đã xây dựng hoàn chỉnh một nền tảng web ứng dụng có hiệu năng cao, độ trễ thấp, giao diện trực quan và bảo mật vững chắc.
Dự án không chỉ đạt được toàn bộ các mục tiêu nghiên cứu và thực nghiệm đề ra trong đề cương khóa luận, mà còn mở ra tiềm năng thương mại hóa thực tế rộng lớn tại khu vực miền Trung. Đây là nguồn tài liệu học thuật và kỹ thuật thực chứng giá trị cho sinh viên, kỹ sư phần mềm tham khảo khi phát triển các hệ thống thương mại điện tử và dịch vụ số phục vụ cộng đồng.