> ## 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.

# Pagination

> Comment parcourir les listes paginées de l'API

# Pagination

Toutes les routes qui renvoient des listes (offres, candidatures, candidats, etc.) utilisent la pagination **Spring Data** `Page<T>`.

## Paramètres de requête

| Paramètre | Type   | Défaut | Description                                            |
| --------- | ------ | ------ | ------------------------------------------------------ |
| `page`    | int    | `0`    | Numéro de page (commence à 0)                          |
| `size`    | int    | `20`   | Nombre d'éléments par page                             |
| `sort`    | string | —      | Tri au format `champ,direction` (ex: `createdAt,desc`) |

<Info>
  La valeur maximale de `size` est **100**. Au-delà, l'API plafonne silencieusement à 100.
</Info>

## Format de réponse

```json theme={null}
{
  "content": [
    { "id": 1, "titre": "Développeur Java", "..." },
    { "id": 2, "titre": "Data Analyst", "..." }
  ],
  "page": {
    "size": 20,
    "number": 0,
    "totalElements": 143,
    "totalPages": 8
  }
}
```

## Exemple — Offres triées par date

```bash theme={null}
curl "https://api.wethehivers.com/v1/api/offres?page=0&size=10&sort=createdAt,desc" \
  -H "Authorization: Bearer <token>"
```

## Itération complète — JavaScript

```js theme={null}
async function fetchAllOffres() {
  const all = [];
  let page = 0;
  while (true) {
    const res = await fetch(`/api/offres?page=${page}&size=100`, {
      headers: { Authorization: `Bearer ${token}` }
    });
    const { content, page: p } = await res.json();
    all.push(...content);
    if (page >= p.totalPages - 1) break;
    page++;
  }
  return all;
}
```

## Tri multi-champs

Pour trier par plusieurs colonnes, répéter le paramètre `sort` :

```
?sort=featured,desc&sort=createdAt,desc
```
