# Krok 02 - Core Data Services (Úložisko) ## Kontext projektu WebWizard ukladá všetky dáta (používatelia, projekty, súhlasy) do JSON súborov v priečinku `data/`. Je potrebné mať jednotnú službu, ktorá bude tieto operácie bezpečne vykonávať. ## Pred implementáciou si preštuduj - `docs/architecture.md` - Sekcia 4 (Adresárová štruktúra) a 5 (Dátové súbory). - `docs/prompts/step01.md` - Predpokladá sa vytvorená štruktúra. ## Cieľ Implementovať triedu `FileStorage` v PHP, ktorá bude slúžiť ako hlavné rozhranie pre prácu s JSON súbormi v rámci systému. ## Požadované zmeny 1. Vytvorenie triedy `App\Services\FileStorage` v `src/Services/FileStorage.php`. 2. Implementácia metód pre: - `put(string $path, array $data): bool` - Uloží pole ako JSON. - `get(string $path): ?array` - Načíta JSON a vráti pole. - `exists(string $path): bool` - Overí existenciu súboru. - `delete(string $path): bool` - Vymaže súbor. 3. Pridanie ochrany proti "path traversal" (napr. použitie `realpath` alebo sanitizácia cesty, aby sa operácie obmedzili na priečinok `data/`). ## Implementačné pravidlá - Používaj `json_encode` s `JSON_PRETTY_PRINT` pre lepšiu čitateľnosť súborov. - Zabezpeč ošetrenie chýb pri čítaní/zápise (napr. neexistujúci súbor, neplatný JSON). - Trieda musí byť v namespace `App\Services`. ## Súbory ktoré je potrebné vytvoriť - `src/Services/FileStorage.php` ## Súbory ktoré je potrebné upraviť Žiadne. ## API a dátové štruktúry Metódy triedy `FileStorage` pracujú s asociatívnymi poľami PHP. ## Frontend požiadavky Nerelevantné. ## Backend požiadavky - PHP 8.2. - Prístupové práva na zápis do `data/`. ## Testovací scenár 1. Vytvor testovací skript, ktorý vytvorí inštanciu `FileStorage`. 2. Skús uložiť pole `['test' => 123]` do `users/test.json`. 3. Over, či súbor existuje a obsahuje správny JSON. 4. Skús načítať dáta zo súboru. 5. Skús zadať cestu s `../` a over, či služba vyhodí výnimku alebo chybu (path traversal protection). ## Definition of Done - Trieda `FileStorage` je funkčná a otestovaná. - Ukladanie a načítavanie JSON dát funguje bezpečne. - Path traversal ochrana je implementovaná. ## Obmedzenia - Nepoužívaj žiadnu externú DB knižnicu. - Všetky cesty musia byť relatívne k base path projektu alebo striktne v `data/`. ## Výstup - zoznam vytvorených súborov - zoznam upravených súborov - stručné zhrnutie vykonaných zmien - prípadné otvorené problémy