# Kurzusok végpontjai

> A GET /courses és a GET /courses/{id} végpont: paraméterek, lapozás, hozzáférés-adatok, valódi válaszokkal.

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

## Kurzuslista: `GET /courses`

Bárki hívhatja. Nem publikált kurzust csak szerkesztési joggal kérhetsz. A lista dátum szerint csökkenő sorrendben jön, és **soha nem iratkoztat fel**.

| Paraméter | Alapérték | Mit jelent |
|---|---|---|
| `per_page` | a **Kurzusok oldalanként** beállítás (10) | 1 és 100 között |
| `page` | 1 | oldalszám |
| `category` | | kurzuskategória slugja |
| `level` | | szint slugja |
| `search` | | keresés |
| `status` | `publish` | `publish`, `private`, `draft` vagy `any`; a nem publikáltakhoz szerkesztési jog kell |

```bash title="Terminál (hitelesítés nélkül)"
curl "https://pelda.hu/wp-json/lms/v1/courses"
```

```json title="Válasz"
{
  "data": [
    {
      "id": 36, "title": "Haladó mázazás", "slug": "halado-mazazas", "status": "publish",
      "excerpt": "", "thumbnail": false, "categories": [], "level": null,
      "duration": "4h", "lesson_count": 0,
      "access": { "type": "paid", "has_access": false }
    },
    {
      "id": 35, "title": "Kerámiakészítés kezdőknek", "slug": "keramiakeszites-kezdoknek", "status": "publish",
      "excerpt": "Hat leckében a korongozás alapjai.", "thumbnail": false, "categories": [], "level": null,
      "duration": "6h", "lesson_count": 3,
      "access": { "type": "free", "has_access": false }
    }
  ],
  "meta": { "total": 2, "pages": 1, "current_page": 1, "per_page": 10 }
}
```

Bejelentkezve az ingyenes kurzusnál `"has_access": true` jön, feliratkozás nélkül. Kiemelt kép nélkül a `thumbnail` értéke `false`. Szűrés például: `?per_page=12&category=<slug>&level=<slug>&search=agyag`.

## Egy kurzus: `GET /courses/{id}`

> **Ingyenes kurzusnál egy GET is feliratkoztat**
>
> Ha **bejelentkezett** felhasználó lekéri egy ingyenes kurzus részleteit (`GET /courses/{id}`) vagy megnyitja egy leckéjét (`GET /lessons/{id}`), a bővítmény **feliratkozást rögzít** „Ingyenes kurzus” forrással, és lefut a `lw_lms_after_grant` akció is. A kurzuslista (`GET /courses`) soha nem iratkoztat fel.
>
> A katalógus-oldalad ezért a listából dolgozzon. A kurzus részletező oldalának megnyitása már beiratkozásnak számít.

A válasz a kurzus adatai mellett a haladási módot, a tartalmat, a szakaszokat a leckéikkel és a szakasz nélküli leckéket adja. Mellékletet csak hozzáféréssel, haladást csak bejelentkezve.

```bash title="Terminál (hitelesítés nélkül, így nem iratkoztat fel)"
curl "https://pelda.hu/wp-json/lms/v1/courses/35"
```

```json title="Válasz"
{
  "id": 35, "title": "Kerámiakészítés kezdőknek", "slug": "keramiakeszites-kezdoknek", "status": "publish",
  "excerpt": "Hat leckében a korongozás alapjai.", "thumbnail": false, "categories": [], "level": null,
  "duration": "6h",
  "access": { "type": "free", "has_access": false },
  "progression": "free",
  "content": "",
  "sections": [],
  "lessons_without_section": [
    { "id": 37, "title": "Az agyag előkészítése", "order": 0, "duration": "45m", "preview": false,
      "accessible": false, "locked_reason": null, "available_at": null, "completed": false },
    { "id": 38, "title": "Korongozás lépésről lépésre", "order": 0, "duration": "45m", "preview": false,
      "accessible": false, "locked_reason": null, "available_at": null, "completed": false },
    { "id": 39, "title": "Szárítás és égetés", "order": 0, "duration": "45m", "preview": false,
      "accessible": false, "locked_reason": null, "available_at": null, "completed": false }
  ],
  "attachments": []
}
```

A lecke-elemek előre jelzik az ütemezést: `accessible`, `locked_reason` és `available_at`. Így a frontend a zárolt leckét a megnyitás előtt is jelölheti.

### Fizetős kurzus vásárlás nélkül

```bash title="Terminál"
curl -u "admin:xxxx xxxx xxxx xxxx xxxx xxxx" "https://pelda.hu/wp-json/lms/v1/courses/36"
```

```json title="Válasz"
{
  "id": 36, "title": "Haladó mázazás", "slug": "halado-mazazas", "status": "publish",
  "excerpt": "", "thumbnail": false, "categories": [], "level": null, "duration": "4h",
  "access": { "type": "paid", "has_access": false, "requires": "purchase",
              "products": [], "subscriptions": [], "subscription_variations": [], "memberships": [] },
  "progression": "free",
  "content": "", "content_raw": "",
  "sections": [], "lessons_without_section": [], "attachments": [],
  "progress": { "completed_lessons": 0, "total_lessons": 0, "percentage": 0 }
}
```

- A `requires: "purchase"` mellett a `products`, `subscriptions`, `subscription_variations` és `memberships` mondja meg, mit kell megvenni. A mintakurzushoz nincs termék kapcsolva, ezért üresek.
- A `content_raw` csak szerkesztési joggal jelenik meg, a `progress` csak bejelentkezve.
- Hozzáféréssel az `access` `expires_at` mezőt is tartalmazhat.

### Szakasz és melléklet

A `sections` egy eleme: `{ "id", "title", "description", "order", "lessons": [ … ] }`, a `lessons` ugyanolyan lecke-elemekkel, mint fent. Egy melléklet: `{ "id", "title", "filename", "mime_type", "size", "download_url" }`.
