# Krok 04 - Správa používateľov a projektov (Session) ## Kontext projektu WebWizard potrebuje identifikovať používateľa (pomocou ID uloženého v prehliadači) a priradiť k nemu jeho projekty. MVP nepoužíva klasické prihlasovanie, ale `user_id` generované pri prvej návšteve. ## Pred implementáciou si preštuduj - `docs/architecture.md` - Sekcia 5 (Projekt) a 8 (Identifikácia používateľa). - `docs/wizard.md` - Sekcia 10 (Wizard Data Schema). ## Cieľ Implementovať logiku pre inicializáciu session (vytvorenie `user_id`) a základnú správu projektov (vytvorenie, zoznam). ## Požadované zmeny 1. Implementácia akcie `initSession` v `ajax.php`: - Ak `user_id` chýba, vygeneruj unikátne ID (napr. `u_` + hash). - Vytvor súbor `data/users/.json`. 2. Implementácia akcie `createProject` v `ajax.php`: - Vygeneruj unikátne `project_id`. - Vytvor základnú štruktúru projektu v `data/projects/.json` so stavom `draft`. - Pridaj `project_id` do zoznamu projektov v používateľskom JSONe. 3. Implementácia akcie `listProjects` v `ajax.php`: - Vráti zoznam projektov pre dané `user_id` so základnými metadátami (názov z identity, stav, dátum). 4. Implementácia akcie `getProjectStatus` v `ajax.php`: - Vráti kompletné dáta projektu pre dané `project_id`. ## Implementačné pravidlá - Používaj `FileStorage` službu z Kroku 02. - ID musia byť bezpečne generované. - Overuj, či projekt patrí danému `user_id` pri každej operácii s projektom. ## Súbory ktoré je potrebné vytvoriť - `src/Actions/ProjectActions.php` (odporúčané pre logiku) ## Súbory ktoré je potrebné upraviť - `public/ajax.php` (pridanie nových akcií) ## API a dátové štruktúry Šruktúra projektu (`data/projects/.json`): ```json { "project_id": "...", "user_id": "...", "status": "draft", "current_step": 1, "wizard_data": {}, "created_at": "...", "updated_at": "..." } ``` ## Frontend požiadavky Nerelevantné (implementácia backend logic). ## Backend požiadavky - PHP 8.2. ## Testovací scenár 1. Zavolaj `initSession` bez `X-User-ID`. Dostaneš nové ID. 2. Zavolaj `createProject` s novým ID. Dostaneš `project_id`. 3. Over, či vznikli súbory v `data/users/` a `data/projects/`. 4. Zavolaj `listProjects` a over, či obsahuje vytvorený projekt. ## Definition of Done - Používateľské relácie a projekty sú perzistentne uložené v JSON súboroch. - API akcie pre správu projektov sú funkčné. ## Obmedzenia - Nepoužívaj PHP natívne sessions (`session_start()`), identifikácia je čiste cez `user_id` v hlavičke a perzistenciu v súboroch. ## Výstup - zoznam vytvorených súborov - zoznam upravených súborov - stručné zhrnutie vykonaných zmien - prípadné otvorené problémy