# Shopify Metafield Definitions Migrátor

Két egyszerű PHP script a Metafield Definitions átviteléhez store-ok között.

---

## Előfeltételek

- PHP 7.4+ (cURL extension engedélyezve)
- Mindkét store-ban **Custom App** vagy saját app, ahol az alábbi scope-ok be vannak kapcsolva:
  - `read_products` (exporthoz)
  - `write_products` (importhoz)

---

## Lépések

### 1. Access Token megszerzése

Mindkét store-ban: **Settings → Apps → Develop apps → Create app**

Szükséges Admin API scope-ok:
- `read_metaobjects` — metafield definitions olvasásához (**kötelező**)
- `write_metaobjects` — metafield definitions létrehozásához (**kötelező**)
- `read_products` — product/variant owner type-ok eléréséhez (**kötelező**)
- `write_products` — variant definíciók importjához (**kötelező**)

Bemásolni: read_metaobjects, write_metaobjects, read_products, write_products

### 2. Export script konfigurálása

Nyisd meg az `1_export_definitions.php` fájlt és töltsd ki:

```php
define('SOURCE_SHOP',         'forras-store.myshopify.com');
define('SOURCE_ACCESS_TOKEN', 'shpat_XXXXXXXXXXXXXXXXXX');
```

Alapértelmezetten `PRODUCT` és `VARIANT` owner type-okat exportál.
Ha mást is akarsz, módosítsd a `$OWNER_TYPES` tömböt:

```php
$OWNER_TYPES = ['PRODUCT', 'VARIANT', 'COLLECTION', 'CUSTOMER'];
```

### 3. Export futtatása

```bash
php 1_export_definitions.php
```

Eredmény: `metafield_definitions_export.json`

### 4. Import script konfigurálása

Nyisd meg a `2_import_definitions.php` fájlt:

```php
define('TARGET_SHOP',         'cel-store.myshopify.com');
define('TARGET_ACCESS_TOKEN', 'shpat_YYYYYYYYYYYYYYYYYY');
```

### 5. Import futtatása

```bash
php 2_import_definitions.php
```

---

## Kimeneti fájlok

| Fájl | Leírás |
|------|--------|
| `metafield_definitions_export.json` | Exportált definíciók |
| `import_errors.json` | Hibás definíciók (csak ha volt hiba) |

---

## Megjegyzések

- A script **nem írja felül** a már létező definíciókat (`SKIP_EXISTING = true`)
- Rate limit elkerülése érdekében 0.5 mp késleltetés van kérések között
- A `pinnedPosition` értéke automatikusan átvitelre kerül
- A `validations` (pl. min/max értékek, regex) szintén átmásolódnak

---

## Lehetséges hibák

| Hiba | Megoldás |
|------|----------|
| `TAKEN` | A definíció már létezik a cél store-ban — normális, kihagyja |
| `HTTP 401` | Rossz access token vagy hiányzó scope |
| `HTTP 429` | Rate limit — növeld a `REQUEST_DELAY` értékét |
| `type not found` | Az adott metafield type nem elérhető a cél store API verziójában |