UniBridge

Nền tảng kết nối doanh nghiệp với các nhóm sinh viên. Dự án sử dụng Next.js App Router, TypeScript, Tailwind CSS, shadcn/ui, Auth.js và Prisma với SQLite.

Yêu cầu

Cài đặt

npm install
cp .env.example .env

Trước khi chạy seed, hãy đổi SEED_USER_PASSWORD trong .env thành mật khẩu phát triển riêng của bạn.

Cơ sở dữ liệu

npm run db:migrate -- --name init
npm run db:seed

Seed có tính lặp lại an toàn và tạo:

Các tài khoản seed dùng chung mật khẩu được cấu hình qua SEED_USER_PASSWORD; mật khẩu được băm trước khi lưu.

Email đăng nhập mẫu:

Chạy ứng dụng

npm run dev

Mở http://localhost:3000. Đăng ký tài khoản Doanh nghiệp hoặc Sinh viên, hoặc đăng nhập bằng tài khoản seed.

Kiểm thử thủ công

  1. Đặt SEED_USER_PASSWORD trong .env, chạy npm run db:seed; tất cả tài khoản seed dùng cùng mật khẩu này.
  2. Đăng nhập bằng business1@unibridge.local và mật khẩu seed; xác nhận trang /business hiển thị điều hướng Doanh nghiệp.
  3. Đăng xuất, đăng nhập bằng student1@unibridge.local; xác nhận trang /student hiển thị điều hướng Sinh viên.
  4. Đăng xuất, đăng nhập bằng admin@unibridge.local; xác nhận trang /admin hiển thị điều hướng Quản trị viên.
  5. Khi đã đăng xuất, truy cập trực tiếp /business, /student và /admin; mỗi đường dẫn phải chuyển đến /dang-nhap. Sau khi đăng nhập, chuyển hướng về đường dẫn được yêu cầu nếu đúng vai trò.
  6. Đăng nhập với một vai trò rồi thử vào khu vực của vai trò khác; phải được chuyển về dashboard của chính mình.
  7. Tạo lần lượt tài khoản mới với vai trò Doanh nghiệp và Sinh viên; xác nhận mỗi tài khoản vào đúng dashboard. Thử đăng ký lại cùng email và xác nhận có thông báo email đã được sử dụng.
  8. Xác nhận form đăng ký chỉ cho chọn Doanh nghiệp hoặc Sinh viên, không có lựa chọn Admin.
  9. Đăng nhập với admin@unibridge.local, mở /admin/problems và xác nhận bài toán mẫu đang chờ duyệt xuất hiện. Mở chi tiết, kiểm tra đủ thông tin doanh nghiệp và 8 trường bài toán; tải Du-lieu-kiem-duyet.csv.
  10. Thử duyệt khi chưa chọn đủ 6 mục và xác nhận hệ thống từ chối. Chọn đủ 6 mục, bấm “Duyệt”; bài toán phải chuyển sang APPROVED và biến mất khỏi danh sách mặc định.
  11. Đăng nhập với student1@unibridge.local, mở /student/problems và xác nhận bài vừa duyệt xuất hiện; mở chi tiết và tải tài liệu đính kèm.
  12. Gửi một bài toán khác đang chờ duyệt về chỉnh sửa với lý do để xác nhận trường hợp thiếu lý do bị từ chối. Nhập lý do hợp lệ, gửi lại yêu cầu; đăng nhập doanh nghiệp sở hữu bài toán, mở chuông thông báo và xác nhận lý do hiển thị cả trong thông báo lẫn trang chi tiết. Mở thông báo để xác nhận nó được đánh dấu đã đọc.
  13. Thử gửi action kiểm duyệt khi không đăng nhập Admin; máy chủ phải từ chối thao tác.
  14. Đăng nhập student1@unibridge.local, mở /student/team, sửa hồ sơ nhóm và lưu. Kiểm tra thành viên/chuyên ngành, kỹ năng, kinh nghiệm/dự án, sản phẩm, thành tích và lĩnh vực quan tâm được lưu sau khi tải lại trang. Mở /student để kiểm tra “Gợi ý cho nhóm bạn”, lý do gợi ý và thứ tự theo điểm; student2 đến student4 có lịch sử và Reputation khác nhau để so sánh.
  15. Mở /student/problems; thử tìm theo từ khóa và lọc lần lượt lĩnh vực, kỹ năng, thời lượng, khoảng ngân sách. Lưu một bài toán, xác nhận nó xuất hiện ở /student/saved-problems, rồi bỏ lưu và xác nhận nó biến mất. Bài toán mẫu đã lưu ban đầu là “Làm mới nhận diện thương hiệu An Nhiên”.
  16. Mở chi tiết bài toán Xây dựng website bán hàng cho thực phẩm địa phương; kiểm tra form Approach có đủ sáu phần, thời gian và chi phí. Sửa hồ sơ mẫu của NextGen Digital và mở /student/applications để kiểm tra trạng thái. Tạo một tài khoản sinh viên mới, chưa tạo hồ sơ nhóm, thử gửi hồ sơ; thao tác phải bị từ chối ở server.
  17. Đăng nhập business1@unibridge.local, mở bài toán bán hàng và chọn “So sánh nhóm ứng tuyển”. Kiểm tra hồ sơ nhóm, từng thành viên/chuyên ngành, kỹ năng, kinh nghiệm, sản phẩm, thành tích, lĩnh vực quan tâm, các phần Approach, thời gian và chi phí đề xuất. Mở một hồ sơ sinh viên vừa sửa và tải lại trang so sánh để xác nhận doanh nghiệp thấy dữ liệu mới nhất.
  18. Đăng nhập lại student1@unibridge.local, rút hồ sơ NextGen Digital cho bài toán bán hàng. Đăng nhập doanh nghiệp và xác nhận hồ sơ rút không còn trong bảng so sánh; chọn một nhóm còn SUBMITTED. Đăng nhập sinh viên và xác nhận hồ sơ rút vẫn là WITHDRAWN, nhóm được chọn là SELECTED, các hồ sơ SUBMITTED còn lại thành REJECTED, và hồ sơ WITHDRAWN không bị đổi trạng thái.
  19. Gửi một hồ sơ mới cho bài toán APPROVED thứ hai với student1@unibridge.local; đăng nhập doanh nghiệp sở hữu bài toán và xác nhận chuông thông báo có liên kết tới danh sách hồ sơ ứng tuyển.
  20. Trong Prisma Studio, kiểm tra ViewLog sau khi xem chi tiết, SearchLog sau khi tìm/lọc và SavedProblem sau khi lưu bài toán.

Lệnh hữu ích