The consent controller owned gating, the count query, UUID generation, cache seeding and dispatch. Extract that into an App\Actions\Ai action so the controller just records consent and delegates, and the job-id/cache-key contract has a single owner. Add a test covering the no-paid-plan gate path. |
||
|---|---|---|
| .. | ||
| AiConsentController.php | ||
| CategorizationController.php | ||
| RuleSuggestionController.php | ||