Panel sentral panitia yang mengorkestrasi seluruh proses penerimaan
Panel sentral panitia (admin seleksi) yang mengorkestrasi seluruh proses penerimaan. Seluruh keputusan lintas tahap dikelola dari sini, termasuk penjadwalan wawancara & kelola akun penguji. Penilaian wawancara dilakukan di aplikasi test_wawancara (penguji-only). Menu dirancang dalam 5 grup.
seleksi@test.com (pd_admin). Penguji & admin wawancara ditolak.GET /api/announcement (tanpa token), tombol cetak.Backend: Node.js + Express, pg, jsonwebtoken, bcryptjs, multer, minio, cors, dotenv, csv-stringify, pg-query-stream, bullmq, ioredis, @bull-board.
Frontend: React, react-router-dom, axios, Vite, Tailwind CSS (sidebar kiri, 5 grup menu, admin-only).
Lint: oxlint (npm run lint). /api di-proxy http://localhost:5002.
Panel ini menangani volume besar: ±600rb pendaftar, ±600rb CBT, ±200rb wawancara.
| Tier 1 | Postgres Job Queue — tabel job_queue, worker FOR UPDATE SKIP LOCKED, retry 3× |
| Tier 2 | Redis + BullMQ — queue export.csv, invitation.send, announcement.broadcast |
| Ekspor CSV | Async: stream DB → csv-stringify → MinIO → presigned URL (bukan res.send(csv())) |
| Undangan | Multi-row INSERT + batch email (50/dtk via limiter), bukan N+1 per pelamar |
| Publish | Bulk UPDATE via unnest() — 1 query untuk semua peserta |
| Monitoring | GET /admin/queues (bull-board UI) |
| Backend | PORT 5002 (env saat ini) |
| Frontend | 5175, proxy /api → http://localhost:5002 |
| Database | PostgreSQL "online_test" |
DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME, JWT_SECRET, JWT_EXPIRES, PORT, TEST_ONLINE_URLMINIO_ENDPOINT, MINIO_PORT, MINIO_USE_SSL, MINIO_ACCESS_KEY, MINIO_SECRET_KEY, MINIO_BUCKET
Prefix: /api · Semua butuh Authorization: Bearer kecuali /api/announcement
| Endpoint | Fungsi |
|---|---|
| /api/auth | Login (pd_admin_users) & /me. |
| /api/settings | Registrasi gelombang (get/update, effectiveOpen). |
| /api/applicants | Daftar pelamar (+ filter/search/posisi), stats, detail, seleksi (keputusan adm). |
| /api/schedules | Jadwal test & undangan (CRUD, kirim undangan). |
| /api/test-results | Schedules, set passing score, participants, set status, publish. |
| /api/wawancara | Overview, eligible, penguji CRUD, interviews CRUD, criteria, hasil. Penilaian TIDAK di sini. |
| /api/kelulusan | List & update status kelulusan. |
| /api/export/:tahap | Enqueue ekspor CSV async (tahap: pendaftaran|seleksi|test-online|wawancara|kelulusan). Returns jobId. |
| /api/export/jobs/:id/status | Status job ekspor + presigned download URL saat selesai. |
| /api/announcement | (PUBLIK) Data pengumuman kelulusan. |
| /admin/queues | Bull-board UI — monitoring queue BullMQ. |
| Tabel | Fungsi |
|---|---|
| pd_admin_users | Akun panitia. |
| pd_settings | Pengaturan (registration mode/open). |
| pd_applicants | Data pelamar + status lintas tahap. |
| pd_selections | Keputusan seleksi administratif. |
| pd_test_schedules | Jadwal test + kolom passing_score. |
| pd_test_invitations | Undangan test per pelamar. |
| pd_interview_users | Akun penguji wawancara (CRUD via Kelola Penguji). |
| pd_interview_criteria | Kriteria penilaian wawancara + is_active. |
| pd_interviews | Jadwal wawancara (status, nilai_total, catatan). |
| pd_interview_scores | Skor per kriteria per wawancara. |
| job_queue | Postgres job queue (type, payload jsonb, state, attempts, run_at). Tier 1 internal. |
test_sessions, tests untuk nilai CBT via shared DB.| Password | Role | Keterangan | |
|---|---|---|---|
| seleksi@test.com | admin123 | pd_admin | Panitia utama, full akses termasuk wawancara |
| wawancara@test.com | admin123 | — | Nonaktif — digabung ke pd_admin |
| penguji1@test.com | admin123 | penguji | Login di test_wawancara |
| penguji2@test.com | admin123 | penguji | Login di test_wawancara |
pd_applicants.test_wawancara.