# API SAM - Progression

[← Cours](03-courses.md) | [Accueil](README.md) | [Exports →](05-exports.md)

---

Progression détaillée des utilisateurs dans les cours, sections, activités et quiz.

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

---

## Endpoints

| Méthode | Route | Description |
|---------|-------|-------------|
| GET | `/progress/users/{userId}` | Progression globale d'un user |
| GET | `/progress/users/{userId}/courses/{courseId}` | Progression user/cours |
| GET | `/progress/courses/{courseId}` | Progression tous users d'un cours |
| GET | `/progress/courses/{courseId}/sections/{sectionId}` | Progression section |
| GET | `/progress/activities/{activityId}` | Progression activité |
| GET | `/progress/quizzes/{quizId}` | Détail quiz |
| GET | `/progress/quizzes/{quizId}/attempts/{attemptId}` | Détail tentative |

---

## GET /progress/users/{userId}

Progression globale d'un stagiaire (tous ses cours).

**Exemple :**

```bash
curl -X GET "https://votre-domaine.com/api/moodlev5/progress/users/123" \
  -H "X-API-Key: bubul_sk_xxx"
```

**Réponse :**

```json
{
  "success": true,
  "data": {
    "user": {
      "moodle_id": 123,
      "fullname": "Jean Dupont"
    },
    "courses": [
      {
        "moodle_id": 45,
        "name": "Formation Sécurité",
        "progress": 75,
        "completed": false
      }
    ],
    "summary": {
      "total_courses": 3,
      "completed_courses": 1,
      "average_progress": 65
    }
  }
}
```

---

## GET /progress/users/{userId}/courses/{courseId}

Progression détaillée d'un stagiaire dans un cours.

**Exemple :**

```bash
curl -X GET "https://votre-domaine.com/api/moodlev5/progress/users/123/courses/45" \
  -H "X-API-Key: bubul_sk_xxx"
```

**Réponse :**

```json
{
  "success": true,
  "data": {
    "course": {
      "moodle_id": 45,
      "name": "Formation Sécurité"
    },
    "user": {
      "moodle_id": 123,
      "fullname": "Jean Dupont"
    },
    "progress": {
      "percentage": 75,
      "completed_activities": 15,
      "total_activities": 20,
      "time_spent": 7200,
      "time_spent_formatted": "2h 00min",
      "started_at": "2026-01-15T09:00:00+00:00",
      "last_access": "2026-02-10T14:30:00+00:00"
    },
    "sections": [
      {
        "moodle_id": 1,
        "name": "Introduction",
        "position": 1,
        "progress": {
          "percentage": 100,
          "completed_activities": 3,
          "total_activities": 3
        },
        "activities": [
          {
            "moodle_id": 10,
            "name": "Vidéo d'introduction",
            "type": "resource",
            "completed": true,
            "completion_date": "2026-01-15T09:30:00+00:00"
          }
        ]
      }
    ]
  }
}
```

---

## GET /progress/courses/{courseId}

Progression de tous les stagiaires d'un cours.

**Exemple :**

```bash
curl -X GET "https://votre-domaine.com/api/moodlev5/progress/courses/45" \
  -H "X-API-Key: bubul_sk_xxx"
```

**Réponse :**

```json
{
  "success": true,
  "data": {
    "course": {
      "moodle_id": 45,
      "name": "Formation Sécurité"
    },
    "users": [
      {
        "moodle_id": 123,
        "fullname": "Jean Dupont",
        "progress": 75,
        "completed": false,
        "last_access": "2026-02-10T14:30:00+00:00"
      }
    ],
    "summary": {
      "total_users": 25,
      "completed": 10,
      "average_progress": 68
    }
  }
}
```

---

## GET /progress/quizzes/{quizId}

Détails d'un quiz (tentatives, notes).

**Exemple :**

```bash
curl -X GET "https://votre-domaine.com/api/moodlev5/progress/quizzes/11" \
  -H "X-API-Key: bubul_sk_xxx"
```

**Réponse :**

```json
{
  "success": true,
  "data": {
    "quiz": {
      "moodle_id": 11,
      "name": "Quiz d'évaluation",
      "max_grade": 100,
      "pass_grade": 70
    },
    "summary": {
      "total_attempts": 2,
      "best_grade": 85,
      "average_grade": 72.5,
      "passed": true
    },
    "attempts": [
      {
        "id": 1001,
        "attempt_number": 1,
        "grade": 60,
        "passed": false,
        "started_at": "2026-01-15T09:45:00+00:00",
        "finished_at": "2026-01-15T09:55:00+00:00"
      },
      {
        "id": 1002,
        "attempt_number": 2,
        "grade": 85,
        "passed": true,
        "started_at": "2026-01-15T09:58:00+00:00",
        "finished_at": "2026-01-15T10:00:00+00:00"
      }
    ]
  }
}
```

---

## GET /progress/quizzes/{quizId}/attempts/{attemptId}

Détails d'une tentative de quiz.

**Exemple :**

```bash
curl -X GET "https://votre-domaine.com/api/moodlev5/progress/quizzes/11/attempts/1002" \
  -H "X-API-Key: bubul_sk_xxx"
```

**Réponse :**

```json
{
  "success": true,
  "data": {
    "attempt": {
      "id": 1002,
      "attempt_number": 2,
      "state": "finished",
      "grade": 85,
      "max_grade": 100,
      "started_at": "2026-01-15T09:58:00+00:00",
      "finished_at": "2026-01-15T10:00:00+00:00",
      "time_taken": 120,
      "passed": true
    },
    "questions": [
      {
        "id": 501,
        "slot": 1,
        "type": "multichoice",
        "text": "Quel est le premier principe de sécurité ?",
        "max_mark": 10,
        "mark": 10,
        "correct": true,
        "answer": "La confidentialité"
      }
    ]
  }
}
```
