mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Address review feedback on PR #12194: - Pivot CTAs to pure descriptors (id/label/action/params). Drop the server-side execution layer: Action interface, registry, the databases.indexes.create CTA action, the params validator, the /v1/insights/:id/ctas/:id/executions endpoint, the InsightCTAExecution model, the INSIGHT_CTA_* errors, and the corresponding events. The console invokes the existing public API directly with the descriptor's action + params. - Restore Databases\Indexes\Action.php to its pre-CTA shape and inline the index-create body back into Create.php (the createIndex helper was added solely for CTA reuse). - Move insights collection from project DB to platform DB and add a parent reports collection alongside it. Insights carry projectId / projectInternalId for tenant scoping and an optional reportId for grouping. List endpoints filter by projectInternalId; Get/Update/ Delete also enforce project ownership before touching the document. - New Reports module with full CRUD (Create/Get/XList/Update/Delete), Report response model, Reports query validator, REPORT_NOT_FOUND / REPORT_ALREADY_EXISTS errors, reports.read / reports.write scopes, and reports.* event tree. Delete cascades to child insights. - Update.php now mutates the loaded document via setAttribute (instead of passing a partial new Document), reuses CTAsValidator (instead of the looser ArrayList<JSON> + isset check), and rejects duplicate CTA ids. - Create.php enforces unique CTA ids during normalization. - CTAsValidator gained a configurable maxCount (default 16) so the Create path matches the Update path and the DB column size, and oversized payloads return a clean 400. - Validator\Queries\Insights adds status and reportId to ALLOWED_ATTRIBUTES so dismissal / report workflows are filterable. - Realtime channel parser guards $parts[1] for both insights and reports event names. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>