# REST API

> Nagykereskedelmi szerepkörök, termékek, variációk, kategória- és általános kedvezmények kezelése REST API-n, azonosítással és példa kérésekkel.

A bővítmény REST API-t kínál a nagykereskedelmi szerepkörök, termékek, variációk, kategória szintű és általános kedvezmények létrehozására, lekérdezésére, módosítására és törlésére. A végpontok a `/wp-json/wholesale/v1/` alatt érhetők el. A példákban Postmant használunk, de bármilyen HTTP-kliens megfelel.

## Azonosítás

Az API hitelesítést igényel. Hitelesítés nélkül az API-hívások hibát adnak. Alkalmazásjelszóval azonosíthatod magad:

1. Nyisd meg a **Felhasználók** oldalt, és szerkeszd azt a felhasználót, akinek API-hozzáférést adsz.
2. A felhasználó szerkesztőoldalán írd be az alkalmazásjelszó nevét, és kattints az **Új alkalmazásjelszó hozzáadása** gombra.
3. Egy egyedi jelszó generálódik. Másold ki.
4. A Postmanben az **Authorization** fülön az **Auth Type** értéke legyen **Basic Auth**, és add meg a felhasználónevet és az alkalmazásjelszót.
5. A **Send** gombbal próbáld ki a hitelesítést.

## Szerepkörök (Roles)

| Metódus | Végpont | Feladat |
|---|---|---|
| GET | `wholesale/v1/roles` | Az összes nagykereskedelmi szerepkör lekérése. |
| GET | `wholesale/v1/roles/{role_key}` | Egy szerepkör lekérése (például `default_wholesaler`). |
| POST | `wholesale/v1/roles` | Új szerepkör létrehozása. |
| PUT | `wholesale/v1/roles/{role_key}` | Szerepkör módosítása. |
| DELETE | `wholesale/v1/roles/{role_key}` | Szerepkör törlése. |

Szerepkör létrehozásának és módosításának törzse:

```json
{
  "wholesale_role": {
    "name": "Sample Wholesale Role",
    "slug": "sample_role",
    "term_group": 0,
    "description": "Minta nagykereskedelmi szerepkör",
    "parent": 0,
    "count": 0,
    "filter": "raw"
  }
}
```

Sikeres kérésre `200 OK` a válasz. Ha a szerepkör már létezik, vagy hiányzik egy kötelező mező, `400 Bad Request` érkezik. Érvénytelen szerepkörnévvel történő törléskor is `400 Bad Request` a válasz.

## Termékek (Products)

| Metódus | Végpont | Feladat |
|---|---|---|
| GET | `wholesale/v1/products` | Az összes nagykereskedelmi termék. A `?wholesale_role=default_wholesaler` paraméterrel egy szerepkörre szűrhetsz. |
| GET | `wholesale/v1/products/{product_id}` | Egy termék (a `wholesale_role` paraméterrel a szerepkör szerinti adatokkal). |
| POST | `wholesale/v1/products` | Új termék létrehozása. |
| PUT | `wholesale/v1/products/{product_id}` | Termék módosítása. |
| DELETE | `wholesale/v1/products/{product_id}` | Termék törlése. |
| POST | `wholesale/v1/products/batch?wholesale_role=default_wholesaler` | Tömeges létrehozás, módosítás és törlés. |

Termék létrehozásának és módosításának törzse (a `wholesale_price` szerepkörönként tartalmazza az árat, a kedvezmény típusát és a minimális mennyiséget):

```json
{
  "name": "Sample Product",
  "type": "simple",
  "regular_price": "250",
  "wholesale_price": {
    "default_wholesaler": {
      "wholesale_price": "33",
      "discount_type": "percent",
      "min_qty": "15"
    },
    "wholesaler_b": {
      "wholesale_price": "88",
      "discount_type": "fixed",
      "min_qty": "20"
    }
  }
}
```

Hibák: érvénytelen terméktípusnál vagy termékazonosítónál `400 Bad Request`, törlésnél érvénytelen azonosítóra `404 Not Found`.

A tömeges kérés törzse három listát tartalmazhat:

```json
{
  "create": [
    {
      "name": "Új minta termék",
      "type": "simple",
      "regular_price": "22",
      "wholesale_price": {
        "default_wholesaler": { "wholesale_price": "70", "discount_type": "percent", "min_qty": "10" }
      }
    }
  ],
  "update": [
    {
      "id": 728,
      "name": "Módosított termék",
      "regular_price": "500",
      "wholesale_price": { "wholesale_price": "75", "role": "default_wholesaler", "discount_type": "percent", "min_qty": "1" }
    }
  ],
  "delete": [761, 762, 763]
}
```

## Variációk (Variations)

