Lišákův obchod
Lišák Petr se rozhodl, že ho nebaví pořád jen lovit. Když se podíval kolem sebe, zjistil, že v lese je spoustu různých plodů, které by mohl sbírat a prodávat ostatním zvířatům. Tak se rozhodl, že si otevře obchod a různé ovoce, ořechy a zeleninu bude prodávat. Tento systém slouží pro správu produktů v obchodě Foxy Mart.
Tento projekt poskytuje REST API pro správu produktů v obchodě Foxy Mart. API umožňuje:
- Spravovat produkty (upravovat, mazat)
- Sledovat historii cen
- Filtrovat produkty podle názvu a počtu kusů na skladě
API je popsáno OpenAPI specifikací a využívá Nette Framework.
Před spuštěním projektu je nutné mít nainstalované následující nástroje:
- Docker a Docker Compose pro spouštění kontejnerů
- Postman pro testování API (nebo jiný nástroj pro testování REST API)
- Make pro spuštění scriptů
Nejprve si klonuj tento repozitář
Vytvoř a spusť kontejner pro projekt pomocí Docker Compose:
docker-compose up -dmake composer-installmake database-createEndpoint: GET /api/products
Vrací seznam všech produktů v databázi.
-
name (volitelné): Filtrovat produkty podle názvu.
- Typ:
string - Příklad:
"Jablko"
- Typ:
-
stock (volitelné): Filtrovat produkty podle počtu kusů na skladě.
- Typ:
integer - Příklad:
100
- Typ:
Pokud požadavek proběhne úspěšně, vrátí seznam produktů.
[
{
"id": 1,
"name": "Jablko",
"price": 12.49,
"stock": 100,
"priceHistory": [
{
"price": 10.99,
"createdAt": "30.03.2025, 10:00:00"
}
],
"createdAt": "30.03.2025, 10:00:00",
"updatedAt": null
}
]Endpoint: DELETE /api/products/delete/{id}
Umožňuje smazat produkt podle jeho ID.
- id (povinné): ID produktu, který má být smazán.
- Typ:
integer
- Typ:
Pokud produkt neexistuje, vrátí se odpověď 404:
{
"message": "Product not found"
}Pokud je produkt smazán, vrátí se odpověď 200:
{
"message": "Product successfully deleted"
}Endpoint: PUT /api/products/edit/{id}
Umožňuje upravit produkt podle jeho ID. Při změně ceny se automaticky přidá nový záznam do historie cen.
- id (povinné): ID produktu, který má být upraven.
- Typ:
integer
- Typ:
Tělo požadavku:
{
"name": "Nový název produktu",
"price": 15.99,
"stock": 200
}-
name (volitelné): Nový název produktu.
- Typ:
string - Povolené hodnoty: libovolný text.
- Typ:
-
price (volitelné): Nová cena produktu.
- Typ:
number (float)
- Typ:
-
stock (volitelné): Nový počet kusů na skladě.
- Typ:
integer
- Typ:
Odpověď: Pokud požadavek proběhne úspěšně, vrátí se odpověď 200 s informacemi o upraveném produktu.
{
"id": 1,
"name": "Nový název produktu",
"price": 15.99,
"stock": 200,
"priceHistory": [
{
"price": 12.49,
"createdAt": "30.03.2025, 10:00:00"
},
{
"price": 15.99,
"createdAt": "02.04.2025, 14:00:00"
}
],
"createdAt": "30.03.2025, 10:00:00",
"updatedAt": "02.04.2025, 14:00:00"
}Pokud je zadáno neplatné parametry, vrátí se odpověď 400:
{
"message": "Invalid input parameters"
}Pokud produkt neexistuje, vrátí se odpověď 404:
{
"message": "Product not found"
}- Stáhněte OpenAPI specifikaci (soubor
openapi.json) z vašeho projektu. - Otevřete Postman a klikněte na Import v levém horním rohu.
- Zvolte File, vyberte soubor
openapi.jsona klikněte na Open. - Postman automaticky načte všechny definované endpointy a metody API.
- Vyberte GET metodu.
- Zadejte URL endpointu:
http://localhost/api/products. - Klikněte na Send.
- Pokud požadavek probíhá správně, Postman zobrazí seznam všech produktů.
- Vyberte DELETE metodu.
- Zadejte URL endpointu:
http://localhost/api/products/delete/{id}(nahraďte{id}platným ID produktu). - Klikněte na Send.
- Pokud produkt existuje, odpověď bude obsahovat zprávu:
Product successfully deleted. - Pokud produkt neexistuje, odpověď bude obsahovat zprávu:
Product not found.
- Vyberte PUT metodu.
- Zadejte URL endpointu:
http://localhost/api/products/edit/{id}(nahraďte{id}platným ID produktu). - V sekci Body vyberte raw a zvolte JSON.
- Zadejte tělo požadavku:
{
"name": "Nový název produktu",
"price": 15.99,
"stock": 200
}- Klikněte na Send.
- Pokud produkt existuje a parametry jsou platné, Postman vrátí informace o upraveném produktu v odpovědi.
- Pokud zadáte neplatné parametry, Postman zobrazí chybu s odpovědí Invalid input parameters.
- Pokud produkt neexistuje, Postman zobrazí odpověď Product not found.