> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wethehivers.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload de CV et de fichiers

> Comment uploader CV, photo de profil et logo d'entreprise

# Upload de fichiers

Les fichiers (CV, photo, logo) sont stockés sur **Cloudflare R2** (compatible S3) en production. Côté dev, MinIO local est utilisé.

## Types de fichiers supportés

| Type                     | Formats        | Taille max | Bucket    |
| ------------------------ | -------------- | ---------- | --------- |
| CV                       | PDF, DOCX      | 5 Mo       | `private` |
| Photo profil             | JPG, PNG, WEBP | 2 Mo       | `public`  |
| Logo entreprise          | JPG, PNG, SVG  | 2 Mo       | `public`  |
| Document KYC (recruteur) | PDF, JPG, PNG  | 5 Mo       | `private` |

Taille globale maximale par requête : **10 Mo**.

## Upload d'un CV (candidat)

```bash theme={null}
curl -X POST https://api.wethehivers.com/v1/api/candidats/me/cv \
  -H "Authorization: Bearer <token-candidat>" \
  -F "file=@cv.pdf"
```

Réponse :

```json theme={null}
{
  "cvId": 17,
  "fileName": "cv.pdf",
  "fileSize": 324512,
  "uploadedAt": "2026-04-18T14:30:00Z",
  "downloadUrl": "https://api.wethehivers.com/v1/api/files/cv/17"
}
```

<Info>
  Le CV est stocké dans le bucket privé. L'URL de téléchargement est signée et expire après 15 minutes. Elle est régénérée à chaque appel.
</Info>

## Upload d'une photo de profil

```bash theme={null}
curl -X POST https://api.wethehivers.com/v1/api/candidats/me/photo \
  -H "Authorization: Bearer <token-candidat>" \
  -F "file=@photo.jpg"
```

La photo est redimensionnée côté serveur en 3 tailles (64px, 256px, 1024px) et servie depuis le CDN Cloudflare.

## Upload d'un logo d'entreprise

Réservé au recruteur rattaché à l'entreprise :

```bash theme={null}
curl -X POST https://api.wethehivers.com/v1/api/entreprises/me/logo \
  -H "Authorization: Bearer <token-recruteur>" \
  -F "file=@logo.png"
```

## Téléchargement

Pour les fichiers privés (CV, KYC), l'API renvoie une URL pré-signée valable 15 minutes :

```bash theme={null}
curl https://api.wethehivers.com/v1/api/files/cv/17 \
  -H "Authorization: Bearer <token>"
```

```json theme={null}
{
  "url": "https://storage.wethehivers.com/private/cv/17.pdf?X-Signature=...",
  "expiresAt": "2026-04-18T14:45:00Z"
}
```

## Erreurs fréquentes

| Code | Message                          | Cause                                    |
| ---- | -------------------------------- | ---------------------------------------- |
| 400  | "Format de fichier non supporté" | Extension non autorisée                  |
| 413  | "Fichier trop volumineux"        | Dépassement de la taille max             |
| 422  | "Fichier corrompu ou illisible"  | Échec de la validation (PDF cassé, etc.) |

<Warning>
  Tout fichier est scanné à l'upload (virus, contenu). Un fichier détecté comme malveillant est supprimé immédiatement et le compte est signalé.
</Warning>