| Metódus | Végpont | Feladat |
|---|---|---|
| GET | `wholesale/v1/products/{product_id}/variations?wholesale_role=default_wholesaler` | A termék variációinak lekérése. |
| GET | `wholesale/v1/products/{product_id}/variations/{variation_id}?wholesale_role=default_wholesaler` | Egy variáció lekérése. |
| POST | `wholesale/v1/products/{product_id}/variations?wholesale_role=default_wholesaler` | Variáció létrehozása. |
| PUT | `wholesale/v1/products/{product_id}/variations/{variation_id}?wholesale_role=default_wholesaler` | Variáció módosítása. |
| DELETE | `wholesale/v1/products/{product_id}/variations/{variation_id}?wholesale_role=default_wholesaler` | Variáció törlése. |
| POST | `wholesale/v1/products/{product_id}/variations/batch` | Tömeges művelet variációkra. |

Variáció létrehozásának törzse:

```json
{
  "regular_price": "12.00",
  "attributes": [
    { "id": 1, "name": "Color", "option": "Red" }
  ],
  "wholesale_price": {
    "default_wholesaler": { "wholesale_price": "33", "discount_type": "percent", "min_qty": "15" }
  }
}
```

Sikeres létrehozásra `201 Created` a válasz. Érvénytelen termék- vagy variációazonosítónál `404 Not Found` (variáció lekérésekor) vagy `403 Forbidden` (létrehozáskor és módosításkor) érkezik.

## Kategória szintű kedvezmények (Category Discounts)

| Metódus | Végpont | Feladat |
|---|---|---|
| GET | `wholesale/v1/category-discount` | Az összes kategória szintű kedvezmény. |
| GET | `wholesale/v1/category-discount/{category-discount_id}` | Egy kedvezmény lekérése. |
| POST | `wholesale/v1/category-discount` | Kedvezmény létrehozása. |
| PUT | `wholesale/v1/category-discount/{category-discount_id}` | Kedvezmény módosítása. |
| DELETE | `wholesale/v1/category-discount/{category-discount_id}` | Kedvezmény törlése. |

A létrehozás és módosítás törzse:

```json
{
  "update_category": {
    "name": "Update Sample Category",
    "slug": "update-category-discount",
    "term_group": 0,
    "description": "Minta kategória kedvezmény",
    "parent": 0,
    "count": 0
  },
  "wholesale_price": {
    "wholesale_price": "100",
    "role": "wholesaler_b",
    "discount_type": "fixed",
    "min_qty": "5"
  }
}
```

## Általános kedvezmények (General Discounts)

| Metódus | Végpont | Feladat |
|---|---|---|
| GET | `wholesale/v1/general-discount` | Az összes szerepkör általános kedvezménye. |
| GET | `wholesale/v1/general-discount/{general-discount_id}` | Egy szerepkör általános kedvezménye. |
| POST | `wholesale/v1/general-discount` | Általános kedvezmény létrehozása egy szerepkörre. |
| PUT | `wholesale/v1/general-discount/{general-discount_id}` | Általános kedvezmény módosítása. |
| DELETE | `wholesale/v1/general-discount/{general-discount_id}` | Általános kedvezmény törlése. |

A törzs szerkezete ugyanaz, mint a kategória szintű kedvezményé (a módosításnál az `update_general` kulcs alatt a megnevezés és a leírás, mellette a `wholesale_price` blokk).

## Csomag- és összetett termékek (Bundle és Composite)

Ha a WooCommerce Product Bundles vagy a Composite Products be van kapcsolva, a termékek végponton (`wholesale/v1/products?wholesale_role=default_wholesaler`) és a tömeges végponton csomag (`bundle`) és összetett (`composite`) termék is létrehozható, módosítható és törölhető.

Csomagtermék létrehozásának törzse:

```json
{
  "name": "Happy Ninja",
  "type": "bundle",
  "regular_price": "53.0",
  "sale_price": "37.0",
  "bundle_layout": "default",
  "bundled_items": [
    {
      "product_id": 470,
      "quantity_min": 1,
      "quantity_max": 1,
      "priced_individually": false,
      "shipped_individually": false,
      "optional": false,
      "override_title": true,
      "title": "Happy Ninja T-Shirt"
    }
  ],
  "wholesale_price": {
    "wholesale_price": "50",
    "role": "default_wholesaler",
    "discount_type": "percent",
    "min_qty": "1"
  }
}
```

Összetett termék létrehozásához a `type` értéke `composite`, és megadható a `composite_layout` (például `single`). A sikeres létrehozás `201 Created` választ ad. A tömeges végponton ugyanúgy használhatók a `create`, `update` és `delete` listák, és vegyesen tartalmazhatnak egyszerű, csomag és összetett termékeket is.
