--- phase: 16-automated-tasks plan: 01 subsystem: automation tags: [automation, rules, crud, json-conditions, json-actions] requires: - phase: 14-email-templates provides: email_templates table (reuse w akcji send_email) - phase: 13-email-mailboxes provides: email_mailboxes table (reuse w EmailSendingService) provides: - automation_rules / automation_conditions / automation_actions DB tables - AutomationController CRUD (7 routes) - AutomationRepository with findActiveByEvent() for watcher - Dynamic form UI (conditions + actions JS) affects: [16-02-watcher-executor] tech-stack: added: [] patterns: [dynamic-form-rows-js, json-conditions-actions, rule-engine-schema] key-files: created: - database/migrations/20260318_000057_create_automation_tables.sql - src/Modules/Automation/AutomationController.php - src/Modules/Automation/AutomationRepository.php - resources/views/automation/index.php - resources/views/automation/form.php - resources/scss/modules/_automation.scss - public/assets/js/modules/automation-form.js modified: - routes/web.php - resources/views/layouts/app.php - resources/scss/app.scss - public/assets/css/app.css - DOCS/DB_SCHEMA.md - DOCS/ARCHITECTURE.md - DOCS/TECH_CHANGELOG.md key-decisions: - "JSON columns for condition_value/action_config: extensible without schema changes" - "Whitelist validation for event/condition/action types in controller constants" - "Transactional create/update: rule + conditions + actions atomically" patterns-established: - "Dynamic form rows pattern: JS template clone with index management" - "Rule engine schema: rules → conditions (AND) → actions pattern" duration: ~30min completed: 2026-03-18 --- # Phase 16 Plan 01: Automation Rules DB + CRUD Summary **CRUD modulu zadania automatyczne: 3 tabele DB, kontroler z 7 route'ami, dynamiczny formularz z warunkami/akcjami.** ## Performance | Metric | Value | |--------|-------| | Duration | ~30min | | Completed | 2026-03-18 | | Tasks | 4 completed (3 auto + 1 checkpoint) | | Files created | 7 | | Files modified | 6 | ## Acceptance Criteria Results | Criterion | Status | Notes | |-----------|--------|-------| | AC-1: Tabele DB z relacjami | Pass | 3 tabele z FK CASCADE, indeksy | | AC-2: Lista regul | Pass | Tabela z nazwa, zdarzenie, status, toggle, edytuj/usun | | AC-3: Tworzenie reguly | Pass | Formularz z warunkami + akcjami, zapis transakcyjny | | AC-4: Edycja i usuwanie | Pass | Edit laduje dane, delete z CASCADE | | AC-5: Dynamiczny formularz | Pass | JS dodaje/usuwa wiersze warunkow i akcji | ## Accomplishments - 3 tabele DB z JSON columns dla elastycznej konfiguracji warunkow/akcji - Pelny CRUD z transakcyjnym zapisem (rule + conditions + actions atomowo) - Dynamiczny formularz JS z template pattern — dodawanie/usuwanie wierszy bez przeladowania - `findActiveByEvent()` gotowy do uzycia przez watcher w planie 16-02 ## Files Created/Modified | File | Change | Purpose | |------|--------|---------| | `database/migrations/20260318_000057_create_automation_tables.sql` | Created | 3 tabele automation | | `src/Modules/Automation/AutomationController.php` | Created | CRUD + walidacja + whitelist | | `src/Modules/Automation/AutomationRepository.php` | Created | DB operations + findActiveByEvent | | `resources/views/automation/index.php` | Created | Lista regul z toggle/edit/delete | | `resources/views/automation/form.php` | Created | Formularz dynamiczny | | `resources/scss/modules/_automation.scss` | Created | Style formularza | | `public/assets/js/modules/automation-form.js` | Created | Logika dodawania/usuwania wierszy | | `routes/web.php` | Modified | 7 nowych route'ow + DI | | `resources/views/layouts/app.php` | Modified | Menu link "Zadania automatyczne" | | `resources/scss/app.scss` | Modified | Import _automation.scss | | `public/assets/css/app.css` | Modified | Rebuilt | | `DOCS/DB_SCHEMA.md` | Modified | Dokumentacja 3 nowych tabel | | `DOCS/ARCHITECTURE.md` | Modified | Nowy modul + route'y + klasy | | `DOCS/TECH_CHANGELOG.md` | Modified | Wpis Phase 16 Plan 01 | ## Decisions Made | Decision | Rationale | Impact | |----------|-----------|--------| | JSON columns dla condition_value/action_config | Nowe typy warunkow/akcji bez migracji DB | Rozszerzalnosc modulu | | Whitelist w controller constants | Bezpieczenstwo — tylko dozwolone typy | Nowy typ = 1 linia w ALLOWED_ array | | Transakcyjny create/update | Atomowosc — brak czesciowych zapisow | Spójnosc danych | ## Deviations from Plan None — plan executed exactly as written. ## Issues Encountered None. ## Next Phase Readiness **Ready:** - `AutomationRepository::findActiveByEvent('receipt.created')` gotowe do uzycia - Schema DB gotowa — watcher moze odczytywac reguly - CRUD dzialajacy — uzytkownik moze definiowac reguly **Concerns:** - Brak **Blockers:** - None — gotowe do planu 16-02 (Watcher/Executor) --- *Phase: 16-automated-tasks, Plan: 01* *Completed: 2026-03-18*