Skip to main content

Candidat

Un candidat représente une personne physique à la recherche d’un emploi. Lié à un User via user_id.

Schéma

Exemple JSON

{
  "id": 42,
  "userId": 108,
  "firstName": "Jean",
  "lastName": "Ngassa",
  "email": "jean@example.com",
  "phone": "+237690123456",
  "niveauExperience": "INTERMEDIAIRE",
  "anneesExperience": 4,
  "niveauEtude": "MASTER",
  "competences": ["Java", "Spring Boot", "PostgreSQL", "Docker"],
  "langues": ["fr", "en"],
  "cvActif": {
    "id": 17,
    "fileName": "cv-jean-ngassa.pdf",
    "downloadUrl": "/v1/api/files/cv/17"
  },
  "ville": { "id": 101, "nom": "Douala" },
  "profilPublic": true,
  "biographie": "Développeur backend passionné...",
  "linkedinUrl": "https://linkedin.com/in/jeanngassa"
}

Visibilité

Règles

  • Un candidat ne peut postuler à une offre qu’une fois (unicité candidature(offreId, candidatId) sur statuts actifs).
  • Changement d’email = reconfirmation + invalidation refresh tokens.
  • Suppression RGPD = anonymisation (prénom/nom → Anonyme, email → anon-<id>@wethehivers.com).

Endpoints principaux

MéthodePathRôle
POST/v1/api/candidats/registerInscription
GET/v1/api/candidats/profileProfil courant
PUT/v1/api/candidats/profileMettre à jour
POST/v1/api/candidats/me/cvUpload CV
GET/v1/api/candidats/dashboardKPIs candidat
GET/v1/api/admin/candidates/{id}Fiche admin

Complétude du profil

Le score apparaît dans dashboard.profileCompletion. Un profil < 60% est pénalisé dans le ranking de la recherche recruteur.