Feature #10960
openImplement async job discovery on the existing Node.js + MongoDB API. Do not rewrite the backend, auth, or job APIs.
Description
Inspected existing architecture (auth, CandidateProfile, Resume, Job, JobMatch, SavedJob)
Added/extended JobSearchRequest + JobMatch (searchRequestId, match fields)
POST /api/v1/job-search returns requestId immediately (PROCESSING)
GET /api/v1/job-search/:requestId status polling
JobSearchWorkflowService → n8n webhook (timeout, retry, secret not exposed)
POST /api/v1/internal/job-search/callback (X-Webhook-Secret)
Job normalize/upsert, source+externalJobId uniqueness, invalid URL skip
PARTIAL when one source fails
GET /api/v1/jobs/recommended (pagination + filters)
Reused existing save/unsave/saved jobs APIs
Tests: 38 passed
Subtasks
Related issues