Files
orderPRO/.paul/phases/16-automated-tasks/16-01-SUMMARY.md
Jacek Pyziak b9f639e037 feat(16-automated-tasks): moduł zadań automatycznych — CRUD + watcher/executor
Reguły automatyzacji oparte na zdarzeniach (receipt.created) z warunkami
(integracja/kanał sprzedaży, AND logic) i akcjami (wyślij e-mail z 3 trybami
odbiorcy: klient / firma / klient+firma). Trigger w ReceiptController po
utworzeniu paragonu — błąd automatyzacji nie blokuje sukcesu paragonu.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:39:47 +01:00

136 lines
4.9 KiB
Markdown

---
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*