# Leckék és kvízek végpontjai

> A GET /lessons/{id}, a kvíz beküldése, az ütemezés miatti zárolás, a kvíz-korlát és a mellékletek letöltése.

A példák WordPress-alkalmazásjelszót használnak (`-u "felhasználó:jelszó"`). A `tanulo:…` a tanuló saját fiókja, az `admin:…` egy adminisztrátoré.

## Egy lecke: `GET /lessons/{id}`

Ki nyithatja meg: nyitott kurzus leckéjét bárki; előnézeti leckét bejelentkezett felhasználó; minden mást az, akinek hozzáférése van a kurzushoz. Ingyenes kurzus leckéjének első megnyitása bejelentkezve **feliratkozást rögzít**.

```bash title="Terminál (hozzáférés nélkül)"
curl "https://pelda.hu/wp-json/lms/v1/lessons/37"
```

```json title="Válasz"
{ "code": "forbidden", "message": "Nincs hozzáférésed ehhez a leckéhez.", "data": { "status": 403 } }
```

Hozzáféréssel a válasz alakja:

```json title="Válasz (alak)"
{
  "id": 37, "title": "…", "content": "<p>…</p>",
  "course": { "id": 35, "title": "…" },
  "section": null,
  "order": 0, "duration": "45m",
  "video": { "provider": "youtube", "…": "…", "html": "<iframe …>" },
  "attachments": [],
  "navigation": { "previous": null, "next": { "id": 38, "title": "…" } },
  "quiz": { "pass_percentage": 80, "shuffle_options": false,
            "questions": [ { "id": "q1", "type": "single", "prompt": "…", "options": [ { "id": "a", "text": "…" } ] } ],
            "last_attempt": null }
}
```

- A `video` és a `quiz` értéke `null`, ha a leckén nincs ilyen.
- A `video.html` kész lejátszó-markup. A `video` többi mezője a szolgáltatótól függ.
- A kvízkérdések **a helyes válasz nélkül** jönnek.

## Ütemezés miatti zárolás

Lezárt leckére `403 lesson_locked` jön. A `data.locked_reason` mondja meg, miért:

| `locked_reason` | Üzenet |
|---|---|
| `sequence` | „Végezd el az előző leckét, hogy ez megnyíljon.” |
| `schedule` | „Ez a lecke még nem érhető el.” |

A `data.available_at` ISO-dátum: ekkor nyílik meg a lecke. Egy tanuló zárolásait adminként a `wp lw-lms drip status` parancs mutatja ([WP-CLI](https://hub.hellowp.io/hu/docs/lw-plugins/lw-lms/cli/)).

## Kvíz beküldése: `POST /lessons/{id}/quiz`

Bejelentkezett felhasználó küldheti, ha hozzáfér a leckéhez, és az nincs zárolva.

```bash title="Terminál"
curl -u "tanulo:xxxx xxxx xxxx xxxx xxxx xxxx" -X POST -H "Content-Type: application/json" \
  -d '{"answers":{"q1":"b","q2":true,"q3":"Szabad szöveges válasz"}}' \
  "https://pelda.hu/wp-json/lms/v1/lessons/37/quiz"
```

```json title="Válasz (alak)"
{ "score": 2, "scored_questions": 2, "percentage": 100, "passed": true, "pass_percentage": 80,
  "results": { "q1": { "correct": true }, "q2": { "correct": true }, "q3": { "scored": false } } }
```

- Egyválasztósnál a válasz az opció `id`-ja vagy a 0-tól számolt sorszáma.
- Igaz/hamis kérdésnél JSON `true` vagy `false` kell. A `"true"` szöveg rossz válasznak számít.
- Nyitott kérdésnél szöveg. Nem pontozott; a `results` a mintaválaszt is visszaadhatja `sample` kulcsban.
- A válasz nem árulja el a helyes opciót.

**Korlát:** két beküldés között alapból 15 másodperc, és leckénként napi 20 kísérlet. Fölötte `429 quiz_rate_limited` jön: „Túl sok kvízkitöltés. Várj egy kicsit, mielőtt újra próbálod.” A `data.retry_after` mondja meg, hány másodperc múlva próbálkozhat újra. A korlátok szűrővel állíthatók ([Fejlesztőknek](https://hub.hellowp.io/hu/docs/lw-plugins/lw-lms/fejlesztoknek/)).

## Mellékletek letöltése

A mellékletek `download_url`-je a `GET /download/{id}` végpontra mutat. A link aláírt, és alapból egy óráig érvényes. Lejárt linknél `403 download_link_expired`: „Ez a letöltési link érvénytelen vagy lejárt. Töltsd újra az oldalt egy új linkért.” Ilyenkor kérd le újra a kurzust vagy a leckét.

> **A fájl közvetlenül is elérhető**
>
> A melléklet a médiatárban van, a közvetlen média-URL-jével bárki megnyithatja. Az aláírt link nem teszi védetté.
