ver. 0.297: REST API products endpoint — list, get, create, update
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
168
docs/API.md
168
docs/API.md
@@ -139,6 +139,173 @@ Opcjonalnie w body: `{"send_email": true}`
|
||||
PUT api.php?endpoint=orders&action=set_unpaid&id={order_id}
|
||||
```
|
||||
|
||||
### Produkty
|
||||
|
||||
#### Lista produktow
|
||||
```
|
||||
GET api.php?endpoint=products&action=list
|
||||
```
|
||||
|
||||
Parametry filtrowania (opcjonalne):
|
||||
| Parametr | Typ | Opis |
|
||||
|----------|-----|------|
|
||||
| `search` | string | Szukaj po nazwie, EAN lub SKU |
|
||||
| `status` | int (0/1) | Filtruj po statusie (1 = aktywny, 0 = nieaktywny) |
|
||||
| `promoted` | int (0/1) | Filtruj po promocji |
|
||||
| `sort` | string | Sortuj po: id, name, price_brutto, status, promoted, quantity (domyslnie id) |
|
||||
| `sort_dir` | string | Kierunek: ASC lub DESC (domyslnie DESC) |
|
||||
| `page` | int | Numer strony (domyslnie 1) |
|
||||
| `per_page` | int | Wynikow na strone (domyslnie 50, max 100) |
|
||||
|
||||
Odpowiedz:
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"data": {
|
||||
"items": [
|
||||
{
|
||||
"id": 1,
|
||||
"sku": "PROD-001",
|
||||
"ean": "5901234123457",
|
||||
"name": "Produkt testowy",
|
||||
"price_brutto": 99.99,
|
||||
"price_brutto_promo": null,
|
||||
"price_netto": 81.29,
|
||||
"price_netto_promo": null,
|
||||
"quantity": 10,
|
||||
"status": 1,
|
||||
"promoted": 0,
|
||||
"vat": 23,
|
||||
"weight": 0.5,
|
||||
"main_image": "product1.jpg",
|
||||
"date_add": "2026-01-15 10:00:00",
|
||||
"date_modify": "2026-02-19 12:00:00"
|
||||
}
|
||||
],
|
||||
"total": 1,
|
||||
"page": 1,
|
||||
"per_page": 50
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Szczegoly produktu
|
||||
```
|
||||
GET api.php?endpoint=products&action=get&id={product_id}
|
||||
```
|
||||
|
||||
Zwraca pelne dane produktu z jezykami, zdjeciami, kategoriami i atrybutami.
|
||||
|
||||
Odpowiedz:
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"sku": "PROD-001",
|
||||
"ean": "5901234123457",
|
||||
"price_brutto": 99.99,
|
||||
"price_brutto_promo": null,
|
||||
"price_netto": 81.29,
|
||||
"price_netto_promo": null,
|
||||
"quantity": 10,
|
||||
"status": 1,
|
||||
"promoted": 0,
|
||||
"vat": 23,
|
||||
"weight": 0.5,
|
||||
"stock_0_buy": 0,
|
||||
"custom_label_0": null,
|
||||
"set_id": null,
|
||||
"product_unit_id": 1,
|
||||
"producer_id": 3,
|
||||
"date_add": "2026-01-15 10:00:00",
|
||||
"date_modify": "2026-02-19 12:00:00",
|
||||
"languages": {
|
||||
"pl": {
|
||||
"name": "Produkt testowy",
|
||||
"short_description": "Krotki opis",
|
||||
"description": "<p>Pelny opis produktu</p>",
|
||||
"meta_description": null,
|
||||
"meta_keywords": null,
|
||||
"meta_title": null,
|
||||
"seo_link": "produkt-testowy",
|
||||
"copy_from": null,
|
||||
"warehouse_message_zero": null,
|
||||
"warehouse_message_nonzero": null,
|
||||
"tab_name_1": null,
|
||||
"tab_description_1": null,
|
||||
"tab_name_2": null,
|
||||
"tab_description_2": null,
|
||||
"canonical": null
|
||||
}
|
||||
},
|
||||
"images": [
|
||||
{"id": 1, "src": "product1.jpg", "alt": "Zdjecie produktu"}
|
||||
],
|
||||
"categories": [1, 5],
|
||||
"attributes": [
|
||||
{"attribute_id": 1, "value_id": 3}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Tworzenie produktu
|
||||
```
|
||||
POST api.php?endpoint=products&action=create
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"price_brutto": 99.99,
|
||||
"vat": 23,
|
||||
"quantity": 10,
|
||||
"status": 1,
|
||||
"sku": "PROD-001",
|
||||
"ean": "5901234123457",
|
||||
"weight": 0.5,
|
||||
"languages": {
|
||||
"pl": {
|
||||
"name": "Nowy produkt",
|
||||
"description": "<p>Opis produktu</p>"
|
||||
}
|
||||
},
|
||||
"categories": [1, 5],
|
||||
"products_related": [10, 20]
|
||||
}
|
||||
```
|
||||
|
||||
Wymagane: `languages` (min. 1 jezyk z `name`) oraz `price_brutto`.
|
||||
|
||||
Odpowiedz (HTTP 201):
|
||||
```json
|
||||
{
|
||||
"status": "ok",
|
||||
"data": {
|
||||
"id": 42
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Aktualizacja produktu
|
||||
```
|
||||
PUT api.php?endpoint=products&action=update&id={product_id}
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"price_brutto": 129.99,
|
||||
"status": 1,
|
||||
"languages": {
|
||||
"pl": {
|
||||
"name": "Zaktualizowana nazwa"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Partial update — wystarczy przeslac tylko zmienione pola. Pola nieprzeslane zachowuja aktualna wartosc.
|
||||
|
||||
Odpowiedz: pelne dane produktu (jak w `get`).
|
||||
|
||||
### Slowniki
|
||||
|
||||
#### Lista statusow zamowien
|
||||
@@ -195,4 +362,5 @@ UPDATE pp_settings SET value = 'twoj-klucz-api' WHERE param = 'api_key';
|
||||
- Router: `\api\ApiRouter` (`autoload/api/ApiRouter.php`)
|
||||
- Kontrolery: `autoload/api/Controllers/`
|
||||
- `OrdersApiController` — zamowienia (5 akcji)
|
||||
- `ProductsApiController` — produkty (4 akcje: list, get, create, update)
|
||||
- `DictionariesApiController` — slowniki (3 akcje)
|
||||
|
||||
@@ -4,6 +4,20 @@ Logi zmian z migracji na Domain-Driven Architecture. Najnowsze na gorze.
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.297 (2026-02-19) - REST API produktów
|
||||
|
||||
- **NEW**: Endpoint `products` w REST API — lista, szczegóły, tworzenie, aktualizacja produktów
|
||||
- **NEW**: `\api\Controllers\ProductsApiController` — 4 akcje (list, get, create, update)
|
||||
- **NEW**: `ProductRepository::listForApi()` — lista produktów z filtrowaniem (search/status/promoted), sortowaniem i paginacją
|
||||
- **NEW**: `ProductRepository::findForApi()` — szczegóły produktu z językami, zdjęciami, kategoriami i atrybutami
|
||||
- **NEW**: Partial update — `update` merguje przesłane pola z istniejącymi danymi produktu
|
||||
- **NEW**: Mapowanie API → format formularza (`mapApiToFormData`) — status/promoted jako checkboxy, languages jako mapy
|
||||
- **UPDATE**: `ApiRouter` — rejestracja endpointu `products`
|
||||
- **UPDATE**: `docs/API.md` — dokumentacja 4 akcji produktowych z przykładami
|
||||
- **Tests**: 21 nowych testów (`ProductsApiControllerTest`)
|
||||
|
||||
---
|
||||
|
||||
## ver. 0.296 (2026-02-19) - REST API zamówień dla ordersPRO
|
||||
|
||||
- **NEW**: REST API do zarządzania zamówieniami — lista, szczegóły, zmiana statusu, oznaczanie płatności
|
||||
|
||||
@@ -82,6 +82,7 @@ REST API dla ordersPRO. Entry point: `api.php`. Stateless (bez sesji), autentyka
|
||||
|
||||
### Kontrolery (`api\Controllers\`)
|
||||
- `OrdersApiController` — lista, szczegoly, zmiana statusu, platnosc (5 akcji)
|
||||
- `ProductsApiController` — lista, szczegoly, tworzenie, aktualizacja produktow (4 akcje)
|
||||
- `DictionariesApiController` — statusy, transporty, metody platnosci (3 akcje)
|
||||
|
||||
Dokumentacja: `docs/API.md`
|
||||
|
||||
@@ -23,10 +23,10 @@ composer test # standard
|
||||
## Aktualny stan
|
||||
|
||||
```text
|
||||
OK (666 tests, 1930 assertions)
|
||||
OK (687 tests, 1971 assertions)
|
||||
```
|
||||
|
||||
Zweryfikowano: 2026-02-19 (ver. 0.296)
|
||||
Zweryfikowano: 2026-02-19 (ver. 0.297)
|
||||
|
||||
## Konfiguracja
|
||||
|
||||
@@ -89,6 +89,7 @@ tests/
|
||||
| |-- ApiRouterTest.php
|
||||
| `-- Controllers/
|
||||
| |-- OrdersApiControllerTest.php
|
||||
| |-- ProductsApiControllerTest.php
|
||||
| `-- DictionariesApiControllerTest.php
|
||||
`-- Integration/ (puste — zarezerwowane)
|
||||
```
|
||||
|
||||
@@ -18,17 +18,16 @@ Aktualizacje znajdują się w folderze `updates/0.XX/` gdzie XX oznacza dziesią
|
||||
|
||||
## Procedura tworzenia nowej aktualizacji
|
||||
|
||||
## Status biezacej aktualizacji (ver. 0.296)
|
||||
## Status biezacej aktualizacji (ver. 0.297)
|
||||
|
||||
- Wersja udostepniona: `0.296` (data: 2026-02-19).
|
||||
- Wersja udostepniona: `0.297` (data: 2026-02-19).
|
||||
- Pliki publikacyjne:
|
||||
- `updates/0.20/ver_0.296.zip`
|
||||
- `updates/0.20/ver_0.296_sql.txt`
|
||||
- `updates/0.20/ver_0.297.zip`
|
||||
- Pliki metadanych aktualizacji:
|
||||
- `updates/changelog.php`
|
||||
- `updates/versions.php` (`$current_ver = 296`)
|
||||
- `updates/versions.php` (`$current_ver = 297`)
|
||||
- Weryfikacja testow przed publikacja:
|
||||
- `OK (666 tests, 1930 assertions)`
|
||||
- `OK (687 tests, 1971 assertions)`
|
||||
|
||||
### 1. Określ numer wersji
|
||||
Sprawdź ostatnią wersję w `updates/` i zwiększ o 1.
|
||||
|
||||
Reference in New Issue
Block a user