# API: szolgáltatások

> Szolgáltatások létrehozása, módosítása, állapotváltása, sorrendezése, lekérése, törölhetőségének ellenőrzése és törlése az API-val.

A szolgáltatások végpontjaival foglalható szolgáltatásokat hozhatsz létre és kezelhetsz: módosíthatod az adataikat és az állapotukat, átrendezheted őket, ellenőrizheted a törölhetőségüket, és lekérdezheted a listát.

Az API az Elite licenchez tartozik, használatához programozási ismeret kell, a szokásos támogatás nem terjed ki rá. A hitelesítés az **Amelia** fejlécben küldött API-kulccsal történik ([részletek](https://hub.hellowp.io/hu/plugins/ameliabooking/fejlesztoknek-api-attekintes/)). Az alap útvonal: `{{az_oldalad_URL-je}}/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1`.

| Művelet | Metódus | Útvonal |
|---|---|---|
| Szolgáltatás létrehozása | `POST` | `/services` |
| Szolgáltatás módosítása | `POST` | `/services/{{szolgaltatas_id}}` |
| Állapot módosítása | `POST` | `/services/status/{{szolgaltatas_id}}` |
| Sorrend módosítása | `POST` | `/services/positions` |
| Egy szolgáltatás lekérése | `GET` | `/services/{{szolgaltatas_id}}` |
| Törölhetőség ellenőrzése | `GET` | `/services/effect/{{szolgaltatas_id}}` |
| Szolgáltatások listázása | `GET` | `/services` |
| Szolgáltatás törlése | `POST` | `/services/delete/{{szolgaltatas_id}}` |

## Szolgáltatás létrehozása

**Kötelező tulajdonságok**

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `name` | szöveg | A szolgáltatás neve. |
| `categoryId` | egész | A kategória azonosítója. |
| `providers` | tömb | A szolgáltatáshoz rendelt munkavállalók azonosítói. |
| `duration` | egész | Az időtartam másodpercben. |
| `minCapacity` | egész | A legkisebb létszám. |
| `maxCapacity` | egész | A legnagyobb létszám. |
| `price` | tizedes szám | A szolgáltatás ára. |

**Opcionális tulajdonságok**

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `color` | szöveg | Hexadecimális szín, alapérték: `#1788FB`. |
| `description` | szöveg | Leírás. |
| `extras` | tömb | Az extrák. |
| `pictureFullPath`, `pictureThumbPath` | szöveg | A kép és a bélyegkép útvonala. |
| `customPricing` | szöveg | JSON-ként kódolt egyedi árazási szabályok. |
| `timeBefore`, `timeAfter` | egész | A szolgáltatás előtti és utáni puffer másodpercben. |
| `bringingAnyone` | logikai | Hozhat-e a vásárló további személyeket. Alapérték: `false`. |
| `show` | logikai | Megjelenjen-e a foglalási űrlapon. Alapérték: `false`. |
| `gallery` | tömb | A galéria képeinek útvonalai. |
| `aggregatedPrice` | logikai | Az ár szorzódjon-e a létszámmal. Alapérték: `false`. |
| `settings` | szöveg | JSON-ként kódolt szolgáltatásbeállítások; ha `null`, az általános beállítások érvényesek. |
| `recurringCycle` | szöveg | Az ismétlődés típusa: `disabled`, `all`, `daily`, `weekly`, `monthly`. |
| `recurringSub` | szöveg | Javasolt alternatívák: `disabled`, `past`, `future`, `both`. |
| `recurringPayment` | egész | Fizetési szabály ismétlődésnél: `0` csak az első, `999` mind. Alapérték: `0`. |
| `position` | egész | Sorrendbeli hely. |
| `deposit` | tizedes szám | Az előleg összege. Alapérték: `0`. |
| `depositPayment` | szöveg | Az előleg típusa: `disabled`, `fixed`, `percentage`. |
| `depositPerPerson` | logikai | Az előleg szorzódjon-e a létszámmal. Alapérték: `false`. |
| `fullPayment` | logikai | Előleg esetén engedélyezett-e a teljes összeg kifizetése. Alapérték: `false`. |
| `translations` | szöveg | JSON-ként kódolt fordítás a névhez és a leíráshoz. |
| `minSelectedExtras` | egész | A kötelezően választandó extrák legkisebb száma. |
| `mandatoryExtra` | logikai | Kötelező-e extrát választani. Alapérték: `false`. |
| `maxExtraPeople` | egész | A vásárló által hozható további személyek legnagyobb száma. |
| `limitPerCustomer` | szöveg | JSON-ként kódolt szabály a vásárlónkénti időpontok korlátozására. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/services' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "categoryId": 4,
  "color": "#1788FB",
  "description": "Harminc perces első konzultáció új vendégeknek.",
  "duration": 1800,
  "providers": [3],
  "extras": [
    {
      "description": "Mélyápoló kezelés.",
      "duration": 900,
      "maxQuantity": 1,
      "name": "Mélyápolás",
      "position": 1,
      "price": 10,
      "serviceId": 0,
      "translations": null
    }
  ],
  "maxCapacity": 1,
  "minCapacity": 1,
  "name": "Első konzultáció",
  "price": 35,
  "customPricing": "{\"enabled\": false, \"durations\": []}",
  "status": "visible",
  "bringingAnyone": false,
  "show": true,
  "gallery": [],
  "aggregatedPrice": false,
  "recurringCycle": "disabled",
  "recurringSub": "future",
  "recurringPayment": 0,
  "position": 9,
  "deposit": 0,
  "depositPayment": "disabled",
  "depositPerPerson": false,
  "fullPayment": false,
  "mandatoryExtra": false,
  "limitPerCustomer": "{\"enabled\": false, \"numberOfApp\": 1, \"timeFrame\": \"day\", \"period\": 1, \"from\": \"bookingDate\"}"
}'
```

## Szolgáltatás módosítása

A `/services/{{szolgaltatas_id}}` végpontra csak a változtatni kívánt mezőket küldd. Ugyanazok a mezők használhatók, mint a létrehozásnál, mindegyik opcionális. Ha az árat módosítod, és a munkavállalók saját árát is frissíteni akarod, add meg az `applyGlobally` (logikai, alapérték: `false`) mezőt.

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/services/12' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "name": "Első konzultáció plusz",
  "description": "Negyvenöt perces konzultáció hosszabb időt igénylő vendégeknek.",
  "duration": 2700,
  "applyGlobally": false
}'
```

## Állapot módosítása

A `/services/status/{{szolgaltatas_id}}` a szolgáltatás láthatóságát vagy elérhetőségét állítja. A kötelező `status` mező értéke `visible`, `hidden` vagy `disabled`.

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/services/status/12' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{ "status": "visible" }'
```

## Sorrend módosítása

A `/services/positions` a szolgáltatások sorrendjét állítja, a megadott azonosítólista alapján is.

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `sorting` | szöveg | Kötelező. A rendezés típusa: `custom`, `priceAsc`, `priceDesc`, `nameAsc`, `nameDesc`. |
| `services` | tömb | A szolgáltatások azonosítói a kívánt sorrendben; a `custom` rendezésnél használja a rendszer. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/services/positions' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{ "services": [ {"id": 4}, {"id": 12} ], "sorting": "custom" }'
```

## Lekérés, törölhetőség ellenőrzése, listázás és törlés

- **Egy szolgáltatás lekérése:** a `GET /services/{{szolgaltatas_id}}` a teljes adatokat adja vissza az extrákkal és a jövőbeli időpontokra vonatkozó információkkal.
- **Törölhetőség ellenőrzése:** a `GET /services/effect/{{szolgaltatas_id}}` megmutatja, van-e a szolgáltatásnak jövőbeli időpontja, amely akadályozná a biztonságos törlést.
- **Listázás:** a `GET /services` a szolgáltatások listáját adja. Opcionális paraméterek: `page` (oldalszám), `categoryId` (csak az adott kategória szolgáltatásai), `search` (keresőszöveg).
- **Törlés:** a `POST /services/delete/{{szolgaltatas_id}}` törli a szolgáltatást.

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/services&page=1&categoryId=2' \
--header 'Amelia: AZ_API_KULCSOD'
```
