From 8ba486676b90b10b7f158abe1c37dde33a3302e3 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Mon, 19 Oct 2026 18:56:44 +0200 Subject: [PATCH 1/2] =?UTF-8?q?feat(admin):=20=E2=9C=A8=20add=20report=20r?= =?UTF-8?q?easons=20management=20module=20with=20CRUD=20operations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration.sql | 11 + .../snapshot.json | 20195 ++++++++++++++++ .../docs/dev/events/built-in-events.mdx | 14 +- .../docs/dev/moderation/enable-reports.mdx | 30 +- .../web/content/docs/dev/moderation/index.mdx | 1 + .../dev/moderation/manage-report-reasons.mdx | 77 + .../web/content/docs/dev/moderation/meta.json | 1 + .../moderation/moderation-report-details.webp | Bin 0 -> 35274 bytes .../moderation/moderation-report-dialog.webp | Bin 50704 -> 35554 bytes .../moderation-report-reason-sheet.webp | Bin 0 -> 49876 bytes .../moderation/moderation-report-reasons.webp | Bin 0 -> 58246 bytes .../content/docs/dev/moderation/reference.mdx | 40 +- apps/web/src/locales/@vitnode/core/pl.json | 63 + apps/web/src/page-cache.gen.ts | 1 + packages/vitnode/scripts/prepare-database.ts | 53 +- .../src/api/lib/moderation/report-reasons.ts | 82 + packages/vitnode/src/api/models/events.ts | 15 + .../src/api/modules/admin/admin.module.ts | 2 + .../report-reasons.admin.module.ts | 20 + .../routes/report-reasons.routes.ts | 304 + .../src/api/modules/moderation/lib/schema.ts | 3 +- .../modules/moderation/moderation.module.ts | 2 + .../api/modules/moderation/reports.test.ts | 14 +- .../modules/moderation/routes/create.route.ts | 68 +- .../moderation/routes/reasons.route.ts | 34 + packages/vitnode/src/api/plugin.ts | 6 + .../vitnode/src/components/table/content.tsx | 6 +- .../components/table/data-table-content.tsx | 2 +- packages/vitnode/src/database/moderation.ts | 24 +- packages/vitnode/src/lib/moderation/const.ts | 37 +- packages/vitnode/src/locales/en.json | 106 +- .../pages/admin/moderation/report-reasons.tsx | 25 + packages/vitnode/src/routes.tsx | 8 + .../tanstack/admin/report-reasons/index.ts | 12 + .../tanstack/admin/report-reasons/query.ts | 67 + .../tanstack/admin/report-reasons/route.tsx | 39 + .../tanstack/admin/report-reasons/screen.tsx | 89 + .../vitnode/src/tanstack/moderation/index.ts | 1 + .../src/tanstack/moderation/report-button.tsx | 53 +- .../admin/layouts/sidebar/nav/nav-model.tsx | 13 + .../report-reasons/report-reason-form.tsx | 134 + .../report-reasons/report-reasons-content.tsx | 312 + .../report-reasons-mutations.ts | 85 + .../report-reasons/report-reasons-query.ts | 41 + .../views/core/shared/admin-permissions.ts | 7 + .../admin/views/core/shared/admin-scope.ts | 1 + .../moderation/modcp/board/board-card.tsx | 7 +- .../moderation/modcp/report-activity.tsx | 5 +- .../views/moderation/modcp/report-content.tsx | 10 +- .../views/moderation/modcp/report-sidebar.tsx | 5 +- .../views/moderation/modcp/report-tone.tsx | 16 +- .../views/moderation/moderation-mutations.ts | 5 +- .../views/moderation/report-reason-label.tsx | 19 + .../views/moderation/report-reasons-query.ts | 47 + .../report/report-dialog-content.tsx | 639 +- plugins/blog/src/pages/post-page.tsx | 12 +- plugins/forum/src/pages/topic-page.tsx | 9 +- 57 files changed, 22638 insertions(+), 234 deletions(-) create mode 100644 apps/api/migrations/20261019161102_add_moderation_report_reasons/migration.sql create mode 100644 apps/api/migrations/20261019161102_add_moderation_report_reasons/snapshot.json create mode 100644 apps/web/content/docs/dev/moderation/manage-report-reasons.mdx create mode 100644 apps/web/content/docs/dev/moderation/moderation-report-details.webp create mode 100644 apps/web/content/docs/dev/moderation/moderation-report-reason-sheet.webp create mode 100644 apps/web/content/docs/dev/moderation/moderation-report-reasons.webp create mode 100644 packages/vitnode/src/api/lib/moderation/report-reasons.ts create mode 100644 packages/vitnode/src/api/modules/admin/report-reasons/report-reasons.admin.module.ts create mode 100644 packages/vitnode/src/api/modules/admin/report-reasons/routes/report-reasons.routes.ts create mode 100644 packages/vitnode/src/api/modules/moderation/routes/reasons.route.ts create mode 100644 packages/vitnode/src/pages/admin/moderation/report-reasons.tsx create mode 100644 packages/vitnode/src/tanstack/admin/report-reasons/index.ts create mode 100644 packages/vitnode/src/tanstack/admin/report-reasons/query.ts create mode 100644 packages/vitnode/src/tanstack/admin/report-reasons/route.tsx create mode 100644 packages/vitnode/src/tanstack/admin/report-reasons/screen.tsx create mode 100644 packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reason-form.tsx create mode 100644 packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-content.tsx create mode 100644 packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-mutations.ts create mode 100644 packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-query.ts create mode 100644 packages/vitnode/src/views/moderation/report-reason-label.tsx create mode 100644 packages/vitnode/src/views/moderation/report-reasons-query.ts diff --git a/apps/api/migrations/20261019161102_add_moderation_report_reasons/migration.sql b/apps/api/migrations/20261019161102_add_moderation_report_reasons/migration.sql new file mode 100644 index 0000000000..b95dd19c18 --- /dev/null +++ b/apps/api/migrations/20261019161102_add_moderation_report_reasons/migration.sql @@ -0,0 +1,11 @@ +CREATE TABLE "core_moderation_report_reasons" ( + "id" serial PRIMARY KEY, + "code" varchar(32) NOT NULL UNIQUE, + "requiresDetails" boolean DEFAULT false NOT NULL, + "position" integer DEFAULT 0 NOT NULL, + "createdAt" timestamp DEFAULT now() NOT NULL, + "updatedAt" timestamp DEFAULT now() NOT NULL +); +--> statement-breakpoint +ALTER TABLE "core_moderation_report_reasons" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint +CREATE INDEX "core_moderation_report_reasons_position_idx" ON "core_moderation_report_reasons" ("position"); \ No newline at end of file diff --git a/apps/api/migrations/20261019161102_add_moderation_report_reasons/snapshot.json b/apps/api/migrations/20261019161102_add_moderation_report_reasons/snapshot.json new file mode 100644 index 0000000000..ce974c5c7a --- /dev/null +++ b/apps/api/migrations/20261019161102_add_moderation_report_reasons/snapshot.json @@ -0,0 +1,20195 @@ +{ + "version": "8", + "dialect": "postgres", + "id": "48d4174b-1986-4fa5-8919-80bd98f443d6", + "prevIds": [ + "fa39e13e-f0d1-451d-9e0f-5c0cf68593db" + ], + "ddl": [ + { + "isRlsEnabled": true, + "name": "core_admin_permissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_admin_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_action_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_budget_periods", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_calls", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_cost_adjustments", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_reservations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_role_permissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_role_policies", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_runs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_translation_sources", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_ai_user_overrides", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_containers", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_documents", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_drafts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_field_locks", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_submissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_file_refs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_revisions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_schedules", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_content_slug_history", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_cron", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_admin_dashboard", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files_alt", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files_alt_analysis", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_files_alt_state", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_languages", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_languages_words", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_logs", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderation_report_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderation_report_reasons", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderation_reports", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_moderators_permissions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_deliveries", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_receipts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_settings", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notification_user_state", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_notifications", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_page_layouts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_passkey_challenges", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_passkeys", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_queue", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_search_index", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_search_popularity", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_secrets", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_sessions_known_devices", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_update_lock", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_update_results", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_update_sources", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_confirm_emails", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_forgot_password", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_secondary_roles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_sso", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_sso_operations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "core_users_sso_profile_sources", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_categories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_categories_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts_author_id", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts_category_id", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "blog_posts_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_advanced_articles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_advanced_articles_categories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_advanced_articles_faq", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_advanced_articles_related_articles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_advanced_articles_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_advanced_articles_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_articles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_articles_gallery", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_categories", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_discussions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_events_gallery", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_events_related_events", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_events_sessions", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_events_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_events_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_localized_articles", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_localized_articles_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_pages", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_tags_related_tags", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "example_tags_translations", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "forum_comments", + "entityType": "tables", + "schema": "public" + }, + { + "isRlsEnabled": true, + "name": "forum_topics", + "entityType": "tables", + "schema": "public" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unrestricted", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "permissions", + "entityType": "columns", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "lastSeen", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deviceId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actionKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "enabled", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "modelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fallbackModelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxInputCharacters", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxOutputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "timeoutMs", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxRetries", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxSteps", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "dailyLimit", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "instructions", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_action_settings" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scopeKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "unit", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodStart", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodEnd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "limitAmount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "spentAmount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "reservedAmount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "unknownCount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "attempt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "modelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "provider", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerModelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerRequestId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "errorCode", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "inputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "outputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheReadTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheWriteTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reasoningTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "images", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costReason", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pricingVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pricingSnapshot", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "startedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finishedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reconciledAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_calls" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "callId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "previousCostUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "previousSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "newCostUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "newSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deltaUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reason", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "budgetPeriodId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "amount", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'active'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "settledAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "permission", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "granted", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "dailyLimit", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "monthlyPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unlimited", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actionKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorType", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "idempotencyKey", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resourceType", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resourceId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "errorCode", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "promptVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pointsConversionVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "modelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "provider", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerModelId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "inputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "outputTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheReadTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "cacheWriteTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reasoningTokens", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "costSource", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "chargedUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "chargedPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "reservedUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "reservedPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "settlement", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "leaseExpiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "accepted", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "acceptedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "startedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "finishedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "settledAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_runs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "enabled", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "monthlyBudgetUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "systemMonthlyBudgetUsd", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'0'", + "generated": null, + "identity": null, + "name": "defaultMonthlyPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "pointsConversionVersion", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "10", + "generated": null, + "identity": null, + "name": "userRequestsPerMinute", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "2", + "generated": null, + "identity": null, + "name": "userConcurrency", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "2", + "generated": null, + "identity": null, + "name": "systemConcurrency", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "365", + "generated": null, + "identity": null, + "name": "historyRetentionDays", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "altEnabled", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "10", + "generated": null, + "identity": null, + "name": "altBatchSize", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "altScanCursor", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "altScanStartedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_settings" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "locale", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceLocale", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "origin", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedById", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "numeric(24,12)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "monthlyPoints", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unlimited", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "blocked", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "definitionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "parentId", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "policies", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_containers" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "varchar(35)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "bytea", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "state", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseVersion", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedBy", + "entityType": "columns", + "schema": "public", + "table": "core_content_documents" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "values", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "baseVersion", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedBy", + "entityType": "columns", + "schema": "public", + "table": "core_content_drafts" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "acquiredAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerDefinitionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "kind", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "values", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseValues", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseVersion", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "baseUpdatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "authorId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reviewerId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reason", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revisionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "decidedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_submissions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "revisionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "operation", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "snapshot", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "changedFields", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'system'", + "generated": null, + "identity": null, + "name": "actorType", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorUserId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "restoredFromRevisionId", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_revisions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "action", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scheduledFor", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "generation", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "createdBy", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "completedAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "effectsError", + "entityType": "columns", + "schema": "public", + "table": "core_content_schedules" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "contentTypeId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "varchar(512)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "path", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "retiredAt", + "entityType": "columns", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastRun", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "module", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nextRun", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "schedule", + "entityType": "columns", + "schema": "public", + "table": "core_cron" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "widgets", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(512)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "key", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "folder", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "mimeType", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "size", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'automatic'", + "generated": null, + "identity": null, + "name": "altPolicy", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_files" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageCode", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "text", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "origin", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedById", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileFingerprint", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "runId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "fileId", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "code", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'UTC'", + "generated": null, + "identity": null, + "name": "timezone", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "default", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "time24", + "entityType": "columns", + "schema": "public", + "table": "core_languages" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageCode", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginCode", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tableName", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "variable", + "entityType": "columns", + "schema": "public", + "table": "core_languages_words" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(45)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "varchar(10)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'GET'", + "generated": null, + "identity": null, + "name": "method", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'localhost'", + "generated": null, + "identity": null, + "name": "path", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userAgent", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "500", + "generated": null, + "identity": null, + "name": "statusCode", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_logs" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reportId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "code", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "requiresDetails", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetType", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reporterId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reason", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "description", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "snapshot", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(500)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "targetTitle", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'new'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "assigneeId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolution", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolutionNote", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolvedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "resolvedById", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scopeFamily", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "scopeId", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "openKey", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "unrestricted", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "permissions", + "entityType": "columns", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "channel", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "mode", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "eventId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "idempotencyKey", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "attempts", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "5", + "generated": null, + "identity": null, + "name": "maxAttempts", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "availableAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodStart", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "periodEnd", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "itemCount", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerMessageId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(500)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "skipReason", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sentAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "schemaVersion", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "idempotencyKey", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "actorId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectType", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "groupKey", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "data", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "recipientIds", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "allowSelf", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "recipientCursor", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "deliveredCount", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "completedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_events" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "eventId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "notificationId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "seq", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "emailPending", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "emailDeliveryId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "key", + "entityType": "columns", + "schema": "public", + "table": "core_notification_settings" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "core_notification_settings" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_settings" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "unreadCount", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "revision", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "preferences", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "type": "bigserial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "type", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "groupKey", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "groupBucket", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectType", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "subjectId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "latestEventId", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "eventCount", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "activitySeq", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "readSeq", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "readAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "archivedAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "lastActivityAt", + "entityType": "columns", + "schema": "public", + "table": "core_notifications" + }, + { + "type": "varchar(120)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pageId", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "zones", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_page_layouts" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tokenHash", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ceremony", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "challenge", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "webauthnUserId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(1024)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "credentialId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publicKey", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "counter", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "webauthnUserId", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "transports", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deviceType", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "backedUp", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(36)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "aaguid", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastUsedAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'default'", + "generated": null, + "identity": null, + "name": "queue", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'pending'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "payload", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "priority", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "attempts", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "3", + "generated": null, + "identity": null, + "name": "maxAttempts", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "availableAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "reservedAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "completedAt", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "dedupeKey", + "entityType": "columns", + "schema": "public", + "table": "core_queue" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "protected", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "default", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "root", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "guest", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "color", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "prefix", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "allowUploadFiles", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "totalMaxStorage", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "maxStorageForSubmit", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "allowUploadAvatar", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "2048", + "generated": null, + "identity": null, + "name": "maxAvatarSize", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "allowUploadCover", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "5120", + "generated": null, + "identity": null, + "name": "maxCoverSize", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "allowEditPersonalInfo", + "entityType": "columns", + "schema": "public", + "table": "core_roles" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "pluginId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemType", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "languageCode", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "authorIds", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "''", + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "tsvector", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": { + "as": "setweight(to_tsvector(CASE lower(split_part(\"core_search_index\".\"languageCode\", '-', 1)) WHEN 'da' THEN 'danish'::regconfig WHEN 'de' THEN 'german'::regconfig WHEN 'en' THEN 'english'::regconfig WHEN 'es' THEN 'spanish'::regconfig WHEN 'fi' THEN 'finnish'::regconfig WHEN 'fr' THEN 'french'::regconfig WHEN 'hu' THEN 'hungarian'::regconfig WHEN 'it' THEN 'italian'::regconfig WHEN 'nl' THEN 'dutch'::regconfig WHEN 'no' THEN 'norwegian'::regconfig WHEN 'pl' THEN 'polish'::regconfig WHEN 'pt' THEN 'portuguese'::regconfig WHEN 'ro' THEN 'romanian'::regconfig WHEN 'ru' THEN 'russian'::regconfig WHEN 'sv' THEN 'swedish'::regconfig WHEN 'tr' THEN 'turkish'::regconfig ELSE 'simple'::regconfig END, coalesce(\"core_search_index\".\"title\", '')), 'A') || setweight(to_tsvector(CASE lower(split_part(\"core_search_index\".\"languageCode\", '-', 1)) WHEN 'da' THEN 'danish'::regconfig WHEN 'de' THEN 'german'::regconfig WHEN 'en' THEN 'english'::regconfig WHEN 'es' THEN 'spanish'::regconfig WHEN 'fi' THEN 'finnish'::regconfig WHEN 'fr' THEN 'french'::regconfig WHEN 'hu' THEN 'hungarian'::regconfig WHEN 'it' THEN 'italian'::regconfig WHEN 'nl' THEN 'dutch'::regconfig WHEN 'no' THEN 'norwegian'::regconfig WHEN 'pl' THEN 'polish'::regconfig WHEN 'pt' THEN 'portuguese'::regconfig WHEN 'ro' THEN 'romanian'::regconfig WHEN 'ru' THEN 'russian'::regconfig WHEN 'sv' THEN 'swedish'::regconfig WHEN 'tr' THEN 'turkish'::regconfig ELSE 'simple'::regconfig END, coalesce(\"core_search_index\".\"content\", '')), 'B')", + "type": "stored" + }, + "identity": null, + "name": "search_vector", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerType", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "containerId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "url", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "isPublic", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "isHidden", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "imageId", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "metadata", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "indexedAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_index" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemType", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "double precision", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "logScore", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "views", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "clicks", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "comments", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_search_popularity" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_secrets" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "value", + "entityType": "columns", + "schema": "public", + "table": "core_secrets" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_secrets" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "deviceId", + "entityType": "columns", + "schema": "public", + "table": "core_sessions" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publicId", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userAgent", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "lastSeen", + "entityType": "columns", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "owner", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastManualAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_lock" + }, + { + "type": "varchar(214)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "componentId", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "sourceUrl", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(20)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "channel", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "versions", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "hasUnknownVersion", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(256)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coreVersion", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "result", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastAttemptAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastSuccessAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_update_results" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "url", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "varchar(512)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "etag", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastModified", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "document", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastAttemptAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastSuccessAt", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastError", + "entityType": "columns", + "schema": "public", + "table": "core_update_sources" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "nameCode", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "email", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "firstName", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(128)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "lastName", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "phone", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "headline", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "showRealName", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "password", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "newsletter", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(6)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarColor", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "emailVerified", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "birthday", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "timeZone", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'en'", + "generated": null, + "identity": null, + "name": "language", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarId", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coverId", + "entityType": "columns", + "schema": "public", + "table": "core_users" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "token", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "varchar(40)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "ipAddress", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "roleId", + "entityType": "columns", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerAccountId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerEmail", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerUsername", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "syncOnSignIn", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(2048)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarSourceUrl", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarSha256", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "avatarFileId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(64)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "tokenHash", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(16)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "intent", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 1, + "default": "'{}'", + "generated": null, + "identity": null, + "name": "fields", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerAccountId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "preview", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "expiresAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "userId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "field", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "providerId", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "varchar(50)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "color", + "entityType": "columns", + "schema": "public", + "table": "blog_categories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coverImage", + "entityType": "columns", + "schema": "public", + "table": "blog_posts" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "friendlyUrl", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "excerpt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "varchar(255)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "coverImageAlt", + "entityType": "columns", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "true", + "generated": null, + "identity": null, + "name": "syndicationIndexable", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "syndicationNoIndex", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "5", + "generated": null, + "identity": null, + "name": "syndicationPriority", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "question", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "answer", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "seoTitle", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "seoDescription", + "entityType": "columns", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "code", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "text", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "excerpt", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "0", + "generated": null, + "identity": null, + "name": "views", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "featured", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "noIndex", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "animation", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "example_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_categories" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_categories" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "example_categories" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "board", + "entityType": "columns", + "schema": "public", + "table": "example_discussions" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": { + "type": "byDefault", + "name": "example_events_id_seq", + "increment": "1", + "startWith": "1", + "minValue": "1", + "maxValue": "9223372036854775807", + "cache": 1, + "cycle": false + }, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "primaryTag", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "example_events" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_gallery" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_events_gallery" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_gallery" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_related_events" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_related_events" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_events_related_events" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_related_events" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "startsAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_sessions" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_events_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_tags" + }, + { + "type": "bigint", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "example_events_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "boolean", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "false", + "generated": null, + "identity": null, + "name": "featured", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "text", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'[]'", + "generated": null, + "identity": null, + "name": "content", + "entityType": "columns", + "schema": "public", + "table": "example_pages" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "gen_random_uuid()", + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "category", + "entityType": "columns", + "schema": "public", + "table": "example_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "relatedItemId", + "entityType": "columns", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "position", + "entityType": "columns", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "type": "uuid", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "itemId", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "languageId", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "varchar(100)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "name", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "example_tags_translations" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "topic", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "parent", + "entityType": "columns", + "schema": "public", + "table": "forum_comments" + }, + { + "type": "serial", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "id", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "createdAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "now()", + "generated": null, + "identity": null, + "name": "updatedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "publishedAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "varchar(32)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "'draft'", + "generated": null, + "identity": null, + "name": "status", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": "1", + "generated": null, + "identity": null, + "name": "version", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "timestamp", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenAt", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "hiddenBy", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "varchar(200)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "title", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "varchar(160)", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "slug", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "jsonb", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "body", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": false, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "author", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "type": "integer", + "typeSchema": null, + "notNull": true, + "dimensions": 0, + "default": null, + "generated": null, + "identity": null, + "name": "forum", + "entityType": "columns", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_permissions_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_permissions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_permissions_updated_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_sessions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "deviceId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_sessions_device_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_sessions_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "scopeKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "periodStart", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_budget_periods_scope_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_budget_periods" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "runId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_calls_run_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_calls" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "costSource", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "reconciledAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_calls_reconcile_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_calls" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "callId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_cost_adjustments_call_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "runId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "budgetPeriodId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_reservations_run_period_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_reservations_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_user_created_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_created_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actionKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_action_created_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "leaseExpiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actorType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "idempotencyKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"idempotencyKey\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_runs_idempotency_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "locale", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "field", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_ai_translation_sources_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "definitionId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_containers_definition_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "definitionId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "parentId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_containers_definition_parent_position_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "parentId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_containers_parent_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "field", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "language", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_documents_doc_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_documents_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_documents_updated_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "language", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_drafts_key_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_drafts_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_drafts_updated_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "field", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "language", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_field_locks_key_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_field_locks_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_field_locks_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"status\" = 'pending'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_pending_key", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "containerId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_queue_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_item_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "authorId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_submissions_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "revisionId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_file_refs_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_file_refs_file_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "version", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_item_version_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "version", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_translation_version_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "version", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_language_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_plugin_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "actorUserId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_revisions_actor_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "action", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "status = 'pending'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_active_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "scheduledFor", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_due_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_item_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_plugin_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_schedules_created_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_shared_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"languageId\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_locale_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "contentTypeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_item_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_content_slug_history_plugin_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_content_slug_history" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "lastRun", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_cron_last_run_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_cron" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_admin_dashboard_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_user_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_files" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_files" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "languageCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_alt_file_language_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "fileId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "fileFingerprint", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_alt_analysis_file_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "status <> 'completed'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_files_alt_state_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "name", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_languages_name_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_languages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_languages_words_lang_code_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_languages_words" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "tableName", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "pluginCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "variable", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_languages_words_lookup_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_languages_words" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_logs_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_logs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_logs_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_logs" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "reportId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_report_events_report_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_report_reasons_position_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_report_reasons" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "targetType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "targetId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_target_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "assigneeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_assignee_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "reporterId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_reporter_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "scopeFamily", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "scopeId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderation_reports_scope_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderators_permissions_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderators_permissions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_moderators_permissions_updated_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "availableAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "status = 'pending'", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_claim_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_user_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "eventId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"eventId\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_deliveries_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "idempotencyKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_events_idempotency_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_events_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_events_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "notificationId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "seq", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_receipts_notification_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_receipts_user_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"emailPending\" = true AND \"emailDeliveryId\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_receipts_email_pending_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "unreadCount", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notification_user_state_unread_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "type", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "groupKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "groupBucket", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_group_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "lastActivityAt", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"archivedAt\" IS NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_inbox_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "lastActivityAt", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": false, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"archivedAt\" IS NULL AND \"readSeq\" < \"activitySeq\"", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_unread_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "subjectType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "subjectId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_subject_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "lastActivityAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_last_activity_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "latestEventId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_notifications_latest_event_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkey_challenges_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkey_challenges_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkeys_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "webauthnUserId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_passkeys_webauthn_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "availableAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_status_available_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "completedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": "\"completedAt\" IS NOT NULL", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_completed_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "pluginId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "dedupeKey", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": "\"dedupeKey\" IS NOT NULL AND status IN ('pending', 'processing')", + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_queue_dedupe_active_unique", + "entityType": "indexes", + "schema": "public", + "table": "core_queue" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_roles_updated_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "search_vector", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "gin", + "concurrently": false, + "name": "core_search_index_search_vector_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "to_tsvector('simple'::regconfig, \"title\")", + "isExpression": true, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "gin", + "concurrently": false, + "name": "core_search_index_title_vector_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "authorIds", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "gin", + "concurrently": false, + "name": "core_search_index_author_ids_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_item_type_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageCode", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_language_code_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "isPublic", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_is_public_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "imageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_image_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "containerType", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "containerId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_index_container_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "logScore", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_search_popularity_log_score_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_search_popularity" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "deviceId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_device_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "ipAddress", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_sessions_known_devices_ip_address_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_sessions_known_devices" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "avatarId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_avatar_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "coverId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_cover_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "id", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_created_at_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "roleId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_secondary_roles_role_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_sso_user_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "userId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "providerId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_sso_operations_user_provider_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "expiresAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "core_users_sso_operations_expires_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_categories_translations_language_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_status_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "coverImage", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_cover_image_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_author_id_position_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_author_id_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_category_id_position_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_category_id_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "friendlyUrl", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "blog_posts_translations_language_id_friendly_url_key", + "entityType": "indexes", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "syndicationPriority", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_syndication_priority_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_categories_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_categories_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_faq_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_related_articles_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_related_articles_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_tags_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_tags_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_advanced_articles_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_status_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "code", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_code_key", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "animation", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_animation_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_gallery_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_articles_gallery_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_categories_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_categories_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_categories" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "board", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_board_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_discussions_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "primaryTag", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_primary_tag_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_gallery_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_events_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_gallery_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events_gallery" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_related_events_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_events_related_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_related_events_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events_related_events" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_sessions_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_events_sessions" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_tags_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_events_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_tags_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_events_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_events_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_events_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_localized_articles_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_localized_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_localized_articles_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_localized_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_localized_articles_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_localized_articles" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_localized_articles_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_localized_articles_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_pages_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_pages_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_pages_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_pages_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_pages" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "category", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_category_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "itemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "position", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_related_tags_position_key", + "entityType": "indexes", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "relatedItemId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_related_tags_related_item_id_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_translations_language_id_status_idx", + "entityType": "indexes", + "schema": "public", + "table": "example_tags_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "languageId", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "example_tags_translations_language_id_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "example_tags_translations" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "topic", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "parent", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_topic_parent_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "topic", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_topic_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "parent", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_parent_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_comments_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "forum", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_forum_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "slug", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": true, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_slug_key", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "author", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_author_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "createdAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_created_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "updatedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_updated_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "status", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + }, + { + "value": "publishedAt", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_status_published_at_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": true, + "columns": [ + { + "value": "hiddenBy", + "isExpression": false, + "asc": true, + "nullsFirst": false, + "opclass": null + } + ], + "isUnique": false, + "where": null, + "with": "", + "method": "btree", + "concurrently": false, + "name": "forum_topics_hidden_by_idx", + "entityType": "indexes", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_permissions_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_permissions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_sessions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "deviceId" + ], + "schemaTo": "public", + "tableTo": "core_sessions_known_devices", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_sessions_deviceId_core_sessions_known_devices_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_calls_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_calls" + }, + { + "nameExplicit": false, + "columns": [ + "callId" + ], + "schemaTo": "public", + "tableTo": "core_ai_calls", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_cost_adjustments_callId_core_ai_calls_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_cost_adjustments_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_cost_adjustments" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_reservations_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": false, + "columns": [ + "budgetPeriodId" + ], + "schemaTo": "public", + "tableTo": "core_ai_budget_periods", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_reservations_FClYpPXZwvsm_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_reservations" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_role_permissions_roleId_core_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_role_policies_roleId_core_roles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_role_policies" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_ai_runs_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_runs" + }, + { + "nameExplicit": false, + "columns": [ + "updatedById" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_ai_translation_sources_updatedById_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_translation_sources" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_ai_user_overrides_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_ai_user_overrides" + }, + { + "nameExplicit": false, + "columns": [ + "parentId" + ], + "schemaTo": "public", + "tableTo": "core_content_containers", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "core_content_containers_q6QIucJ4HJ7B_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_containers" + }, + { + "nameExplicit": false, + "columns": [ + "updatedBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_documents_updatedBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_documents" + }, + { + "nameExplicit": false, + "columns": [ + "updatedBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_drafts_updatedBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_drafts" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "core_content_field_locks_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_field_locks" + }, + { + "nameExplicit": false, + "columns": [ + "authorId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_content_submissions_authorId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": false, + "columns": [ + "reviewerId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_content_submissions_reviewerId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_submissions" + }, + { + "nameExplicit": false, + "columns": [ + "revisionId" + ], + "schemaTo": "public", + "tableTo": "core_content_revisions", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "core_content_file_refs_5get6SfhBPHr_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "core_content_file_refs_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_content_file_refs" + }, + { + "nameExplicit": false, + "columns": [ + "actorUserId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_revisions_actorUserId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_content_revisions" + }, + { + "nameExplicit": false, + "columns": [ + "createdBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_content_schedules_createdBy_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_content_schedules" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_admin_dashboard_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_admin_dashboard" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_files" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "languageCode" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "code" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_languageCode_core_languages_code_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_alt_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "updatedById" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_alt_updatedById_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_analysis_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "nameExplicit": false, + "columns": [ + "runId" + ], + "schemaTo": "public", + "tableTo": "core_ai_runs", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_files_alt_analysis_runId_core_ai_runs_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt_analysis" + }, + { + "nameExplicit": false, + "columns": [ + "fileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_files_alt_state_fileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_files_alt_state" + }, + { + "nameExplicit": false, + "columns": [ + "languageCode" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "code" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_languages_words_languageCode_core_languages_code_fk", + "entityType": "fks", + "schema": "public", + "table": "core_languages_words" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "core_logs_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_logs" + }, + { + "nameExplicit": false, + "columns": [ + "reportId" + ], + "schemaTo": "public", + "tableTo": "core_moderation_reports", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_moderation_report_events_4CqHOxfheaUm_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "nameExplicit": false, + "columns": [ + "actorId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_report_events_actorId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_report_events" + }, + { + "nameExplicit": false, + "columns": [ + "reporterId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_reports_reporterId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": false, + "columns": [ + "assigneeId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_reports_assigneeId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": false, + "columns": [ + "resolvedById" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_moderation_reports_resolvedById_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_moderation_reports" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_moderators_permissions_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_moderators_permissions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_moderators_permissions" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_deliveries_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": false, + "columns": [ + "eventId" + ], + "schemaTo": "public", + "tableTo": "core_notification_events", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_notification_deliveries_vcf37BytIa0M_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_deliveries" + }, + { + "nameExplicit": false, + "columns": [ + "actorId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_notification_events_actorId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_events" + }, + { + "nameExplicit": false, + "columns": [ + "eventId" + ], + "schemaTo": "public", + "tableTo": "core_notification_events", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_receipts_UQ7ZEs0I6ijx_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_receipts_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": false, + "columns": [ + "notificationId" + ], + "schemaTo": "public", + "tableTo": "core_notifications", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_receipts_Vxye2Cs6MgcL_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notification_user_state_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notification_user_state" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_notifications_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": false, + "columns": [ + "latestEventId" + ], + "schemaTo": "public", + "tableTo": "core_notification_events", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "RESTRICT", + "name": "core_notifications_I8QoGbTal5Wt_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_notifications" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_passkey_challenges_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_passkey_challenges" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_passkeys_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_passkeys" + }, + { + "nameExplicit": false, + "columns": [ + "imageId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_search_index_imageId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_sessions_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "deviceId" + ], + "schemaTo": "public", + "tableTo": "core_sessions_known_devices", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_sessions_deviceId_core_sessions_known_devices_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "NO ACTION", + "name": "core_users_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "language" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "code" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET DEFAULT", + "name": "core_users_language_core_languages_code_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "avatarId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_users_avatarId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "coverId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_users_coverId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_confirm_emails_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_confirm_emails" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_forgot_password_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_forgot_password" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_secondary_roles_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "nameExplicit": false, + "columns": [ + "roleId" + ], + "schemaTo": "public", + "tableTo": "core_roles", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_secondary_roles_roleId_core_roles_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_userId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": false, + "columns": [ + "avatarFileId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "SET NULL", + "name": "core_users_sso_avatarFileId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_operations_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_profile_sources_userId_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "nameExplicit": true, + "columns": [ + "userId", + "providerId" + ], + "schemaTo": "public", + "tableTo": "core_users_sso", + "columnsTo": [ + "userId", + "providerId" + ], + "onUpdate": "NO ACTION", + "onDelete": "CASCADE", + "name": "core_users_sso_profile_sources_connection_fkey", + "entityType": "fks", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_categories_translations_itemId_blog_categories_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_categories_translations_languageId_core_languages_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "blog_posts_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": false, + "columns": [ + "coverImage" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_posts_coverImage_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "blog_posts" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_posts", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_author_id_itemId_blog_posts_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_author_id_relatedItemId_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_posts", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_category_id_itemId_blog_posts_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "blog_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_posts_category_id_relatedItemId_blog_categories_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "blog_posts", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "blog_posts_translations_itemId_blog_posts_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "blog_posts_translations_languageId_core_languages_id_fk", + "entityType": "fks", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_advanced_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_advanced_articles_categories_itemId_example_advanced_ar", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "example_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_advanced_articles_categories_relatedItemId_example_cate", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_advanced_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_advanced_articles_faq_itemId_example_advanced_articles_", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_faq" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_advanced_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_advanced_articles_related_articles_itemId_example_advan", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "example_advanced_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_advanced_articles_related_articles_relatedItemId_exampl", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_advanced_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_advanced_articles_tags_ATchHLRtvoCM_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "example_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_advanced_articles_tags_dEsWdkDmu7nW_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_advanced_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_advanced_articles_translations_itemId_example_advanced_", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_advanced_articles_translations_languageId_core_language", + "entityType": "fks", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_articles_author_core_users_id_fk", + "entityType": "fks", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": false, + "columns": [ + "animation" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_articles_animation_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "example_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_articles_category_example_categories_id_fk", + "entityType": "fks", + "schema": "public", + "table": "example_articles" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_articles_gallery_itemId_example_articles_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_articles_gallery_relatedItemId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_discussions_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_discussions_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": false, + "columns": [ + "board" + ], + "schemaTo": "public", + "tableTo": "core_content_containers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_discussions_board_core_content_containers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_discussions" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_events_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": false, + "columns": [ + "primaryTag" + ], + "schemaTo": "public", + "tableTo": "example_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_events_primaryTag_example_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "example_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_events_category_example_categories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_events_gallery_itemId_example_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "core_files", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_events_gallery_relatedItemId_core_files_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_gallery" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_events_related_events_itemId_example_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_related_events" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "example_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_events_related_events_oaRvqnKyAS7L_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_related_events" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_events_sessions_itemId_example_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_sessions" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_events_tags_itemId_example_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_tags" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "example_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_events_tags_relatedItemId_example_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_events", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_events_translations_itemId_example_events_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_events_translations_languageId_core_languages_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_events_translations" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_localized_articles", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_localized_articles_translations_itemId_example_localize", + "entityType": "fks", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_localized_articles_translations_languageId_core_languag", + "entityType": "fks", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_tags_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": false, + "columns": [ + "category" + ], + "schemaTo": "public", + "tableTo": "example_categories", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "example_tags_category_example_categories_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_tags_related_tags_itemId_example_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "nameExplicit": false, + "columns": [ + "relatedItemId" + ], + "schemaTo": "public", + "tableTo": "example_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_tags_related_tags_relatedItemId_example_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "nameExplicit": false, + "columns": [ + "itemId" + ], + "schemaTo": "public", + "tableTo": "example_tags", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "example_tags_translations_itemId_example_tags_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_tags_translations" + }, + { + "nameExplicit": false, + "columns": [ + "languageId" + ], + "schemaTo": "public", + "tableTo": "core_languages", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "example_tags_translations_languageId_core_languages_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "example_tags_translations" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_replies_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_replies_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "topic" + ], + "schemaTo": "public", + "tableTo": "forum_topics", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "CASCADE", + "name": "forum_replies_topic_forum_topics_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "parent" + ], + "schemaTo": "public", + "tableTo": "forum_comments", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_replies_parent_forum_replies_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_comments" + }, + { + "nameExplicit": false, + "columns": [ + "hiddenBy" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_topics_hiddenBy_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": false, + "columns": [ + "author" + ], + "schemaTo": "public", + "tableTo": "core_users", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "SET NULL", + "name": "forum_topics_author_core_users_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_topics" + }, + { + "nameExplicit": false, + "columns": [ + "forum" + ], + "schemaTo": "public", + "tableTo": "core_content_containers", + "columnsTo": [ + "id" + ], + "onUpdate": "CASCADE", + "onDelete": "RESTRICT", + "name": "forum_topics_forum_core_content_containers_id_fkey", + "entityType": "fks", + "schema": "public", + "table": "forum_topics" + }, + { + "columns": [ + "roleId", + "permission" + ], + "nameExplicit": false, + "name": "core_ai_role_permissions_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_ai_role_permissions" + }, + { + "columns": [ + "eventId", + "userId" + ], + "nameExplicit": false, + "name": "core_notification_receipts_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_notification_receipts" + }, + { + "columns": [ + "itemType", + "itemId" + ], + "nameExplicit": false, + "name": "core_search_popularity_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_search_popularity" + }, + { + "columns": [ + "userId", + "roleId" + ], + "nameExplicit": false, + "name": "core_users_secondary_roles_userId_roleId_pk", + "entityType": "pks", + "schema": "public", + "table": "core_users_secondary_roles" + }, + { + "columns": [ + "userId", + "field" + ], + "nameExplicit": false, + "name": "core_users_sso_profile_sources_pkey", + "entityType": "pks", + "schema": "public", + "table": "core_users_sso_profile_sources" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "blog_categories_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_categories_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "blog_posts_author_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_posts_author_id" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "blog_posts_category_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_posts_category_id" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "blog_posts_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "blog_posts_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_advanced_articles_categories_pk", + "entityType": "pks", + "schema": "public", + "table": "example_advanced_articles_categories" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_advanced_articles_related_articles_pk", + "entityType": "pks", + "schema": "public", + "table": "example_advanced_articles_related_articles" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_advanced_articles_tags_pk", + "entityType": "pks", + "schema": "public", + "table": "example_advanced_articles_tags" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "example_advanced_articles_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "example_advanced_articles_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_articles_gallery_pk", + "entityType": "pks", + "schema": "public", + "table": "example_articles_gallery" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_events_gallery_pk", + "entityType": "pks", + "schema": "public", + "table": "example_events_gallery" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_events_related_events_pk", + "entityType": "pks", + "schema": "public", + "table": "example_events_related_events" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_events_tags_pk", + "entityType": "pks", + "schema": "public", + "table": "example_events_tags" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "example_events_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "example_events_translations" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "example_localized_articles_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "example_localized_articles_translations" + }, + { + "columns": [ + "itemId", + "relatedItemId" + ], + "nameExplicit": true, + "name": "example_tags_related_tags_pk", + "entityType": "pks", + "schema": "public", + "table": "example_tags_related_tags" + }, + { + "columns": [ + "itemId", + "languageId" + ], + "nameExplicit": true, + "name": "example_tags_translations_item_id_language_id_pk", + "entityType": "pks", + "schema": "public", + "table": "example_tags_translations" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_admin_permissions_pkey", + "schema": "public", + "table": "core_admin_permissions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_admin_sessions_pkey", + "schema": "public", + "table": "core_admin_sessions", + "entityType": "pks" + }, + { + "columns": [ + "actionKey" + ], + "nameExplicit": false, + "name": "core_ai_action_settings_pkey", + "schema": "public", + "table": "core_ai_action_settings", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_budget_periods_pkey", + "schema": "public", + "table": "core_ai_budget_periods", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_calls_pkey", + "schema": "public", + "table": "core_ai_calls", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_cost_adjustments_pkey", + "schema": "public", + "table": "core_ai_cost_adjustments", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_reservations_pkey", + "schema": "public", + "table": "core_ai_reservations", + "entityType": "pks" + }, + { + "columns": [ + "roleId" + ], + "nameExplicit": false, + "name": "core_ai_role_policies_pkey", + "schema": "public", + "table": "core_ai_role_policies", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_runs_pkey", + "schema": "public", + "table": "core_ai_runs", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_settings_pkey", + "schema": "public", + "table": "core_ai_settings", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_ai_translation_sources_pkey", + "schema": "public", + "table": "core_ai_translation_sources", + "entityType": "pks" + }, + { + "columns": [ + "userId" + ], + "nameExplicit": false, + "name": "core_ai_user_overrides_pkey", + "schema": "public", + "table": "core_ai_user_overrides", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_containers_pkey", + "schema": "public", + "table": "core_content_containers", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_documents_pkey", + "schema": "public", + "table": "core_content_documents", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_drafts_pkey", + "schema": "public", + "table": "core_content_drafts", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_field_locks_pkey", + "schema": "public", + "table": "core_content_field_locks", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_submissions_pkey", + "schema": "public", + "table": "core_content_submissions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_file_refs_pkey", + "schema": "public", + "table": "core_content_file_refs", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_revisions_pkey", + "schema": "public", + "table": "core_content_revisions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_schedules_pkey", + "schema": "public", + "table": "core_content_schedules", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_content_slug_history_pkey", + "schema": "public", + "table": "core_content_slug_history", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_cron_pkey", + "schema": "public", + "table": "core_cron", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_admin_dashboard_pkey", + "schema": "public", + "table": "core_admin_dashboard", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_files_pkey", + "schema": "public", + "table": "core_files", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_files_alt_pkey", + "schema": "public", + "table": "core_files_alt", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_files_alt_analysis_pkey", + "schema": "public", + "table": "core_files_alt_analysis", + "entityType": "pks" + }, + { + "columns": [ + "fileId" + ], + "nameExplicit": false, + "name": "core_files_alt_state_pkey", + "schema": "public", + "table": "core_files_alt_state", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_languages_pkey", + "schema": "public", + "table": "core_languages", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_languages_words_pkey", + "schema": "public", + "table": "core_languages_words", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_logs_pkey", + "schema": "public", + "table": "core_logs", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderation_report_events_pkey", + "schema": "public", + "table": "core_moderation_report_events", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderation_report_reasons_pkey", + "schema": "public", + "table": "core_moderation_report_reasons", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderation_reports_pkey", + "schema": "public", + "table": "core_moderation_reports", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_moderators_permissions_pkey", + "schema": "public", + "table": "core_moderators_permissions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_notification_deliveries_pkey", + "schema": "public", + "table": "core_notification_deliveries", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_notification_events_pkey", + "schema": "public", + "table": "core_notification_events", + "entityType": "pks" + }, + { + "columns": [ + "key" + ], + "nameExplicit": false, + "name": "core_notification_settings_pkey", + "schema": "public", + "table": "core_notification_settings", + "entityType": "pks" + }, + { + "columns": [ + "userId" + ], + "nameExplicit": false, + "name": "core_notification_user_state_pkey", + "schema": "public", + "table": "core_notification_user_state", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_notifications_pkey", + "schema": "public", + "table": "core_notifications", + "entityType": "pks" + }, + { + "columns": [ + "pageId" + ], + "nameExplicit": false, + "name": "core_page_layouts_pkey", + "schema": "public", + "table": "core_page_layouts", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_passkey_challenges_pkey", + "schema": "public", + "table": "core_users_passkey_challenges", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_passkeys_pkey", + "schema": "public", + "table": "core_users_passkeys", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_queue_pkey", + "schema": "public", + "table": "core_queue", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_roles_pkey", + "schema": "public", + "table": "core_roles", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_search_index_pkey", + "schema": "public", + "table": "core_search_index", + "entityType": "pks" + }, + { + "columns": [ + "name" + ], + "nameExplicit": false, + "name": "core_secrets_pkey", + "schema": "public", + "table": "core_secrets", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_sessions_pkey", + "schema": "public", + "table": "core_sessions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_sessions_known_devices_pkey", + "schema": "public", + "table": "core_sessions_known_devices", + "entityType": "pks" + }, + { + "columns": [ + "name" + ], + "nameExplicit": false, + "name": "core_update_lock_pkey", + "schema": "public", + "table": "core_update_lock", + "entityType": "pks" + }, + { + "columns": [ + "componentId" + ], + "nameExplicit": false, + "name": "core_update_results_pkey", + "schema": "public", + "table": "core_update_results", + "entityType": "pks" + }, + { + "columns": [ + "url" + ], + "nameExplicit": false, + "name": "core_update_sources_pkey", + "schema": "public", + "table": "core_update_sources", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_pkey", + "schema": "public", + "table": "core_users", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_confirm_emails_pkey", + "schema": "public", + "table": "core_users_confirm_emails", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_forgot_password_pkey", + "schema": "public", + "table": "core_users_forgot_password", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "core_users_sso_operations_pkey", + "schema": "public", + "table": "core_users_sso_operations", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "blog_categories_pkey", + "schema": "public", + "table": "blog_categories", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "blog_posts_pkey", + "schema": "public", + "table": "blog_posts", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_advanced_articles_pkey", + "schema": "public", + "table": "example_advanced_articles", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_advanced_articles_faq_pkey", + "schema": "public", + "table": "example_advanced_articles_faq", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_articles_pkey", + "schema": "public", + "table": "example_articles", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_categories_pkey", + "schema": "public", + "table": "example_categories", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_discussions_pkey", + "schema": "public", + "table": "example_discussions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_events_pkey", + "schema": "public", + "table": "example_events", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_events_sessions_pkey", + "schema": "public", + "table": "example_events_sessions", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_localized_articles_pkey", + "schema": "public", + "table": "example_localized_articles", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_pages_pkey", + "schema": "public", + "table": "example_pages", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "example_tags_pkey", + "schema": "public", + "table": "example_tags", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "forum_replies_pkey", + "schema": "public", + "table": "forum_comments", + "entityType": "pks" + }, + { + "columns": [ + "id" + ], + "nameExplicit": false, + "name": "forum_topics_pkey", + "schema": "public", + "table": "forum_topics", + "entityType": "pks" + }, + { + "nameExplicit": true, + "columns": [ + "itemType", + "itemId", + "languageCode" + ], + "nullsNotDistinct": false, + "name": "core_search_index_item_unique", + "entityType": "uniques", + "schema": "public", + "table": "core_search_index" + }, + { + "nameExplicit": true, + "columns": [ + "providerId", + "providerAccountId" + ], + "nullsNotDistinct": false, + "name": "core_users_sso_provider_account_key", + "entityType": "uniques", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": true, + "columns": [ + "userId", + "providerId" + ], + "nullsNotDistinct": false, + "name": "core_users_sso_user_provider_key", + "entityType": "uniques", + "schema": "public", + "table": "core_users_sso" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_admin_sessions_token_unique", + "schema": "public", + "table": "core_admin_sessions", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "nullsNotDistinct": false, + "name": "core_admin_dashboard_userId_unique", + "schema": "public", + "table": "core_admin_dashboard", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "key" + ], + "nullsNotDistinct": false, + "name": "core_files_key_unique", + "schema": "public", + "table": "core_files", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "code" + ], + "nullsNotDistinct": false, + "name": "core_languages_code_unique", + "schema": "public", + "table": "core_languages", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "code" + ], + "nullsNotDistinct": false, + "name": "core_moderation_report_reasons_code_key", + "schema": "public", + "table": "core_moderation_report_reasons", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "openKey" + ], + "nullsNotDistinct": false, + "name": "core_moderation_reports_openKey_key", + "schema": "public", + "table": "core_moderation_reports", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "idempotencyKey" + ], + "nullsNotDistinct": false, + "name": "core_notification_deliveries_idempotencyKey_key", + "schema": "public", + "table": "core_notification_deliveries", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "tokenHash" + ], + "nullsNotDistinct": false, + "name": "core_users_passkey_challenges_tokenHash_key", + "schema": "public", + "table": "core_users_passkey_challenges", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "credentialId" + ], + "nullsNotDistinct": false, + "name": "core_users_passkeys_credentialId_key", + "schema": "public", + "table": "core_users_passkeys", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_sessions_token_unique", + "schema": "public", + "table": "core_sessions", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "publicId" + ], + "nullsNotDistinct": false, + "name": "core_sessions_known_devices_publicId_unique", + "schema": "public", + "table": "core_sessions_known_devices", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "nameCode" + ], + "nullsNotDistinct": false, + "name": "core_users_nameCode_unique", + "schema": "public", + "table": "core_users", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "name" + ], + "nullsNotDistinct": false, + "name": "core_users_name_unique", + "schema": "public", + "table": "core_users", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "email" + ], + "nullsNotDistinct": false, + "name": "core_users_email_unique", + "schema": "public", + "table": "core_users", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_users_confirm_emails_token_unique", + "schema": "public", + "table": "core_users_confirm_emails", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "userId" + ], + "nullsNotDistinct": false, + "name": "core_users_forgot_password_userId_unique", + "schema": "public", + "table": "core_users_forgot_password", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "token" + ], + "nullsNotDistinct": false, + "name": "core_users_forgot_password_token_unique", + "schema": "public", + "table": "core_users_forgot_password", + "entityType": "uniques" + }, + { + "nameExplicit": false, + "columns": [ + "tokenHash" + ], + "nullsNotDistinct": false, + "name": "core_users_sso_operations_tokenHash_key", + "schema": "public", + "table": "core_users_sso_operations", + "entityType": "uniques" + }, + { + "value": "\"intent\" IN ('link', 'import', 'sync', 'preview')", + "name": "core_users_sso_operations_intent_check", + "entityType": "checks", + "schema": "public", + "table": "core_users_sso_operations" + }, + { + "value": "\"field\" IN ('avatar', 'firstName', 'lastName')", + "name": "core_users_sso_profile_sources_field_check", + "entityType": "checks", + "schema": "public", + "table": "core_users_sso_profile_sources" + } + ], + "renames": [] +} \ No newline at end of file diff --git a/apps/web/content/docs/dev/events/built-in-events.mdx b/apps/web/content/docs/dev/events/built-in-events.mdx index 6fb07331e5..751adba301 100644 --- a/apps/web/content/docs/dev/events/built-in-events.mdx +++ b/apps/web/content/docs/dev/events/built-in-events.mdx @@ -481,22 +481,26 @@ member is notified. ## Moderation events -Seven names, declared in `VitNodeEvents` in +Eleven names, declared in `VitNodeEvents` in `packages/vitnode/src/api/models/events.ts` and emitted by core with -`pluginId: "@vitnode/core"`. Each fires **after** its database transaction -commits. The envelope's `actor` is the reporter for `created` and the -moderator for the rest. Adding an internal note emits nothing. See +`pluginId: "@vitnode/core"`. Each fires **after** its database write +commits. The envelope's `actor` is the reporter for `created`, the +administrator for `report_reason.*` and the moderator for the rest. Adding an internal note emits nothing. See [Moderation](/docs/dev/moderation). | Event | Payload | Fires when | | ---------------------------- | ------------------------------------------------------ | --------------------------------------------------------------------------- | -| `moderation.report.created` | `{ reportId, pluginId, targetType, targetId, reason }` | A signed-in user files a report | +| `moderation.report.created` | `{ reportId, pluginId, targetType, targetId, reason }` | A signed-in user files a report. `reason` is the reason's `code` | | `moderation.report.assigned` | `{ reportId, assigneeId, previousAssigneeId }` | A moderator takes, reassigns or unassigns a report. `assigneeId` may be `null` | | `moderation.report.action` | `{ reportId, action, pluginId, targetType, targetId }` | A content action from the ModCP changed the content. `action` is `hide` or `unhide` | | `moderation.report.resolved` | `{ reportId, resolution }` | A report is closed with an outcome | | `moderation.report.reopened` | `{ reportId }` | A closed report is reopened | | `moderation.report.note_updated` | `{ reportId, noteId }` | A moderator edits an internal note | | `moderation.report.note_deleted` | `{ reportId, noteId }` | A moderator deletes an internal note | +| `moderation.report_reason.created` | `{ reasonId, code }` | An admin adds a [report reason](/docs/dev/moderation/manage-report-reasons) | +| `moderation.report_reason.updated` | `{ reasonId, code }` | An admin edits a report reason | +| `moderation.report_reason.deleted` | `{ reasonId, code }` | An admin deletes a report reason. Its reports stay | +| `moderation.report_reason.reordered` | `{ reasonIds }` | An admin saves a new order. `reasonIds` lists every reason in that order | A hide or restore from the ModCP also emits the content type's own `content.{id}.hidden` or `unhidden` event, because it goes through the same diff --git a/apps/web/content/docs/dev/moderation/enable-reports.mdx b/apps/web/content/docs/dev/moderation/enable-reports.mdx index df1fb1333e..62a93ef3b2 100644 --- a/apps/web/content/docs/dev/moderation/enable-reports.mdx +++ b/apps/web/content/docs/dev/moderation/enable-reports.mdx @@ -24,6 +24,7 @@ implementation: import { ImgDocs } from "@/components/fumadocs/img"; import reportDialog from "./moderation-report-dialog.webp"; +import reportDetails from "./moderation-report-details.webp"; Turn on reports for a content type so signed-in readers can flag a published record to your moderators. This guide follows the blog plugin, whose articles are reportable. @@ -105,6 +106,13 @@ import { manifest } from "@/manifest.gen"; {!metadata.hidden && metadata.itemId !== null ? ( + +Pick a reason. The dialog moves on by itself and keeps the article and your reason at the top, with **Change** to go back: + + -A toast says **Report sent**. Try sending it again and the toast tells you, politely, that you already did. A moderator with `can_view_reports` on the blog now sees the report in [the ModCP](/docs/dev/moderation/process-reports). +Choose **Send report** and the dialog says **Report sent**. Try reporting the same article again and a toast tells you, politely, that you already did. A moderator with `can_view_reports` on the blog now sees the report in [the ModCP](/docs/dev/moderation/process-reports). ## What the server checks - The reporter must be signed in. A guest gets `401`, and a reader whose session ended mid-dialog sees a "sign in again" message. - The target must be readable by the reporter through the public API. Anything else is `404`, the same answer as a typo. -- **Other** needs at least 10 characters of details. Details are at most 2000 characters. +- The reason must exist. A reason deleted while the dialog was open answers `400 reason_not_found`, and the dialog asks the reader to pick another. +- A reason with **Require details** needs at least 10 characters of details. Details are at most 2000 characters. - One reporter can hold one open report per target. Other reporters get their own reports. - A user can file at most 20 reports per hour, on top of the per-IP [rate limiter](/docs/dev/advanced/rate-limiter) every API route has. diff --git a/apps/web/content/docs/dev/moderation/index.mdx b/apps/web/content/docs/dev/moderation/index.mdx index 01b2c1b213..adbc7ad926 100644 --- a/apps/web/content/docs/dev/moderation/index.mdx +++ b/apps/web/content/docs/dev/moderation/index.mdx @@ -19,6 +19,7 @@ A moderator signs in with their normal user session. The ModCP never asks for an | You want to | Read | | --------------------------------------------------------------- | ------------------------------------------------------------------- | | Let readers report a Content Engine content type, like the blog | [Enable reports](/docs/dev/moderation/enable-reports) | +| Choose the reasons members pick from when they report | [Report reasons](/docs/dev/moderation/manage-report-reasons) | | Limit moderators to some categories or sections | [Scoped permissions](/docs/dev/moderation/scoped-permissions) | | Give a user or role moderator permissions in the AdminCP | [Configure moderators](/docs/dev/moderation/configure-moderators) | | Review, assign, resolve and act on reports | [Process reports](/docs/dev/moderation/process-reports) | diff --git a/apps/web/content/docs/dev/moderation/manage-report-reasons.mdx b/apps/web/content/docs/dev/moderation/manage-report-reasons.mdx new file mode 100644 index 0000000000..b7f2462431 --- /dev/null +++ b/apps/web/content/docs/dev/moderation/manage-report-reasons.mdx @@ -0,0 +1,77 @@ +--- +title: Report reasons +description: Add, translate, reorder and delete the reasons members pick from when they report content in VitNode, from AdminCP → Moderation → Report reasons. +icon: ListChecks +--- + +import { ImgDocs } from "@/components/fumadocs/img"; +import reasonsList from "./moderation-report-reasons.webp"; +import reasonSheet from "./moderation-report-reason-sheet.webp"; + +Report reasons are the choices a member sees first in the report dialog, like **Spam** or **Abusive content**. You manage them in the AdminCP, with a title and a description in every language your site serves, so the list fits your community instead of a fixed one. + +A new installation starts with four reasons: **Spam**, **Abusive content**, **Rule violation** and **Other**. **Other** asks the member to explain. Sites upgraded from the fixed list get the same four on their next `pnpm db:migrate`, and existing reports keep their reason. + +## Before you begin + +You need the **Report reasons** admin permissions, or a root role. Each permission covers one action: **View report reasons**, **Create report reasons**, **Edit and reorder report reasons** and **Delete report reasons**. Grant them in **AdminCP → Staff → Administrators**. + + + + + +### Open the list + +Open **AdminCP → Moderation → Report reasons**. The list is in the order members see it, and the **Details** column shows which reasons make the member explain. + + + + + + + +### Add a reason + +Choose **Add reason**. Write a short **Title** and a one-line **Description**, then pick another language from the menu next to each field to translate it. A language you leave empty falls back to the site's default language. + +Turn on **Require details** when moderators cannot act on the reason without an explanation, as with **Other**. The member then has to write at least 10 characters before the report is sent. + + + +Choose **Add reason**. The reason goes to the end of the list, and members can pick it right away. + + + + + +### Put the most common reason first + +Drag a row by its handle to move it. With a keyboard, focus the handle, press Space, move with the arrow keys and press Space again to drop. The order saves on drop. + + + + + +## Edit or delete a reason + +Choose the pencil to edit a reason. Reports already filed with it show the new title, because a report stores which reason was picked, not its text. + +Choose the trash can to delete a reason. Members can no longer pick it, and reports filed with it stay, labeled **Removed reason** in the [Moderator CP](/docs/dev/moderation/process-reports). + +## Limits + +- At most 10 reasons. **Add reason** is disabled at 10 and the API refuses an 11th with `409 limit_reached`. +- At least one reason. The last one cannot be deleted (`409 last_reason`), so the dialog always has something to offer. +- Titles are up to 100 characters, descriptions up to 255. + +## Check the result + +Open a published article as a signed-in member and choose **Report**. The dialog lists your reasons in your order, in the member's language, and a reason with **Require details** asks **What should moderators know?** before **Send report**. + +The routes and events behind this page are in the [moderation reference](/docs/dev/moderation/reference#report-reasons). diff --git a/apps/web/content/docs/dev/moderation/meta.json b/apps/web/content/docs/dev/moderation/meta.json index 752f2acbc5..fa3c4e79af 100644 --- a/apps/web/content/docs/dev/moderation/meta.json +++ b/apps/web/content/docs/dev/moderation/meta.json @@ -5,6 +5,7 @@ "pages": [ "index", "enable-reports", + "manage-report-reasons", "scoped-permissions", "configure-moderators", "process-reports", diff --git a/apps/web/content/docs/dev/moderation/moderation-report-details.webp b/apps/web/content/docs/dev/moderation/moderation-report-details.webp new file mode 100644 index 0000000000000000000000000000000000000000..3932c4b82338b6ae987d995fd7a60256584e01ef GIT binary patch literal 35274 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/moderation/moderation-report-dialog.webp b/apps/web/content/docs/dev/moderation/moderation-report-dialog.webp index b93f9ef75ee3bfb07289bc89eca55c9c835af0c3..fef9a91f83154643129e32437835dfd18a5b6e3e 100644 GIT binary patch literal 35554 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 Rh;yfFAf~e5X*2);006cY5IO(= literal 50704 zcma&Nb9`k@wm+OsI<}LJZQHilv2EM7ZQHhO+w7!c`@B7K@63JX&fNF&JOAz4sJ*J{ zi?z-!MF~++h!G&5pCW?ts`BjkAHzUEarhwF-zb5;mwo4Dz=#wkB*;e?C$7Q=`QFs( z!wLhCDGZUwRgvYG0TA^z`|LZH*_sA;huenUCExB&^!5NuJ}1BS0f67|Pkf4anZ45h z?iZj>IsnmU?T6_n;0_OQw|Zya*N%tZm;5XDtMxtidUOi?dH0@om`@LI?5hKyy8HGK z`F2{&Rws8cTSs>Xxa_Iny97J|T3(1givjCjrF)vMyHB=nfHvPRAATMnzFQAJkH&|@ z*V=>FE3$IBDc>qzCjj2(`@8EWKofxUT6?a$4KM(-0FD7FkBfJBH@SPhmfhs;qc^$- zzLUOTfX*x5TiZ&2?$_*>*vIIT@5XLuZ!H{apPL`1AH7!q0N~cU{tNsQ zFY+uHUWAg3v&uHl$_dWp%{#(0wo@0RP9?WfJ2&3|oLy>}P+HT$7Cx!)6JiFYlaVAY4Sq|n}? z2X{`swMh@|jACP*2GSA1#yUCL0aTQwkD#pi*Vd_T+ag$*CO}sO(bElpUDAz~Pgipl zP=s8Mag-7++x07a`%9Ub8S0-@Mi9>9cETFyvO?Ozy<$$0ic1*#{>0fce{O69a#avL zS@+{AD|GzR|FqFT@DPTwVF8gKm4Zpj3S0?A8leG6d1#2YvKE$=EngJgZp-j8bU#9$ z3mDnQe)G{lv*dQ?C^5p6wX|R%kf_Rx;2f5^<=uu>BBOJ(>=qjwmS`~jPrPkNe`?g- zl(OY*ePzUy^BaJ#K!W^qv0d*kN}B%)@}J>Yc7=LHPvMSllzh;1BSML;i5_Jw0(%#B zTud9})i0WTx;9SgYs=lyhrTU7$F~R0iFoIo}#U~1rJEnB7vHtT>{|xX9Lh?T~ z|0C|xRHCfk-g-J^4@p*3*P|#Dd(T*UztNhGktV(;TCP=?Y(Za#){arzV^B4v4_-Sa zDUFDZEuwjLIZE6FVm}awVbvmu3QoM_4jI37sz^j8;BZ^Nw=-<0au~I$xMzdRkffB> z@fm_bCEw3(;4qUL2ql#97PYLDHms!yMj4i#+_`0h-HS{Cn<}^w>2Dl5ame^1drCPz zowg5@lEw(XMsb%?5)2)p%1V;}j!h-6Y7FjBO(>kp=aF92LKO3Zuk@g}%Mc~|+H$d7 zODrKuik72(WPG@Poygn-OK=swv+W6kE+c-n`t6VwYrK0QOh2Sg!UwP3}Dd7sGgtWPk$;e zsuxYhb4ztuP`<*n*Hv{kk|$I@t_oX$DVB$PN+EzQjxo%_(PSu|a0CrW*UDyH{hqr< zPN6M2g_O6vf|H50J>IuI1WU*0+d3}3!kU4K5h)vgG1p*K&V%ALXAhntsE)*fk$8tA z`%Ot#5O(qF>*Kl32ilaCJ}_j7Xl0{q$rzv+*qBy`DSekM8=?lWjEJQ{98jK<>rdH? z9pH0|_kpHa=vQvUXWFXQIu?Ab>Y;?ltx1RwNk_@OurqI1creZ%;k(Q&f{gkPue`SR2^e5XBFX2;LM=j-6 zYpo+#18J*#Q`||%7s50@hGTHSah8bH=%7i$h1oQ$6Dc!@eU6FMRcn2mOtinl9R9`_t)F zQ$XSyvBR!4iGTVnK`yc#neOo_&*yt<7vd4s5rG6vSjbne7-uR5I``a4DlrqgZT^*( z{$~&vW%AY{|BLhf7j^yp8l&xcw7>TLuh&qfOogx3c8U@LxhI53mvg61Ww}c& zGQYaoR~JKU4P~q2B;DQV{MmKNMTxqta!M%!gH_&_>Si5`0Nkx?RA?pM<2zWsG#lBK z*G;u9%;q8_y6Ez6rFj!6`d!Glk#{SPGiaaB@eZTw9x7f{@AUN<^#VZCos{;HJ5CMc|>3sD8^?$E?Ts-%4e9@E3JZ zC$i)RG+)4@J2ou3hg(2`JLUOSW{*5(RcJ9!4h4l+{BS1q&R5b*J{v$XrJk%9NsC!v z-2&Fu74fJ58MjjKS#W`A@PNUwkieXR9im%Kxi!(`SHLdW8`NKrDrR<-B$%u)=pU75 zo$M|NY!qS;9_wmJ8bt=Uw~FdY6C7jEbhSJV@N+g9;+o2HNW9DqTsBWAP{1IP(8G3oS5aP5OyqTOwg1R0dE8#3kg|?w@_uU2;Ocq|Z-wM-> z7cpzeji~dHPzqQBbB5~!Rh!&xZc1f08jWJ%-;CXo!UmTl#=@c*Pj!7<%x%kGg8HY> zY;YAL&`|B>g0PAPA$LhtToPCEA>!Rb7uoddo zAMOk81sC>Qd z`H%^sN`Xu+vrq#`!o)c5q7`r93#d-6g4sOdJ=7xK>u9n`K6{Ba2wF@Kqd}}jnA88o zjy{DBpu((~(`K`9^!8Uy)hoXZWSv1MyB$yco)5DkO?eDFiR$2)sbEE2Y&;(SJwm~O zGZP%Q051l+NgZ5YN7^@o@+3~JAwH0X?M2^jgsg&f%RnO~5GqM-eMXY(f#8kgkR{wO(g|g9R31qn z197nV++FHn0E>g^%{2C-zxw0t+uOvRUk3l? zyZ?69C{y77PrSxEx_4H0Y1Y(vy1*Swboe_eA(D(FnXjo;J}`ZiqOYPx|FdT9!1&D< z4yWzj-PT+?ZYYrANhi@{tVS*A;t`?{4azH{5A(Ye!x&}=B4$YcXTkuJnM;@p_=p~l z{ztm;Zyfsfr33xYIi@(UCW)Ir|Lt0BTeW0wqr8CFbhm6O^*(Zx7o|($Fm@+*Z z?i5N3r!?qLeh(LIAD5szCT|LtXZVhA3JdWsNze{VK(vL)wjleQ7zNREo*Y5=HxMX` zQPiM$*puC2JxWB{?)h%I(gZBuk_?^2@hw}MvI=E!<57TVlboiYW981by^tn&VWK(< z6#kNo*wpo<2HKn6hfA<(wA*2+moc^B003wZlM?q*Z}DME1>UimBohA{uK|cR;FzO- zd*KNeY4XJnVqsB5V8_abkg^#nRpZyTU4b42G7sp#=*Xz(0JDvCeXY_6l9Xhc7@PN+ z=>J9_Wy-wi)soWjOlTT+`s1=wn8a_o-b+WOKy zQHS*UVf@J!*W*|(WxyQqos(D681aam4d%z5b;WFEzBPcwH3^IVvlLN)GcVxG!kV z^S_hMe_aLRorW~8()POqBLB==|LVl1-S%KtVq;NtL`yneQF|p;!eUODLz#? zy1O%`kEc3zM(pBhgcYHenilx#D*og*`Z;L0XW3rg9Pv=du02nGS@BwB!-`$MI?@sm zt-c5&k>zcVVm%nATKt%X3uvGX7%pS=9p(fE)#iKoJC*1JLfqXTzj0Y9XoV`1&N^VI zzgirpb?pbX&}ltD7X_fT`R1&a2~+l)N}~MqY(YkS9X`mHO)E8l+3P%P)BP2@18^Eu z;$x%3URlgP{4_fe+p{H9ke)m>X41P;Y110>lLsp6+%l^Twtkgn zK#Jr1w&-P_=inzTub`l23@Q4!A^yr64&l#%j89hrLrhW;)tF6_9H8Q*z~}}=OY&bz zi^dR&4fS`Nk}{gGM$n-^c(Ivz~75He+9>XBgsF}flE=z z395uWQ}FI^HcGvCD!~RP4xzDXLZWDDX;?+TInIThqb*k%70azy;tC=C2Z+dGt(Ao6 zB57ji^S%UVpR~u$ZhKuN+(iUrE zti_uBPSdAyB0Zsz39jW~-XPwMC?<-a>%L@c+lF*ndUIn%l4#7!!RKW-Fc_QP4W_>s zYIXw}(uxqUs3v9}Gb#rSF3N3h+otG@RyzqWY?W=@cvN_6cAKm?;4QrGV6lQ=t@ksM zOvSm5lo zkYT0ujEr~mw*;nHrSaOjl5T<@t+@^7PKrHq2H|&8NoY-DBa>4C)q{imzTT*i!LsNE zclPTG1(jgnlfbTNPZ=O%HpFf&JoQV1ZabI|sX1QD*~eyk4n=OS`0{rABf%=J{e~|_ zVVQjtEZs@{IIj~ZOH6V6cOYRH(S3$aSk23n>7z(b_-|(cFoK^5gh)SdY)z<^a%r1z z6!LY`TMJ1)IFcU6?_opq;CAeCr2e?{b|GqYt0t5SV0)dUU#iWG@`c0m`&Yz@m*;i!Plm+%Qaj^b9 zxA`vvonQ?%^dIVz#vo%@cp!#*yozupGXB#F{jJD}xX|%CuvU;TuwnL~x~ZM0 zn?#&9DZ#iM&6K$BAMWWNNNxaFti>#fY*HJH(arE^eKTz#mE3P&_s&zqCOoZLN5^wS z!LYfI@ch{~x!5ERes}QQj~Lqg^mH4tTm!I1vh=J}su0}gHPd(QJ8%+XY{ft@W5kIg z#>H0{4~g)ONcx5TZ&jChIfNdrEJh-eyygaaT+E2ZK||;o>Nx5=^Uu0oh14HyKUuzQ zgpf~inmb1;r}**rXQ&6jusH5P_)VE!-}kgzgfTnBPYYvl*#OxC5s91ijnxQ*J`o9F zTS7O6kuR{G{aY^ZJLJl&6fE43c1G?2_g5&#=Tr^@z;F^r*_ijF`&%EtD=|ZL}`ooQx^uUF<1iUF;=i-JHGR zeZpVO2Sh3>h;X^9y10En?=~W;?GYpBDPg7F{CyAb_rWIwvh>MeXBCvZ$EFd z!TDKZrS4CR$3S7v^jyWShXBwEBMWL(Xh||2Z?~cg1W~=PSc%<1HiZVO%X@hpGe0@Z z|HIGa#ZTYpQrd;udSr`k!lzAt&p-RTMFL;)9#ij6_mo@fkst%3T4C$+Bt#9t8{c=p zUm$A_C;SP3B2#wh$5XV~FeJ9!VVSKvOu=q<)zay9AXK91JR!c-z^6`r85~bDX#ODL zJv9{!f9M-oVNF0vuM0g{&b7T#y{_u1vhHr_jO?J;OZTK4zjiuwC|!QC@+=dD9pTG& z19{B1p{~8O!LhZ*B|9J{4+c4_m%fgcNj0Jn3(GjefGgv>YX3PqrvBk@=*ZGidmog> znzYV^R2`ZBOIp{H5-X;#@kVVdU@LU2+9`%aPw`Rj;>*q{d}G|P8jif&_bZ^E>Fko+ z?L!RZ6xZQ0*$W*{&M6D-hp$D8D+7Y3Dw@XGko|h9_ps6u)`!#b=6vfOPu-il87q`o zy%U*>toeR6=Gzu^c-O{eghpasl%SAtNVC7tP~bbmXNL%zdb!jvU}>>-;VuQ%Ttq*D=uR|#2e9!iRJ>Bm`_Ne+Ak%z82tf=qiYa7$?5Ac;27M(`US1)U2X zy88a-dNAN#DZ99WtjX*$$}HU<1zg{Sgy?Gm%{kE85+3;zKa%5EO~0_BtqZ@nn2H-< zDv@kN;S*4L$>DFFEPXQsvs!s@7>-ETb;I-DpJ}Du!Pzgyb5qi~ zjIz`Ap)>F}E#~)5fp2Cu$&<`RDd8h!x0qY})qk|?A|LjE2NwN4->zn?x89hj(~|t8 z7d~~$Wt+%py5+oA%k20mZ%2Z6!172WqV&`jX)Y^sT=!i`ESGa;u8OEzr5qkpM9jgM z5j>Io*1Fzn!8#u$NReQVhY_n=Kr1Q74(-Qpeu<)Pp%?bg3Ij!jqor$FErFCY8!V9( zRRrOV$84iKxjRTu6m|sTocgERE$dMX^XzGgx5)VImt05CHMT=d`<&1b%=1DB;SHji zxrlVKiT8*#1TxQ)ThbusnL0jChu}3#lGI#dlZHkb&QFqS7xb; z7KYJ9-p~nVbI?S0*dfD`$*#-n2pVVLZi#C?wSLn!0QfIJSMGWbNEDX#Jfh!0`XbWG zZG^zHz@!#@J&k);%JKwUo&QOpIZ@NMT<1P@E3}#bDaf32KiKiAj0WePZDnT>8SN)u zIRylSR!Fsx^k{0#JHO3a$}rB8Qb86h!S?_<_F`Os9$(h(WRS2hzQ@oOvHmt9G5TrQ zwOA26Rb`++k8#aiW&~~1dHSm+PJXoGuI2Z@j^Q=7Mha|UR3&kka^F-J86g%B7?y-< zb1CP6$7{mP%P7Dl&)}V%A2Jy1k&bpTcB-EhLO)8?44qLp?YbDFpA0pljmvi0YtDkj z!Z88|yTfRTniMi7P$LLRq$l=ukK!#W{#G+Hg5=#!-z1cO1^V5sFq#dBx@e36Ghj{b zyxc)O4Vmc3jDA?|OG(0WzCyH47OX~Y>1{;R50-tyLq5zd={FZdNA9~zpbdFeJfeRQ z+)FWM2mlwI&dujLLOi9sHFDDvG1^xV=jK6f88yS9CdJP4*M-b5p)5!ir*R&($9 z!~-sVktxZU#V)baGq~Rp!n8pb-3+!p8;JM z!IZ~dc0F0d)k4zlN~Y<2K_{ZcZqh-h9OEw2v+LwUII8A9S%2f>r5^(0F{Qv~MgqJW z_x&%sxtxJ&N+njsobLs#j?+=(jir6s&+ye$4F% zw>gfCv>GR#FxXbY2Jmx`A4{vt?S_lxJ9qPy$Z&tzY*d*d`gisX8^&#%C49_F1DEu) z4->iwB-5jKpS@+Qll!e4uG(afFCK^=Sq<)rF}zk;v?Y1OOo<#ezly7oi;ED2U9kG#=UVK!DXfw+2PS1Rv ztYjpv9NQA#ypfpKDj=x|gf5;cR+y@#aa|2?{S=Nki+lWKT7x3?3^;uZ1ENuidg{>w zDP!MQ?^v)C(mi$~Q=b9g^mZy@zaIJXgzS3POii_&l~sTTKjTpO+4Q7-rp61Mg-chuO9p)9yRv9Ko&kHPB_x zSu=t=M0}h9y+m`?Jb3*!=++R@;BkEbcNi%%^E88RT0-GhG|qtO$T$?^P3gk0`lNe% z&|kI!PF_UE57ScuP;I5)!39ystR>EpN;9FVgY3Hm4cVqp==mzH(V`IC?sGEz$nQep zxDN6?hY!aYM_{)9CG^mUoT%$9zQ%iWG~`_}%%BNj8inVI2xLnVLV=|)tQKultM5f$ zLRE4p=O*-la9#Oim#0&kcQbQJ@)md?=3us9kBmVmLR+0w02aca`)n5^h(auhvHwAi zrB<4JVkQ-wY)m&Yh&u|-d0IX{@991QLh>3_MNv35c;=oc^qobyr!BcwInS#i>Ro@} zBX%|nG=bpi&D_$CHbSX6VN^f;n959!mMbpvH|Cu97wV7E-YgmPU!xS!*MQ&tJ9{gTa z#e$-gePwmMCY9%X?m~6~u^UZP&EhwoM zE3g*)tb6fv(91m_e%H@9a%Xxh!DtI#&f)daMGP9_OiGApLrvol|5%mkyZNDFc2vRs z;p%vxxLOX4Iz2*_LF*3kovrI}E0p+kqo(Qp=(8C4Yc@^4nS=S)oza-6$VqwFqW#zg zJb!sd>B6gMiT){hW9;7imV0)H&$$;8o0;oqkLV@>S0BO}apTN63@ zTCw4yAq4MqQ-_vHt~8>zthwnN!b})5G)fOV`S+HqC!5qJ8}`B!)Eg>5e|q zSdp7D@_#Tk2ug@jubUEjkL9j0ilayWaB*89mv2G^(Qtz_nQ**5VfviTW;kLExi^V0 zGCsNS!Rjhi8kTo(M(oct@L?uPtQN9ACv1tv9CLM4knkBe_P7Ma1(x|tW`IzrSX;s& zdnt@Wjyp?<5z7D-JJDB3>65pdRM#WUVH~GxgCjKOlUErn;bO6sYnAy4Itg|n5|(=J zM?{G`9WOr}f|9h6N@|u})1_B3kIbu)^94`1iS{uB0UWjc6sw;s{lS;Dpg`C0x z^8Ayb5u_>DEJb)ST+gA2mMnfiB?#7{9O1S{JJ|TDhX2d7c2-OKbIvUhK7Js;a zg`}H22QKa@Vgt=bgmgP!{?sLgFCCAp2a2OILMJL8<}uT$U{Dr0kXhBs3aag3zsT=% zrM@#oxl<^puxuxbbPyW^JW|vpiu%Y9iOHc@P3jdcp#0JsX~&VQWqv};WbteKSAUAtz!6%S*})yaOS_rmhFY> zkUf7-*WzM9-?|Ew%|Bq;7{6~>%BRY|jG9d*A!YwymcjhSOU|AVRYTXTfYN z7~Y*7ckhDF=0Ma`3$d#I3|FGX>h&@#OocVEw){h%DjYAQ<(+ItYUp!G;pIM(i$-_w z=epX+#PG>l*itR?0FD|@aYbZHmYq=(_mU4cAD$c}rV6?^pk)s2O}UzCpdQ(-cyQS{ z&smI`S9)q!O@14QGAiMUeT70c`4SM-nOj`=k-T|E$fF>!4hgB#DMgW4SFZFJLqz3L z#U~oBiXc_i)OJrAzL2Y*L<^+2(JgcR$kS5IC>a~q>BZ>wEz4KO+U;h|YztBD8e(d6 zD$UO#i|&{Rk?5H2w|5ijg6EGeV=k5`_9rELQZ{`!1GzcGd)N_3OTvo)O1o6++6!Gn z$SkxouljlN=J&3ACaD%|nY>GUnD1P7nfW)3@9K6^+mvUf6mxr+cuE|OM%nYR1t*Zh zu!%&`sk0OCt~mmbKK>9Y1+5jX(szrLdl#;x1(sV2Q_6Lta&xIA(jN*Xw=Q!m&ra$T zg-&y!$GmLgYBRs3^P|{7dGoErCKoy-4AO)cm>yt9)yxm4Vqg*ocliiP`coE>fZ_v~ zG+NN8HY|jDH4(`Sy;QacEhSDZ8hK`^hB&sHYlQesv*JRB346+Bg#_P3Wpt`6xPzBh zBNsqCM9&)blu-4US9`s{s_;9+qP%T+x7;#d@xB#12Ex!w!LTQE6iCIntCM1gO__f+ z8Ad^$9;vS$xko){IqdFU4?;YeXi`(0r@MCnLwSFy{{<%IVUW*AYsold{V|`Cm<|cB z-hex9twl-C7X2LU#%Brkk^N})QYHNx$fTKczSuotGdjI;!2}#u6W*+uYZIc%cEK3S z;ivm|QSArHDgX`eeG;A`A()~xIIlF} z2^V5m?enF}%d?V>!y<40@%O`hGZe{6{b`0+aomQ^sVPd$v}zNTCA$0FpI>TLLjLkb z;~d-fHkjn!aW__AFYQcQU6~6*p^s9aVQ_Z!OJe7T+3UW3>v%gf!Nje|eIRguS6{s{ zYP2acQgzY=2*Rh-7{970`#=UX=k+Pa$Yckb4qO{)B67?-0B3X z`>H%wa>SmKU*Ae}z7lJ!X7j$Jb^tUCcS_BfQmGAkQ1=Vyy|xBv0IMYhSk9A8M)^Uv zJKO;=9QfYgk6s(Ey6}=#^Xa|D5cWEd%l014pC525AzwA$@=>rGQ~(@yWRsexY9Z|v+q<>|a9Cehn{mcbrltdv;G=|t!)qx? z2?>{((iIqYz!bHn(R)QcY#Ot89+o-2Htg`8^aA3cRdmst9w1tj5C=in^78?m_A%7;~{F{>^3J?#aze<#Z(A>fAbGbQYQ#xDq!NHMs> zUwr2J?lN@ZnblZ4kenbtRtO>uxFLVQ6>{O=Y`AT^Z?oziFD=p%X!c)bMiO9^feA8( zWM>vc!&^s{=YN@;^Q25bmx&~JoI-i(LN<*~B1}(R^zY7gF=?aBH8>2B~EXry-Pck4k1^;C4f|Y?XGm zsePoYXKE|F05(&@J_%Rip7ydh5=-xm;$)W|_0MG!M8w`n#k3Jkmqbc37VHUmsZ)Q1 z1ffy*tS4?m>Nkl@=730fPN**LE~c(HLgTt=7G_cRj0lJb0~Xh%Hq6T$T|~T3C(BCN&bgVf9cDC z!)LSVhyr05P)JPV8RcQWKkRQe_Q+INlbQGkD3L>0+^xkmo^}WbGY_7B5(+Dxx^6eL z`9LsNrEendF92cLX9qcOZ#`t;gDprj?FsJ}^(%rtA!H z^wNH(IAWp*)aDT%?tkZ>!x9q`amMH z?sW};DV@qt~?*nG1~5D#w4U5FFs$ftjug|+vY-l}aV#x)7-=hGbR zhZXPptWQ|#mT=OJE|7E35@^aWA*?Igul}_6A$*}e{Rj{Ephc(RFOVyi@Az3dq7;AF zR9F9H#fZHc`K63NAx0!;&IRMiy~WumOv)CQAu6OeAl*5Nz;GU-jfe9c!-~{?f1NCK zAXSKv1($Ucy-eTLwygFJ#M$AjScYQheUg{evk6jh4H|VESCVjqqvn?^+CIOjCqu?u z^Y|5H*!%qH984Eumc)7>okwK_gP-j z3SFz!MO}OnCmYaX>(PR)_f+?t2uLHL5ioQ_w43Da@k1|3IW{Zv zFAXeeEAPn5`auNHp5jMxGpQ#8h|o~qu=kuUkjr`{@Nnvxd3#^L^Z*%CrYFLl!mW)$ zOv_^Qp7xcb)HdsaVW4h~qdZo6Fm}f7DJk!lug`Kp+uEJ3_ z$!^Yx25(sk#73>J%*!fut{{=NN50My&G!~mOtMWUgxss|^M_*xr*}=qLS!UCC|`~@ zWOWV4E?j=~$Z(R8uhij(deCD=#}}ZvnyOHl`<0BwOB};15ixSSz+v$q><~w6hBUSzwjgy@MB^ILbUk7<#A`83^cv zx@y;Rlm(NI-)gHLo>}H5)DN`Ixk1qB_#`a7;?ZgAE-?C6FPa^pHWl#I*SvI=?LzXg zdsM168}?E7I4p$h?1oQOD$nSRTjdhdvy6U>-+pjGuU~+w<}X08IjbSj(v~k@X?870 zUQ3ffz*&hQM5yw4I@t&ZQ$+_n;@cOm#smR&HS2KPn+`p zbZ%D_=RdH_MiC{aZZxX+CT+=BJZJeSo>c}mC+(fmcIyV>|I0&W5}QmSCn;-xL0RzF z&>R8ykU6eek%m|4AJ;ydgRCt-*qlTF-W4!+@wfSxd@*T!kO4322wk?~B5|`60{uINl`HIYoSK88Lay z(eDcP+E`>8eIC4X^CYt!ffF7Y4vdV@cD}+{UKmUB#>h;f!6J*dVPoXb70aWm%^~Hp z$=O)*_mO=RqA6tZL9#E|NZ5kp7Hc8pW6kOi)fd)P>_K8{IZmB-ne@k6k?dX;HL|0$Z6>KM2NND9{3@l zZFEUjojgGjB)aTnA``Wp#R)6vB!u4JaPSo9V3{6y^_X-dN|7rKFZUU~wGtG$c245ehjHL#^RHoqQT z^z%EzBqTpp@-^TwUI`ZYQ3DGMdNuq;lCYC_h)yolQ!S89QL?`5a8yGbkhN`cRD;=Z z^RuMt>}nnP;iZh~U%vNc1J2CCWOP0OmhtZK*$MT6l7T6#@9Kw%H?OuuxQ*amM}?1| zscgblm4+O|S8V)1_$c^Zisew%S=tBb6XE9g3YumRh43>`Sbi_Y8+-XE1PZ-tV}lv! zK5StHnP%xYwU&;C`AfA9X@+AzbnxqJp4$}J80@zwYnCs(#pvwr~7dc1O ztI!Za+EF@q=j(>NW^I`?IPyRwb4K%kT75}V&p$X}@%GtP#2;7H(Af5tWI;Ie5+hUY z%T?FN94c((+73Lu@76;X7ccP^fqmlNsgq2sIb(@6*J=|{~F&T zRj=G3T$?$LJ*DNI#P$s#%z2x(dxvCNt(jKY6iW_-L$|mtv7l)mhg2t5q);8*KqLQ} zki=>2YKXw=cq{xR2GL&$t$*s3nR&KqAfjGzVa-Q3cST@3K7$Bqt7pdmgyuJKqg+-1 zopg0yQ%n)H*2G&>7vi!^7F0Un?M=u`+grvMHY{(_9DyMymEKitse{sgD|H2$9-TuW z`#R_}gSYUwNjZI_j~U0@0zxXO=b6n!u5kdNd6I1S0+aOSKXSYbk8sr-JeKgn*k*S- z(msy(tcLOMY)s897ij}PZz@3=L<{-J<|OM}b9DSHbO#6e*?oJ@upNql7W>25xG&6dZ}e5%<;%aAl~5C6MR<7~R9yxzDg zrr>RD*d*}dE#7vz&hY%?d!qpRz1?r@yQ0g9=1`Dau;Rg$Dk%1$VfjpulG?4#CQpd)C>^GtRXy`}f)EGV|q$W?_mX^#WA za2%9h0*rzA+TW2JrABB?G1zcFt-1`08sJj-PnI)cSCQ1E`}RHUTCiuG_vu!5Fmo~( z7tNp8;sNW(=Xc#o=f<*n+5t88E;cU;XMFyG|G&B4eEdl)2oa3qSN| z1ZF49N65EuDS#>ua50b_w(nARm_kPjZC{cZErYVZkLcwuV9iqe*?5*;<&?Tf*tW0~ z6o*mvwUU%4nx?qE)vQ*>N7}?kR;L}+HKlBsN_nC2EJ5RP!w8;xF4r4@60#VNUA_KA@sj z_(}9I!cxUmFvuy`sb=ttJ|koP=d1Xv_(h`O423>=ARyfUARtx9ARwRtm!P~NDt0#u z1FKef=yLKQ`!i4=;-xnl6>}ewg zXr0v2MA6qWCkLoD{S4RXi6lSaZazD0xH!F|qVenLS5sGWEzgY=9OOSFA8R!$ejEBEPx(e=9(R16KC})EcQtYXMZnrz3~L>dhIF0 zFp)hwyXWuo0+ifBP5wZb zpRtt$viSpvxQ~p%J4s~3)kqh+O?i|WK#z0Rm|nXs1AD^p*1_qfUvEL+deDL5M)}j? zNRH~-3SK+bhmt>637b`7^^)R?5UE!98T~qn`8(JXpZ$KHVR$q1^o4yZ!;CCV^j%(0 z(soe3syH~&p@^<0kcNx-BvccA5Y9pNx6rAc$B8Wa!GA9|M$v<{@0i93(vQls47qO_ zP(~evr=JR`?Ik4RI{`5C+(|h6Ngw*Ot5phSdsR4X_p7Ez({}yI!Xf1+{Mxqenj+^V zhvXhAu-43esjxe~Yl1D}6L0IA@);D*X77qq!JHegb3p*4aa8a0eYz ztE&*Frl0|Gd*7fG?rxnnG$ow_S9C2FRb%LYA}Dg&8ZYaWxzp2p2&lXUDAiI8HetnK zcoxC)Gd%6pI*}+z{l@3E_86;6^-u>HS6lO5%qOLu^+c;h?ECy3iIXtB9RLce1{=(A z=%{Ja;wV9KBa!>&*>}J}VAihj-9}WR^i%g@2&URf`~m{YLns)}7oJ91No<%=k!6zL${zcPt=#)8h?T`SEN7pExh9FloI(s+kU zTWF=Qs`#bsJCq1c0s#c;jqeA9bmIpE*Hr1PP=2SsCs4e0WgkQJ0JoSw&47CVMS%Yc z|Ey{F4(TjZ{KJRSqOm@muMk3p6+QX8I(j`c*K>vSXgW$fgaB>~v;)OvKuk)E54bi5 z8CdWVr_2e#>f)S&{cqHhdmkY92oZUbUSDCdKU?-p3jt6fS|SGS(va-BnFNoP{$5;S zTPWk+c9Fp7V&OTd7|K1qRoWJ&ETsrW-s&wohjnw*8N9jFn|LWLJJ z86JDx_;T9Qi*+BIK%E4>F-O#%0+x7hmsegWesdZjGqNnmNXaZ7b%W$5`;!Vh(n&GD z3uC6nf#&XbxJp%ZYQud2*-B6sqgtI`>0XCXRm^gOQ?vTO(T1uH(3@t^oFkjg7*7UB zmvzVHu_$^cgvQv;4)!ytrpo3$q)+1q763LqvgOE*-3Cw?9!}ALQ3D6w(uWOX_2z9f zETC|06Nc?{C>dNDT1M2X<_h{z8t5@8z~)*l$3P!2r>w^&TBKmfn@1R_E8`f7Qy_kr z_CYlB{tz^NwL*!OYajoVd^x|=n79D~qWJy+2Q*V%(htlXcc{lfe_sKQN{qjmANJCW z)-NC5fh$Ny){MML`ZZS>6gOB-FtzIUAghpw%bF1!-g-&VhioAz3yfo1w=5JKD{*9H zOY#I%R}eM{-hnC9G;IERTRj%**nDTq4^XGz%QA#JKZS9@=NbH1o$-@tH2|@4eD$6f z`0AS{9=P5YsA{daHb39sPF6555!5pMC1QrZm~3>EPP(|gM!}^E`#bh~j-rxg&K%lv znc+Iq_D{mga;yDXsE&x23I4`O^~hTIR5;h|2^`_v+7Fce$y^>OUP?=AG4^M7=kjuI zl|P%(Y`OP^(q(myFZndQxcKCL{1Q{(qKtsriJL4QUb`90<lK%YZo|-(0 zx83(ON8tB+7b66_>rdscQ=GV7crP9CfoR#{cRt?(QAUi+2yvz_RSS6?L?bGXDpH?j z@dzTK_?PS$1|qU#==qtgt^X!548AaW7cmrKeYYToEsHvvyXkddyV8(W5kA%AhK)?} zTT-;f<}Z%80ysZSb|x3Q*EOO0E)g(8C#TAl2t z14Hz)c4soPgDxl7{+p1I8E96{)n7(+*hTY9F>{@mQ5jN^Ghr%VG#)M4H{Zb*NMXOt zuN#xoz%~rBWHpYXZaM#CQ6Dp6bHY+xzLzJ)s}zK{H#~^dATO~AkmFEpsC~UZJ69qi zbso1+((fEA$>0WeunqT8LD0jO)>|{5%d%>>u~FW${#7$_i)UL%~?dF{EFG>oY7BVVNsr8S@zYB2Wa5 zm@h~eK_zjh+|0m5<#<2JJ$m;?L69+@t0f(YmiGSSf5YmwnhC9cH7Vpv{<9O(QR@qH z!ItT%q45EKw%?~QbT#WOZQ=lew?$JRH>{q6=h)SXYX_0}C;Tm@BR5)hvu~_WgDn`azQN$|to3q=D`ZeKwlk%p{@1 zBj!u-_8cA@RY6yO2|EeZ2^$}N?tAI@YlpSk$8N;GQ47zkY{hCrem3I@wyTE(_B@|& zit5}_tursG{tysUy()e&%IT}7dro31-|HlM^b+;gN?WDzkg!z$!l_&5TuOMn%Hxou zuDUU?ZX)$QSk8bFfmn6?^DQSm0D5ix-RtjP*p3x7ji41(Ppd8`OMT1G!2Xhj_fSz^ z1UW%gly(gwp37aXr2ltcftRv+yQu%6ra$O?CMVxLFNWV=-m|?onoN-lK$$l4%Edib zh3r31!~IZ^=c$Lfh$_cu-bwr7aKaN`>s5bpYNxdG?zA8z2Jd0T#t+*JW)Xi}Sbiq; zh+5X|z^@}a2`E%X0!KYt!71+?HKccJ)m_uXla}AS8H8Pml?d-BSvY{ zIk9Fc=mLoexcb)n?(;s_c*rkc_D5_gjt-HbfvG)Y={u9Z#Y*_aobaHjS~N2dA;j@v z!wGxW>zh&;{`MU1jx<_VTU@{Mth8a*&EE*VOS}e^z0<;oma4;TQKG@#?x$SXaS$){ zyVSFs#obBYN)wqzzxC&VRMyiXvEqD?>}z9cVvSazb^|iM2<~!{C|kMn(0V8PUGIL z-^tnEbuC*_$@G)^g8Hw8INbe04gtY4egocU#@S1h6RYKB?G#K9Y!bjjV63$eBy=e# z&>QzD2trycTITto_kebT@5OwjBgkx^%>4ecy|Q75?jv-BmkyJ}f|b2#2SfV1 z_Asxn-=SVE?07=E7a=7deLNvyTrM+^CC;8~?B?`Es!ofbd50Ix;~`wK^iV!w4W#G< zs#m~cqY&PgsJ8~&*DPX*dzFmh|J7e}sM-8icmum;679rVYn}YR{<%#6aj=5li3I!M zy@1GYV|Xn@th^dPCVWPedNUK<+WT9d;q2-;S16gq6nl!^y(qvys{Cb(NvXVX9ubf- zVp&YU_R6R?%vP0!wDxj~T0rj*V0uG?tZ(<9*80dhs8?VBk9Zm!$wO(nmqWIp2suB~ z&bHYI=k}9k(7P-3L+xw)VaYRuHOt@at#Zo0wl5RRP|1)@-K5dTf)CuiZB%ryI~O~S zQA}fb>Q}!$GI<2p3HLVW7e zN{JrcbT{>X8~l_g%yyv>AWU!Dn*OpSQ-7gz^@L^MCc=Y%z|(IEj>3hYls5Q&k6QMT zgPmqz&5(|@;Y`{0BXXgUSnk{LQSe5fcYv{bl?(TuuMI(@>?ZHxe^Q>654h+nPF+%v z16>;_e^WO_LNEYA4%qc;GpB)wkdxtXv{@C2Em8!pJ=VnAa5~+?C%Da)4tZqBG9imx zLpsU6rK^na8_9B)GOfoy?1|b$CvLVrkcH?5eVhfXsEk+eo9`N98Q?J(1{lTPG5jiGj_wf3}zA(p+SOaqz5mdV}0&OxWDo-AxY59 zaxl&7{*_mc>LYj84R?(ZrDa3<1T%llYsE6k>&W5%VbV>YT0>w3H==MUxgTz8v(9Uiq|bO1^L!Xhcjy|5UR#;UWkvJupG4pSc(Ql$FmH(|BBFAsX7< z92k5zXW(S-M%E~{w0IA0^*QY`iRB|&h-!GA{=tob)br+XtBU|7PDAEg+Umv!cJZ6V z!yu=ZQSO1t+bBVoXN*cvdb3axRS$>U8&olZYd3z1)I=$gZSeiewFF%dI$_*`E_GEF zj3xi@#Dxdw(66-+R|R9Fwhey@%7|dz%Bwzu-~s=10=;bGsZ6~5$Dq_;!CpO^_?{J+ zxtqm(!}^`zx;g)@J(h)oiQ%5?FfL~i zH{AxGzN_Pjm))M~gn%sgL^n*5q|cmtYa0B!}hB`9^ESyh#< z-wzBe%hLE?j#|l?fKhV)Zz=lX9K$lpyWX6F*6NV(p=T$D^_e~2?;7sdut5hl`Qw6Z zeM+Dp%AQyTmWJS?9N(H(>{D73rG>1z|LkqU%$(Et`;$k$G4;B_A6?$p{Ck;mZ$Rf_ z)@MekghmgWM&IFsV;EjUNUe6YgIrDbs(qdO+5I~NAs@@VeyLf***Ft-lhOP|AIv$; zVy)(AhxkBaF>_)=on0J**a!+=bi&{7J>(wiUybzOO^7a^Z0pGW&$^woqO zLz)k=AfsK9)MeTfiJv(O%6hnbfg}=eTo{p= zIzyWA;`_5(K-wi#nea#4m1eOvTVHTnyVWN`T_I}?#M*%rSdbo^=mLX`WYA~`f??VY z#b`vWQ(&W4rug69jM*f#K=b3W{}^Ha#214OGbVUc)K3i?Gs{PHC50b2)*6Ua^)mwn zR?s;m3m|qxt?A2qWKo~ky@M&EaZAxqG+c%*TQ9L1$?gfrOcY_!1BptWiv}w>%k-IZ zFS*eAtEh-I1wc?fX0p+nCfOxO8b&uib{DiO?Sr9sr?bHts^*YEK5`pHXgu!}$XG_g z11!(NRg-W_y|d38+q!;!YeYjZ);sfkD;4R+|jSO^v?&r>G!A zX@WxBQM+}GgHEj1#UqD6dh!8c+EA-yXhAc^y5RhH>*_2mi{jKSShqa6A+_dw4?*-I zT_6+(-TrakO6XlJr^@%0{?;d;chV5E0-qUNGl@WJ4_K)uPtZ{Sta$(ctPcObQ^>ga zUL@Jy1oVG5Fdz!L>#R&9PwFSWBBFUS4~HGaRU5B(lh)))LX7t|f=k=79pLQDQ02*{ z6ZWqNP5B}{RGAqt=h1%D;P=NAiOs7t9b(HsozfCQw`CT6kX|7h%)=8?bv^x1m%r;8 zE)~Kx7Xs}{>?(HakEGY|eBUi6F#pwLDP-wXp}Wk^wBe}A9fG7^wtsQ7|K{&;npGVG zISL>5dMGXMX;^d@)^}u*_MODeY`Cz-^wqf|_I4h{OZQtW2XdPXHy&(yjzFM!KUHe) zeZdc7?o3_xp~>ok`TPv6`?|o5=r5Chi;5psF;24hwrQ07V`ZGxZZ658<>GKr(m;Eb zgNwcLRn>4G%DwWeATR`G!j%A-9P#GQtZL?|b?luHh!UGC)~1x)*Elhs%Tc>RpW&9k z#PLO}Un{;zp&J!1sZ!(%b=NfV&*cV(QlO=?zoYak=Eam71auRc6j+ zeSf9waiUF4%ANHHBy9g`eszqU4u-b5Lu85sVY>86#Iv&KmIr@sElEtCLu>OQd!k{U zJ0VIp!K0ssy6>d&{`kS5ysKtpkp{FE@yz-_^OymJjjDPQ;#t%|u5rH>04H@J;p6dq zU9`J$)bCf@@xo|GX&R(ZE1=!Q;2ZH9-^COw;GlXv1ijvr#C71>I9^Q4WvWj%ep)Wj zE>ks0#@gH&VJ=?LhsDYqtG{3aS&PuZo{=_4MmWOU948G@A%T1fGi&DT^?P?&K;RK( z*8qDOLF&m~718P9am{Q!SbmIj&}6#`fFR&vJ@PrYTY9Qx8B@P@Uj}#D>>Vc5`T>PI zl`Gd2`85C2!UuNTV8b?rLXgk<#4_T@2IMtl#nz^{&$46V0AJNGup8jIFqVkG!Za)V zq_p?ZK#*Mh9Umh^Fo`UD(MR4f(E{zzMiJ@m&=AQmyGLVN81&7?v}V8r z3th=i!1c;l_wd#C`BR>i9c%W=(Jb{lp>7EPfUmCY!CY)uArOtjv4AAPbL8DC2*7q= z#74?nq5i?nKO%hal;?J^y@qNNhv7)TnRbI0I>ux;G%r)j^jXLPVksitQz)0TQBkDq z$LM+^>h@u}h&ctW3uy3z_ls6F_`^=+eK$18BdPcmZCqZDOCt$4!JIl-hxTPHK55kZfxUs3N|l$7>5ykOL77TB1&q%3R^q1^pX^6$&$Vx!*k zg9DJ=*)ameh&x4<>DrJwSfqYnxT!XstzqHUoMJtpwt*iXeXPD3UlSPhH&64D;bG#} zzdP{3;a*KqJ5Xap#}RuRpRfZbN^9#KlW-^V`Cva5FBQcx{MJwt}D`dDeHi5^DyD{ zo0t|aap=P|Abs}|6igt&PHfaKL!m4@?le5Aw&?JVHW7h=e&lB>q1a`qR#Sq|EMofl zs+KSD`&C=z_^%dT2#58_eZouJT7Z4jo5opTY1P|M3d!#Yuh{HNtJJe zU03wwaqRKCQ>L+v!PMcEU*0MGNPCk$Ry=$7Re6k%eu(nlX7Z z#_|8GtOEO+847?f>azqs$-X!#19sgGl{_MI$+Pg4*0LXhBou$>O~DhLiByf_l$t2V zV*^UOrMZ!o?9PvAKn}(iqc7klt8TEH*B)YwVHScM;eQQG-!>G z@p`NDBs(f)ag9&HSOb{4khdg>F4wEjuDAe0lCm0U<=Cg1-R=+X$^7RGeU3#PlX@Ap zV=O4KK0Ff|KJQB~?ZTx0Ro8?1-{Jl;S3>Coze2o4K)G{RMw0((Eyb2m(F7>O0h+|>HHpU zMtslmf4eSX@;jlK*f2k68_=5jI-;DpHI-fl-qjdyJnMJ?JDvIf;IfE^iVm7+$RZc#39E z5wB^%icsE2?Mv-J^?nNSDH; z{OBWGhv~?P^;8nUC_=!`jFZCJ{whzO-@I8GaM&t&I?h}^Gl!3BOSr^g5VbF9{OPo? z==8P}%I6&pj%xDycH8a>kt3#{B30*Ag{vMK$U3 zG}tcR{~o1#E2MPA3D4seFaAgh1FPmpCW zI{ul7jjIVf3eU4751O8?qj`O-xWe1Nqg?}QOfxcAXOT9`@I6uBIX3t&lz+MQQ5`oZ zwr9e)mwZu)-%Mu%zmAA>#t-MV40$GI>fK|A`T-xmJB1X@<{3)Oo5+LxYB;GKsNzDE z-aJBkQiGGK&oQGmb0)ML;;ukQC}x#Ym;Lokl?Q6$xoj<)0p_?;K|d;FxU5AI@}Sh& zUh?=!6Mx6);oQ4FN!4az^5u2KFm5M)Dy&wr0}wP)uCe2J{ax)~d0|F3T|c8%;jw`6 zeUuMuwYYe9FIKqD@a3M|YfM8L@hT~9bAI@>C|g`z^Mr-#PZz_V>?3Pt#+q&D>8me} zv9srl=#jWr#uR@_$YmFW%oh*QpTdH8*mD@$kkE0+{y!SPWR9}*ZKfM z5+b@T@*VRqa@I-29Fj=R@taV|Ns3!w=rOyb#BP*O{Trpo(mpWauL#P!G-iR!v*|7{d)BPp&`eEa->R*JWP`)L@a66h^IVzmezMQXD|sP>BICgO zc{2cNr)P^!?m973`kA>lT3X%rrcWBotEk&v32`MLp)vGonEe0$SlkBrImz|zs{@W`-f0jdXx+Yb(Io zLl0NG;be1k13q%pfb|Q)yZC26u`QB!K^FKVP6{~N7)>71(YPRh7&V0j(+u&jAgjxG zI{qRYKr|q z5wYMpb{A!0^2W_b9et2i6Wm`r^mZlgP{R=D|DZ-Q=N8yLlZ%e(pUdTEY|+=QwgZfc zqbk9t_pp+OqEDOO_88rd{tK78CjAwg-Djiqo?^?E;XHG4x>I$^7vv&SY7Ah0?Sg?M4x-5^ln66d%I|Uup^>{Rg3x0%9w79hXeD z+DLYR0^dW075w@b6OQVUF6YVr7b5V_-%*0KxgZRQf%)i7e0e|5I{R08b|fZ`1k-wx z!5qT;XF?8mx&E7A2N_W|P6F+AOdZm-U=BiECR)*>18M+}i*jL8ekt=#C)S0(gHZOE z`^W(#c+E8SFqwra*59*n#&lU>`4fF2C77+QMmN+@8`KMQB~p zqL_ssI3)3jhuR6}sovE89tP?eJ^8f2`(~so2FyCC=ni}^9@TIxLp9`zDtL9muYm&V zE#g$9d6Jx!kx)HL*BxA`l?2L5C1|rC0tcruw5*4-O?Ks)d&li&UMg6=kx1gOu6A}5 zPfjc$ntfBVwyAHH_9epeIjinAH)?*ghHe5nEs3j|IdCd8RdnP0@deYjR(|~5IPLnv zH;J*lJ!3ihZz~AQpD=glQVTs~5UYVvXZwNnEgij5)Ef%2+{s?af2X8Y+~{$@>Z0Yr zT|vEiB_6YdubQq$Wph7(>41biao%ZQ& zXz8}Gq$PVC-#sg-bS5)|Z{ne^Pn|0j^9Y$glDA)X7=H&W+{aaC(@eyv7x6G6SE% z2CXcOfFKq8uStf1(x$uFK4JG=1EiAMNaCGM-F+&v3C31yFV6L&{h^-9&ZvJLRf5(u z5cGzVjC9rpi`@)Y$W~?&v_MmQwW>cez0MqpgwF4)o$hF4qQ201UC=~o<6rZ+U*)v9 z!r6ilkj`~*t=fHg#jFg8sVy;b3A7vr$zB5q_+vE32Y^d#MOhF$W(M(Nay)*(eAf?( z!7gx6u_l$^gsArQQ;?!JIOQeEH*2}UY%u5u4#l76!2Sw|u2K%ImdnBEO+9_^39l+y zG1LUv#S%}SOAxTmZmg-q!^zI2iosKR(`@FAdz*q|gh@1}G8Tmy?tzEoMs!Pjh zGoOjp+26SVyN(cwCBYCGlQJ~JBF+qnpiSAh+ewJ|Sq%gs76ChvoCZ!e&83EbRgO*{ z-qvNdeKget<>#l=OKGJQ_ct#e3He zYkG3o&g8!v#3t9Fo=QSt$-K49hy}E6d(oVOn_f!cdeSx>9$d@oU#-HQsdr5w7>9y; zThzh$6fu`~YJP?TDb>FmW-LkdFw`(uycXgUvK87Fnu$Igqed?oF;RXXPHaALlXIUP z{#Z?4&Ag2U#VhnrML)V?pvu+rKD#7=C~6B5@8HkIa$QORl$ZXGwg$a*YQ7^|=L%8p z={kIWyf?UIOc_vh86nP}5EnZGwG=wFyymf3@36Y|{cJ6W{)N}l7~|$}O$9m?jABo^ z_2u%p>_do*=VnvUVmCNA5&Q?vBI}nF5e@PT!70(BAG=zt<#A21)CKQ$OUhMEh^6Lb ze2!PqJ?AH5E-dnbB&*&}TCv|IYNj+Yst(9%-wM&i_J^VXl}Sew^hDs8nWB;l3_6u& zTjN^x2XL2*V2@xCpyxSAiSjk9EDHv&_E1xFC(rv@YmrU|jh~FMIF&dMhl>Z_u4Sk|!(2u6~nCbiFc6T$-gG_W0ou*;)24RyaSK zG0^$b*hr&lL%T+SKZ0&L!ym-kgSg%xdK@lO%ShI5S80VDa$QcN6>Iqoa4bVM$R$fw zJ3?m1bZKuY)yeYOcPf0vcg&&}{T(FItR8_xE%g5YpPazxA-cI}O|@lIY?^fDpxwCj zoLCrceU@Bm)x`u@Z+<`&3!9W%E$JIjbj2C#a+lplZ*fT{11sQ;22UY|4N_Vg1tmc_ z_P~;%GR?msVLQ#h6w5gb`BLv^y3ZH#nuU$ATYm!R->Yec?rh(q6VW8EAYD%KFetlu zD+ap}O!vP#qeYCY5^HOsPQ^L~TVF=qb9^fYz~K54%18+s&`NjEzo@K0lAQ2pgNe_{ zThv!L9NfQ#w>_)dDX)W$T~5!d%>=FtS}OKAUcMWOs%_|buSraY__e&6!g^CEgKuPc znS7)n^dg{E5SnBm+VB&0-C$E^VmBtd7V;tWN4K*8Fw>412WURjjl`1@L- z%KK7EffOxk#l&eFbN#a`)?s<@N1YbpTG%f=5LVYL3Z!-_wYSr3y6mcvY|^$?$tn_l z$M~$u1Mj>Xaq&a5?;(Ph(Ac9N^b_fQ@uJd#6VyFX${3Nr%oDVows*uE5S&2@OxPL{ zu;D_mHDb1=pML^zY@P-bQul2duPFI8sBL3*=b)J@KY0^vXA_m;(g6$@wfsK6<5%Ea zV$YV!igx(45~FMPk$^ zJzF~8K4k6XcO49w|G2{CgcS2=U2FLICm!r;3mVIO9=soQK${0(j%NSaMsOKOA{WH9 zHWg$&@%z)5d>28)t`Jq)ZT&FiS1J$A>c&m^91AqUD%|uL(#R z`$WMl?tdT#YqWV`EBWFmIa_!wA#J4K#+4V_#_c8r^xp~FRi$7|g9X@&@_uqj(z80D zP5WRTj2LKHCg^M@?WGt|?wpYc4Bw;u-P52HN%Z`>^>HpuHP4#?S72t)6kFDJM|3b9 z^aWL#nv{+GDw^;Wz7GY3uNZ|euuo(FYB zo7DV%R>Q+6WtvDR5hko64iqGa+hXMYULf>bc-_!fg*$-rVp;K)7+=6F;q8Q^42P<_mr2XTs8W2^`&hY--JYbsK^5() zRMocK!OxT)d^mz1Ucp7}hJJuU5f|q&n%l_uDSdei$re>&2{MzWuURPY)AS(Gb zwsG8PLo3Gq=6}|dWpz)VUPLz!+Bs20{s7EV8dM?D*ojhM<=w^CbE-1KF>rFbOuhNz z{10Dx#%t#yCpG03{$VfhweTlQ0UT@V6WeVjURZ$F=qjX}lwVX@YO!U#E3NJoVQidc zRVDpq_&ld&<}T{p%;z~ub*Q({r*y(qgIPkCZ78IYCE5Ai_c-r=)=&#~X zhBKZ#t1$rIgdL~LRcsMMwq|u9^YA9CcHH{s3IA4FKg^Cw#7>;N1KdWb%!V%9k@A5_ zc_}gLGM3_Plb@FBo_7}pG-a4aa?+OGpSYW})Lm2a=PBD~s(2rVoi5oNyfDVa*ZdvV zV|*!xG%BM*<~L45Ik73AnZ^!aRQId(b&)9Ku9*FjO9!-P^^=@|kzz>vd$9EckS_0` zNkY*+BpJ>r{A+Kxi|CS3AW_(tR1FlsSQM|%wL}{RX;oURmlo|)6U-*K?0}onbAVk{ zm)HX^#!3{K70iJ&4a=!l7hXNZvabeO_yN>%SgHAW`oLnCy3b6TfvQbtoN2cmb5&5y zLyXg`E^ON~yur4vAfRsZ_=YQZYJW|4)+17<<>y(MI7N~qCPaa-UO{3Ks~tIHImMRH zUz7(txzGYq7OPo^U3Wkrf8`rj`$sy`m*?)hG2kp3E0b?t+r53f?{-pjpYI(D1S28^ z**gdP3G(OG#%5vp@XR)f#P8)!x(y^%1zCx(4i>w0Env(R zuaiy-iK(RxVECK02hMnwmXI8(vQw_R9EC|0Dxfa&Vn}ICAEAHJ4py!ZEyL@LFP-ZU z+|eBR-4pMwQn|m=%-25_b~g7noGH^mUP&GM+3mGL4M&u@01SSM)2<4uUJgpgaL!v! zT9LuL)Otq&0AxL})UMt2a_lG_mig)W7*k)|1op%t<~S}_H3C)4ugcBNYOcO;?h zwkRg91fw+m{!_B!YMn1?=2X2!O*bTyljj`U!nl9FfhTKyrKhkg zwp3^oUznOo#12Q3ZA1dCFAp9BacghrTwMDVXQ&JICY@!-Vjg66QyalQkNGD88wM_3*%%Q5=6g5=kyvJB7H`*Ts%LTxjx)Z=X+GMFh)Lm z&cm-q#PpT=vBnwI9U>h6uL}E+#~JF>+}7}RJX>GS^uEbKuTIV%ed*rmx&K6?@iRBz zIOAWlzW!RZ2@xE35;r#VBSu_oV9x;Sh>)o~!vO}5BBmI-I;YVMq18+UR#Wz`qZ^&8O!-?&Fx40PO@uf*kDV$?}WN8zm;%zpIaZ zNXS^Gieg(6_%?Kf54MWV!X-@+$TUAVzo;I>zzrrC0t=4p`!^*>ufQ40E+L+eG>_^Rq^9W;=? zyn#V3wzm6Cg=C{CuQvl@IXSn@XzJv?Pu7u+lvz}625HSC17u9{HKlR)wWS&17Lg$f z`n5ETs@-5AN|i)IZU^Upk|C$_X^U?FtdrCkK5bzB6a4Jx%I3;#h2*xoqJTIax*FmH z6Xj%SWJ+~%v>S%XKq5;xj%*{_$Ml*(gr9GXM9=HwA&Y6bh8~}!YJdkl>LQ!|%}r;H za)adB;mCV{$$-whN?QEzF`jyS6L1C%q!LFue1p27l0kL9 zi#gKzX_Wkb9D%9rMrY%;(#iw|j)nLEG|?MZSEKbiUObD8BuiL5AJvV_5s)3s%X!4x zQ5gC_S<^AA|FT2PpVsHUb|l{168to3w1m^)pLy*Zq?Af`Ta6fGS%tjcl4 zj-UINw|jj{j=dQEivX{Glh3}#%q*|`;t+LF$n2_h># z!KksnMz9xC6df@&*n@XV`DOko-;KW)wFxCM*a=p>Olp6j{Zq`P!;n#A>mPkk_53vd z9H`*7`>g*We3iB6LP6s!4$?DWp}3qC5UwZ`en?y=eW~cHyPn)rHCe(Mm<$0xCGWU@ z*l78?<@XVAY*BXfC4{G^9>4lGms-^(zyu3ebCR=F8TfV!K(Z(m%NFf$l2^Juj?FN+ zfPVn>-_P{=i}0R--y-LX0UL3ft&<8^%O9`oaa8~DKN1;7TZZ^pk|2bv21whx=$vE$@vpq9v2U!P~ika?UGP5j;jBF<=oghCJ)zIaG6pS*t=4Ppi*o zsM_zZq|BUYeW6ZRm89vzV*P}Z`%UCe3>7cWNr!!n+k8I!2Rb4t26>^*Pje{E1?&A~ z-*rp^EBtlQ6N;O+p6XUOD<*I*cLrw^^mD#!(Zb?0GfBtznlE)XMcvJm903wXo3S-!q0M?O@3&dH){RmNKd8J=$_7RN{MGRy+5aFaKsBA(VYUp z1PF^Ip#a%>mVGY0;RAtnF|a=YXpTA(sGmp7m$-Q^fb~e`Fk(M3t?LE(b3O>z^%jyp zQ`jgAvtM&NW`gYDh)$}~MNxIcZKE`HqwQ3JCmQ(sMv(Z~mIboqSPP!?nG?3veUSx8 z_t1bdMqDlxs$MQgd?biuv!NjT5AktGAKpTh9a9W4_U!j{G#w+ob_TpVx# z{wike#sffRopZ3_{4uB%*1c?3(F1x!000FFTQ^ShL%*0WCi20Ph=NF7Ugj`&|j1R(3Z03v)2ufU&_p`WzHe1F1@TeCey1XhQ6b^E z*a;8EPjzssz#DV!LS6U{PQ^k9QXOW)8FM{7++RD7)~#4{shy!@BO zF1ASa3+1i#R!ojc+P?MS`i>%L423~R6M*pHUOk>Qf5rS8I^R%jP; zeaxywq%|oV9-F~V1=`eMLo9WllA#z!Hx50_WbNG&0*!$JIzXb^ENAlXwHvJndA|hO zOMVzAv} z*pyc5P_g9T{`C^>mnTo$^N5b?*YshDp0pJLQ3J*%wI*imCc`J7&Jcs z{^^2Plp1uQ2jt)R|85B&G*jRx6MN*mUJ}|6=wn$&drKg@9}?s`(bo!T$B2 zQ75Y@3$yVf630Pw1O0Idi)_}O6r{k5bmaJ!mQW3elE%$1NNGSb)~_>3Aj>EsIPbUM zuBXeq!NsE1iz7;B1uiEa%GgMebqiF-T)s5eg3WB-+PWIon~MnJs%rz

YCv+ka?l!71GJBv&9PV83;N9Il~m1T>xh5DG`l`LBpd4 zm~oMW5aFzXC)3~|%v7CUY)^V|@f?9UpRnIPp=OP&zyma>wxNG3Yc(*LkClaw^;#wg zBF(F|E6{+boUr%^39)MmrtPUr*9dmh_g*8KG8H4qWFga$@R#3(s^h$~BIdZ(wmTu_ zq%5EI!s4`-Dy)-hY_H2;coS|BQ1k@kwml6U;A6p0TLZ`FL^F&zEMR`+A|?TD^zNK- z1K=}dt&MA9CXoS&!}4JZIZ0T-G$Tk+9Tmo?tu7r5Y@EdEi*xTT@-J;%Ms;^m5;TYn z2@5%9flltAGPT3kNi8f}M{0V3Yms9x?Wn18s%(3!R8SZ1seAj+`jCO`+Awr(3?A@@4W>u!W$UgQP9P5r5|!IYv*H*XjvLs9cG}M=IG@ znwhzMhHWZ0lpCfpJf}^><`y`CjHAt1)hMSjMksiIN(9KCMSVmD@`@x7{o&<`J3p@+ zqKWuv|E;#4e7i9mGg|!dQ3%flB^2qTMhw^;48`=9Q}~nXY$3HH{de;X$sa4%TSO;- zyy0#bnp($F{kDYq56nDBA(`SJHJzPmX(LNgnIk9X&w2RmYda}>fe|RQG%W4IyF;?SWYlj>(5V{T_lEMMT zICMQIcTT0?7OPM3A2-{Oacl&mckTZnJOg~Y!SN_aVu-XDqN z!1~L;6U{N)?v)Ze>fzhir4hT$&SOPk2&qg$Ys;*~>sX1?)Jh&e3?9~ECghOW%m)Kc z>8Z4&AHwP@V6uJtA_`^G^f(YR$|GaEk|~7aUo^3$4EWlRr9HOHzwueJ-u7>n<~}QR z14SietT;}F3N}=~DD*rf zEEmJOK{>a7&V6<-yO-q~@vp<*xBWP!{Sfyow)9Ze&rcrp!8}G@k`zjfJ z6>O{jPq>x-w%==W2YksRzHQP6`!hPDoi;Dr+8N%=fUUiAu5+Q=;vBvu$WyTI zs(B?=xdyyZl|yGjZK}2;?a{wupjF`}$$hUb!;*Y$b_#C7_{d8H*Ui*2{}3aP>{5h} zOsH3QL+<}{xv4H>er+DdvIOUB0LIoXA-}F*H|5^{KeCKRtzI$J{>Wg;tkp4>guVE7 zUL?l3T{xL~fuC${0YxQu$9-Kpbn(sGCvw!o8cIDi@19`9b;5x_ZhY}78v~JN>d?U| z<0cCQwG{&V+lk56?|UJ8=u<_v9OdCAJ>;Xe+tjQ+uK4N8e8wg0M=&&RB^Kk#e3GwwPh1&Jo0ykWAXyErhJs2+v8fK_5?110|0UKm-E*o*G1zM z8idtB8%8^B4v4YF`5$L53gWtGn z=P;rnGnQfPAUeDTq7K^-Luj_%DV#_^=IH(V$j(+lw!cDf5yaX)@Yk0 z&NLme2+Tg?X9GOT^8N%UbO?vYv+096c+amW5#Y{y*?m-b*3a<2rMOv_eadkt=5G=R zA=i^3w6nv??j2@N8K%8&^!}$2pqxg>SXp9{UH*gFsTYUR{MHAXY#<0md7%feOSbuD z5a7gC zO|l!2==2^H^z#-QMLk3D#OqA2$|b++UOXv(*E8!Ex4U)_BfQV*2&YQtw_O|af{cp! zF_-Vwyi??WTQidzbxzjr#sQB|tanbF@c4pDo+Wi}R-ZlJ<$S9D_5eWaKZFn^Z~cOs zN5;5maZA#Rz}{{f3sjjY?})fRdk2&vxy&7`_cpld$h^rE53+;B%!`V&rd6mD3nv{V z@Q3T?jPfB>=X6a>74%+D@KgTxz4)9&EVgHUUwAR-&u;KUzHfBOrLeoXAWD-vWJ#?) zMkX3Wl~sOEE}!de3#^KNw8=|B*4|88;1s^dSfryjHKVqcV;AbVn|QoIV+DQhWsggX z>KOO_;VM;ePgo`8d-&RmPvh`hd-0Ia0D{_!sJX+V4vK8YF{EE!!}S!0umcrh%$TU< z;W3|>SI&NJ8w?`=I=Q%>+FYQI{TvMdfKVd7QXr5%`mJ0_H(_n6B^WMJZ^fhNA5AS-IjRwHPfqI z%_n*$nf3>NSV~=MidjFs-!}Tf%)JBE-bPFhSM3lPe$`Fmb-eGb56ugB!KxaPv-l8%b?#K6y8Z!JMruYVj>Z)+I`)?#& z-OzAYlx4ghcZd-^rMK!VpRzp-ESgqCz|KOYjYdaO<6}TlJ%qbKXbkSps|(4bcNs#B zDN*czX{)MEX;YVp_@}E;WPIi&r;;XSzj+E|#~}EpgCAuaSSp&B!!a3t!W-BICsHpheLVj!EWnw59(kg%)%M!qrfZn;>{T%gN zQBlTdn3&Aoc{=b3c{<9naL#BI=4>~6YQzyJEDeI{H`ue|vvz)E9<~JT!IxHt(=f{a zk_G4C!WtJZOdz8w)E^HL>WJN0E>DR6=R8}zvk}D9j8Ced-r{QD`;FJ?kH4e}6W(Sn zV}i*1BUmLEI-+A0_`5L9XzkgFYyWNVw`)R8t2TB!Z*wZx6B>N(lP-@B0RwO2CYpR& zIF``bfX3#3Iy+}z;hF%6KHIi!+qP}nwrzdSwr$(CZQIztYU52do4VO#Q@6X%ad-f# znkp0_S;Dv2xWER2vdll;H58BPqxR$5&&8MBH6RrKZ_hVTb_?kC&gKw$7DXc z1eboh?q(S0Ydvjf9OEiD^P`mp(?1O_XyrCHs%Nqz3Tz^P_ujK`{o7e5h2Dfk19>jT z;35`nPhTERAC-gLdk9v>Nzd-}LAM%qu?1e)*7l{m{YXPfE5C*7`7GSSlkvBrq%S%N z7<{7<0F3tx98kI&RWK@puGQ^9VkC&D$bdrr&zj;ZJS`#SeZ+sc1EN_9Hj1DrI8Jus z8P4e}MtAc{#5;2!(46_i$i&ts#^Y^bCTo`f&mKQkV7~{OXS%{)tp-qz>4>3Ek5kfN zEuQ&;S2mIaEEC41|03v#dRanbKMlhh1D|BCVT{vc8rj*oekhwQ3Ccp4m$ifmbj<0n zRR-K2D1ZS(B=6$vTkU?Oe#dEEyhZlz;FY<$iaK)0v_9QiH3D*c2$xgTs;Vp#$-=Osz4WQ(x(x9eOjQ%;@wMT&cX%Ef=;l?P5u(NVH3FOCI zri6F8HjXPHS{ZhXb`C3JeBT_5TWCE7x>RK*oCJ`?Zfzx)$Mc`Q&;&bEH!s^;h=hW_ zS(|C!Be03QXQ%L_=F=KB3(zB?VtTsH;iQOyGGoG{!vG-R>o(i=b!T|O6MyC;U%lR< zPXLSDbl+j$<76+qJjq?I+BfaO9XKE0e+fqfH+6QC!4(uv_pEnW8HOA_-aXvI7`cPr4Z!lox@ zwMA$NQHDJCOnvUnvyVePl&9RhgL?oc{f8nuMg8M)&N@kb;|@3FH(yQ z|BS(tisjS7oBl(fMHykfBmY^Sh3`cEK;>S1oXov&m_n_BqQ%s-`v+>-I&MzR*BCxD z#!J#HW4V|WB-KhECCH(&|1q_tmTGG>7u$3AfX?`KIrbch}0LT*4}v@1G%{<56S zx=G%EJL{Kcxe$`ABu50ddD1-Gu;8!6YMj}AuZ)XODHx_n%rX>#khJHz%2=Vqr`A{E zg)tP%BVHBx96#rsK14kiMDI5)6n;!UTIxV_!*WALtp+U~iB~S^^zQz|*EdXs1!735 zfD*X5{D#3XHr%$Gf4L^O69`v0w*R*YN4kRZ)$L#zSE0&*-vQ6;aE!f0)8u(9#Vdz( zgaV#2;KN5&@@Vg6)JnxFu7wyb*Y`Vt&xDYCOT*a&PBfqvT~#OR3SOlz=wqY)_X_Zj z4_f?mhj+*<$H#H$94e%G%(fB2q`cCZ{CjU0`IZExQP48s^E801ur64cJu=dxQwU#1 z0BpH+{_@SCk)F%bw9pxBfw$wtREeDeStfpil?gXvwtTWE#3&>(=d4Qk(UF#;m3BQi zWBo?U=pkNaaoc;E=JCZ&fd{0!k6|V~ zVe*a27YctJndq=xR1>T@_V5?712#l0e)h(9KJfIso5s@TRVPQ8PaDa_A@ZAbyq^*4 z7(0Uw6wa-r`D@XDpTEVnvA#^qBE5L(EW!^L$fdEHE?K+|zm+kux_|btq~~-lQ2V!4 zHM1qO-m*AKJS)QKF0@|M+tN&?#B^NKR}@W0Rcuu(kGofXr0cpPOAPq_0r`4zOCW85 zrKpce0`5DC8*DkE`wl4QcghkhNhHPLO`-#V^{$)%>wwponP=EXu7}_C^WyX&2_*P% zFcWl;lwGCt8@@cP<(2C~(|-VR69WTN0qA|$9aL=YW6a>OX;yB-0wcdz=y$+b zR5(8sMhV$o&iROYuUUm7xdy;{l|Xs0kJv@a*)gkXFn*?LyRXif^MjXH$6}^OTHdg+ zKeEXPmd!3f{7Hip?yY^l-9amJwS1j}l)5oev2G49NFn&@2i@qTv z_8Pf)q(YlUteUDwQ(&vYnKREWK^hJwv8bY<%^G*5Q{oGaL_3G4Sv?Y*)Ys!Id4vZM z3}VvYl5^>uF(II}=d*U(g#1=nBg6*vo{LY|V%UI6{8^X7YbwPJnkg)Lbf~6%O;)|s zCtq?89^%ZJ9i^_D(??P=@g2n}q#ag)3Te~Lc?B`I!2MbCkc13D3;Dm=!oz!i1ugeQ z9&NB{=3_1mdQ{}MgEhvfEj8nX1pbhdj}jl*l&w3uXjI#Uh;o-FHd0)2ZQxXx%XvofF(>mPr5AI%%eo zFiX7B*qgPhT}qD?c;#Ug*Tm}vhyNnQdD(Y&=g&Sv#bYLg%x6LvxQ}o>K8o!(qxXUd z$^CEOw2BgLi6@<#t)xHTA}@RRX18v442wl*CDDsp5)dmuet9_Ajs?#=%jZYnp);7@ z#eJq7v$Ot3)GBq5&b>05wczd%U3bSDgVHG-F1WcJO~Pyh?gXGF=Km;xRE506 z=#_wY^@fS08+~3ZU@a}I08Q#sMbPt-i6MZKE5^!HQ&ZqEYqBT1LtAKi)CQygb82j? zy;ZYpq@JTk=3g3quNm>Z9)+c^4nt7ZkaQ!$q8k#4@}uk$r&TNs{>W2F1OL)(R%ErS zF07q~&pxdHlv$;ncp2OJhIdM#Hy&NL@50N!2k;@{R|N0OoxMCAxOmj5m6)!#_HTej z&3${Sps4b!_=AtrJ}RN{hyN6u3>GONH6fMGkIjm$m zBITx^^(@cf3Pj#87sXDqn(3Xh6wV5urAqta3c8$XtG)ZPG0aI##Gw7tmX&piOy8k^P2Id4qB34(*`z_* z-#S+kckHA!#%!M_y5oqltd?m#uLNC`?2YMn&pI-iry;nHOGNz!)tG0Bla@K!Z7L8g zc>aM_@T)s5Z3+Il15#e0td=tG5w2zdw0$G=PNn1)DEIZPc-)<-4Xy$$=T@UYb(I4c z(5%`lWB-7hyKNteXY!ZgCC+PDiQa1!RyyT$co@uqu}D^HrgM9QeSL?PxjrjphXo6# zYCqWz5qqdar>lhLqRw`Kyhy++$PBMKT|f5x9m~{{O?I&bxnDk z3lRj~x(s6e5l1>5(VVliTQOsD85%34_ME0w3e)I?2I`7lY~RKAFMeIwb{xW0ASY3t z>a{(SzJ1o38xEAGCl_P@UJXvAh{^Hng*cwZLNnqa`fzC9Ix+{>vA4SUO5<*@pV4Wa zLzOCTWdF7(!S|OmEwzE0R2+}i{z@-pW1KjG6z!9>@ zWjmWWa``wLf;9G0mDJ<0%Kv#VT(3f-V~hzd!9LiBdCano954IwF?tE%-f0TU1GwAE z3NcYBK>xJZl5vyCCS>EfTqIzfrqi9Q(ao~b_#1Q2D*#vxrPhnWYd-!D4=|A?`8nd$ z(tHtINS+`QFf+cD05h^$W_ZxU`_^7Hra?~WVuh)!L?*+g#GCAncLkJ2WqZ_<=g2wI zmG$cpAE*xs#<}#H)?_j9PubPW1YtH4Po*7;NR4PMrtx>EpvHDOM9pH;rcO2<9qF0FSWXd&LR{|Nq3xWnf)2WE^&>He_S!?V?SUimvif)+>LMZj+cQ0yoWVJX z9qYNl^nrau^e3edE)cj@Tdz&Jh_)5BXqz4x zWa+9`8I(Gcy9d?0Z;>CkTd|N|fk`dg|Hj9$&UHLDE+D879hHcEF8<$_-cO3G@GcnQ zAU{=U`O;cG1dZUOT+mB&DVLir-2I><70h6kGw;oQKUVa!j};9R0!TK_0z|ELF?eNV zWBv0p(C&fETZVn*gsNxHn7E3HYtsz-XF@ikwAy+?fEZpqC5{vFrs}D6G9IgaetVHd z9%LsEu5EHMGH~#OT3aL#4f2oZYFv#Qn5b-N&St}hB^eVA)-P+ad_ORvApkAQn43%) zv|4l~Lzg?mf*3emd`5B>YIwvle+fQ7WS2M51lx02%3(E-cdxaBr^()obi%>=i7{0Q z7vG9M;!2%Vq8?jB{F0V-HHuRw$A3jVL(-X2r_F*8L{OYW0PGW>eqR`$WL>&(n=(YB zLuvJ$D%}30X|dMg>MqzL$6AT3stNptz~^vaNk}@R(S5DTtpjk@SzQbfen=f@Y@cy) zehE+0wg$@K)9;YJs?vUC~l+Yw0#3j^; zLAmFGi-whrw@6UKi2Mw27|_unFOWK7uuLq4%orLUV{Kg15OscvrI_EEPsbq0thedmN(SnrTTd3i{ z9{a-{r8RCJIHi*`ET`5kPiDX4K$p~DuprQ}vg*)Ifx0!8Y|+0M&--JD@@lm>WN5P_ zJXB|J@zjII-7hK5n@(hJrPycb1naYrCSE3{1ul$IXL%?(76wX9b4YF?Hfk$PnoHU>dR zB;*tX-M5csi<~8Vx>LQqv#Hi0_TPSbcFZ8XolegX~srNl1=_H;4uUzq_+!{>l=`TdlW)i8dGsAQsQ@_fFm0?n@uq%twDyapHTF}2xe$Ge zp{LneLWb{^$l4?|%^BGizAVEl^)Z95)~dpp8qQx1*F&ST#FQJq32&_8C1KXOFr{13 ztsUcojXZ&cz9sj|Ic^8wP30m@BnJ0h@0RR}{zvv*2v;r*I5M0K|?=&c?2uUG%PduBPb0Mrv<_`O_{#S#R zT(&jNn3EECZKPB`E9IS>01pIhAz{6D1Mi0@l3&-S6b0ox{=0%~_Yl~!5QZ_B>o9D( zPppXWwL??3{CXt^wgCrMFO9M^J)V5e1QRZe6v?wDwDaIp z0u+13ozo$2YnS z4pj*nytq&%`=w3wA$$a(COKcfkC^jMMN;E7Ug0l#M|K*?wa_`ja+A|iv$ zj|Bh#KtSLwc)=TE{!EL=LpxR#Gr*<2ckR6Z8aCL0H3@bV>+? zO+So;q5U6~B7Hla9l-=qsWG!pmwTzO=bUmR=*C~gX3%+3U8LeK^b2e)8k zX+ZrN!&2++_E&Rp93F(RV3kj3M@r+p9h)b?Q7=-;igLmytfU;9uK8pE;%+Uqu}5fGG5Q&14_3@iXTT5;Ocd@P%{$%&}kt z}t;)L#4nR5rq?$P!EH5Flp@}Rcbo|@Q^#|$T)ls zarC(&r^k?Ark>f$+a5!gB@HAKHEGv2%$SuQ-uPA#j-)~CO`B!Imh8Fjf1HPczH&YC zkR>~?X&d)4&x_;UEXZV>t(B3dy8u0OiVZm}!HTmGn%H+#IOPrdMGcn&x)6EzJR{kU z)QajAoE6_RrQpKE5m>t0RNC7;mnE8FX={6;Up=nR*|}D=dmXyRPm12JD|m(Y{c4Lp z*{b-hfM?&Ew9)^ZrS@aUzJ5!IB%DYInI_}bTfz|pf0|EMruq-P*Cuv@q?21visxw6 zc^69Q-{(!zSo7{2-G%_Mj$d6VCRHB{Ws0M^g;-pXn5B zzISVl+A}eD_0m>S?>B4j%MMBw?Uuukw#Kbz#bBPHMuPdU9&!BZ1scjmgUR1Go3bPY zgjVSmzETxl{UXs&aJybdo5YAigq>O7i@dBD;>zttAd4YF6(^@;x8_EeYrrwMd^x7S zmqg3=l3u`AQIEzo$V2=^oQ%C&^9C2%W^pt_9?RR16ox599@UdyOf-&z>w8Ot5epcd z13Sy2u?8dy)4U0xYFqK!ExcNdIblf?CfWv)9=#GsgH%&AlF-iEhWlmiz6O9rBW;?C z7jD`Yvrm5v7W>u=a|2I5GFp(FsH4WDMm~q7YYvpZh|V zRGUgSy!+btnM|5+S}PP`j5PMEOHUIX>-0HOpHFu7hcC~N$+5(5#TVG1!kHrB7v8Ld zCmcy@qR96M1&Q_z^_ek8hum#6{6K^971Qw;*bMPp>x-XdJDti875RquV9^>~g1*-k zLc2pVPl*To55Vmd0HU#c5;}~Md}?0Jedp;bD)xhVUJ67u#E_)B*BvXF0Vr1-<1^WNqXI>I1{lN z&g-!rk8W2niR;mQ8(?t`3Gro-bxpn+i}DDlPeQ$**Z1~$42TR@SW7!BnbMT(Hykjx zv8%g0bd!2!M1*UfcgwzwTKBUbvx--q@Xm^vP>6^{A~l-YZ;a{b z;EtecMeLV0AM4{XRSA+`1>cEs4s9X{O*;&ag{MGQ?+3ps$~xP-g^#p3FM+?1h+jD@ zJjYqD+X3SVVh6;z4(GF1!A9mTcscS@QQ(7Yk^g24_~?z8d2Luow_qcU1yP_koMH>8 zyWX@FbZithfy;T&g`;9akbl;Qd7)yn%nilT)kOH=G0+n;JT1O#&9pe(>60(jgA}uN zn?0__Ai(=Rgt42egV?ZHQEIn(#IAzkl=x0PyY7Z}!3lbnh{-9cT%ioqkS-bPWh_c_ zSy(ecI6Qut4)4HTK2-Z$q*Pusl)mP4X6FSL&O&6cQa4(fYc|uq;?V}I?}9M)AP9oQ z$SyT*pi7d098Uje9bZsF{?%PCX{R+ep05fE>yU!Xg2X{af&k|Mo->S~LrSZk=8B&- z_!*cqq}~jLk&#u(e+M~?$jP1P+1OwXC~MSiuIj0|!)ML)3bndz-{jlHb!M6tW69OY z%tQsx^xeEt7g0^z87?ddsq_-j@Ch#ERPn{PsJ_5eTWa$s>%%a#6!$^Oxr_$RMgK#} zOk#bvgU`fDK40(=uh7zMRq%#_PpfYNMWlrb)(CvDe+xwr%SLf-nUb)j1nCVrbEFJY z93FtO=r#z=`^$@O0;!E5P<6Z|ZM7^bZH3qZM*f#U3;98AyRH`7-$7eo5)AEOJOZ=8 z-1<)ru_LBpQyJvI*P{dM1S3F+WyTYB2gb%+m^{1}@;C6?;&JgDAqwr8&*DTrVyQEc zS+>G!79H{iNk{m`CKj^@wJjbPI%aVVOk};7wI?E)C0_^h^2_W(5!4I>g!rAzH&ZX( zzl>p8rVrLfLihNyS%)=kdd!R%ffP$Oj?6>(>-f$zk))xhLHYT>lUX3mpc9FQ)JUx# zU2Z2&@)! zr}c-%V4%}*Vj@XJ`ZRYwi>p;-YR8+fjya$gbb^!S5DcXn zb~2IuAr!FkJZmpJ4`CFXR|AcFJ4~laPf=D?_4xZmRvKPY6-cmj>-IvG$MNRy<(}0whkJ&kr7Sh;*~D3=sN@ zIp1S7ZpfVA%WdZ}!Eu`Z8~bWaism{oion8Gc<9NNui78*@e3&a>B1r8DBq%aH>vBQg}e~5mm~%)-1{%r&Y%&GOv4JCLi1p4ru;u??rFS2nI(53k)XE( zU_zQWyHC34j-|YC*w<0`bNs<}srQ;4bJAx{1iCVWsI@em>1iSyFbw{dw&m5XLs8+f zsrS8?STvWQp^axfdSC#8QUfK>BBDZ2$>E(4)8OImf~O$FFO%;NBQ|QVgagcx9+oEn zJtvHmd8o2~)fGL6dMBZ+q6z@=V0|L-ohaJ}290>SVfgc=^c4a9p6am8PX1>V`JzRU zd$6jYZVB{7fFi0=>Lm*@yY(rLcImPxk6;p|kT4jXmE*0sBfS(SO2aYVl8@#mBtMH(w$;>@#X%k>b-lkd)15!GiA zGQv&qdbWO~ya>?Wp)2p%Y*RUh?R2tsz?){uR!)Q|G^4+po*6S|FX2zd2;VA=Unuuw z(Jt|^Jn#MZvaWTmsWX9M!HJAE2jkS)UqdMd7hd@OJ>k?|Sak=Wq@M>hyHnTc#vL`H zT#K_#k0C!v2>;=ybmimbj*zc{^D_^J+J)DDw{AIhu=2ds$ka>u>n4ZDbNRz*wTdPy zQHNkmg2$NVli0O3>J4g9jxG1X)qport{n)Fl(YP0N)n`MAmd*yG1RH0W;Se5pyvZU z>1EWHaS8uZZcUK#Qb_}!9ktuy%C9`5iwJdfz<2;eYw~6g&?0n0X0=MLVuq4z0rRht z4QfiEm)jZz%@$NNJghG`09VKvjh&iHzbdCz4sSG?SzG`y#kv^Tw7=X-1`G*o6|5CW z{EKD)her(w4&RaYG^5Jkm!L&hR;E;K+4s2#*9JcTJYN0DsB_yY&LF_&k^;`mu1VxQ zHB%RbL9HJ8JO4QWznH?Os}*9ccMTb1VV!?7sA&5)y}@N4O=sP>SwIO|C3Ar`j#CAw z#4#BDoM5d+PJWqQmtV7S^jU0(q21@lq}7;3k{2Re6?7Z15zuQchV`~vX#MTW-pekA zsiPNlzOteb=d^a;x0_W00EdT*KC%JU@%iVt&q&MLODgZzSXfRp=>QTNqs+GtTKcZ4 zBk*}_+h4PWr%u$yJa4sYu7KzMkKYk4E-A!pp zC*;}*MmVvld?3RSmzmpfc;JgW$2aBU$EE5&z>^$ld|4#BJF9!<#i@^HHkxCvn46y^ zt&e6&mn?DE)|q8&W0c?`b@tYP^V6`Sz7L|_BzUyZkQVewhAer8v&Yu!>eA%AB!E=# zI-9A^qA8B|8S<>7a$zi^?(W4S@U4EKnA=$_r>F2ic5I6Q!S@f@{HpeSgG6LU5V}LztwH5sDOx6 zC|B8a<+dL-;3Hzw#tgmK%}-GP*1n7K z1K?s4t!QB{$OCBKgNJZ0fmTYgVZMiky>#s&udWaf?(dJzy6{AOKQ8@{TcCVjYYZ3g zJED!h1ddM0YEeQ;xF%xDwVLw+%L;9Y&-hcB4sa2zl<>+$6*1feg5! z4XT7Z6kJ$nuu3H%euLb75&(waWxYdDfToGmTWwBV`ORXU0LLd#fOjE(flw5!bC~A6 zbQe^p-xm{?yzSGWCj&a}%V`p4ay|Aq*>vfB*tqVOFEyZa(>RhNhwE#&XbO2?_%Qv( zyV#58@K;xk!jje;mA~V$NO18VP;~xdkpI*}!r4xmatbUnB~oN_H%pK~6CP`YbH3n@ z)XC>yMlG*ImHhklALgSNpbBtZDALkDtb$Fv%}n1TYQuum_OfFJHHTk(-~HX37GLBt z88U`?W3)qts?!>BW`vGTIS>z=oOg`prbZL$yhB2agtFFkzoreprHRYsuwWZPj5S9( zi3F2oMJT!TNNam8(UIzcr2Ss4Py5r^keuOt!tvZFqXJDfBpMt+>m4sy+rXc}tF8f~BQy-`o}Y@tQM8Y02cS zQG>it(V8NiXRDhJFqUD6qJAji&W1WBPnRN1Gp`QgxuB;GSMnfXQJOC@?CiCuRWe&| zu`2h<1cX8<8{$zc`N9ck5>+fg`!y%UoYd>%t@(yo>$<<()Uj^@)(~8!YVKT6@-ex~ zM#_)i=@OXM(gcFDf8mhY{w<~@*o*aO<@d{pNk9wGtD|cA3?QsI$^_8`P3ESWtk!9~}G70w{&d40?BRN2H^c`tU+TM0FlAue=4 zvP%hzI+U2V!ZCY)*oidqa#T8TUA@iMBLF5gt@nVCx1S0qn}`|VW`mQ`r&2sQPz`2Ap0~gEy@>C2OE?p2(BsIn zPgNu7Bz{0L)BouxH*1N|ro1(i6@l*H=x75%eZSkzPBoT_LA{kQ zZCxs#JmkD%hMgfSZe~qzv(i8$f%e$~5|iOqwm2;(8GbU7mUb*1&kitt2e%jo+oQv~ z!LPbvp&vKZW_XpDhU8D@Q=E=Nl{i@NG3*jMI$2nyM9wF*MSU|83_No)oyb}H!ik=) zF42VlJN~>$bTamkBH_B-GbZ@RuY;d1fu3z>=19ty=Ub2A|;Q)2$n8*^?!1bqR+&Dgc_Ogb76g2joG0YPm$dRLT`_8 zgJ2W4oVr&AVm+TBrVp&Dd^J$w%`~FicRN_g&vyV2{z@Hs@jCr|yz+*(iB7+!d)NDU zZtK#x2EIMHR3oK}u+oK-g8HNk9e#4ww}ST-(oUj#CT(%u3?8fH?xbW$$|U6uT#qoM z;lcb}eW52SattWtO$9f4+_r>xF=(&Qn4#ID-o*HNBD9!s%uAk1d&*D^)WKA`%FEpW>X_ZgP62*v6<7yDkCZ5IVNj)pgH*y}r2FT1;# zCd9`Zr?P-QiRHUFGL+)?e;W3DF483{#id0QXM;&;6-eJz!>(WI%HnIa2TPir`g`tx zRXjQrpD+0jg>EVH6tNqEDD{tcP^@z@1ly+#i{GYgY|+37&V@h&BSq|m?K+&2wUvty z5v|y3e{~s+3~k@>J&%bHh?~?BfMu&$2L^%UH_t`M$OjwZfRR zDj%BT7p!Zkf(5dzS$vu(mksc^1{Duc0Ht9HFn6H_f)CF32%An;d$O;2$-a@V3HTGQ zFlPFv;7*1Hc|^-QXqo=Xg@bO4@3wKZvB%8Ky&`DP4KCOw-kM?o7ZS%3->)3Fn67yj zSlxYFw71zM`_iVCpQq04B6Xr)yi^VHQ)RS%?mAa316ms5i^YR)NLxm7`=pJE-LFaH zDZ)91i5y-EYn#ly{4jWg7*%UY7F(mqZ3Kx5_(%MU#(j#hr!Yxz0#M;xSK7F>ftFH@ zK1Z4H_}(}T5WF88>BJQvTL=PEt)6Z>y@_IzAK^w1y8;>K*k}2O$uEm8N0~uw%~LCg z_%0DgftI<2Fr-P)AvVb8rEwy2mqjd+AX@&U!17YM7JM7r-0ykh6M;eb)8Py;^paK` zt)0D#r^V@}3INwqkwmvIB7edun0$B>24s2Z$f3IW_tc!UKgsPL98g#^`ca`U<&vxv z7>cbdaNMEWQrh56W9&3(D3I<^NIH}+b)jeNG=x#Vm0J>U^0OmMja7Yz%P?K+Fk@jj zuOi>c<1vTMe^8Ol6I8e0vfPEKUdh+W9DCy--;_U!VYpx?ik-W3f)x@*VNi zbg=(SjB!)3O$umr%ZJJyc=Z*{riNy40XG&1sQe*Y$%!ln3|0T(+NrZo<+oaFf}Pn; zPUQO+E^b=uK_RG~xj{MG*?^VMB@yfq=eiu2weI5~YoNl%gH`n3j?O}3Zghob*~=rC zN9Z6hsImR?dg84zqKp-m3^Npm7s;FcSgA+ILdhl%tyYi@EqvhCQmq0iuMlj@dvzg` z@IIk}CmG|Z$A1(4OkRL+y+8>YdK+3mh4&m^jjX-m*`b}pBLm!{`$PWv$NNY}KTp3H zJP-QBik!leY|0_t8RQBd5=)G#b!;jQG<%xjN{aA3t^XKhgSLc5WY7)MFMqnr;+W`QHD$KU|wI!V^8 zWi$KTVQ0_h9;q<)>0+Qv0_||J2;wE|N`0G5aOOoOcAAo;6!+B8t6@!ViF{-@Vbdk8 z;rYWb{5e^D#oItTK73vzTqXvv_|dvLglhGL8a>QHfA71U!{ApDYi{ljTi0PQTDtxFC~%!8Ac&l&9sKO(){?;1rXRT!)nCpkvFw`7 z!{Mk^!;c4$!c;$qubre3N|cPr(nbO*f^vDJ?G3g$8m6_ixwM_0qo!>2hmrTGnmJT$ zi&WdWWhiS7SnpwwW*a1ISYmW16Gf)fCfMSxi`2c;)m7YrN%=Z z12qtZo%o@b^$3y&TeH3b1%%_(XKQ>;=$KGuzSDLfJ9IQ#4I(E7Lf`^O+4ZSBM%Tf9 zXAxWc7Nc}$T*_M&48GL!VKf@n9-jN!_x`@Cz*9sgxPQ+*(vn*nesM^qY?$U)!_ z7}Em^XU_`3PIBJZVuk2zqhN9}A4BU*qxKz_%EgbDu-yx#c3hBvFfl?QhDN7h(LJ=c z%w;Skzr(nwpZvNspy>0Z(1t%0BD=}oSO1D7cc9af=%#|uZ${tT=gw`RSh zjm?s-Rirv&(-Ko1-r>$5aPML-(FBVQ#*j^e(Ie1XycPxYq3D~zO~3cimuUVqL98?{ zQOQk%-}Piy$l=ym;`Z{=Z5YFHSzaMUOgsP7Uk){}--rHQm#TaS!9}x5*Ya(A(C?ju zl1K^)neM)606~uMV4Dxzu`9MK+ymDXr2#{-z!02n8bJD_TaP*KR9RX~|7q^vf#1qi zIrVdQ<{X67_O*Q&Osq&ZhSMUq2``OC;@HGJ_8N zw*Y}NoZ{FXYW}8}GK{12On!ftnj1%5vq^JJ+r5?h{Ts>#H{e;B)~u|w@7d?MmMwYe zEzF;@x;{cCt!o7~v*lhb(>-IK#u>Ul@CQD-^YTojj((v*r3^pgAjCj%3pVD{we4x= zkBE5o1K=Z^PJ%=7{x8=`_7Cx)(wIL{If&?XoKNEV;wtx7v@sfaHS9epiA+DCD|eE; zp(mGxJ7W;dM$|RrdtzM$bQi?TcDNKF)@r z!#;!Hd*q|>yPT~&w>pZ@>;=!)uYYaWnSnE~Vbb@Ww!sNAbPa8?VdRLQ`TPb&i_EFs zXnCNUw+=KTir+#Luh>gTnSqp#f2j*7x9BdtgpA%4fui!_3Oi1EE`_1fkx(l-VJz&e zjy&}FN7gbVeqM-Bhs#h5mQKvjZNxaQf{$(fufm+~J z3;yrF?wJNZ4+@_ThizOdPxrjZqS3GfYtH!k=X2Qw zL^Pzs&QJ#@1`b{UvTHgR=57$hupu|6IG#mfOv1T?p<~f_hMu!~8jY0G=gho#HE2yG zGu%ja`L|O!ofVD-?-pWED{{uaJM)<^57lH9J@0q)$3VeYtl#tbq>#MEBsyh^8C6!+dsc z8+(!TzyxiN!4zZP41RR!zKwRRHyrEUoFv&nHRo4SA#ENfXNm?ANnNdp;})pfC>gcz zfjai(8E3|}>>Q8KoPb{Xqobc-#{N^Af`U7jezZE0T`x1w6EH0`-hL}Ow|oZTFf?Cq zgqtav6pppV+kJg)ymxn0fEpfoK^doVDw4wcZEaMOIu;3|?KV-xzwopkb!v&k5OB_n z@2CA7_F>Lz#8-(olt|bSNXX|(Z#yN2h+mX@=i@4lRF)MBRj?1~+NAMAJ~`NJWDn2n zo5{~y?&oF!9wnpEElC%7D&mP_-iF5^S?ATr_d8dgU<8JJkRba6Fw>?Aw~eWi;nW;X z0fOU!J7Z%OB;X&{GLzc6k&kKRwPy2EM$;bn%cZ;>3ng~|C+QN45X{^aiX>lYLe+wA zHFSfAIj#Dl;D$LFsi6Ws&jFScgfzIZRMih`?Je#__<_>AS|`0s`dS(U-9B+10DTd0 zjdV!$^W*q7U9CJehv)1gI4ATKBn`jB3ou!*b0#_2-%IV81>^XS@)-K$51$vv&CL_Z!Zya(2b{ITUwqm} z_XFUXGMhMy$^Orko=T)O*Pu#k46hMV!?OrE{&+QDze=C9EbarSbi;s} z?pJ6b%Bfrk$SXZt*&So7Mk+Z&;I#Y{&+QkS>qp#@+0dQqJyk(-=D3AykJlw%C8l3E zk{D1lH;|xi?i6AhKyf}P3Wp40vQ)hd?D-@PQZP zUd5M=U+K11_JWLPz_wIQV*+$4&)-wD0MVIQ9AHe!jK%@Ax`~o7u9NZ)o&6lJ$xFKs z50e3jl4e=EjEPia#lY&B=KweqJym$!|Do^e-|Y_P)F#SpZ+50G z3aKPA5sI`4%7tL;PYe%uGRH1;X3BUWZ&dquDDGM#3T3$4OEa z3u$xr=}VM01aNI)hX@`di-~YRIj{mZX!3$ODmMMuw&#yiWtA9(@nC}C!I%`ga&^q+D0hpwwQ7%L z5li9vB7hbHAlee>=v8O@RUa1E_Q~~SCOr-hhmL>WR>>tPCHVvrY-2~Gww+}A8zMbu zh|udYSCK{AR_R!FIg-nL`2@aFsXE(>OBNtVEeh%a;m>qV-672&^NIA*n+MB8il&_{ zJk)6PR_Bs~jPadtiJWDBm-og;b%x-129;UCjZ_M~?7bQcS|jmijuGr3-2c$YeK4vE zokz1jR-A9me|bJRPjtbvo%Gp`w=Ph_Oc|b#x?WTQPPFJk|z^i6&B3-(F%I6f{ph<(dD^N8^{+VAU&)8PZ8E83C^iJwbj| z0ETKCmNw2HeVSszw-0sRlLI9mZ`$eQ?#~FSO^k2NXUD#hQU)f8Sp2sZ3M1y-ud#$& zib48_X*5gmo>JXwL33(+BH1j9WumqC4{;&lzBfUm`X6H; zIrl*{<%M1B@?uzNbj2UMiu6>uV&m1rsW`~ETQWZYG+-!@!97m*&470vc(umqrhX)i zWB|vn)LqA2BoF7Qw#zyZk?4)St=3n}pFE&ze-(}2G^A9iE4;g?=hr|xWzxlHHxa%Y@ ziC4W>-(3LkS2d#Qh`j!cgWNzSxyw9R934yo`53Ip1(idca`WK`dIAexR;*ap+xkZ9 z^KN@IzirB+QNYx1dm=?+wf(VF!yRrG8UEp#Ye8oDOL(XL7=}+h0002?e0xE{!j0#R z3r1SwnUqDV5qpY7S~_Mm^qI_aV!K<+okxc~78jR=qEE%_#=MNGuc)ZiSNU}0k>+B)48VO~H=uj@Mp zzbVD!?%AYV-H`NF{CF$By;a{|s~&FDk2dSZTJ+j7Zc$m$!ZXiX*~$kU{=57C0P0_Z(EtDd diff --git a/apps/web/content/docs/dev/moderation/moderation-report-reason-sheet.webp b/apps/web/content/docs/dev/moderation/moderation-report-reason-sheet.webp new file mode 100644 index 0000000000000000000000000000000000000000..1f5452af9209ca4180ebefad698cc0051d37526c GIT binary patch literal 49876 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

wW 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 literal 0 HcmV?d00001 diff --git a/apps/web/content/docs/dev/moderation/moderation-report-reasons.webp b/apps/web/content/docs/dev/moderation/moderation-report-reasons.webp new file mode 100644 index 0000000000000000000000000000000000000000..17d0d6038c889ca3eba11c246777878db915a67f GIT binary patch literal 58246 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 ) : null} ``` -The dialog shows a toast with a description after every outcome: sent, already reported (`409 duplicate`), no longer available (`404`), too many reports (`429`), session ended (`401`), invalid details (`400`) and anything else. +The dialog has three screens: pick a reason, add details, and **Report sent**. Picking a reason with a click, tap, Space or Enter moves on; arrow keys only move the selection. A failure shows a toast with a description: already reported (`409 duplicate`), no longer available (`404`), too many reports (`429`), session ended (`401`), reason just removed (`400 reason_not_found`, back to the reasons), missing details (`400 details_required`) and anything else. ## Report lifecycle @@ -137,7 +138,7 @@ The dialog shows a toast with a description after every outcome: sent, already r | `in_progress` | Taking or assigning a report, or reopening an assigned one | | `done` | Resolving with `no_violation`, `action_taken` or `duplicate` | -Reasons are `spam`, `abusive`, `rule_violation` and `other`; `other` needs details. Every change except a note needs `expectedVersion`. A stale version answers `409` with `{ error: "conflict", current }`, and taking a report someone else holds answers `409 already_claimed`. +A report stores its reason's `code`. Admins manage the reasons in [Report reasons](/docs/dev/moderation/manage-report-reasons); the four starter codes are `spam`, `abusive`, `rule_violation` and `other`, and only a reason with `requiresDetails` needs details. Every change except a note needs `expectedVersion`. A stale version answers `409` with `{ error: "conflict", current }`, and taking a report someone else holds answers `409 already_claimed`. ## ModCP API routes @@ -145,7 +146,8 @@ All under `/api/@vitnode/core/moderation`, using the user session. A guest gets | Method and path | Permission | Body | | ------------------------------------ | -------------------- | -------------------------------------------- | -| `POST /reports` | Signed in | `{ pluginId, targetType, targetId, locale?, requestedLocale?, reason, description? }` | +| `GET /reasons` | Anyone | Returns `{ reasons }` in display order, each `{ id, code, requiresDetails, title, description }` with every translation as `{ languageCode, value }[]` | +| `POST /reports` | Signed in | `{ pluginId, targetType, targetId, locale?, requestedLocale?, reason, description? }`, where `reason` is a reason `code` | | `GET /reports` | `can_view_reports` | Query `status`, `assigned`, `search`, `page`, `pageSize` | | `GET /reports/{id}` | `can_view_reports` | | | `POST /reports/{id}/claim` | `can_manage_reports` | `{ expectedVersion }` | @@ -158,6 +160,27 @@ All under `/api/@vitnode/core/moderation`, using the user session. A guest gets | `POST /reports/{id}/actions/{action}` | `can_manage_reports` and the action's permission | `{ expectedVersion }` | | `GET /reports/{id}/assignees` | `can_manage_reports` | | +## Report reasons + +The AdminCP routes behind [Report reasons](/docs/dev/moderation/manage-report-reasons), under `/api/@vitnode/core/admin/report-reasons`, using the AdminCP session. Each needs the matching `report_reasons` admin permission. + +| Method and path | Permission | Body | Success | +| ---------------- | ------------ | ------------------------------------------------- | ------------------ | +| `GET /` | `can_view` | | `{ reasons }` with `position` | +| `POST /create` | `can_create` | `{ title, description, requiresDetails }` | `201 { id }`, added last | +| `PATCH /{id}` | `can_edit` | Any of `{ title, description, requiresDetails }` | `{ id }` | +| `PUT /reorder` | `can_edit` | `{ ids }`: every reason id once, in the new order | `200` | +| `DELETE /{id}` | `can_delete` | | `200` | + +`title` and `description` are `{ languageCode, value }[]`. `title` needs at least one value. Empty values are dropped, and a missing language falls back to the default language in the dialog. A new reason gets a generated `code`. + +| `error` | Status | When | +| --------------- | ------ | ------------------------------------------- | +| `limit_reached` | `409` | Creating an 11th reason | +| `last_reason` | `409` | Deleting the only reason left | +| `mismatch` | `400` | `ids` misses, repeats or invents a reason | +| `not_found` | `404` | No reason with that id | + ## Approval routes Also under `/api/@vitnode/core/moderation`, for [approvals](/docs/content-engine/approvals). The queue routes need a moderator entry and show only submissions in containers where the moderator holds `can_approve`; anything else answers `404`, so its existence is not revealed. Every response is `Cache-Control: private, no-store`. @@ -196,6 +219,10 @@ Statuses are `pending`, `approved`, `rejected`, `superseded` (replaced by the au | `moderation.report.reopened` | `{ reportId }` | | `moderation.report.note_updated` | `{ reportId, noteId }` | | `moderation.report.note_deleted` | `{ reportId, noteId }` | +| `moderation.report_reason.created` | `{ reasonId, code }` | +| `moderation.report_reason.updated` | `{ reasonId, code }` | +| `moderation.report_reason.deleted` | `{ reasonId, code }` | +| `moderation.report_reason.reordered` | `{ reasonIds }` in the new order | | `content.approval.submitted` | `{ submissionId, replacedSubmissionId, pluginId, contentTypeId, contentId, containerId, kind, authorId }` | | `content.approval.approved` | `{ submissionId, pluginId, contentTypeId, contentId, containerId, kind, authorId, reviewerId }` | | `content.approval.rejected` | `{ submissionId, pluginId, contentTypeId, contentId, containerId, kind, authorId, reviewerId, reason }` | @@ -225,7 +252,8 @@ The snapshot is read in one read-only transaction, so its fields and `source` de | Limit | Value | | -------------------------------- | ---------- | -| Report details | 2000 characters, at least 10 for `other` | +| Report details | 2000 characters, at least 10 when the reason requires details | +| Report reasons | 1 to 10; titles up to 100 characters, descriptions up to 255 | | Plain-text notes, reopen reasons | 3 to 2000 characters | | Resolution explanations | Optional, up to 2000 characters | | Rich-text notes | 64 KB, not empty | @@ -244,4 +272,6 @@ File fields keep `{ id, name, mimeType, size, url }` only. The file's bytes are The migration `20261011193321_add_moderation_reports` adds `core_moderation_reports` and `core_moderation_report_events`. Neither references the reported content, so deleting content keeps its reports. Reporter, assignee and resolver are `ON DELETE SET NULL`, so deleting an account keeps the evidence. The unique `openKey` column enforces one open report per reporter and target, even under concurrent submissions. +The migration `20261019161102_add_moderation_report_reasons` adds `core_moderation_report_reasons` with a unique `code`, `requiresDetails` and `position`. Titles and descriptions live in `core_languages_words`. `core_moderation_reports.reason` holds the reason's `code` without a foreign key, so deleting a reason keeps its reports. `db:prepare` and `db:migrate` add the four starter reasons only while the table is empty. + Approvals live in `core_content_submissions`, one row per submission. Rows are never deleted with the content, author and reviewer are `ON DELETE SET NULL`, and a partial unique index allows one `pending` submission per record. Container policy overrides are stored in `core_content_containers.policies`. diff --git a/apps/web/src/locales/@vitnode/core/pl.json b/apps/web/src/locales/@vitnode/core/pl.json index c6057336cc..4b6458e124 100644 --- a/apps/web/src/locales/@vitnode/core/pl.json +++ b/apps/web/src/locales/@vitnode/core/pl.json @@ -26,6 +26,11 @@ "@vitnode/core:plugins:can_view": "Przeglądanie zainstalowanych wtyczek i ich wersji", "@vitnode/core:queue": "Zadania w kolejce", "@vitnode/core:queue:can_view": "Wyświetlanie zadań w kolejce", + "@vitnode/core:report_reasons": "Powody zgłoszeń", + "@vitnode/core:report_reasons:can_create": "Dodawanie powodów zgłoszeń", + "@vitnode/core:report_reasons:can_delete": "Usuwanie powodów zgłoszeń", + "@vitnode/core:report_reasons:can_edit": "Edycja i zmiana kolejności powodów zgłoszeń", + "@vitnode/core:report_reasons:can_view": "Podgląd powodów zgłoszeń", "@vitnode/core:roles": "Role", "@vitnode/core:roles:can_create": "Tworzenie ról", "@vitnode/core:roles:can_delete": "Usuwanie ról", @@ -476,6 +481,10 @@ "moderators": "Moderatorzy", "title": "Zespół" }, + "moderation": { + "title": "Moderacja", + "report_reasons": "Powody zgłoszeń" + }, "system": { "files": "Pliki", "integrations": "Integracje", @@ -723,6 +732,60 @@ }, "title": "Zespół" }, + "moderation": { + "report_reasons": { + "title": "Powody zgłoszeń", + "desc": "Powody, spośród których członkowie wybierają, gdy coś zgłaszają - maksymalnie 10. Przeciągnij, aby zmienić ich kolejność.", + "create": "Dodaj powód", + "limit": "Możesz mieć maksymalnie {max} powodów. Usuń jeden, aby dodać kolejny.", + "columns": { + "reason": "Powód", + "details": "Szczegóły" + }, + "details_required": "Wymagane", + "details_optional": "Opcjonalne", + "actions": { + "label": "Akcje dla: {reason}", + "edit": "Edytuj", + "delete": "Usuń" + }, + "reorder": { + "success": "Kolejność zapisana", + "success_desc": "Członkowie widzą powody w nowej kolejności." + }, + "form": { + "create_title": "Dodaj powód zgłoszenia", + "edit_title": "Edytuj powód zgłoszenia", + "sheet_desc": "Członkowie widzą tytuł i opis w oknie zgłoszenia, w swoim języku.", + "title": "Tytuł", + "title_desc": "Krótko i konkretnie, np. „Spam” albo „Nękanie”.", + "description": "Opis", + "description_desc": "Jedno zdanie, które pomaga odróżnić ten powód od pozostałych.", + "requires_details": "Wymagaj szczegółów", + "requires_details_desc": "Członkowie muszą opisać problem (co najmniej {min} znaków), zanim wyślą zgłoszenie.", + "submit_create": "Dodaj powód", + "submit_edit": "Zapisz zmiany", + "created": "Powód dodany", + "created_desc": "Członkowie mogą wybrać „{reason}”, gdy coś zgłaszają.", + "updated": "Powód zapisany", + "updated_desc": "Istniejące zgłoszenia też pokazują nowy tytuł.", + "error": "Nie udało się zapisać powodu", + "error_desc": "Sprawdź pola i spróbuj ponownie.", + "limit_reached": "Możesz mieć maksymalnie {max} powodów. Usuń jeden, aby dodać kolejny." + }, + "delete": { + "title": "Usunąć „{reason}”?", + "desc": "Członkowie nie będą mogli go wybrać. Wysłane już zgłoszenia zostają, ale zamiast tytułu pokazują „Usunięty powód”.", + "confirm": "Usuń powód", + "cancel": "Anuluj", + "success": "Powód usunięty", + "success_desc": "„{reason}” nie pojawia się już w oknie zgłoszenia.", + "error": "Nie udało się usunąć powodu", + "last_reason": "Zostaw co najmniej jeden powód - członkowie muszą mieć z czego wybierać.", + "unknown": "Coś poszło nie tak. Spróbuj ponownie za chwilę." + } + } + }, "system": { "files": { "actions": { diff --git a/apps/web/src/page-cache.gen.ts b/apps/web/src/page-cache.gen.ts index 7c4d0fd9c8..117ce331e7 100644 --- a/apps/web/src/page-cache.gen.ts +++ b/apps/web/src/page-cache.gen.ts @@ -33,6 +33,7 @@ export const pageCacheRoutes: PageCacheRouteTable = [ { path: '/admin/core/debug/search' }, { path: '/admin/core/debug/services' }, { path: '/admin/core/debug/vitnode' }, + { path: '/admin/core/moderation/report-reasons' }, { path: '/admin/core/staff/admins' }, { path: '/admin/core/staff/moderators' }, { path: '/admin/core/system/files' }, diff --git a/packages/vitnode/scripts/prepare-database.ts b/packages/vitnode/scripts/prepare-database.ts index 7dfdabd478..062a351c91 100644 --- a/packages/vitnode/scripts/prepare-database.ts +++ b/packages/vitnode/scripts/prepare-database.ts @@ -7,9 +7,11 @@ import postgres from "postgres"; import { core_admin_permissions } from "@/database/admins.js"; import { core_languages, core_languages_words } from "@/database/languages.js"; +import { core_moderation_report_reasons } from "@/database/moderation.js"; import { core_moderators_permissions } from "@/database/moderators.js"; import { core_roles } from "@/database/roles.js"; import { SEARCH_TEXT_CONFIGS } from "@/database/search.js"; +import { MODERATION_DEFAULT_REPORT_REASONS } from "@/lib/moderation/const.js"; import type { VitNodeApiI18nConfig } from "../src/lib/i18n/types.js"; import type { VitNodeApiConfig } from "../src/vitnode.config.js"; @@ -641,6 +643,8 @@ export const initialDataForDatabase = async (given?: VitNodeApiConfig) => { .limit(1); const languages = languagesFromApiConfig(config.i18n); + const { code: defaultLanguageCode } = + languages.find(language => language.default) ?? languages[0]; // Idempotent by `code`, which is what lets a locale be added to the config and // picked up by the next `db:prepare` without touching the rows already there. @@ -695,9 +699,6 @@ export const initialDataForDatabase = async (given?: VitNodeApiConfig) => { * not serve English - which is reachable now that these rows come from the * app's own configuration rather than from a fallback that always said `en`. */ - const { code: defaultLanguageCode } = - languages.find(language => language.default) ?? languages[0]; - await dbClient.insert(core_languages_words).values( [ { role: roles[0].id, value: "Guest" }, @@ -733,6 +734,52 @@ export const initialDataForDatabase = async (given?: VitNodeApiConfig) => { unrestricted: true, }); } + + await seedReportReasons(dbClient, defaultLanguageCode); +}; + +const seedReportReasons = async ( + dbClient: VitNodeApiConfig["dbProvider"], + languageCode: string, +) => { + const [reasonCount] = await dbClient + .select({ count: count() }) + .from(core_moderation_report_reasons) + .limit(1); + if (reasonCount.count > 0) return; + + const reasons = await dbClient + .insert(core_moderation_report_reasons) + .values( + MODERATION_DEFAULT_REPORT_REASONS.map((reason, position) => ({ + code: reason.code, + position, + requiresDetails: reason.requiresDetails, + })), + ) + .onConflictDoNothing({ target: core_moderation_report_reasons.code }) + .returning({ + code: core_moderation_report_reasons.code, + id: core_moderation_report_reasons.id, + }); + + const words = reasons.flatMap(({ code, id }) => { + const reason = MODERATION_DEFAULT_REPORT_REASONS.find( + item => item.code === code, + ); + if (!reason) return []; + + return (["title", "description"] as const).map(variable => ({ + itemId: id, + languageCode, + pluginCode: "core", + tableName: "core_moderation_report_reasons", + value: reason[variable], + variable, + })); + }); + if (words.length > 0) + await dbClient.insert(core_languages_words).values(words); }; /** diff --git a/packages/vitnode/src/api/lib/moderation/report-reasons.ts b/packages/vitnode/src/api/lib/moderation/report-reasons.ts new file mode 100644 index 0000000000..dea615bf79 --- /dev/null +++ b/packages/vitnode/src/api/lib/moderation/report-reasons.ts @@ -0,0 +1,82 @@ +import type { Context } from "hono"; + +import { z } from "@hono/zod-openapi"; +import { and, asc, eq, inArray } from "drizzle-orm"; + +import { core_languages_words } from "@/database/languages"; +import { core_moderation_report_reasons } from "@/database/moderation"; + +export const REPORT_REASON_WORDS = { + pluginCode: "core", + tableName: "core_moderation_report_reasons", +} as const; + +export type ReportReasonWordVariable = "description" | "title"; + +const multiLangSchema = z.array( + z.object({ languageCode: z.string(), value: z.string() }), +); + +export const reportReasonSchema = z.object({ + id: z.number(), + code: z.string(), + requiresDetails: z.boolean(), + position: z.number(), + title: multiLangSchema, + description: multiLangSchema, +}); + +export type ReportReason = z.infer; + +const wordsFor = async (c: Context, ids: number[]) => { + if (ids.length === 0) return []; + + return await c + .get("db") + .select({ + itemId: core_languages_words.itemId, + languageCode: core_languages_words.languageCode, + value: core_languages_words.value, + variable: core_languages_words.variable, + }) + .from(core_languages_words) + .where( + and( + eq(core_languages_words.pluginCode, REPORT_REASON_WORDS.pluginCode), + eq(core_languages_words.tableName, REPORT_REASON_WORDS.tableName), + inArray(core_languages_words.itemId, ids), + ), + ); +}; + +export const listReportReasons = async ( + c: Context, +): Promise => { + const rows = await c + .get("db") + .select({ + code: core_moderation_report_reasons.code, + id: core_moderation_report_reasons.id, + position: core_moderation_report_reasons.position, + requiresDetails: core_moderation_report_reasons.requiresDetails, + }) + .from(core_moderation_report_reasons) + .orderBy( + asc(core_moderation_report_reasons.position), + asc(core_moderation_report_reasons.id), + ); + const words = await wordsFor( + c, + rows.map(row => row.id), + ); + const pick = (id: number, variable: ReportReasonWordVariable) => + words + .filter(word => word.itemId === id && word.variable === variable) + .map(word => ({ languageCode: word.languageCode, value: word.value })); + + return rows.map(row => ({ + ...row, + description: pick(row.id, "description"), + title: pick(row.id, "title"), + })); +}; diff --git a/packages/vitnode/src/api/models/events.ts b/packages/vitnode/src/api/models/events.ts index 8ed841ce79..545c279db8 100644 --- a/packages/vitnode/src/api/models/events.ts +++ b/packages/vitnode/src/api/models/events.ts @@ -115,6 +115,21 @@ export interface VitNodeEvents { reportId: number; resolution: string; }; + "moderation.report_reason.created": { + code: string; + reasonId: number; + }; + "moderation.report_reason.deleted": { + code: string; + reasonId: number; + }; + "moderation.report_reason.reordered": { + reasonIds: number[]; + }; + "moderation.report_reason.updated": { + code: string; + reasonId: number; + }; "notifications.deleted_all": { items: number; }; diff --git a/packages/vitnode/src/api/modules/admin/admin.module.ts b/packages/vitnode/src/api/modules/admin/admin.module.ts index 2626d8c116..914e3579b3 100644 --- a/packages/vitnode/src/api/modules/admin/admin.module.ts +++ b/packages/vitnode/src/api/modules/admin/admin.module.ts @@ -7,6 +7,7 @@ import { debugAdminModule } from "./debug/debug.admin.module"; import { filesAdminModule } from "./files/files.admin.module"; import { notificationsAdminModule } from "./notifications/notifications.admin.module"; import { pluginsAdminModule } from "./plugins/plugins.admin.module"; +import { reportReasonsAdminModule } from "./report-reasons/report-reasons.admin.module"; import { rolesAdminModule } from "./roles/roles.admin.module"; import { sendNotificationRoute } from "./routes/notifications.route"; import { sessionAdminRoute } from "./routes/session.route"; @@ -27,6 +28,7 @@ export const adminModule = buildModule({ dashboardAdminModule, notificationsAdminModule, pluginsAdminModule, + reportReasonsAdminModule, ], cronJobs: [], }); diff --git a/packages/vitnode/src/api/modules/admin/report-reasons/report-reasons.admin.module.ts b/packages/vitnode/src/api/modules/admin/report-reasons/report-reasons.admin.module.ts new file mode 100644 index 0000000000..7a4a481304 --- /dev/null +++ b/packages/vitnode/src/api/modules/admin/report-reasons/report-reasons.admin.module.ts @@ -0,0 +1,20 @@ +import { buildModule } from "@/api/builders"; + +import { + createReportReasonAdminRoute, + deleteReportReasonAdminRoute, + listReportReasonsAdminRoute, + reorderReportReasonsAdminRoute, + updateReportReasonAdminRoute, +} from "./routes/report-reasons.routes"; + +export const reportReasonsAdminModule = buildModule({ + name: "report-reasons", + routes: [ + listReportReasonsAdminRoute, + createReportReasonAdminRoute, + reorderReportReasonsAdminRoute, + updateReportReasonAdminRoute, + deleteReportReasonAdminRoute, + ], +}); diff --git a/packages/vitnode/src/api/modules/admin/report-reasons/routes/report-reasons.routes.ts b/packages/vitnode/src/api/modules/admin/report-reasons/routes/report-reasons.routes.ts new file mode 100644 index 0000000000..db90be8cb5 --- /dev/null +++ b/packages/vitnode/src/api/modules/admin/report-reasons/routes/report-reasons.routes.ts @@ -0,0 +1,304 @@ +import type { Context } from "hono"; + +import { z } from "@hono/zod-openapi"; +import { and, count, eq, max } from "drizzle-orm"; +import { randomBytes } from "node:crypto"; + +import { buildRoute } from "@/api/builders"; +import { + listReportReasons, + REPORT_REASON_WORDS, + reportReasonSchema, +} from "@/api/lib/moderation/report-reasons"; +import { saveLanguageWords } from "@/api/lib/save-language-words"; +import { errorSchema, json } from "@/api/modules/moderation/lib/schema"; +import { core_languages_words } from "@/database/languages"; +import { core_moderation_report_reasons } from "@/database/moderation"; +import { MODERATION_LIMITS } from "@/lib/moderation/const"; + +const titleSchema = z + .array( + z.object({ + languageCode: z.string(), + value: z + .string() + .trim() + .min(1) + .max(MODERATION_LIMITS.reasonTitleMaxLength), + }), + ) + .min(1); + +const descriptionSchema = z.array( + z.object({ + languageCode: z.string(), + value: z.string().trim().max(MODERATION_LIMITS.reasonDescriptionMaxLength), + }), +); + +const reasonBody = z.object({ + title: titleSchema, + description: descriptionSchema, + requiresDetails: z.boolean(), +}); + +const idParams = z.object({ + id: z.coerce.number().int().positive().openapi({ example: 1 }), +}); + +const filledIn = (values: z.infer) => + values.filter(item => item.value.length > 0); + +const saveReasonWords = async ( + c: Context, + reasonId: number, + body: Partial>, +) => { + if (body.title !== undefined) { + await saveLanguageWords(c, { + ...REPORT_REASON_WORDS, + itemId: reasonId, + values: filledIn(body.title), + variable: "title", + }); + } + if (body.description !== undefined) { + await saveLanguageWords(c, { + ...REPORT_REASON_WORDS, + itemId: reasonId, + values: filledIn(body.description), + variable: "description", + }); + } +}; + +const findReasonRow = async (c: Context, id: number) => { + const [row] = await c + .get("db") + .select({ + code: core_moderation_report_reasons.code, + id: core_moderation_report_reasons.id, + }) + .from(core_moderation_report_reasons) + .where(eq(core_moderation_report_reasons.id, id)) + .limit(1); + + return row; +}; + +export const listReportReasonsAdminRoute = buildRoute({ + adminStaffPermission: { module: "report_reasons", permission: "can_view" }, + route: { + method: "get", + path: "/", + description: "Every report reason in display order (Admin only)", + responses: { + 200: json( + z.object({ reasons: z.array(reportReasonSchema) }), + "Report reasons", + ), + 403: { description: "Access Denied" }, + }, + }, + handler: async c => c.json({ reasons: await listReportReasons(c) }, 200), +}); + +export const createReportReasonAdminRoute = buildRoute({ + adminStaffPermission: { module: "report_reasons", permission: "can_create" }, + route: { + method: "post", + path: "/create", + description: + "Add a report reason at the end of the list (Admin only). Members see it in the report dialog right away. There can be at most 10 reasons", + request: { + body: { + required: true, + content: { "application/json": { schema: reasonBody } }, + }, + }, + responses: { + 201: json(z.object({ id: z.number() }), "Report reason created"), + 403: { description: "Access Denied" }, + 409: json( + errorSchema, + "The list already holds the maximum number of reasons", + ), + }, + }, + handler: async c => { + const body = c.req.valid("json"); + const db = c.get("db"); + const [{ position: lastPosition, total }] = await db + .select({ + position: max(core_moderation_report_reasons.position), + total: count(), + }) + .from(core_moderation_report_reasons); + if (total >= MODERATION_LIMITS.maxReportReasons) { + return c.json({ error: "limit_reached" }, 409); + } + const code = `reason_${randomBytes(6).toString("hex")}`; + + const [created] = await db + .insert(core_moderation_report_reasons) + .values({ + code, + position: (lastPosition ?? -1) + 1, + requiresDetails: body.requiresDetails, + }) + .returning({ id: core_moderation_report_reasons.id }); + + await saveReasonWords(c, created.id, body); + await c + .get("events") + .emit("moderation.report_reason.created", { code, reasonId: created.id }); + + return c.json({ id: created.id }, 201); + }, +}); + +export const updateReportReasonAdminRoute = buildRoute({ + adminStaffPermission: { module: "report_reasons", permission: "can_edit" }, + route: { + method: "patch", + path: "/{id}", + description: + "Edit a report reason (Admin only). Existing reports show the new title", + request: { + params: idParams, + body: { + required: true, + content: { "application/json": { schema: reasonBody.partial() } }, + }, + }, + responses: { + 200: json(z.object({ id: z.number() }), "Report reason updated"), + 403: { description: "Access Denied" }, + 404: json(errorSchema, "Report reason not found"), + }, + }, + handler: async c => { + const { id } = c.req.valid("param"); + const body = c.req.valid("json"); + const row = await findReasonRow(c, id); + if (!row) return c.json({ error: "not_found" }, 404); + + if (body.requiresDetails !== undefined) { + await c + .get("db") + .update(core_moderation_report_reasons) + .set({ requiresDetails: body.requiresDetails }) + .where(eq(core_moderation_report_reasons.id, id)); + } + await saveReasonWords(c, id, body); + await c.get("events").emit("moderation.report_reason.updated", { + code: row.code, + reasonId: id, + }); + + return c.json({ id }, 200); + }, +}); + +export const deleteReportReasonAdminRoute = buildRoute({ + adminStaffPermission: { module: "report_reasons", permission: "can_delete" }, + route: { + method: "delete", + path: "/{id}", + description: + "Delete a report reason (Admin only). Reports filed with it keep the report but lose the reason's title. The last reason cannot be deleted", + request: { params: idParams }, + responses: { + 200: { description: "Report reason deleted" }, + 403: { description: "Access Denied" }, + 404: json(errorSchema, "Report reason not found"), + 409: json(errorSchema, "The last reason cannot be deleted"), + }, + }, + handler: async c => { + const { id } = c.req.valid("param"); + const db = c.get("db"); + const row = await findReasonRow(c, id); + if (!row) return c.json({ error: "not_found" }, 404); + + const [{ total }] = await db + .select({ total: count() }) + .from(core_moderation_report_reasons); + if (total <= 1) return c.json({ error: "last_reason" }, 409); + + await db.transaction(async tx => { + await tx + .delete(core_languages_words) + .where( + and( + eq(core_languages_words.pluginCode, REPORT_REASON_WORDS.pluginCode), + eq(core_languages_words.tableName, REPORT_REASON_WORDS.tableName), + eq(core_languages_words.itemId, id), + ), + ); + await tx + .delete(core_moderation_report_reasons) + .where(eq(core_moderation_report_reasons.id, id)); + }); + await c.get("events").emit("moderation.report_reason.deleted", { + code: row.code, + reasonId: id, + }); + + return c.body(null, 200); + }, +}); + +export const reorderReportReasonsAdminRoute = buildRoute({ + adminStaffPermission: { module: "report_reasons", permission: "can_edit" }, + route: { + method: "put", + path: "/reorder", + description: + "Set the order of every report reason at once (Admin only). `ids` must list each reason exactly once", + request: { + body: { + required: true, + content: { + "application/json": { + schema: z.object({ ids: z.array(z.number().int()).min(1) }), + }, + }, + }, + }, + responses: { + 200: { description: "Order saved" }, + 400: json(errorSchema, "`ids` does not match the current reasons"), + 403: { description: "Access Denied" }, + }, + }, + handler: async c => { + const { ids } = c.req.valid("json"); + const db = c.get("db"); + const current = await db + .select({ id: core_moderation_report_reasons.id }) + .from(core_moderation_report_reasons); + const known = new Set(current.map(row => row.id)); + if ( + ids.length !== known.size || + new Set(ids).size !== ids.length || + ids.some(id => !known.has(id)) + ) { + return c.json({ error: "mismatch" }, 400); + } + + await db.transaction(async tx => { + for (const [position, id] of ids.entries()) { + await tx + .update(core_moderation_report_reasons) + .set({ position }) + .where(eq(core_moderation_report_reasons.id, id)); + } + }); + await c + .get("events") + .emit("moderation.report_reason.reordered", { reasonIds: ids }); + + return c.body(null, 200); + }, +}); diff --git a/packages/vitnode/src/api/modules/moderation/lib/schema.ts b/packages/vitnode/src/api/modules/moderation/lib/schema.ts index 0975bc95c5..3a51587d14 100644 --- a/packages/vitnode/src/api/modules/moderation/lib/schema.ts +++ b/packages/vitnode/src/api/modules/moderation/lib/schema.ts @@ -4,7 +4,6 @@ import { createRichTextDocumentSchema } from "@/content/rich-text/document"; import { MODERATION_LIMITS, MODERATION_REPORT_EVENT_TYPES, - MODERATION_REPORT_REASONS, MODERATION_REPORT_RESOLUTIONS, MODERATION_REPORT_STATUSES, } from "@/lib/moderation/const"; @@ -51,7 +50,7 @@ export const reportStateSchema = z.object({ version: z.number(), }); -export const reasonSchema = z.enum(MODERATION_REPORT_REASONS); +export const reasonSchema = z.string().min(1).max(32); export const resolutionSchema = z.enum(MODERATION_REPORT_RESOLUTIONS); export const eventTypeSchema = z.enum(MODERATION_REPORT_EVENT_TYPES); diff --git a/packages/vitnode/src/api/modules/moderation/moderation.module.ts b/packages/vitnode/src/api/modules/moderation/moderation.module.ts index 1a057f24be..390c2a50af 100644 --- a/packages/vitnode/src/api/modules/moderation/moderation.module.ts +++ b/packages/vitnode/src/api/modules/moderation/moderation.module.ts @@ -14,6 +14,7 @@ import { deleteReportNoteRoute, editReportNoteRoute, } from "./routes/notes.routes"; +import { listReportReasonsRoute } from "./routes/reasons.route"; import { showReportRoute } from "./routes/show.route"; import { assignReportRoute, @@ -28,6 +29,7 @@ import { export const moderationModule = buildModule({ name: "moderation", routes: [ + listReportReasonsRoute, createReportRoute, listReportsRoute, showReportRoute, diff --git a/packages/vitnode/src/api/modules/moderation/reports.test.ts b/packages/vitnode/src/api/modules/moderation/reports.test.ts index b274413db4..1a03da25f7 100644 --- a/packages/vitnode/src/api/modules/moderation/reports.test.ts +++ b/packages/vitnode/src/api/modules/moderation/reports.test.ts @@ -10,6 +10,7 @@ import { defineModerationScope, defineReportTarget } from "@/api/moderation"; import { core_files } from "@/database/files"; import { core_moderation_report_events, + core_moderation_report_reasons, core_moderation_reports, } from "@/database/moderation"; import { core_roles } from "@/database/roles"; @@ -165,6 +166,13 @@ const harness = async () => { [core_files, []], [core_moderation_reports, []], [core_moderation_report_events, []], + [ + core_moderation_report_reasons, + [ + { code: "spam", id: 1, position: 0, requiresDetails: false }, + { code: "other", id: 2, position: 1, requiresDetails: true }, + ], + ], ]); const emit = vi.fn(async () => Promise.resolve()); @@ -351,10 +359,10 @@ describe("filing a report", () => { }); it.each([ - [MODERATION_LIMITS.otherDescriptionMinLength - 1, 400], - [MODERATION_LIMITS.otherDescriptionMinLength, 201], + [MODERATION_LIMITS.requiredDescriptionMinLength - 1, 400], + [MODERATION_LIMITS.requiredDescriptionMinLength, 201], ])( - 'needs a description of the problem for "other" (%i characters: %i)', + "needs a description for a reason that requires details (%i characters: %i)", async (length, status) => { const h = await harness(); diff --git a/packages/vitnode/src/api/modules/moderation/routes/create.route.ts b/packages/vitnode/src/api/modules/moderation/routes/create.route.ts index 122c23eed5..5c7fe26919 100644 --- a/packages/vitnode/src/api/modules/moderation/routes/create.route.ts +++ b/packages/vitnode/src/api/modules/moderation/routes/create.route.ts @@ -6,7 +6,10 @@ import { buildRoute } from "@/api/builders"; import { isUniqueViolation } from "@/api/lib/db-errors"; import { findReportTarget } from "@/api/lib/moderation/registry"; import { sealReportSnapshot } from "@/api/lib/moderation/snapshot"; -import { core_moderation_reports } from "@/database/moderation"; +import { + core_moderation_report_reasons, + core_moderation_reports, +} from "@/database/moderation"; import { MODERATION_LIMITS } from "@/lib/moderation/const"; import { @@ -22,44 +25,36 @@ const localeSchema = z .max(20) .regex(/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/); -const createBody = z - .object({ - pluginId: z.string().min(1).max(100), - targetType: z.string().min(1).max(100), - targetId: z.string().min(1).max(64), - locale: localeSchema.nullable().optional(), - requestedLocale: localeSchema.nullable().optional(), - reason: reasonSchema, - description: z - .string() - .trim() - .max(MODERATION_LIMITS.descriptionMaxLength) - .nullable() - .optional(), - }) - .refine( - body => - body.reason !== "other" || - (body.description?.length ?? 0) >= - MODERATION_LIMITS.otherDescriptionMinLength, - { - message: `Describe the problem in at least ${MODERATION_LIMITS.otherDescriptionMinLength} characters when the reason is "other".`, - path: ["description"], - }, - ); +const createBody = z.object({ + pluginId: z.string().min(1).max(100), + targetType: z.string().min(1).max(100), + targetId: z.string().min(1).max(64), + locale: localeSchema.nullable().optional(), + requestedLocale: localeSchema.nullable().optional(), + reason: reasonSchema, + description: z + .string() + .trim() + .max(MODERATION_LIMITS.descriptionMaxLength) + .nullable() + .optional(), +}); export const createReportRoute = buildRoute({ route: { method: "post", path: "/reports", description: - "Report content to the moderators. The server captures the snapshot - the client sends only the target, locale, reason and description", + "Report content to the moderators. The server captures the snapshot - the client sends only the target, locale, reason code and description. A reason that requires details needs a description", request: { body: { content: { "application/json": { schema: createBody } } }, }, responses: { 201: json(z.object({ id: z.number() }), "Report filed"), - 400: { description: "Invalid reason or description" }, + 400: json( + errorSchema, + "The reason does not exist (`reason_not_found`) or needs details (`details_required`)", + ), 401: { description: "Sign in first" }, 404: json( errorSchema, @@ -77,6 +72,23 @@ export const createReportRoute = buildRoute({ if (!user) throw new HTTPException(401, { message: "Sign in first." }); const body = c.req.valid("json"); + const [reason] = await c + .get("db") + .select({ + requiresDetails: core_moderation_report_reasons.requiresDetails, + }) + .from(core_moderation_report_reasons) + .where(eq(core_moderation_report_reasons.code, body.reason)) + .limit(1); + if (!reason) throw reportError(400, { error: "reason_not_found" }); + if ( + reason.requiresDetails && + (body.description?.length ?? 0) < + MODERATION_LIMITS.requiredDescriptionMinLength + ) { + throw reportError(400, { error: "details_required" }); + } + const registered = findReportTarget(c.get("core").moderation, { pluginId: body.pluginId, type: body.targetType, diff --git a/packages/vitnode/src/api/modules/moderation/routes/reasons.route.ts b/packages/vitnode/src/api/modules/moderation/routes/reasons.route.ts new file mode 100644 index 0000000000..9cc1f2ef11 --- /dev/null +++ b/packages/vitnode/src/api/modules/moderation/routes/reasons.route.ts @@ -0,0 +1,34 @@ +import { z } from "@hono/zod-openapi"; + +import { buildRoute } from "@/api/builders"; +import { + listReportReasons, + reportReasonSchema, +} from "@/api/lib/moderation/report-reasons"; + +import { json } from "../lib/schema"; + +export const listReportReasonsRoute = buildRoute({ + route: { + method: "get", + path: "/reasons", + description: + "The reasons a member can pick when reporting something, in display order, with every translation", + responses: { + 200: json( + z.object({ + reasons: z.array(reportReasonSchema.omit({ position: true })), + }), + "Report reasons", + ), + }, + }, + handler: async c => { + const reasons = await listReportReasons(c); + + return c.json( + { reasons: reasons.map(({ position: _position, ...reason }) => reason) }, + 200, + ); + }, +}); diff --git a/packages/vitnode/src/api/plugin.ts b/packages/vitnode/src/api/plugin.ts index 06d44ee154..02a7996868 100644 --- a/packages/vitnode/src/api/plugin.ts +++ b/packages/vitnode/src/api/plugin.ts @@ -101,6 +101,12 @@ export const newBuildPluginApiCore = buildApiPlugin({ ], ai: ["can_view", { permission: "can_manage", dependsOn: ["can_view"] }], cron: ["can_view", { permission: "can_run", dependsOn: ["can_view"] }], + report_reasons: [ + "can_view", + { permission: "can_create", dependsOn: ["can_view"] }, + { permission: "can_edit", dependsOn: ["can_view"] }, + { permission: "can_delete", dependsOn: ["can_view"] }, + ], staff_moderators: [ "can_view", { permission: "can_create", dependsOn: ["can_view"] }, diff --git a/packages/vitnode/src/components/table/content.tsx b/packages/vitnode/src/components/table/content.tsx index ba3ec28aea..bf37b7848b 100644 --- a/packages/vitnode/src/components/table/content.tsx +++ b/packages/vitnode/src/components/table/content.tsx @@ -138,7 +138,9 @@ const ReorderableBodyDataTable = React.lazy(async () => * each page. Optional row selection with bulk actions, expandable and * reorderable rows, and grouping. * - * Pass the API's `edges` and `pageInfo` for the current page. + * Pass the API's `edges` and `pageInfo` for the current page. Leave + * `pageInfo` out for a short list that is never paged, and the pagination + * footer is not rendered. */ export function ContentDataTable({ bulkActions, @@ -324,7 +326,7 @@ export function ContentDataTable({ - + {pageInfo ? : null} ); diff --git a/packages/vitnode/src/components/table/data-table-content.tsx b/packages/vitnode/src/components/table/data-table-content.tsx index 1e0fb6da9f..0eb72f1726 100644 --- a/packages/vitnode/src/components/table/data-table-content.tsx +++ b/packages/vitnode/src/components/table/data-table-content.tsx @@ -63,7 +63,7 @@ export type DataTableProps = Omit< React.ComponentProps, "columns" > & - React.ComponentProps & + Partial> & React.ComponentProps & { /** Adds a checkbox per row and shows these actions while rows are selected. */ bulkActions?: React.ReactNode; diff --git a/packages/vitnode/src/database/moderation.ts b/packages/vitnode/src/database/moderation.ts index 5c146e43f4..e2574f6bf1 100644 --- a/packages/vitnode/src/database/moderation.ts +++ b/packages/vitnode/src/database/moderation.ts @@ -2,7 +2,6 @@ import { camelCase, index } from "drizzle-orm/pg-core"; import type { ModerationReportEventType, - ModerationReportReason, ModerationReportResolution, ModerationReportStatus, } from "@/lib/moderation/const"; @@ -10,13 +9,29 @@ import type { ModerationReportSnapshot } from "@/lib/moderation/snapshot"; import { MODERATION_REPORT_EVENT_TYPES, - MODERATION_REPORT_REASONS, MODERATION_REPORT_RESOLUTIONS, MODERATION_REPORT_STATUSES, } from "@/lib/moderation/const"; import { core_users } from "./users"; +export const core_moderation_report_reasons = camelCase.table.withRLS( + "core_moderation_report_reasons", + t => ({ + id: t.serial().primaryKey(), + code: t.varchar({ length: 32 }).notNull().unique(), + requiresDetails: t.boolean().notNull().default(false), + position: t.integer().notNull().default(0), + createdAt: t.timestamp().notNull().defaultNow(), + updatedAt: t + .timestamp() + .notNull() + .defaultNow() + .$onUpdate(() => new Date()), + }), + t => [index("core_moderation_report_reasons_position_idx").on(t.position)], +); + export const core_moderation_reports = camelCase.table.withRLS( "core_moderation_reports", t => ({ @@ -27,10 +42,7 @@ export const core_moderation_reports = camelCase.table.withRLS( reporterId: t.integer().references(() => core_users.id, { onDelete: "set null", }), - reason: t - .varchar({ enum: MODERATION_REPORT_REASONS, length: 32 }) - .$type() - .notNull(), + reason: t.varchar({ length: 32 }).notNull(), description: t.text(), snapshot: t.jsonb().$type().notNull(), targetTitle: t.varchar({ length: 500 }), diff --git a/packages/vitnode/src/lib/moderation/const.ts b/packages/vitnode/src/lib/moderation/const.ts index ba9e883350..2dabe6a6ce 100644 --- a/packages/vitnode/src/lib/moderation/const.ts +++ b/packages/vitnode/src/lib/moderation/const.ts @@ -7,15 +7,33 @@ export const MODERATION_PERMISSIONS = { hide: "can_hide", } as const; -export const MODERATION_REPORT_REASONS = [ - "spam", - "abusive", - "rule_violation", - "other", +export const MODERATION_DEFAULT_REPORT_REASONS = [ + { + code: "spam", + description: "Advertising, scams or repeated junk.", + requiresDetails: false, + title: "Spam", + }, + { + code: "abusive", + description: "Harassment, hate or threats.", + requiresDetails: false, + title: "Abusive content", + }, + { + code: "rule_violation", + description: "Breaks the community rules in another way.", + requiresDetails: false, + title: "Rule violation", + }, + { + code: "other", + description: "Something else - tell us what.", + requiresDetails: true, + title: "Other", + }, ] as const; -export type ModerationReportReason = (typeof MODERATION_REPORT_REASONS)[number]; - export const MODERATION_REPORT_STATUSES = [ "new", "in_progress", @@ -56,7 +74,10 @@ export type ModerationTargetAction = (typeof MODERATION_TARGET_ACTIONS)[number]; export const MODERATION_LIMITS = { descriptionMaxLength: 2000, - otherDescriptionMinLength: 10, + requiredDescriptionMinLength: 10, + reasonTitleMaxLength: 100, + reasonDescriptionMaxLength: 255, + maxReportReasons: 10, noteMaxLength: 2000, explanationMinLength: 3, richNoteMaxBytes: 64 * 1024, diff --git a/packages/vitnode/src/locales/en.json b/packages/vitnode/src/locales/en.json index c17e3c77b1..3fcd7a0eb7 100644 --- a/packages/vitnode/src/locales/en.json +++ b/packages/vitnode/src/locales/en.json @@ -45,6 +45,11 @@ "@vitnode/core:cron": "Cron Jobs", "@vitnode/core:cron:can_view": "View cron jobs", "@vitnode/core:cron:can_run": "Run cron jobs", + "@vitnode/core:report_reasons": "Report reasons", + "@vitnode/core:report_reasons:can_view": "View report reasons", + "@vitnode/core:report_reasons:can_create": "Create report reasons", + "@vitnode/core:report_reasons:can_edit": "Edit and reorder report reasons", + "@vitnode/core:report_reasons:can_delete": "Delete report reasons", "@vitnode/core:staff_moderators": "Staff: Moderators", "@vitnode/core:staff_moderators:can_view": "View moderators list", "@vitnode/core:staff_moderators:can_create": "Create moderators", @@ -2163,18 +2168,7 @@ "empty_desc": "When something needs your attention, it lands here." }, "moderation": { - "reasons": { - "spam": "Spam", - "abusive": "Abusive content", - "rule_violation": "Rule violation", - "other": "Other" - }, - "reason_descs": { - "spam": "Advertising, scams or repeated junk.", - "abusive": "Harassment, hate or threats.", - "rule_violation": "Breaks the community rules in another way.", - "other": "Something else - tell us what." - }, + "reason_removed": "Removed reason", "statuses": { "new": "New", "in_progress": "In progress", @@ -2193,24 +2187,36 @@ "report": { "button": "Report", "title": "Report {type}", - "desc": "Tell the moderators what is wrong. They see what you saw, even if it changes later.", - "reason": "Reason", - "description": "Details", - "description_desc": "Optional, unless you chose Other. Moderators read this, the author does not.", + "pick_title": "What's wrong with this {type}?", + "review_title": "Ready to send?", + "sent_title": "Report sent", + "reasons_label": "Reason", + "change": "Change", + "change_label": "Change reason, currently {reason}", + "details_required_label": "What should moderators know?", + "details_optional_label": "Anything to add?", + "required": "Required", + "details_placeholder": "Links, timestamps or what exactly is wrong", + "details_note": "Only moderators read this, the author doesn't.", + "chars_left": "{count} left", "submit": "Send report", - "cancel": "Cancel", + "sent_stamp": "Sent to the moderators just now", + "sent_desc": "A moderator will look at the {type} as you saw it, even if it changes later. If it breaks the rules, they can hide it.", + "done": "Done", "signed_out": "Sign in to report content.", "sign_in": "Sign in", - "success": "Report sent", - "success_desc": "Thanks. A moderator will take a look.", + "load_error": "We couldn't load the reasons.", + "retry": "Try again", "errors": { "title": "Could not send the report", "duplicate": "You already reported this, and that report is still open.", "not_found": "This content is no longer available to report.", "rate_limited": "You have sent a lot of reports recently. Try again later.", - "unauthenticated": "Your session has ended. Sign in again to send the report.", + "unauthenticated": "Your session has ended. Sign in again to send the report.", "validation": "Check the reason and the details, then try again.", - "unknown": "Something went wrong. Try again in a moment." + "unknown": "Something went wrong. Try again in a moment.", + "details_required": "Tell the moderators a bit more - at least {min} characters.", + "reason_not_found": "That reason was just removed. Pick another one." } }, "modcp": { @@ -2734,6 +2740,10 @@ "moderators": "Moderators", "admins": "Administrators" }, + "moderation": { + "title": "Moderation", + "report_reasons": "Report reasons" + }, "user_bar": { "home_page": "Home Page", "debug": "Debug Panel", @@ -3371,6 +3381,60 @@ } } }, + "moderation": { + "report_reasons": { + "title": "Report reasons", + "desc": "The reasons members pick from when they report something, up to 10. Drag to change the order they appear in.", + "create": "Add reason", + "limit": "You can have up to {max} reasons. Delete one to add another.", + "columns": { + "reason": "Reason", + "details": "Details" + }, + "details_required": "Required", + "details_optional": "Optional", + "actions": { + "label": "Actions for {reason}", + "edit": "Edit", + "delete": "Delete" + }, + "reorder": { + "success": "Order saved", + "success_desc": "Members see the reasons in the new order." + }, + "form": { + "create_title": "Add report reason", + "edit_title": "Edit report reason", + "sheet_desc": "Members see the title and description in the report dialog, in their own language.", + "title": "Title", + "title_desc": "Short and specific, like “Spam” or “Harassment”.", + "description": "Description", + "description_desc": "One line that helps members tell this reason apart from the others.", + "requires_details": "Require details", + "requires_details_desc": "Members must explain what's wrong (at least {min} characters) before they can send the report.", + "submit_create": "Add reason", + "submit_edit": "Save changes", + "created": "Reason added", + "created_desc": "Members can pick “{reason}” when they report something.", + "updated": "Reason saved", + "updated_desc": "Existing reports show the new title too.", + "error": "Could not save the reason", + "error_desc": "Check the fields and try again.", + "limit_reached": "You can have up to {max} reasons. Delete one to add another." + }, + "delete": { + "title": "Delete “{reason}”?", + "desc": "Members can't pick it anymore. Reports already filed with it stay, but show “Removed reason” instead of its title.", + "confirm": "Delete reason", + "cancel": "Cancel", + "success": "Reason deleted", + "success_desc": "“{reason}” is no longer in the report dialog.", + "error": "Could not delete the reason", + "last_reason": "Keep at least one reason - members need something to pick.", + "unknown": "Something went wrong. Try again in a moment." + } + } + }, "system": { "notifications": { "title": "Notifications", diff --git a/packages/vitnode/src/pages/admin/moderation/report-reasons.tsx b/packages/vitnode/src/pages/admin/moderation/report-reasons.tsx new file mode 100644 index 0000000000..fa8d3d02e5 --- /dev/null +++ b/packages/vitnode/src/pages/admin/moderation/report-reasons.tsx @@ -0,0 +1,25 @@ +import type { PluginRoutePageProps } from "@/routing"; +import type { AdminReportReasonsRouteData } from "@/tanstack/admin/report-reasons/route"; + +import { adminBreadcrumb } from "@/tanstack/admin/breadcrumb"; +import { loadAdminReportReasonsRoute } from "@/tanstack/admin/report-reasons/route"; +import { AdminReportReasonsRouteContent } from "@/tanstack/admin/report-reasons/screen"; +import { defineAdminRoute } from "@/tanstack/plugin-routes"; + +const AdminReportReasonsPage = ({ + loaderData, +}: PluginRoutePageProps) => ( + +); + +export const route = defineAdminRoute({ + load: async ({ context, t }) => + await loadAdminReportReasonsRoute({ ...context, t }), + head: ({ loaderData }) => ({ ...loaderData }), + + breadcrumb: adminBreadcrumb({ + segments: ["core", "moderation", "report-reasons"], + }), +}); + +export default AdminReportReasonsPage; diff --git a/packages/vitnode/src/routes.tsx b/packages/vitnode/src/routes.tsx index b070115a68..2cc38c93f2 100644 --- a/packages/vitnode/src/routes.tsx +++ b/packages/vitnode/src/routes.tsx @@ -27,6 +27,7 @@ import { ADMIN_INTEGRATIONS_NAMESPACES } from "./tanstack/admin/integrations/rou import { ADMIN_NOTIFICATIONS_NAMESPACES } from "./tanstack/admin/notifications/route"; import { ADMIN_PLUGINS_NAMESPACES } from "./tanstack/admin/plugins/route"; import { normalizeQueueRouteSearch } from "./tanstack/admin/queue/route-search"; +import { ADMIN_REPORT_REASONS_NAMESPACES } from "./tanstack/admin/report-reasons/route"; import { ADMIN_ROLES_NAMESPACES } from "./tanstack/admin/roles/route"; import { normalizeRolesRouteSearch } from "./tanstack/admin/roles/route-search"; import { normalizeSearchIndexRouteSearch } from "./tanstack/admin/search-index/route-search"; @@ -357,6 +358,13 @@ export const routes = defineRoutes([ pendingComponent: CardsPendingSkeleton, }), + page("/admin/core/moderation/report-reasons", { + area: "admin", + component: lazy(() => import("./pages/admin/moderation/report-reasons")), + messages: ADMIN_REPORT_REASONS_NAMESPACES, + pendingComponent: TablePendingSkeleton, + }), + page("/admin/core/users", { area: "admin", component: lazy(() => import("./pages/admin/users/index")), diff --git a/packages/vitnode/src/tanstack/admin/report-reasons/index.ts b/packages/vitnode/src/tanstack/admin/report-reasons/index.ts new file mode 100644 index 0000000000..a78ac93d9d --- /dev/null +++ b/packages/vitnode/src/tanstack/admin/report-reasons/index.ts @@ -0,0 +1,12 @@ +export { + adminReportReasonsQuery, + useAdminReportReasonMutations, +} from "./query"; +export type { AdminReportReasonsRouteData } from "./route"; +export { + ADMIN_REPORT_REASONS_NAMESPACES, + loadAdminReportReasonsRoute, +} from "./route"; +export { AdminReportReasonsRouteContent } from "./screen"; + +export type { AdminReportReason } from "@/views/admin/views/core/moderation/report-reasons/report-reasons-query"; diff --git a/packages/vitnode/src/tanstack/admin/report-reasons/query.ts b/packages/vitnode/src/tanstack/admin/report-reasons/query.ts new file mode 100644 index 0000000000..98331fb6df --- /dev/null +++ b/packages/vitnode/src/tanstack/admin/report-reasons/query.ts @@ -0,0 +1,67 @@ +import { useQueryClient } from "@tanstack/react-query"; +import React from "react"; + +import type { ReportReasonsContentProps } from "@/views/admin/views/core/moderation/report-reasons/report-reasons-content"; +import type { AdminIdentity } from "@/views/admin/views/core/shared/admin-scope"; + +import { + createAdminReportReason, + deleteAdminReportReason, + reorderAdminReportReasons, + updateAdminReportReason, +} from "@/views/admin/views/core/moderation/report-reasons/report-reasons-mutations"; +import { + adminReportReasonsQueryOptions, + adminReportReasonsQueryRoot, +} from "@/views/admin/views/core/moderation/report-reasons/report-reasons-query"; +import { isAdminMutationError } from "@/views/admin/views/core/shared/admin-mutation"; +import { REPORT_REASONS_QUERY_KEY } from "@/views/moderation/report-reasons-query"; + +import { useAdminIdentity } from "../identity"; + +export const adminReportReasonsQuery = (adminUserId: AdminIdentity) => + adminReportReasonsQueryOptions(adminUserId); + +export const useAdminReportReasonMutations = (): Pick< + ReportReasonsContentProps, + "onDelete" | "onReorder" | "onSave" +> => { + const queryClient = useQueryClient(); + const adminUserId = useAdminIdentity(); + + return React.useMemo(() => { + const refresh = async () => { + await Promise.all([ + queryClient.invalidateQueries({ + queryKey: adminReportReasonsQueryRoot(adminUserId), + }), + queryClient.invalidateQueries({ queryKey: REPORT_REASONS_QUERY_KEY }), + ]); + }; + + return { + onDelete: async id => { + const result = await deleteAdminReportReason(id); + if (!isAdminMutationError(result)) await refresh(); + + return result; + }, + onReorder: async ids => { + const result = await reorderAdminReportReasons(ids); + if (isAdminMutationError(result)) { + throw new Error(`Saving the order answered ${result.error.status}.`); + } + await refresh(); + }, + onSave: async ({ id, values }) => { + const result = + id === undefined + ? await createAdminReportReason(values) + : await updateAdminReportReason(id, values); + if (!isAdminMutationError(result)) await refresh(); + + return result; + }, + }; + }, [adminUserId, queryClient]); +}; diff --git a/packages/vitnode/src/tanstack/admin/report-reasons/route.tsx b/packages/vitnode/src/tanstack/admin/report-reasons/route.tsx new file mode 100644 index 0000000000..ffb73e1050 --- /dev/null +++ b/packages/vitnode/src/tanstack/admin/report-reasons/route.tsx @@ -0,0 +1,39 @@ +import type { PluginRouteTranslator } from "@/routing"; + +import { ADMIN_REPORT_REASON_PERMISSIONS } from "@/views/admin/views/core/shared/admin-permissions"; + +import type { AdminScreenContext } from "../screen"; + +import { adminIdentityOf } from "../identity"; +import { requireAdminPermission } from "../screen"; +import { adminReportReasonsQuery } from "./query"; + +export const ADMIN_REPORT_REASONS_NAMESPACES = [ + "admin.moderation.report_reasons", + "core.global", +] as const; + +export interface AdminReportReasonsRouteData { + description: string; + title: string; +} + +export const loadAdminReportReasonsRoute = async ({ + adminAccess, + queryClient, + t, +}: AdminScreenContext & { + t: PluginRouteTranslator; +}): Promise => { + requireAdminPermission(adminAccess, ADMIN_REPORT_REASON_PERMISSIONS.view); + + await queryClient.query({ + ...adminReportReasonsQuery(adminIdentityOf(adminAccess)), + staleTime: "static", + }); + + return { + description: t("admin.moderation.report_reasons.desc"), + title: t("admin.moderation.report_reasons.title"), + }; +}; diff --git a/packages/vitnode/src/tanstack/admin/report-reasons/screen.tsx b/packages/vitnode/src/tanstack/admin/report-reasons/screen.tsx new file mode 100644 index 0000000000..d77e00345e --- /dev/null +++ b/packages/vitnode/src/tanstack/admin/report-reasons/screen.tsx @@ -0,0 +1,89 @@ +import { useSuspenseQuery } from "@tanstack/react-query"; +import React from "react"; +import { toast } from "sonner"; +import { useTranslations } from "use-intl"; + +import type { ReportReasonSheetState } from "@/views/admin/views/core/moderation/report-reasons/report-reasons-content"; + +import { + AdminStaffPermissionGate, + useAdminStaffPermission, +} from "@/components/staff-permission/provider"; +import { PageTitle } from "@/components/ui/page-title"; +import { + CreateReportReasonButton, + ReportReasonsContent, +} from "@/views/admin/views/core/moderation/report-reasons/report-reasons-content"; +import { ADMIN_REPORT_REASON_PERMISSIONS } from "@/views/admin/views/core/shared/admin-permissions"; + +import type { AdminReportReasonsRouteData } from "./route"; + +import { RouteMessages } from "../../i18n/route-messages"; +import { useAdminIdentity } from "../identity"; +import { + adminReportReasonsQuery, + useAdminReportReasonMutations, +} from "./query"; +import { ADMIN_REPORT_REASONS_NAMESPACES } from "./route"; + +const ReportReasonsScreen = ({ + description, + title, +}: AdminReportReasonsRouteData) => { + const t = useTranslations("admin.moderation.report_reasons"); + const adminUserId = useAdminIdentity(); + const { data } = useSuspenseQuery(adminReportReasonsQuery(adminUserId)); + const { onDelete, onReorder, onSave } = useAdminReportReasonMutations(); + const canEdit = useAdminStaffPermission(ADMIN_REPORT_REASON_PERMISSIONS.edit); + const canDelete = useAdminStaffPermission( + ADMIN_REPORT_REASON_PERMISSIONS.delete, + ); + const [sheet, setSheet] = React.useState({ + mode: "create", + }); + const [sheetOpen, setSheetOpen] = React.useState(false); + const openSheet = (state: ReportReasonSheetState) => { + setSheet(state); + setSheetOpen(true); + }; + + return ( +

+ + + { + openSheet({ mode: "create" }); + }} + /> + + + + { + await onReorder(ids); + toast.success(t("reorder.success"), { + description: t("reorder.success_desc"), + }); + }} + onSave={onSave} + onSheetOpenChange={setSheetOpen} + permissions={{ canDelete, canEdit }} + reasons={data} + sheet={sheet} + sheetOpen={sheetOpen} + /> +
+ ); +}; + +export const AdminReportReasonsRouteContent = ( + props: AdminReportReasonsRouteData, +) => ( + + + +); diff --git a/packages/vitnode/src/tanstack/moderation/index.ts b/packages/vitnode/src/tanstack/moderation/index.ts index 54b39c81cd..5be0fd2790 100644 --- a/packages/vitnode/src/tanstack/moderation/index.ts +++ b/packages/vitnode/src/tanstack/moderation/index.ts @@ -6,3 +6,4 @@ export { ReportDialog, type ReportDialogProps, } from "./report-button"; +export type { ReportPreview } from "@/views/moderation/report/report-dialog-content"; diff --git a/packages/vitnode/src/tanstack/moderation/report-button.tsx b/packages/vitnode/src/tanstack/moderation/report-button.tsx index 0787356006..23219a143a 100644 --- a/packages/vitnode/src/tanstack/moderation/report-button.tsx +++ b/packages/vitnode/src/tanstack/moderation/report-button.tsx @@ -4,6 +4,7 @@ import React from "react"; import { useTranslations } from "use-intl"; import type { ContentTarget } from "@/content/target"; +import type { ReportPreview } from "@/views/moderation/report/report-dialog-content"; import { Button, buttonVariants } from "@/components/ui/button"; import { @@ -29,6 +30,13 @@ export const REPORT_NAMESPACES = ["core.global", "core.moderation"] as const; interface ReportTargetProps { /** The locale the reported content was shown in, for moderators. */ locale?: null | string; + /** + * What the reporter sees at the top of the dialog so they know what they are + * reporting: an already translated `title`, an optional `imageUrl` (shown as + * a small 16:9 thumbnail) and an optional `meta` line such as the author and + * date. Leave it out and the dialog shows only the reason. + */ + preview?: ReportPreview; /** The locale the visitor asked for, when the content fell back to another. */ requestedLocale?: null | string; /** @@ -59,6 +67,7 @@ const ReportDialogInner = ({ locale = null, onOpenChange, open, + preview, requestedLocale = null, target, typeLabel, @@ -72,22 +81,14 @@ const ReportDialogInner = ({ return ( - - - - {t("title", { type: typeLabel })} - - - {signedIn ? t("desc") : t("signed_out")} - - - + {signedIn ? ( +
+ + -
} > @@ -97,20 +98,32 @@ const ReportDialogInner = ({ onOpenChange(false); }} pluginId={target.pluginId} + preview={preview} requestedLocale={requestedLocale} targetId={target.id} targetType={target.type} + typeLabel={typeLabel} />
) : ( -
- - {t("sign_in")} - +
+ + + {t("title", { type: typeLabel })} + + + {t("signed_out")} + + +
+ + {t("sign_in")} + +
)} diff --git a/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav-model.tsx b/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav-model.tsx index f06ff46b5a..bc4530c43d 100644 --- a/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav-model.tsx +++ b/packages/vitnode/src/views/admin/layouts/sidebar/nav/nav-model.tsx @@ -1,5 +1,6 @@ import { FileTextIcon, + FlagIcon, FolderTreeIcon, LayoutDashboardIcon, ServerIcon, @@ -232,6 +233,18 @@ const coreNavGroup = (): AdminNavGroupDeclaration => ({ }, ], }, + { + href: "/admin/core/moderation", + title: key("admin.global.nav.moderation.title"), + icon: , + items: [ + { + title: key("admin.global.nav.moderation.report_reasons"), + href: "/admin/core/moderation/report-reasons", + permission: core("report_reasons"), + }, + ], + }, { href: "/admin/core/ai", title: key("admin.global.nav.ai.title"), diff --git a/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reason-form.tsx b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reason-form.tsx new file mode 100644 index 0000000000..2c97279da9 --- /dev/null +++ b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reason-form.tsx @@ -0,0 +1,134 @@ +import { toast } from "sonner"; +import { useLocale, useTranslations } from "use-intl"; +import { z } from "zod"; + +import type { AutoFormOnSubmit } from "@/components/form/auto-form"; +import type { AdminMutationResult } from "@/views/admin/views/core/shared/admin-mutation"; + +import { AutoForm } from "@/components/form/auto-form"; +import { AutoFormSheetFooter } from "@/components/form/auto-form-sheet-footer"; +import { AutoFormInput } from "@/components/form/fields/input"; +import { AutoFormSwitch } from "@/components/form/fields/switch"; +import { AutoFormTextarea } from "@/components/form/fields/textarea"; +import { multiLangValueSchema } from "@/lib/helpers/multi-lang"; +import { MODERATION_LIMITS } from "@/lib/moderation/const"; +import { resolveReasonText } from "@/views/moderation/report-reasons-query"; + +import type { AdminReportReasonInput } from "./report-reasons-mutations"; +import type { AdminReportReason } from "./report-reasons-query"; + +export interface ReportReasonFormProps { + onSave: (args: { + id?: number; + values: AdminReportReasonInput; + }) => Promise>; + onSaved: () => void; + reason?: AdminReportReason; +} + +export const ReportReasonForm = ({ + onSave, + onSaved, + reason, +}: ReportReasonFormProps) => { + const t = useTranslations("admin.moderation.report_reasons.form"); + const locale = useLocale(); + + const formSchema = z.object({ + title: multiLangValueSchema({ + maxLength: MODERATION_LIMITS.reasonTitleMaxLength, + minLength: 1, + }) + .min(1) + .default(reason?.title ?? []), + description: multiLangValueSchema({ + maxLength: MODERATION_LIMITS.reasonDescriptionMaxLength, + }).default(reason?.description ?? []), + requiresDetails: z.boolean().default(reason?.requiresDetails ?? false), + }); + + const onSubmit: AutoFormOnSubmit = async values => { + const result = await onSave({ id: reason?.id, values }); + + if ("error" in result) { + toast.error(t("error"), { + description: + result.error.status === 409 + ? t("limit_reached", { max: MODERATION_LIMITS.maxReportReasons }) + : t("error_desc"), + }); + + return; + } + + if (reason) { + toast.success(t("updated"), { description: t("updated_desc") }); + } else { + toast.success(t("created"), { + description: t("created_desc", { + reason: resolveReasonText(values.title, locale), + }), + }); + } + onSaved(); + }; + + return ( + ( + + ), + }, + { + id: "description", + component: props => ( + + ), + }, + { + id: "requiresDetails", + component: props => ( + + ), + }, + ]} + formSchema={formSchema} + id={reason ? `report-reason-${reason.id}` : "report-reason-new"} + layout={rendered => ( + <> +
+ {rendered.title} + {rendered.description} + {rendered.requiresDetails} +
+ + + )} + onSubmit={onSubmit} + /> + ); +}; + +export default ReportReasonForm; diff --git a/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-content.tsx b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-content.tsx new file mode 100644 index 0000000000..10a257b31f --- /dev/null +++ b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-content.tsx @@ -0,0 +1,312 @@ +import { FlagIcon, PencilIcon, PlusIcon, Trash2Icon } from "lucide-react"; +import React from "react"; +import { toast } from "sonner"; +import { useLocale, useTranslations } from "use-intl"; + +import type { DataTableNavigation } from "@/components/table/navigation"; +import type { AdminMutationResult } from "@/views/admin/views/core/shared/admin-mutation"; + +import { ContentDataTable } from "@/components/table/content"; +import { DataTableNavigationProvider } from "@/components/table/navigation"; +import { + AlertDialog, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/components/ui/alert-dialog"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, +} from "@/components/ui/sheet"; +import { Spinner } from "@/components/ui/spinner"; +import { TooltipWithContent } from "@/components/ui/tooltip"; +import { MODERATION_LIMITS } from "@/lib/moderation/const"; +import { resolveReasonText } from "@/views/moderation/report-reasons-query"; + +import type { ReportReasonFormProps } from "./report-reason-form"; +import type { AdminReportReason } from "./report-reasons-query"; + +const ReportReasonForm = React.lazy( + async () => await import("./report-reason-form"), +); + +export interface ReportReasonsContentProps { + onDelete: (id: number) => Promise>; + onReorder: (ids: number[]) => Promise; + onSave: ReportReasonFormProps["onSave"]; + permissions: { canDelete: boolean; canEdit: boolean }; + reasons: AdminReportReason[]; +} + +export type ReportReasonSheetState = + | { mode: "create" } + | { mode: "edit"; reason: AdminReportReason }; + +const STATIC_NAVIGATION: DataTableNavigation = { + navigate: () => undefined, + searchParams: new URLSearchParams(), +}; + +const DeleteReasonDialog = ({ + onClose, + onDelete, + reason, +}: { + onClose: () => void; + onDelete: ReportReasonsContentProps["onDelete"]; + reason: AdminReportReason | null; +}) => { + const t = useTranslations("admin.moderation.report_reasons.delete"); + const locale = useLocale(); + const [isPending, startTransition] = React.useTransition(); + const title = reason ? resolveReasonText(reason.title, locale) : ""; + + return ( + { + if (!open) onClose(); + }} + open={reason !== null} + > + + + + {t("title", { reason: title })} + + + {t("desc")} + + + + {t("cancel")} + + + + + ); +}; + +export const CreateReportReasonButton = ({ + count, + onCreate, +}: { + count: number; + onCreate: () => void; +}) => { + const t = useTranslations("admin.moderation.report_reasons"); + const atLimit = count >= MODERATION_LIMITS.maxReportReasons; + + return ( + + ); +}; + +export const ReportReasonsContent = ({ + onDelete, + onOpenSheet, + onReorder, + onSave, + onSheetOpenChange, + permissions, + reasons, + sheet, + sheetOpen, +}: ReportReasonsContentProps & { + onOpenSheet: (state: ReportReasonSheetState) => void; + onSheetOpenChange: (open: boolean) => void; + sheet: ReportReasonSheetState; + sheetOpen: boolean; +}) => { + const t = useTranslations("admin.moderation.report_reasons"); + const locale = useLocale(); + const [deleting, setDeleting] = React.useState( + null, + ); + + return ( + <> + + + columns={[ + { + accessorKey: "title", + cell: ({ row }) => { + const description = resolveReasonText(row.description, locale); + + return ( + + + {resolveReasonText(row.title, locale)} + + {description ? ( + + {description} + + ) : null} + + ); + }, + header: t("columns.reason"), + }, + { + accessorKey: "requiresDetails", + cell: ({ row }) => + row.requiresDetails ? ( + {t("details_required")} + ) : ( + + {t("details_optional")} + + ), + className: "w-32", + header: t("columns.details"), + }, + { + align: "right", + cell: ({ row }) => { + const title = resolveReasonText(row.title, locale); + + return ( +
+ {permissions.canEdit ? ( + + + + ) : null} + {permissions.canDelete ? ( + + + + ) : null} +
+ ); + }, + className: "w-24", + header: "", + id: "actions", + }, + ]} + customNoResults={{ + description: t("desc"), + icon: , + title: t("title"), + }} + edges={reasons} + id="report-reasons-table" + order={{ defaultOrder: { column: "position", order: "asc" } }} + reorderable={{ + disabled: !permissions.canEdit, + getRowLabel: row => resolveReasonText(row.title, locale), + onReorder, + }} + /> +
+ + + + + + {sheet.mode === "edit" + ? t("form.edit_title") + : t("form.create_title")} + + + {t("form.sheet_desc")} + + + + +
+ } + > + { + onSheetOpenChange(false); + }} + reason={sheet.mode === "edit" ? sheet.reason : undefined} + /> + + + + + { + setDeleting(null); + }} + onDelete={onDelete} + reason={deleting} + /> + + ); +}; diff --git a/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-mutations.ts b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-mutations.ts new file mode 100644 index 0000000000..26cb937d9b --- /dev/null +++ b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-mutations.ts @@ -0,0 +1,85 @@ +import type { MultiLangValue } from "@/lib/helpers/multi-lang"; + +import { fetcherClient } from "@/lib/fetcher-client"; +import { manifest } from "@/manifest"; +import { + type AdminMutationResult, + runAdminApiMutation, +} from "@/views/admin/views/core/shared/admin-mutation"; + +export interface AdminReportReasonInput { + description: MultiLangValue; + requiresDetails: boolean; + title: MultiLangValue; +} + +const options = { credentials: "include" } as const; + +export const createAdminReportReason = async ( + body: AdminReportReasonInput, +): Promise> => + await runAdminApiMutation({ + expected: 201, + parse: async response => (await response.json()) as { id: number }, + request: async () => + await fetcherClient({ + plugin: manifest.id, + args: { body }, + method: "post", + module: "admin/report-reasons", + options, + path: "/create", + }), + }); + +export const updateAdminReportReason = async ( + id: number, + body: AdminReportReasonInput, +): Promise> => + await runAdminApiMutation({ + expected: 200, + parse: async response => (await response.json()) as { id: number }, + request: async () => + await fetcherClient({ + plugin: manifest.id, + args: { body, params: { id } }, + method: "patch", + module: "admin/report-reasons", + options, + path: "/{id}", + }), + }); + +export const deleteAdminReportReason = async ( + id: number, +): Promise> => + await runAdminApiMutation({ + expected: 200, + parse: () => true as const, + request: async () => + await fetcherClient({ + plugin: manifest.id, + args: { params: { id } }, + method: "delete", + module: "admin/report-reasons", + options, + path: "/{id}", + }), + }); + +export const reorderAdminReportReasons = async ( + ids: number[], +): Promise> => + await runAdminApiMutation({ + expected: 200, + parse: () => true as const, + request: async () => + await fetcherClient({ + plugin: manifest.id, + args: { body: { ids } }, + method: "put", + module: "admin/report-reasons", + options, + path: "/reorder", + }), + }); diff --git a/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-query.ts b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-query.ts new file mode 100644 index 0000000000..f8c06b8113 --- /dev/null +++ b/packages/vitnode/src/views/admin/views/core/moderation/report-reasons/report-reasons-query.ts @@ -0,0 +1,41 @@ +import { queryOptions } from "@tanstack/react-query"; + +import type { AdminIdentity } from "@/views/admin/views/core/shared/admin-scope"; + +import { RECORD_STALE_TIME } from "@/lib/query-freshness"; +import { manifest } from "@/manifest"; +import { fetcher } from "@/tanstack/fetcher"; +import { AdminRequestError } from "@/views/admin/admin-request"; +import { + ADMIN_REPORT_REASONS_SCREEN, + adminScopedQueryKey, + adminScopedQueryRoot, +} from "@/views/admin/views/core/shared/admin-scope"; + +const fetchAdminReportReasons = async () => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "admin/report-reasons", + path: "/", + }); + if (!response.ok) { + throw new AdminRequestError(response.status, "the report reasons"); + } + + return (await response.json()).reasons; +}; + +export type AdminReportReason = Awaited< + ReturnType +>[number]; + +export const adminReportReasonsQueryRoot = (adminUserId: AdminIdentity) => + adminScopedQueryRoot(ADMIN_REPORT_REASONS_SCREEN, adminUserId); + +export const adminReportReasonsQueryOptions = (adminUserId: AdminIdentity) => + queryOptions({ + queryFn: fetchAdminReportReasons, + queryKey: adminScopedQueryKey(ADMIN_REPORT_REASONS_SCREEN, adminUserId), + staleTime: RECORD_STALE_TIME, + }); diff --git a/packages/vitnode/src/views/admin/views/core/shared/admin-permissions.ts b/packages/vitnode/src/views/admin/views/core/shared/admin-permissions.ts index ff15c559e4..e1a351f0a9 100644 --- a/packages/vitnode/src/views/admin/views/core/shared/admin-permissions.ts +++ b/packages/vitnode/src/views/admin/views/core/shared/admin-permissions.ts @@ -45,6 +45,13 @@ export const ADMIN_ROLE_PERMISSIONS = { view: core("roles", "can_view"), } as const; +export const ADMIN_REPORT_REASON_PERMISSIONS = { + create: core("report_reasons", "can_create"), + delete: core("report_reasons", "can_delete"), + edit: core("report_reasons", "can_edit"), + view: core("report_reasons", "can_view"), +} as const; + export const staffPermissionModuleFor = ( type: PermissionStaffType, ): "staff_admins" | "staff_moderators" => diff --git a/packages/vitnode/src/views/admin/views/core/shared/admin-scope.ts b/packages/vitnode/src/views/admin/views/core/shared/admin-scope.ts index 419bab617b..d80bfe4850 100644 --- a/packages/vitnode/src/views/admin/views/core/shared/admin-scope.ts +++ b/packages/vitnode/src/views/admin/views/core/shared/admin-scope.ts @@ -19,3 +19,4 @@ export const ADMIN_USERS_SCREEN = "users"; export const ADMIN_ROLES_SCREEN = "roles"; export const ADMIN_STAFF_SCREEN = "staff"; export const ADMIN_DASHBOARD_SCREEN = "dashboard"; +export const ADMIN_REPORT_REASONS_SCREEN = "report-reasons"; diff --git a/packages/vitnode/src/views/moderation/modcp/board/board-card.tsx b/packages/vitnode/src/views/moderation/modcp/board/board-card.tsx index 47a6a380f7..9e14f45b1e 100644 --- a/packages/vitnode/src/views/moderation/modcp/board/board-card.tsx +++ b/packages/vitnode/src/views/moderation/modcp/board/board-card.tsx @@ -14,6 +14,7 @@ import { DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { TooltipWithContent } from "@/components/ui/tooltip"; +import { ReportReasonLabel } from "@/views/moderation/report-reason-label"; import type { ModcpBoardReport, ModcpBoardStatus } from "../modcp-query"; @@ -42,7 +43,7 @@ const ExtraReports = ({ row }: { row: ModcpBoardReport }) => { aria-label={t("extra_reports", { count: row.relatedCount })} className={cn( "relative z-10 inline-flex h-6 items-center rounded-full px-2 text-xs font-medium tabular-nums", - TONE_SURFACE[REASON_TONE[row.reason]], + TONE_SURFACE[REASON_TONE], )} role="img" > @@ -118,8 +119,8 @@ export const BoardCardBody = ({ <>
- - {t(`reasons.${row.reason}`)} + + diff --git a/packages/vitnode/src/views/moderation/modcp/report-activity.tsx b/packages/vitnode/src/views/moderation/modcp/report-activity.tsx index e1553b0695..d81ab859c1 100644 --- a/packages/vitnode/src/views/moderation/modcp/report-activity.tsx +++ b/packages/vitnode/src/views/moderation/modcp/report-activity.tsx @@ -189,7 +189,10 @@ const EventBody = ({ event }: { event: ReportEvent }) => { if (event.type === "note_edited" || event.type === "note_deleted") { return ; } - const body = event.data.body ?? event.data.explanation ?? event.data.reason; + const body = + event.data.body ?? + event.data.explanation ?? + (event.type === "reopened" ? event.data.reason : undefined); if (!body) return null; return ( diff --git a/packages/vitnode/src/views/moderation/modcp/report-content.tsx b/packages/vitnode/src/views/moderation/modcp/report-content.tsx index 1b5b9da85b..0b8a7a3597 100644 --- a/packages/vitnode/src/views/moderation/modcp/report-content.tsx +++ b/packages/vitnode/src/views/moderation/modcp/report-content.tsx @@ -6,6 +6,7 @@ import React from "react"; import { useTranslations } from "use-intl"; import { DateFormat } from "@/components/date-format"; +import { ReportReasonLabel } from "@/views/moderation/report-reason-label"; import type { ModcpReportDetail } from "./modcp-query"; import type { ReportPerson } from "./report-tone"; @@ -132,8 +133,8 @@ const LinkedReports = ({ · ) : null} - - {t(`reasons.${entry.reason}`)} + + · @@ -167,7 +168,6 @@ const ModcpReportDetailView = ({ userId: number; }) => { const t = useTranslations("core.moderation.modcp.detail"); - const tModeration = useTranslations("core.moderation"); const tRoot = useTranslations(); const queryClient = useQueryClient(); const { data } = useSuspenseQuery(modcpReportQueryOptions(id)); @@ -205,11 +205,11 @@ const ModcpReportDetailView = ({ - {tModeration(`reasons.${report.reason}`)} + : {author diff --git a/packages/vitnode/src/views/moderation/modcp/report-sidebar.tsx b/packages/vitnode/src/views/moderation/modcp/report-sidebar.tsx index 1902129999..1bce6dea02 100644 --- a/packages/vitnode/src/views/moderation/modcp/report-sidebar.tsx +++ b/packages/vitnode/src/views/moderation/modcp/report-sidebar.tsx @@ -34,6 +34,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; +import { ReportReasonLabel } from "@/views/moderation/report-reason-label"; import type { ModcpReportDetail } from "./modcp-query"; import type { ReportStatus } from "./report-tone"; @@ -585,8 +586,8 @@ export const ReportSidebar = ({ ) : null} - - {t(`reasons.${report.reason}`)} + + diff --git a/packages/vitnode/src/views/moderation/modcp/report-tone.tsx b/packages/vitnode/src/views/moderation/modcp/report-tone.tsx index 1b908830ab..354cf43b12 100644 --- a/packages/vitnode/src/views/moderation/modcp/report-tone.tsx +++ b/packages/vitnode/src/views/moderation/modcp/report-tone.tsx @@ -1,8 +1,6 @@ import { cn } from "cn"; import { useTranslations } from "use-intl"; -import type { ModerationReportReason } from "@/lib/moderation/const"; - import { Avatar } from "@/components/avatar"; import { FEEDBACK_TONE_TEXT } from "@/components/ui/feedback-tone"; import { UserFormat } from "@/components/user-format"; @@ -28,19 +26,9 @@ export const STATUS_TONE: Record = { new: "muted", }; -export const REASON_TONE: Record = { - abusive: "destructive", - other: "muted", - rule_violation: "warning", - spam: "warning", -}; +export const REASON_TONE: ToneName = "warning"; -export const REASON_TEXT: Record = { - abusive: FEEDBACK_TONE_TEXT.destructive, - other: "text-muted-foreground", - rule_violation: FEEDBACK_TONE_TEXT.warning, - spam: FEEDBACK_TONE_TEXT.warning, -}; +export const REASON_TEXT = FEEDBACK_TONE_TEXT.warning; export const Chip = ({ children, diff --git a/packages/vitnode/src/views/moderation/moderation-mutations.ts b/packages/vitnode/src/views/moderation/moderation-mutations.ts index ee59b884fc..ee40f9e008 100644 --- a/packages/vitnode/src/views/moderation/moderation-mutations.ts +++ b/packages/vitnode/src/views/moderation/moderation-mutations.ts @@ -1,5 +1,4 @@ import type { RichTextDocument } from "@/content/rich-text/document"; -import type { ModerationReportReason } from "@/lib/moderation/const"; import { fetcherClient } from "@/lib/fetcher-client"; import { manifest } from "@/manifest"; @@ -8,11 +7,13 @@ const REPORTED_FAILURES = [ "already_claimed", "assignee_not_eligible", "conflict", + "details_required", "duplicate", "forbidden", "not_found", "note_not_found", "rate_limited", + "reason_not_found", "report_closed", "report_open", "target_gone", @@ -75,7 +76,7 @@ export interface CreateReportInput { description: null | string; locale: null | string; pluginId: string; - reason: ModerationReportReason; + reason: string; requestedLocale?: null | string; targetId: string; targetType: string; diff --git a/packages/vitnode/src/views/moderation/report-reason-label.tsx b/packages/vitnode/src/views/moderation/report-reason-label.tsx new file mode 100644 index 0000000000..5b907203c7 --- /dev/null +++ b/packages/vitnode/src/views/moderation/report-reason-label.tsx @@ -0,0 +1,19 @@ +import { useQuery } from "@tanstack/react-query"; +import { useLocale, useTranslations } from "use-intl"; + +import { + reportReasonsQueryOptions, + resolveReasonText, +} from "./report-reasons-query"; + +export const ReportReasonLabel = ({ code }: { code: string }) => { + const locale = useLocale(); + const t = useTranslations("core.moderation"); + const { data } = useQuery(reportReasonsQueryOptions()); + if (!data) return ""; + const reason = data.find(item => item.code === code); + + return reason + ? resolveReasonText(reason.title, locale) || code + : t("reason_removed"); +}; diff --git a/packages/vitnode/src/views/moderation/report-reasons-query.ts b/packages/vitnode/src/views/moderation/report-reasons-query.ts new file mode 100644 index 0000000000..013ae8213b --- /dev/null +++ b/packages/vitnode/src/views/moderation/report-reasons-query.ts @@ -0,0 +1,47 @@ +import { queryOptions } from "@tanstack/react-query"; + +import type { MultiLangValue } from "@/lib/helpers/multi-lang"; + +import { resolveLangValue } from "@/lib/helpers/multi-lang"; +import { manifest } from "@/manifest"; +import { fetcher } from "@/tanstack/fetcher"; +import { getIntlRuntime } from "@/tanstack/i18n/runtime"; + +import { ModcpRequestError } from "./modcp/modcp-query"; + +const fetchReportReasons = async () => { + const response = await fetcher({ + plugin: manifest.id, + method: "get", + module: "moderation", + path: "/reasons", + }); + if (!response.ok) { + throw new ModcpRequestError(response.status, "report reasons"); + } + + return (await response.json()).reasons; +}; + +export type ReportReasonOption = Awaited< + ReturnType +>[number]; + +export const REPORT_REASONS_QUERY_KEY = [ + "vitnode", + "moderation", + "report-reasons", +] as const; + +export const reportReasonsQueryOptions = () => + queryOptions({ + queryFn: fetchReportReasons, + queryKey: REPORT_REASONS_QUERY_KEY, + staleTime: 60_000, + }); + +export const resolveReasonText = (value: MultiLangValue, locale: string) => + resolveLangValue(value, { + defaultLanguage: getIntlRuntime().defaultLocale, + locale, + }); diff --git a/packages/vitnode/src/views/moderation/report/report-dialog-content.tsx b/packages/vitnode/src/views/moderation/report/report-dialog-content.tsx index e039a324f9..06dfeb6675 100644 --- a/packages/vitnode/src/views/moderation/report/report-dialog-content.tsx +++ b/packages/vitnode/src/views/moderation/report/report-dialog-content.tsx @@ -1,146 +1,593 @@ +import { useQuery, useQueryClient } from "@tanstack/react-query"; +import { AnimatePresence, MotionConfig } from "motion/react"; +import * as m from "motion/react-m"; +import React from "react"; import { toast } from "sonner"; -import { useTranslations } from "use-intl"; +import { useLocale, useTranslations } from "use-intl"; import { z } from "zod"; import type { AutoFormOnSubmit } from "@/components/form/auto-form"; import { AutoForm, AutoFormSubmitButton } from "@/components/form/auto-form"; -import { AutoFormRadioGroup } from "@/components/form/fields/radio-group"; import { AutoFormTextarea } from "@/components/form/fields/textarea"; +import { MotionFeatures } from "@/components/motion-features"; import { Button } from "@/components/ui/button"; -import { - MODERATION_LIMITS, - MODERATION_REPORT_REASONS, -} from "@/lib/moderation/const"; +import { DialogTitle, useDialog } from "@/components/ui/dialog"; +import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; +import { Skeleton } from "@/components/ui/skeleton"; +import { MODERATION_LIMITS } from "@/lib/moderation/const"; + +import type { ReportReasonOption } from "../report-reasons-query"; import { createReport } from "../moderation-mutations"; +import { + REPORT_REASONS_QUERY_KEY, + reportReasonsQueryOptions, + resolveReasonText, +} from "../report-reasons-query"; + +export interface ReportPreview { + imageUrl?: null | string; + meta?: null | string; + title: string; +} export interface ReportDialogContentProps { locale: null | string; onClose: () => void; pluginId: string; + preview?: ReportPreview; requestedLocale: null | string; targetId: string; targetType: string; + typeLabel: string; } +type Step = "reason" | "review" | "sent"; + +const STEP_ORDER: Record = { reason: 0, review: 1, sent: 2 }; +const EASE_OUT = [0.32, 0.72, 0, 1] as const; +const EASE_IN = [0.4, 0, 1, 1] as const; +const ENTER_S = 0.26; +const EXIT_S = 0.14; +const SLIDE_PX = 16; +const ADVANCE_DELAY_MS = 180; +const HEIGHT_SPRING = { type: "spring", duration: 0.36, bounce: 0 } as const; +const COUNTER_FROM = MODERATION_LIMITS.descriptionMaxLength - 200; +const NAVIGATION_KEYS = new Set([ + "ArrowDown", + "ArrowLeft", + "ArrowRight", + "ArrowUp", + "End", + "Home", +]); + +const slide = { + enter: (direction: number) => ({ + opacity: 0, + transform: `translateX(${direction * SLIDE_PX}px)`, + }), + center: { + opacity: 1, + transform: "translateX(0px)", + transition: { delay: EXIT_S * 0.75, duration: ENTER_S, ease: EASE_OUT }, + }, + exit: (direction: number) => ({ + opacity: 0, + transform: `translateX(${direction * -SLIDE_PX * 0.5}px)`, + transition: { duration: EXIT_S, ease: EASE_IN }, + }), +}; + +const fade = { + animate: { opacity: 1 }, + exit: { opacity: 0, transition: { duration: 0.1 } }, + initial: { opacity: 0 }, + transition: { delay: 0.06, duration: 0.2 }, +}; + +const isTouchDevice = () => window.matchMedia("(pointer: coarse)").matches; + +const useElementHeight = () => { + const observerRef = React.useRef(null); + const [height, setHeight] = React.useState<"auto" | number>("auto"); + + const ref = React.useCallback((element: HTMLDivElement | null) => { + observerRef.current?.disconnect(); + if (!element) return; + const observer = new ResizeObserver(([entry]) => { + setHeight(entry.borderBoxSize[0].blockSize); + }); + observer.observe(element); + observerRef.current = observer; + }, []); + + return [ref, height] as const; +}; + +const subscribeToResize = (onChange: () => void) => { + window.addEventListener("resize", onChange); + + return () => { + window.removeEventListener("resize", onChange); + }; +}; + +const readViewportCap = () => + window.innerHeight - + (window.matchMedia("(min-width: 40rem)").matches ? 80 : 32); + +const readServerViewportCap = () => undefined; + +const useViewportCap = () => + React.useSyncExternalStore( + subscribeToResize, + readViewportCap, + readServerViewportCap, + ); + +const ReceiptRow = ({ children }: { children: React.ReactNode }) => ( + + {children} + +); + +const ReasonSkeleton = () => ( +
+ {[0, 1, 2].map(row => ( + + ))} +
+); + +const ReasonList = ({ + onPick, + reasonCode, + reasons, + setReasonCode, +}: { + onPick: (code: string) => void; + reasonCode: string | undefined; + reasons: ReportReasonOption[]; + setReasonCode: (code: string) => void; +}) => { + const t = useTranslations("core.moderation.report"); + const locale = useLocale(); + const navigatingRef = React.useRef(false); + + return ( + { + if (event.key !== "Enter" && event.key !== " ") return; + const code = (event.target as HTMLElement).dataset.reason; + if (!code) return; + event.preventDefault(); + onPick(code); + }} + onKeyDownCapture={event => { + if (!NAVIGATION_KEYS.has(event.key)) return; + navigatingRef.current = true; + requestAnimationFrame(() => { + navigatingRef.current = false; + }); + }} + onValueChange={value => { + if (navigatingRef.current) { + setReasonCode(String(value)); + + return; + } + onPick(String(value)); + }} + value={reasonCode ?? null} + > + {reasons.map(reason => { + const id = `report-reason-${reason.code}`; + const description = resolveReasonText(reason.description, locale); + + return ( + + ); + })} + + ); +}; + +const CharactersLeft = ({ value }: { value: unknown }) => { + const t = useTranslations("core.moderation.report"); + const length = typeof value === "string" ? value.length : 0; + if (length < COUNTER_FROM) return null; + + return ( + + {t("chars_left", { + count: MODERATION_LIMITS.descriptionMaxLength - length, + })} + + ); +}; + export const ReportDialogContent = ({ locale, onClose, pluginId, + preview, requestedLocale, targetId, targetType, + typeLabel, }: ReportDialogContentProps) => { - const t = useTranslations("core.moderation"); - - const formSchema = z - .object({ - reason: z.enum(MODERATION_REPORT_REASONS), - description: z - .string() - .trim() - .max(MODERATION_LIMITS.descriptionMaxLength) - .optional(), - }) - .superRefine((values, ctx) => { - if ( - values.reason === "other" && - (values.description?.length ?? 0) < - MODERATION_LIMITS.otherDescriptionMinLength - ) { - ctx.addIssue({ - code: "too_small", - minimum: MODERATION_LIMITS.otherDescriptionMinLength, - origin: "string", - path: ["description"], - message: t("report.errors.validation"), - }); - } - }); + const t = useTranslations("core.moderation.report"); + const uiLocale = useLocale(); + const queryClient = useQueryClient(); + const { setIsDirty } = useDialog(); + const reasonsQuery = useQuery(reportReasonsQueryOptions()); + const [step, setStep] = React.useState("reason"); + const [direction, setDirection] = React.useState(1); + const [reasonCode, setReasonCode] = React.useState(); + const [trackRef, height] = useElementHeight(); + const viewportCap = useViewportCap(); + const scrollRef = React.useRef(null); + const headingRef = React.useRef(null); + const advanceTimerRef = + React.useRef>(undefined); + const reason = reasonsQuery.data?.find(item => item.code === reasonCode); + const visibleHeight = + typeof height === "number" && viewportCap + ? Math.min(height, viewportCap) + : height; + + React.useEffect( + () => () => { + clearTimeout(advanceTimerRef.current); + }, + [], + ); + + React.useEffect(() => { + scrollRef.current?.scrollTo({ top: 0 }); + if (step === "review" && !isTouchDevice()) { + scrollRef.current?.querySelector("textarea")?.focus(); + } else { + headingRef.current?.focus(); + } + }, [step]); + + const goTo = (next: Step) => { + setDirection(STEP_ORDER[next] > STEP_ORDER[step] ? 1 : -1); + setStep(next); + }; + + const pick = (code: string) => { + clearTimeout(advanceTimerRef.current); + setReasonCode(code); + advanceTimerRef.current = setTimeout(() => { + goTo("review"); + }, ADVANCE_DELAY_MS); + }; + + const requiresDetails = reason?.requiresDetails ?? false; + const detailsRequiredMessage = t("errors.details_required", { + min: MODERATION_LIMITS.requiredDescriptionMinLength, + }); + const formSchema = z.object({ + description: requiresDetails + ? z + .string() + .trim() + .min(MODERATION_LIMITS.requiredDescriptionMinLength, { + message: detailsRequiredMessage, + }) + .max(MODERATION_LIMITS.descriptionMaxLength) + .default("") + : z + .string() + .trim() + .max(MODERATION_LIMITS.descriptionMaxLength) + .optional() + .default(""), + }); const onSubmit: AutoFormOnSubmit = async values => { + if (!reason) return; const result = await createReport({ - description: - values.description?.trim() === "" - ? null - : (values.description?.trim() ?? null), + description: values.description || null, locale, pluginId, - reason: values.reason, + reason: reason.code, requestedLocale, targetId, targetType, }); - if (!result.ok) { - const key = - result.failure === "duplicate" || - result.failure === "not_found" || - result.failure === "rate_limited" || - result.failure === "unauthenticated" || - result.failure === "validation" - ? result.failure - : "unknown"; - toast.error(t("report.errors.title"), { - description: t(`report.errors.${key}`), - }); - if (key === "duplicate" || key === "not_found") onClose(); + if (result.ok) { + setIsDirty?.(false); + goTo("sent"); return; } - toast.success(t("report.success"), { - description: t("report.success_desc"), + const key = + result.failure === "details_required" || + result.failure === "duplicate" || + result.failure === "not_found" || + result.failure === "rate_limited" || + result.failure === "reason_not_found" || + result.failure === "unauthenticated" || + result.failure === "validation" + ? result.failure + : "unknown"; + toast.error(t("errors.title"), { + description: t(`errors.${key}`, { + min: MODERATION_LIMITS.requiredDescriptionMinLength, + }), }); - onClose(); + if (key === "reason_not_found") { + await queryClient.invalidateQueries({ + queryKey: REPORT_REASONS_QUERY_KEY, + }); + setReasonCode(undefined); + goTo("reason"); + } + if (key === "duplicate" || key === "not_found") { + setIsDirty?.(false); + onClose(); + } + }; + + const titles: Record = { + reason: t("pick_title", { type: typeLabel }), + review: t("review_title"), + sent: t("sent_title"), }; + const showReceipt = Boolean(preview) || step !== "reason"; return ( - ( - ({ - description: t(`reason_descs.${reason}`), - label: t(`reasons.${reason}`), - value: reason, - }))} - /> - ), - id: "reason", - }, - { - component: props => ( - - ), - id: "description", - }, - ]} - formSchema={formSchema} - layout={rendered => ( - <> - {rendered.reason} - {rendered.description} -
- - {t("report.submit")} + + + +
+ + + {titles[step]} + + + + {showReceipt ? ( +
+ {preview ? ( +
+ {preview.imageUrl ? ( + + ) : null} +
+ + {preview.title} + + {preview.meta ? ( + + {preview.meta} + + ) : null} +
+
+ ) : null} + + + {reason && step !== "reason" ? ( + +
+
+ + {resolveReasonText(reason.title, uiLocale)} + + + {resolveReasonText(reason.description, uiLocale)} + +
+ {step === "review" ? ( + + ) : null} +
+
+ ) : null} +
+ + + {step === "sent" ? ( + +

+ {t("sent_stamp")} +

+
+ ) : null} +
+
+ ) : null} + +
+ + + {step === "reason" ? ( + reasonsQuery.data ? ( + + ) : reasonsQuery.isError ? ( +
+

+ {t("load_error")} +

+ +
+ ) : ( + + ) + ) : null} + + {step === "review" && reason ? ( + ( + + } + onKeyDown={event => { + if ( + (event.metaKey || event.ctrlKey) && + event.key === "Enter" + ) { + event.preventDefault(); + event.currentTarget.form?.requestSubmit(); + } + }} + placeholder={ + reason.requiresDetails + ? t("details_placeholder") + : undefined + } + /> + ), + }, + ]} + formSchema={formSchema} + key={reason.code} + layout={rendered => ( + <> + {rendered.description} + + {t("submit")} + + + )} + onSubmit={onSubmit} + /> + ) : null} + + {step === "sent" ? ( +
+

+ {t("sent_desc", { type: typeLabel })} +

+ +
+ ) : null} +
+
+
- - )} - onSubmit={onSubmit} - /> +
+
+
); }; diff --git a/plugins/blog/src/pages/post-page.tsx b/plugins/blog/src/pages/post-page.tsx index 58b7a30d67..ebb320d4d1 100644 --- a/plugins/blog/src/pages/post-page.tsx +++ b/plugins/blog/src/pages/post-page.tsx @@ -20,7 +20,7 @@ import { ReportButton } from "@vitnode/core/tanstack/moderation"; import { defineRoute } from "@vitnode/core/tanstack/plugin-routes"; import { useRecordView } from "@vitnode/core/tanstack/search"; import { EyeOffIcon } from "lucide-react"; -import { useTranslations } from "use-intl"; +import { useFormatter, useTranslations } from "use-intl"; import { blogPostContentType } from "@/content/post"; import { manifest } from "@/manifest.gen"; @@ -52,6 +52,7 @@ const BlogPostPage = ({ loaderData: { item, metadata }, }: PluginRoutePageProps) => { const t = useTranslations("@vitnode/blog.post"); + const format = useFormatter(); useRecordView({ itemId: metadata.hidden ? null : metadata.itemId, itemType: blogPostContentType.id, @@ -79,6 +80,15 @@ const BlogPostPage = ({ ({ */ const TopicViewerActions = ({ author, + title, topicId, }: { author: ForumPerson; + title: string; topicId: number; }) => { const t = useTranslations("@vitnode/forum.topics.detail"); @@ -234,6 +236,7 @@ const TopicViewerActions = ({ return ( @@ -339,7 +342,11 @@ const TopicPage = ({