# Krok 12 - Generovanie fronty úloh (AI Queue) ## Kontext projektu Po dokončení wizardu sa spustí proces generovania obsahu pomocou AI. Tento proces je asynchrónny a prebieha cez frontu úloh v `data/llm/`. ## Pred implementáciou si preštuduj - `docs/architecture.md` - Sekcia 10 (AI workflow). - `docs/prompts/step04.md` - Správa projektov. ## Cieľ Implementovať API akciu `generateWebsite`, ktorá vytvorí AI úlohu a prepne stav projektu. ## Požadované zmeny 1. Na backende (`ajax.php` alebo `TaskActions.php`): - Implementácia akcie `generateWebsite`. - Overenie, či projekt existuje a má všetky potrebné dáta (najmä GDPR súhlas). - Zmena stavu projektu na `queued`. - Vytvorenie JSON súboru úlohy v `data/llm/` s unikátnym `task_id`. - Súbor úlohy obsahuje `project_id`, `wizard_data` a metadáta (pokusy, čas vytvorenia). 2. Na frontende (`wizard.js`): - Volanie `generateWebsite` po poslednom kroku wizardu. - Implementácia "polling" mechanizmu (volanie `getProjectStatus` každých pár sekúnd) na sledovanie progresu. - Zobrazenie loaderu s aktuálnym stavom (`queued`, `generating`, `rendering`). ## Implementačné pravidlá - Úloha vo fronte musí obsahovať snapshot `wizard_data` v čase vytvorenia. - Stav projektu `queued` blokuje ďalšie zmeny v `wizard_data`. ## Súbory ktoré je potrebné vytvoriť - `src/Actions/TaskActions.php` (voliteľné, pre čistotu kódu) ## Súbory ktoré je potrebné upraviť - `public/ajax.php` (pridanie akcie `generateWebsite`) - `public/js/wizard.js` (logika pre spustenie generovania a polling) ## API a dátové štruktúry Štruktúra úlohy (`data/llm/t_.json`): ```json { "task_id": "t_...", "project_id": "p_...", "status": "queued", "attempt_count": 0, "max_attempts": 3, "created_at": "...", "wizard_data": { ... } } ``` ## Frontend požiadavky - Animovaný spinner alebo progress bar. - Informovanie používateľa, že generovanie môže trvať niekoľko desiatok sekúnd. ## Backend požiadavky - Zabezpečenie, aby nevznikali duplicitné úlohy pre ten istý projekt, ak už jedna prebieha. ## Testovací scenár 1. Prejdi celým wizardom a na konci klikni na "Generovať web". 2. Over, či sa v `data/llm/` vytvoril súbor úlohy. 3. Over, či sa stav projektu v `data/projects/` zmenil na `queued`. 4. Sleduj v konzole prehliadača, či polling (`getProjectStatus`) prebieha správne. ## Definition of Done - Systém úspešne zaraďuje projekty do AI fronty. - Frontend korektne sleduje stav generovania. - Dáta pre AI sú správne pripravené. ## Obmedzenia - V tomto kroku sa ešte nevykonáva samotné volanie AI (len zaradenie do fronty). ## Výstup - zoznam vytvorených súborov - zoznam upravených súborov - stručné zhrnutie vykonaných zmien - prípadné otvorené problémy