# 08 — Submissions (Activités récentes et complétions)

Route pour récupérer les dernières complétions et soumissions d'activités des apprenants de l'entreprise, avec pagination et filtres.

**Base URL :** `/api/moodlev5/submissions`

**Authentification requise :** `X-API-Key` ou session (voir [00-introduction.md](00-introduction.md))

---

## GET `/submissions`

Récupère les dernières complétions/soumissions d'activités pour l'entreprise, avec pagination et filtres.

### Paramètres query string

| Paramètre | Type | Défaut | Description |
|-----------|------|--------|-------------|
| `page` | int | 1 | Numéro de page |
| `limit` | int | 10 | Résultats par page (max 50) |
| `user` | string | - | Filtre sur le nom de l'apprenant (recherche partielle) |
| `type` | string | - | Filtre sur le type d'activité (`quiz`, `assign`, `forum`, `scorm`, `page`, `url`, `h5pactivity`, `resource`) |
| `days` | int | 30 | Limite aux N derniers jours |

### Requête

```bash
# Récupérer les 10 dernières complétions
curl -X GET "https://votre-domaine.com/api/moodlev5/submissions" \
  -H "X-API-Key: bubul_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Filtrer par nom d'apprenant
curl -X GET "https://votre-domaine.com/api/moodlev5/submissions?user=jean" \
  -H "X-API-Key: bubul_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Filtrer par type d'activité
curl -X GET "https://votre-domaine.com/api/moodlev5/submissions?type=quiz" \
  -H "X-API-Key: bubul_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Paginer les résultats
curl -X GET "https://votre-domaine.com/api/moodlev5/submissions?page=2&limit=20" \
  -H "X-API-Key: bubul_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Limiter aux 7 derniers jours
curl -X GET "https://votre-domaine.com/api/moodlev5/submissions?days=7" \
  -H "X-API-Key: bubul_sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
```

### Réponse

```json
{
  "data": [
    {
      "userId": 42,
      "userName": "Jean Dupont",
      "action": "a terminé le quiz",
      "activityName": "Module 1 - Quiz de validation",
      "type": "quiz",
      "completedAt": "2024-02-24T14:30:00+01:00",
      "timeAgo": "2h"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 10,
    "total": 47,
    "totalPages": 5
  }
}
```

### Champs `data[]`

| Champ | Type | Description |
|-------|------|-------------|
| `userId` | int | ID de l'apprenant |
| `userName` | string | Nom complet de l'apprenant |
| `action` | string | Libellé de l'action effectuée |
| `activityName` | string | Nom de l'activité complétée |
| `type` | string | Type d'activité Moodle |
| `completedAt` | string | Date/heure de complétion (ISO 8601) |
| `timeAgo` | string | Temps écoulé depuis la complétion (ex: `2h`, `3j`) |

### Champs `pagination`

| Champ | Type | Description |
|-------|------|-------------|
| `page` | int | Page courante |
| `limit` | int | Nombre de résultats par page |
| `total` | int | Nombre total de résultats |
| `totalPages` | int | Nombre total de pages |

### Actions par type d'activité

| Type | Action affichée |
|------|-----------------|
| `quiz` | "a terminé le quiz" |
| `assign` | "a soumis" |
| `forum` | "a posté dans" |
| `scorm` | "a complété" |
| `h5pactivity` | "a terminé" |
| autres | "a complété" |

### Types d'activités supportés

`quiz`, `assign`, `forum`, `scorm`, `page`, `url`, `h5pactivity`, `resource`, `lesson`, `choice`, `data`, `feedback`, `glossary`, `wiki`, `workshop`, `chat`, `survey`, `questionnaire`, `lti`, `imscp`, `book`, `label`, `folder`, `bigbluebuttonbn`, `zoom`, `attendance`, `certificate`

---

## Codes d'erreur

| Code | Description |
|------|-------------|
| `400` | Aucune entreprise sélectionnée |
| `401` | Clé API manquante ou invalide |
