beepresent: CLI dan API untuk Portal Kuliah
Scraper portal kuliah yang dibungkus jadi API dan CLI, daftar mata kuliah, tugas, kuis, dan pengiriman kehadiran, dengan cache satu minggu karena datanya memang jarang berubah.
Ringkasan
Proyek ini adalah CLI dan API untuk berinteraksi dengan data mata kuliah, menampilkan daftar mata kuliah, mengambil detail, mengambil tugas dan kuis, serta mengirimkan catatan kehadiran (“present”).
API
| Endpoint | Deskripsi |
|---|---|
GET /courses | Menampilkan semua mata kuliah |
GET /courses/{id} | Mengambil detail mata kuliah |
GET /courses/{course_id}/assignments | Menampilkan daftar tugas untuk sebuah mata kuliah |
GET /courses/{course_id}/quizzes | Menampilkan daftar kuis untuk sebuah mata kuliah |
POST /courses/{course_id}/present/{present_id} | Mengirim kehadiran |
CLI
CLI mencerminkan permukaan API:
bl courses: menampilkan daftar mata kuliahbl courses {id}: menampilkan detail mata kuliahbl present: mengirim kehadiran
Penjadwalan
Pengiriman kehadiran sebaiknya berjalan pada jadwal tetap:
- Senin – Jumat: 19.00 – 20.00
- Sabtu: 09.00, 11.00, 14.00, 16.00
Pertanyaan terbuka: apakah scheduler sebaiknya berada di dalam proyek ini, atau menjadi concern terpisah?
Caching & Invalidasi
Data mata kuliah jarang berubah, jadi caching yang agresif tidak menjadi masalah.
- Entri cache kedaluwarsa setelah satu minggu
- Crawl ulang hanya dilakukan ketika data cache sudah kedaluwarsa
- Invalidasi pada setiap akses dihindari: itu bukan prioritas
Implementasi
Tech Stack
- TypeScript
- Runtime Bun.js
- Cheerio untuk parsing HTML
Struktur Proyek
src/
├── services/
│ ├── getCourses
│ ├── getCourseDetail
│ ├── getPresentationList
│ └── postPresent
├── repository/
│ ├── courses
│ ├── assignments
│ └── quiz
├── utils/
│ └── log
└── config/
└── creds