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>
136 lines
4.9 KiB
Markdown
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*
|