API
Setiap route handler di src/app/api/**/route.ts menentukan metode, schema input, dan respons endpoint tersebut.
Endpoint menurut fungsi
| Kebutuhan | Route utama |
|---|---|
| Sesi dan akun | /api/auth/register, /api/auth/login, /api/auth/logout, /api/me, /api/account/profile |
| Discovery | /api/public/targets, /api/public/targets/[slug] |
| Target kandidat | /api/candidate/targets, /api/candidate/targets/active, /api/candidate/targets/[targetId]/switch |
| Karya | /api/candidate/works, /api/candidate/works/[workId], /api/candidate/works/[workId]/reuse |
| File | /api/candidate/works/[workId]/resources/intents, /api/candidate/work-resources/[resourceId]/content |
| Pengajuan dan revisi | /api/candidate/assessment-requests, /api/candidate/assessments/[assessmentId]/revisions |
| Penilai | /api/verifier/assignments, /api/verifier/assignments/[assignmentId], /api/verifier/assessments/[assessmentId] dan subroute complete, request-revision, revoke |
| Proyek singkat | /api/candidate/project-attempts, /api/candidate/project-attempts/[attemptId]/submit |
| Profil skill | /api/candidate/skill-profile-shares, /api/candidate/skill-profile-shares/[shareId], /api/public/skill-profiles/resolve |
| Operasi perusahaan | /api/company/positions, /api/company/action-queue, /api/company/members, /api/company/role |
| Outcome | /api/candidate/outcomes, /api/outcomes/[outcomeId]/confirmations |
Subroute posisi mengelola manifest, kandidat, penugasan, dan keputusan. Gunakan tabel ini sebagai peta, lalu periksa route sebelum membuat konsumen. Tabel ini tidak merinci seluruh payload.
Contoh baca publik
curl 'http://localhost:3000/api/public/targets?q=designer'Respons hanya berisi posisi yang memang boleh dilihat publik. Endpoint publik tidak memberi akses ke draft atau data kandidat.
Saat memanggil command
Ikuti schema Zod pada handler yang dipanggil. Untuk command yang memerlukannya, teruskan cookie sesi, pemeriksaan origin, Idempotency-Key, dan baseVersion. Ambil versi dari respons terbaru, jangan membuat angkanya sendiri. Bentuk respons berbeda antar-endpoint.
Tampilkan kegagalan sebagai kegagalan, jangan membuat UI terlihat berhasil. Buka file privat hanya lewat route yang memeriksa izin. Resolver Profil skill menerima token di body POST dan mengirim status terbaru tanpa cache.