# API: helyszínek és egyéni mezők

> Helyszínek és a foglalási űrlap egyéni mezőinek létrehozása, módosítása, lekérése és törlése az API-val.

Ez a fejezet a helyszínek és az egyéni mezők végpontjait írja le.

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 |
|---|---|---|
| Helyszín létrehozása | `POST` | `/locations` |
| Helyszín módosítása | `POST` | `/locations/{{helyszin_id}}` |
| Egy helyszín lekérése | `GET` | `/locations/{{helyszin_id}}` |
| Törölhetőség ellenőrzése | `GET` | `/locations/effect/{{helyszin_id}}` |
| Helyszínek listázása | `GET` | `/locations` |
| Helyszín törlése | `POST` | `/locations/delete/{{helyszin_id}}` |
| Egyéni mező létrehozása | `POST` | `/fields` |
| Egyéni mező módosítása | `POST` | `/fields/{{mezo_id}}` |
| Sorrend módosítása | `POST` | `/fields/positions` |
| Egyéni mezők listázása | `GET` | `/fields` |
| Egyéni mező törlése | `POST` | `/fields/delete/{{mezo_id}}` |

## Helyszínek

### Helyszín létrehozása

Csak a `name` (szöveg, a helyszín neve) kötelező.

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `status` | szöveg | `visible`, `hidden` vagy `disabled`. Alapérték: `visible`. |
| `description` | szöveg | Leírás. |
| `address` | szöveg | Cím. |
| `phone` | szöveg | Telefonszám. |
| `latitude` | tizedes szám | Szélességi fok. Alapérték: `40.7484405`. |
| `longitude` | tizedes szám | Hosszúsági fok. Alapérték: `-73.9878531`. |
| `pictureFullPath`, `pictureThumbPath` | szöveg | A kép és a bélyegkép útvonala. |
| `pin` | szöveg | A térképjelölő ikon útvonala. Az alapértelmezett ikonok a bővítmény `/public/img/pins/` mappájában vannak (`orange.png`, `green.png`, `purple.png`, `red.png`). |
| `translations` | szöveg | JSON-ként kódolt fordítás a névhez és a leíráshoz. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/locations' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "status": "visible",
  "name": "Belvárosi stúdió",
  "description": "A személyes időpontok fő helyszíne.",
  "address": "Budapest, Váci utca 1.",
  "phone": "+3612345678",
  "latitude": 47.4925,
  "longitude": 19.0513,
  "pictureFullPath": "",
  "pictureThumbPath": ""
}'
```

### Módosítás, lekérés, törölhetőség, listázás és törlés

- **Módosítás:** a `/locations/{{helyszin_id}}` végpontra csak a változtatni kívánt mezőket küldd (`name`, `status`, `description`, `address`, `phone`, `latitude`, `longitude`, `pictureFullPath`, `pictureThumbPath`, `pin`, `translations`).
- **Lekérés:** a `GET /locations/{{helyszin_id}}` egy helyszín adatait adja vissza.
- **Törölhetőség ellenőrzése:** a `GET /locations/effect/{{helyszin_id}}` megmutatja, van-e a helyszínnek jövőbeli időpontja, amely akadályozná a biztonságos törlést.
- **Listázás:** a `GET /locations` a helyszínek listáját adja. Opcionális paraméterek: `page` (oldalszám), `sort` (`name`, `-name`, `address`, `-address`), `search` (keresőszöveg), `services` (szolgáltatásazonosítók vesszővel elválasztva).
- **Törlés:** a `POST /locations/delete/{{helyszin_id}}` törli a helyszínt, ha ez biztonságosan megtehető.

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

## Egyéni mezők

Az egyéni mezők további kitöltendő mezőket adnak a szolgáltatások és események foglalási űrlapjához. A végpontokkal a mezők sorrendjét és azt is szabályozhatod, mely szolgáltatásoknál és eseményeknél jelennek meg.

### Egyéni mező létrehozása

A `type` kötelező, értéke `text`, `text-area`, `select`, `checkbox`, `radio`, `content`, `file`, `datepicker` vagy `address`.

| Tulajdonság | Típus | Leírás |
|---|---|---|
| `label` | szöveg | A mező címkéje. |
| `options` | tömb | A `select` és `radio` típus választási lehetőségei. |
| `position` | egész | A megjelenítési sorrend. Alapérték: `1`. |
| `required` | logikai | Kötelező-e kitölteni. Alapérték: `false`. |
| `services` | tömb | Azok a szolgáltatások, amelyeknél a mező megjelenik. |
| `events` | tömb | Azok az események, amelyeknél a mező megjelenik. |
| `useAsLocation` | logikai | A mező értéke legyen a naptáresemény helyszíne; csak `address` típusnál. |
| `width` | egész | A mező szélessége a foglalási űrlapon: `50` vagy `100`. |
| `saveType` | szöveg | A mező mentésének típusa: `bookings` vagy `customer`. |
| `saveFirstChoice` | logikai | Az első választási lehetőség mentése. |
| `includeInInvoice` | logikai | Szerepeljen-e a számlán. Alapérték: `false`. |

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/fields' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "label": "Választó mező",
  "options": [],
  "position": 3,
  "required": false,
  "services": [ { "id": 1 } ],
  "events": [ { "id": 120 } ],
  "type": "select",
  "useAsLocation": false
}'
```

### Egyéni mező módosítása

A `/fields/{{mezo_id}}` végpontra csak a változtatni kívánt mezőket küldd. A létrehozásnál felsorolt mezők mellett használható még a `translations` (JSON-ként kódolt címkefordítás), az `allServices` (minden szolgáltatásra érvényes) és az `allEvents` (minden eseményre érvényes) logikai mező.

```bash
curl --location 'https://pelda.hu/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/fields/11' \
--header 'Content-Type: application/json' \
--header 'Amelia: AZ_API_KULCSOD' \
--data '{
  "label": "Választó mező",
  "type": "select",
  "required": false,
  "position": 3,
  "options": [ { "label": "Lehetőség", "position": 1, "new": true } ],
  "services": [ { "id": 1 } ],
  "events": [],
  "allServices": false,
  "allEvents": false,
  "useAsLocation": false
}'
```

### Sorrend, listázás és törlés

- **Sorrend módosítása:** a `POST /fields/positions` kötelező `customFields` tömbje a mezők azonosítóit és új helyüket tartalmazza, például `{ "customFields": [ { "id": 1, "position": 1 }, { "id": 3, "position": 2 } ] }`.
- **Listázás:** a `GET /fields` az összes egyéni mezőt visszaadja.
- **Törlés:** a `POST /fields/delete/{{mezo_id}}` törli az egyéni mezőt.
