Trong bối cảnh nhu cầu tìm kiếm việc làm bán thời gian của sinh viên ngày càng tăng, việc xây dựng một nền tảng kết nối hiệu quả giữa nhà tuyển dụng và người lao động trẻ là vô cùng cần thiết. Hệ thống được phát triển dựa trên kiến trúc hiện đại, kết hợp giữa sức mạnh xử lý phía server của Spring Boot và tính linh hoạt của Vue.js cùng UniApp cho giao diện người dùng.
Kiến trúc hệ thống và Công nghệ sử dụng
1. Backend: Framework Spring Boot
Spring Boot được lựa chọn làm nền tảng cốt lõi cho phía server nhờ khả năng tối giản hóa cấu hình thông qua nguyên lý "convention over configuration". Framework này cho phép triển khai nhanh chóng các dịch vụ RESTful API, tích hợp sẵn các máy chủ nhúng như Tomcat, giúp giảm bớt gánh nặng trong việc thiết lập môi trường và vận hành ứng dụng.
2. Frontend: Vue.js và UniApp
Đối với giao diện quản trị Web, Vue.js mang lại trải nghiệm mượt mà nhờ cơ chế Virtual DOM và liên kết dữ liệu hai chiều (two-way data binding). Đối với ứng dụng di động, UniApp được sử dụng để phát triển một lần nhưng có thể biên dịch ra nhiều nền tảng khác nhau như iOS, Android và các loại Mini Program, giúp tối ưu hóa chi phí phát triển.
3. Tầng truy xuất dữ liệu: MyBatis
MyBatis đóng vai trò là cầu nối giữa mã nguồn Java và cơ sở dữ liệu MySQL. Khác với các ORM thuần túy, MyBatis cho phép lập trình viên kiểm soát hoàn toàn các câu lệnh SQL, từ đó tối ưu hóa hiệu suất truy vấn cho các nghiệp vụ phức tạp của hệ thống tuyển dụng.
Triển khai mã nguồn xử lý xác thực
Dưới đây là ví dụ về cách triển khai logic đăng nhập và quản lý mã định danh (Token) trong hệ thống:
// Xử lý đăng nhập và cấp quyền
@RestController
@RequestMapping("/api/auth")
public class AuthenticationController {
@Autowired
private MemberService memberService;
@Autowired
private SecurityTokenService tokenManager;
@PostMapping("/signin")
public ResultResponse processLogin(@RequestBody LoginRequest loginReq) {
// Tìm kiếm thông tin người dùng dựa trên tài khoản
MemberAccount account = memberService.findAccount(loginReq.getUsername());
// Kiểm tra tính hợp lệ của mật khẩu
if (account == null || !account.getSecretKey().equals(loginReq.getPassword())) {
return ResultResponse.error("Tài khoản hoặc mật khẩu không chính xác");
}
// Khởi tạo token truy cập
String accessToken = tokenManager.issueToken(account.getId(), account.getUsername(), account.getRoleType());
return ResultResponse.success().put("token", accessToken);
}
}
// Logic khởi tạo và lưu trữ Token
@Service
public class SecurityTokenServiceImpl implements SecurityTokenService {
@Override
public String issueToken(Long userId, String loginName, String role) {
// Kiểm tra xem token cũ còn hiệu lực không
TokenRecord existingToken = tokenMapper.selectByUserId(userId, role);
String newTokenString = UUID.randomUUID().toString().replace("-", "");
long expiryTime = System.currentTimeMillis() + 3600000; // Hiệu lực 1 giờ
if (existingToken != null) {
existingToken.setAuthToken(newTokenString);
existingToken.setExpiryDate(new Date(expiryTime));
tokenMapper.updateById(existingToken);
} else {
TokenRecord newRecord = new TokenRecord(userId, loginName, newTokenString, new Date(expiryTime), role);
tokenMapper.insert(newRecord);
}
return newTokenString;
}
}
Thiết kế Cơ sở dữ liệu
Cấu trúc cơ sở dữ liệu được thiết kế để đảm bảo tính toàn vẹn và khả năng mở rộng. Dưới đây là các bảng dữ liệu quan trọng:
-- Bảng lưu trữ thông tin sinh viên/người dùng
CREATE TABLE `app_student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`username` varchar(50) NOT NULL COMMENT 'Tên đăng nhập',
`password` varchar(100) NOT NULL COMMENT 'Mật khẩu',
`full_name` varchar(100) NOT NULL COMMENT 'Họ tên',
`gender` varchar(10) DEFAULT NULL COMMENT 'Giới tính',
`phone_number` varchar(20) DEFAULT NULL COMMENT 'Số điện thoại',
`wallet_balance` double DEFAULT '0' COMMENT 'Số dư tài khoản',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng quản lý bài đăng tuyển dụng/diễn đàn
CREATE TABLE `job_forum` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`post_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`subject` varchar(255) DEFAULT NULL COMMENT 'Tiêu đề bài đăng',
`body_content` longtext NOT NULL COMMENT 'Nội dung chi tiết',
`author_id` bigint(20) NOT NULL COMMENT 'Mã người đăng',
`is_pinned` int(1) DEFAULT '0' COMMENT 'Ghim bài',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Kịch bản kiểm thử hệ thống (Test Cases)
Việc kiểm thử đảm bảo các tính năng hoạt động đúng theo đặc tả kỹ thuật, đặc biệt là các chức năng bảo mật và quản lý người dùng.
| Chức năng | Dữ liệu đầu vào | Kết quả mong đợi | Trạng thái |
|---|---|---|---|
| Đăng nhập hệ thống | Đúng User/Pass/Captcha | Truy cập vào trang quản trị | Thành công |
| Đăng nhập hệ thống | Sai mật khẩu | Thông báo lỗi xác thực | Thành công |
| Tạo mới người dùng | Tên đăng nhập đã tồn tại | Cảnh báo tài khoản đã được đăng ký | Thành công |
| Cập nhật hồ sơ | Để trống trường bắt buộc | Yêu cầu hoàn thiện thông tin | Thành công |
Hệ thống không chỉ cung cấp một môi trường tìm việc an toàn cho sinh viên mà còn giúp doanh nghiệp tiếp cận nguồn nhân lực trẻ năng động một cách nhanh chóng thông qua các bộ lọc thông minh và quy trình ứng tuyển trực tuyến.