← Kembali ke Dokumentasi Utama
APP 2

Manajemen Test PD

Panel sentral panitia yang mengorkestrasi seluruh proses penerimaan

📋 Deskripsi & Fungsi

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.

5 Grup Menu

Fitur Utama

  • Autentikasi ADMIN-ONLY: hanya seleksi@test.com (pd_admin). Penguji & admin wawancara ditolak.
  • Ekspor CSV 5 tahap: pendaftaran / seleksi / test-online / wawancara / kelulusan.
  • Pengumuman publik: GET /api/announcement (tanpa token), tombol cetak.

Teknologi

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.

Job Queue & Skala

Panel ini menangani volume besar: ±600rb pendaftar, ±600rb CBT, ±200rb wawancara.

Tier 1Postgres Job Queue — tabel job_queue, worker FOR UPDATE SKIP LOCKED, retry 3×
Tier 2Redis + BullMQ — queue export.csv, invitation.send, announcement.broadcast
Ekspor CSVAsync: stream DB → csv-stringify → MinIO → presigned URL (bukan res.send(csv()))
UndanganMulti-row INSERT + batch email (50/dtk via limiter), bukan N+1 per pelamar
PublishBulk UPDATE via unnest() — 1 query untuk semua peserta
MonitoringGET /admin/queues (bull-board UI)
BackendPORT 5002 (env saat ini)
Frontend5175, proxy /apihttp://localhost:5002
DatabasePostgreSQL "online_test"
.env wajib: DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME, JWT_SECRET, JWT_EXPIRES, PORT, TEST_ONLINE_URL
.env MinIO: MINIO_ENDPOINT, MINIO_PORT, MINIO_USE_SSL, MINIO_ACCESS_KEY, MINIO_SECRET_KEY, MINIO_BUCKET

🛣 Route API

Prefix: /api · Semua butuh Authorization: Bearer kecuali /api/announcement

EndpointFungsi
/api/authLogin (pd_admin_users) & /me.
/api/settingsRegistrasi gelombang (get/update, effectiveOpen).
/api/applicantsDaftar pelamar (+ filter/search/posisi), stats, detail, seleksi (keputusan adm).
/api/schedulesJadwal test & undangan (CRUD, kirim undangan).
/api/test-resultsSchedules, set passing score, participants, set status, publish.
/api/wawancaraOverview, eligible, penguji CRUD, interviews CRUD, criteria, hasil. Penilaian TIDAK di sini.
/api/kelulusanList & update status kelulusan.
/api/export/:tahapEnqueue ekspor CSV async (tahap: pendaftaran|seleksi|test-online|wawancara|kelulusan). Returns jobId.
/api/export/jobs/:id/statusStatus job ekspor + presigned download URL saat selesai.
/api/announcement(PUBLIK) Data pengumuman kelulusan.
/admin/queuesBull-board UI — monitoring queue BullMQ.

🗄 Tabel Database

TabelFungsi
pd_admin_usersAkun panitia.
pd_settingsPengaturan (registration mode/open).
pd_applicantsData pelamar + status lintas tahap.
pd_selectionsKeputusan seleksi administratif.
pd_test_schedulesJadwal test + kolom passing_score.
pd_test_invitationsUndangan test per pelamar.
pd_interview_usersAkun penguji wawancara (CRUD via Kelola Penguji).
pd_interview_criteriaKriteria penilaian wawancara + is_active.
pd_interviewsJadwal wawancara (status, nilai_total, catatan).
pd_interview_scoresSkor per kriteria per wawancara.
job_queuePostgres job queue (type, payload jsonb, state, attempts, run_at). Tier 1 internal.
Membaca test_sessions, tests untuk nilai CBT via shared DB.

🚀 Cara Menjalankan

# Backend (:5002)
cd manajemen_test_pd/backend && npm install && node src/server.js

# Frontend (:5175)
cd manajemen_test_pd/frontend && npm install && npm run dev

# Build produksi
npm run build && npm run preview

👤 Akun Test

EmailPasswordRoleKeterangan
seleksi@test.comadmin123pd_adminPanitia utama, full akses termasuk wawancara
wawancara@test.comadmin123Nonaktif — digabung ke pd_admin
penguji1@test.comadmin123pengujiLogin di test_wawancara
penguji2@test.comadmin123pengujiLogin di test_wawancara

🔗 Catatan Integrasi

  • Alur "lolos CBT → antrian wawancara → nilai wawancara → kelulusan → pengumuman" berjalan otomatis melalui status di pd_applicants.
  • Penjadwalan & penilaian wawancara: jadwal & kelola penguji di Manajemen; penilaian oleh penguji di test_wawancara.
  • Ekspor CSV tersedia untuk semua5 tahap seleksi.