Portal Computer Based Test (CBT) untuk pelamar Pendamping Desa
Portal Computer Based Test (CBT) untuk pelamar Pendamping Desa. Pelamar yang lolos seleksi administratif menerima undangan test (dibuat dari manajemen_test_pd), login di aplikasi ini, mengerjakan soal pilihan ganda (multiple choice), esai, serta mengunggah foto/jawaban esai. Nilai tiap sesi disimpan ke database bersama sehingga pengaturan passing score & publikasi hasil dilakukan oleh aplikasi manajemen_test_pd.
users; password di-hash bcrypt, token JWT).answer_options) dan soal esai.Backend: Node.js + Express, pg, jsonwebtoken, bcryptjs, multer, node-cron, cors, dotenv.
Frontend: React, react-router-dom, axios, Vite, Tailwind CSS.
Lint: oxlint (npm run lint).
| Save Jawaban | POST /save-answers — multi-row INSERT ... ON CONFLICT dalam 1 transaksi (bukan per-soal) |
| Submit | Bulk UPDATE scoring via unnest() — 1 query untuk semua soal PG, bukan loop per baris |
| Auto-submit | Sama dengan submit — bulk scoring untuk sesi kadaluarsa |
| Frontend | Jawaban dikumpulkan di buffer, flush tiap 5 dtk + visibilitychange + sebelum submit |
| Pool | PG_POOL_MAX configurable (default 20) |
Prefix: /api
| Endpoint | Fungsi |
|---|---|
| /api/auth | Registrasi & login pelamar (JWT). |
| /api/registrations | Manajemen pendaftaran sesi/re-registrasi test. |
| /api/sessions | Sesi test: mulai, resume, save-answer (single), save-answers (bulk), submit (bulk scoring), skor. |
| /api/tests | Data test / jadwal yang tersedia bagi user. |
| /api/questions | Daftar soal sesuai test. |
| /api/upload | Unggah berkas (esai / foto). |
| /api/penilai | Hitung/publikasi nilai (dioperasikan panitia). |
| /api/webcam | Capture foto webcam saat test. |
| Tabel | Fungsi |
|---|---|
| users | Akun pelamar (email, password hash, nama, dll). |
| tests | Master test (judul, durasi, jumlah soal). |
| questions | Soal (tipe pilihan ganda / esai, opsi jawaban di child). |
| answer_options | Opsi jawaban tiap soal pilihan ganda. |
| test_sessions | Sesi pengerjaan per user/test (status, total_score, finished_at). |
| user_answers | Jawaban user per soal. |
| essay_scores | Nilai jawaban esai (diisi/penilaian panitia). |
| Password | Keterangan | |
|---|---|---|
| siti.amelia@test.com | Pelamar123 | Pelamar contoh |
pendaftaran_pd / registrations.
manajemen_test_pd (tabel pd_test_invitations → pd_test_schedules) dan dikorelasikan ke test_sessions via test_id + user_id (pelamar diasosiasikan ke akun users dengan pd_applicants.user_id).manajemen_test_pd; hasil tertulis pada test_sessions.total_score dan pd_applicants.status_test_online.