đăng ký học phần tự động cho sinh viên đại học bách khoa hà nội
mặc dù tên project là đăng ký học phần tự động tuy nhiên project này làm được những việc sau:
- hẹn giờ đăng ký lớp tự động trên trang https://dk-sis.hust.edu.vn
- khi đến hẹn giờ hệ thống sẽ tự động thực thi đăng ký trên trang dk-sis
- sinh viên không cần can thiệp trong quá trình đăng ký, sinh viên chỉ cần chờ kết quả
- crawl thời khóa biểu của sinh viên trên trang https://ctt-sis.hust.edu.vn
- crawl chương trình học của sinh viên trên trang https://ctt-sis.hust.edu.vn
project được triển khai dưới dạng nhiều module, được triển khai độc lập
web
: web frontendapi-gateway
: api server xử lý các request từ trình duyệt và xử lý kết quả mà worker trả về thông qua message queue để có các logic xử lý như tự động thử đăng ký lạischeduler
: bộ hẹn giờ liên tục kiểm tra xem đã tới thời điểm hẹn giờ của sinh viên hay chưa, nếu đã đến giờ sẽ gửi yêu cầu này cho worker thông qua message queueworker
: thực thi các yêu cầu đăng ký tự động, sau khi xử lý xong sẽ gửi kết quả vào message queue cho taskamager xử lý-> ĐÃ BỊ LƯỢC BỎ và THAY THẾ BỞI api-gatewaytaskmanager
: xử lý kết quả mà worker trả về để có các logic xử lý như tự động thử đăng ký lại- (optional)
thoi-khoa-bieu-parser
: xử lý file excel thời khóa biểu dự kiến của nhà trường để trích xuất thông tin - (*)
rabbitmq
: message cho job, kết quả xử lý, ... - (*)
mongodb
: database
các module trên sẽ truy cập, trao đổi thông tin thông qua database là MongoDB và message queue là RabbitMQ. Với rabbitmq và mongodb các bạn có thể deploy ở chỗ khác và cập nhật connection string tương ứng trong các thành phần.
chi tiết từng module các bạn hãy click vào module tương ứng
mỗi thư mục con có file .env.example
các bạn copy thành file .env
và điền các thông tin tương ứng với môi trường triển khai của các bạn
một vài biến đặc biệt như
JOB_ENCRYPTION_KEY
: là key dùng để encrypt, decrypt thông tin đăng nhập của các bạn sinh viên, các giá trị này rất quan trọng các bạn cần giữ cẩn thận vì nó là thông tin duy nhất để encrypt và decrypt các thông tin job đăng ký trước đóAMQP_ENCRYPTION_KEY
: là key để encrypt message trong message queue, nếu mất có thể gen lại và sử dụng bình thường, tuy nhiên nếu vẫn có message trong queue được encrypt bằng key trước đó thì sẽ cần drop hết các message trong queue này trước khi cập nhật key mới
các key đó không thể set giá trị tùy ý (hoặc mình ko biết), để generate chuẩn thì các bạn chạy lệnh sau
node -e 'console.log(require("crypto").randomBytes(32).toString("hex"))'
kết quả sẽ có dạng như sau f47dd9f62a7f112daf2e4b77e2f9bbc7ac50c9f56b8ee8d25f9aa58771d5690e
các bạn lấy giá trị này và điền vào trong file .env