# Krok 03 - API vrstva a Error Handling ## Kontext projektu Frontend komunikuje s backendom výhradne cez jeden endpoint `ajax.php` pomocou POST požiadaviek s JSON payloadom. ## Pred implementáciou si preštuduj - `docs/architecture.md` - Sekcia 9 (AJAX API). ## Cieľ Vytvoriť základný API router `public/ajax.php` a implementovať jednotný systém pre spracovanie chýb a formátovanie odpovedí. ## Požadované zmeny 1. Vytvorenie súboru `public/ajax.php`. 2. Implementácia logiky pre: - Načítanie JSON vstupu z `php://input`. - Overenie prítomnosti hlavičky `X-User-ID`. - Základný router (switch podľa poľa `action`). - Jednotný formát úspešnej odpovede: `{"success": true, "data": {...}}`. - Jednotný formát chybovej odpovede: `{"success": false, "error": {"code": "...", "message": "..."}}`. 3. Globálny `try-catch` blok na zachytávanie výnimiek a ich transformáciu do JSON odpovede. 4. Nastavenie správnych HTTP hlavičiek (`Content-Type: application/json`). ## Implementačné pravidlá - Nepoužívaj frameworky pre routing. - Každá odpoveď musí mať nastavený status kód (typicky 200 pre aplikačné chyby v JSONe, alebo 4xx/5xx pri systémových chybách). - Zabezpeč, aby PHP warningy a errory neboli vypisované priamo do výstupu (použi `display_errors = 0` v produkčnom nastavení a vlastný error handler). ## Súbory ktoré je potrebné vytvoriť - `public/ajax.php` ## Súbory ktoré je potrebné upraviť Žiadne. ## API a dátové štruktúry Vstupné dáta (JSON): ```json { "action": "string", "project_id": "string", "payload": {} } ``` ## Frontend požiadavky Nerelevantné (v tomto kroku len backend). ## Backend požiadavky - PHP 8.2. ## Testovací scenár 1. Pošli POST požiadavku na `ajax.php` s prázdnym telom. Mal by si dostať JSON chybu. 2. Pošli POST požiadavku s neexistujúcou akciou. Mal by si dostať JSON chybu `UNKNOWN_ACTION`. 3. Pošli validnú požiadavku (zatiaľ môžeš implementovať akciu `ping`) a over formát `success: true`. ## Definition of Done - `ajax.php` funguje ako centrálny router. - Odpovede majú jednotnú štruktúru. - Chybové stavy sú ošetrené a vracajú JSON. ## Obmedzenia - Žiadne HTML vo výstupe z `ajax.php`. ## Výstup - zoznam vytvorených súborov - zoznam upravených súborov - stručné zhrnutie vykonaných zmien - prípadné otvorené problémy