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>
This commit is contained in:
135
.paul/phases/16-automated-tasks/16-01-SUMMARY.md
Normal file
135
.paul/phases/16-automated-tasks/16-01-SUMMARY.md
Normal file
@@ -0,0 +1,135 @@
|
||||
---
|
||||
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*
|
||||
Reference in New Issue
Block a user