diff --git a/apps/api/migrations/20261011093549_content_visibility_id_strategies/migration.sql b/apps/api/migrations/20261011093549_content_visibility_id_strategies/migration.sql
new file mode 100644
index 0000000000..4f8aa6be5e
--- /dev/null
+++ b/apps/api/migrations/20261011093549_content_visibility_id_strategies/migration.sql
@@ -0,0 +1,170 @@
+CREATE TABLE "example_advanced_articles_tags" (
+ "itemId" integer,
+ "relatedItemId" uuid,
+ "position" integer NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "example_advanced_articles_tags_pk" PRIMARY KEY("itemId","relatedItemId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_advanced_articles_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_events" (
+ "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (sequence name "example_events_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 CACHE 1),
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL,
+ "publishedAt" timestamp,
+ "status" varchar(32) DEFAULT 'draft' NOT NULL,
+ "version" integer DEFAULT 1 NOT NULL,
+ "hiddenAt" timestamp,
+ "hiddenBy" integer,
+ "primaryTag" uuid,
+ "category" integer
+);
+--> statement-breakpoint
+ALTER TABLE "example_events" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_events_gallery" (
+ "itemId" bigint,
+ "relatedItemId" integer,
+ "position" integer NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "example_events_gallery_pk" PRIMARY KEY("itemId","relatedItemId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_events_gallery" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_events_related_events" (
+ "itemId" bigint,
+ "relatedItemId" bigint,
+ "position" integer NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "example_events_related_events_pk" PRIMARY KEY("itemId","relatedItemId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_events_related_events" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_events_sessions" (
+ "id" serial PRIMARY KEY,
+ "itemId" bigint NOT NULL,
+ "position" integer NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL,
+ "title" varchar(200) NOT NULL,
+ "startsAt" timestamp
+);
+--> statement-breakpoint
+ALTER TABLE "example_events_sessions" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_events_tags" (
+ "itemId" bigint,
+ "relatedItemId" uuid,
+ "position" integer NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "example_events_tags_pk" PRIMARY KEY("itemId","relatedItemId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_events_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_events_translations" (
+ "itemId" bigint,
+ "languageId" integer,
+ "version" integer DEFAULT 1 NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL,
+ "publishedAt" timestamp,
+ "status" varchar(32) DEFAULT 'draft' NOT NULL,
+ "title" varchar(200) NOT NULL,
+ "slug" varchar(160) NOT NULL,
+ "body" jsonb,
+ CONSTRAINT "example_events_translations_item_id_language_id_pk" PRIMARY KEY("itemId","languageId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_events_translations" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_tags" (
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL,
+ "publishedAt" timestamp,
+ "status" varchar(32) DEFAULT 'draft' NOT NULL,
+ "version" integer DEFAULT 1 NOT NULL,
+ "hiddenAt" timestamp,
+ "hiddenBy" integer,
+ "category" integer
+);
+--> statement-breakpoint
+ALTER TABLE "example_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_tags_related_tags" (
+ "itemId" uuid,
+ "relatedItemId" uuid,
+ "position" integer NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "example_tags_related_tags_pk" PRIMARY KEY("itemId","relatedItemId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_tags_related_tags" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+CREATE TABLE "example_tags_translations" (
+ "itemId" uuid,
+ "languageId" integer,
+ "version" integer DEFAULT 1 NOT NULL,
+ "createdAt" timestamp DEFAULT now() NOT NULL,
+ "updatedAt" timestamp DEFAULT now() NOT NULL,
+ "publishedAt" timestamp,
+ "status" varchar(32) DEFAULT 'draft' NOT NULL,
+ "name" varchar(100) NOT NULL,
+ "slug" varchar(160) NOT NULL,
+ CONSTRAINT "example_tags_translations_item_id_language_id_pk" PRIMARY KEY("itemId","languageId")
+);
+--> statement-breakpoint
+ALTER TABLE "example_tags_translations" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
+ALTER TABLE "blog_posts" ADD COLUMN "hiddenAt" timestamp;--> statement-breakpoint
+ALTER TABLE "blog_posts" ADD COLUMN "hiddenBy" integer;--> statement-breakpoint
+ALTER TABLE "core_ai_translation_sources" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_content_documents" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_content_drafts" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_content_field_locks" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_content_revisions" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_content_schedules" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_content_slug_history" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+ALTER TABLE "core_search_index" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);--> statement-breakpoint
+CREATE INDEX "blog_posts_hidden_by_idx" ON "blog_posts" ("hiddenBy");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_advanced_articles_tags_position_key" ON "example_advanced_articles_tags" ("itemId","position");--> statement-breakpoint
+CREATE INDEX "example_advanced_articles_tags_related_item_id_idx" ON "example_advanced_articles_tags" ("relatedItemId");--> statement-breakpoint
+CREATE INDEX "example_events_primary_tag_idx" ON "example_events" ("primaryTag");--> statement-breakpoint
+CREATE INDEX "example_events_category_idx" ON "example_events" ("category");--> statement-breakpoint
+CREATE INDEX "example_events_created_at_idx" ON "example_events" ("createdAt");--> statement-breakpoint
+CREATE INDEX "example_events_updated_at_idx" ON "example_events" ("updatedAt");--> statement-breakpoint
+CREATE INDEX "example_events_status_published_at_idx" ON "example_events" ("status","publishedAt");--> statement-breakpoint
+CREATE INDEX "example_events_hidden_by_idx" ON "example_events" ("hiddenBy");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_events_gallery_position_key" ON "example_events_gallery" ("itemId","position");--> statement-breakpoint
+CREATE INDEX "example_events_gallery_related_item_id_idx" ON "example_events_gallery" ("relatedItemId");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_events_related_events_position_key" ON "example_events_related_events" ("itemId","position");--> statement-breakpoint
+CREATE INDEX "example_events_related_events_related_item_id_idx" ON "example_events_related_events" ("relatedItemId");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_events_sessions_position_key" ON "example_events_sessions" ("itemId","position");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_events_tags_position_key" ON "example_events_tags" ("itemId","position");--> statement-breakpoint
+CREATE INDEX "example_events_tags_related_item_id_idx" ON "example_events_tags" ("relatedItemId");--> statement-breakpoint
+CREATE INDEX "example_events_translations_language_id_status_idx" ON "example_events_translations" ("languageId","status");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_events_translations_language_id_slug_key" ON "example_events_translations" ("languageId","slug");--> statement-breakpoint
+CREATE INDEX "example_tags_category_idx" ON "example_tags" ("category");--> statement-breakpoint
+CREATE INDEX "example_tags_created_at_idx" ON "example_tags" ("createdAt");--> statement-breakpoint
+CREATE INDEX "example_tags_updated_at_idx" ON "example_tags" ("updatedAt");--> statement-breakpoint
+CREATE INDEX "example_tags_status_published_at_idx" ON "example_tags" ("status","publishedAt");--> statement-breakpoint
+CREATE INDEX "example_tags_hidden_by_idx" ON "example_tags" ("hiddenBy");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_tags_related_tags_position_key" ON "example_tags_related_tags" ("itemId","position");--> statement-breakpoint
+CREATE INDEX "example_tags_related_tags_related_item_id_idx" ON "example_tags_related_tags" ("relatedItemId");--> statement-breakpoint
+CREATE INDEX "example_tags_translations_language_id_status_idx" ON "example_tags_translations" ("languageId","status");--> statement-breakpoint
+CREATE UNIQUE INDEX "example_tags_translations_language_id_slug_key" ON "example_tags_translations" ("languageId","slug");--> statement-breakpoint
+ALTER TABLE "blog_posts" ADD CONSTRAINT "blog_posts_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_advanced_articles_tags" ADD CONSTRAINT "example_advanced_articles_tags_ATchHLRtvoCM_fkey" FOREIGN KEY ("itemId") REFERENCES "example_advanced_articles"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_advanced_articles_tags" ADD CONSTRAINT "example_advanced_articles_tags_dEsWdkDmu7nW_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "example_tags"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events" ADD CONSTRAINT "example_events_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events" ADD CONSTRAINT "example_events_primaryTag_example_tags_id_fkey" FOREIGN KEY ("primaryTag") REFERENCES "example_tags"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events" ADD CONSTRAINT "example_events_category_example_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "example_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_gallery" ADD CONSTRAINT "example_events_gallery_itemId_example_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_gallery" ADD CONSTRAINT "example_events_gallery_relatedItemId_core_files_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "core_files"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_related_events" ADD CONSTRAINT "example_events_related_events_itemId_example_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_related_events" ADD CONSTRAINT "example_events_related_events_oaRvqnKyAS7L_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "example_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_sessions" ADD CONSTRAINT "example_events_sessions_itemId_example_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_tags" ADD CONSTRAINT "example_events_tags_itemId_example_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_tags" ADD CONSTRAINT "example_events_tags_relatedItemId_example_tags_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "example_tags"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_translations" ADD CONSTRAINT "example_events_translations_itemId_example_events_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_events_translations" ADD CONSTRAINT "example_events_translations_languageId_core_languages_id_fkey" FOREIGN KEY ("languageId") REFERENCES "core_languages"("id") ON DELETE RESTRICT ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_tags" ADD CONSTRAINT "example_tags_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_tags" ADD CONSTRAINT "example_tags_category_example_categories_id_fkey" FOREIGN KEY ("category") REFERENCES "example_categories"("id") ON DELETE SET NULL ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_tags_related_tags" ADD CONSTRAINT "example_tags_related_tags_itemId_example_tags_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_tags_related_tags" ADD CONSTRAINT "example_tags_related_tags_relatedItemId_example_tags_id_fkey" FOREIGN KEY ("relatedItemId") REFERENCES "example_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_tags_translations" ADD CONSTRAINT "example_tags_translations_itemId_example_tags_id_fkey" FOREIGN KEY ("itemId") REFERENCES "example_tags"("id") ON DELETE CASCADE ON UPDATE CASCADE;--> statement-breakpoint
+ALTER TABLE "example_tags_translations" ADD CONSTRAINT "example_tags_translations_languageId_core_languages_id_fkey" FOREIGN KEY ("languageId") REFERENCES "core_languages"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
\ No newline at end of file
diff --git a/apps/api/migrations/20261011093549_content_visibility_id_strategies/snapshot.json b/apps/api/migrations/20261011093549_content_visibility_id_strategies/snapshot.json
new file mode 100644
index 0000000000..a97e2e39d0
--- /dev/null
+++ b/apps/api/migrations/20261011093549_content_visibility_id_strategies/snapshot.json
@@ -0,0 +1,16996 @@
+{
+ "version": "8",
+ "dialect": "postgres",
+ "id": "680724d8-a62f-48ca-aa75-7e3f07114a50",
+ "prevIds": [
+ "f56f3fa4-bc19-468a-9bb0-04e398dfc3d4"
+ ],
+ "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_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_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_moderators_permissions",
+ "entityType": "tables",
+ "schema": "public"
+ },
+ {
+ "isRlsEnabled": true,
+ "name": "core_navigation",
+ "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_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_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_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"
+ },
+ {
+ "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_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_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_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": "serial",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "id",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "integer",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "parentId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(16)",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "'header'",
+ "generated": null,
+ "identity": null,
+ "name": "location",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(16)",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "kind",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(50)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "pluginId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(120)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "presetId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "text",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "href",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(64)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "icon",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "boolean",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "false",
+ "generated": null,
+ "identity": null,
+ "name": "isOpenInNewTab",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "integer",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "0",
+ "generated": null,
+ "identity": null,
+ "name": "position",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "timestamp",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "now()",
+ "generated": null,
+ "identity": null,
+ "name": "createdAt",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "timestamp",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "now()",
+ "generated": null,
+ "identity": null,
+ "name": "updatedAt",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": "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": "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": "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": "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"
+ },
+ {
+ "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": "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": "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": "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": "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
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_files_user_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": "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": "position",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_position_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "nameExplicit": true,
+ "columns": [
+ {
+ "value": "location",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_location_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "nameExplicit": true,
+ "columns": [
+ {
+ "value": "parentId",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_parent_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": "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": "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": "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": "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": "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_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": "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": 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": [
+ "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": [
+ "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": [
+ "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": [
+ "parentId"
+ ],
+ "schemaTo": "public",
+ "tableTo": "core_navigation",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "NO ACTION",
+ "onDelete": "SET NULL",
+ "name": "core_navigation_parentId_core_navigation_id_fkey",
+ "entityType": "fks",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": [
+ "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_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"
+ },
+ {
+ "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": [
+ "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_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_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_moderators_permissions_pkey",
+ "schema": "public",
+ "table": "core_moderators_permissions",
+ "entityType": "pks"
+ },
+ {
+ "columns": [
+ "id"
+ ],
+ "nameExplicit": false,
+ "name": "core_navigation_pkey",
+ "schema": "public",
+ "table": "core_navigation",
+ "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": [
+ "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_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"
+ },
+ {
+ "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": [
+ "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/api/migrations/20261011111627_add_search_index_is_hidden/migration.sql b/apps/api/migrations/20261011111627_add_search_index_is_hidden/migration.sql
new file mode 100644
index 0000000000..6f6a44372e
--- /dev/null
+++ b/apps/api/migrations/20261011111627_add_search_index_is_hidden/migration.sql
@@ -0,0 +1 @@
+ALTER TABLE "core_search_index" ADD COLUMN "isHidden" boolean DEFAULT false NOT NULL;
\ No newline at end of file
diff --git a/apps/api/migrations/20261011111627_add_search_index_is_hidden/snapshot.json b/apps/api/migrations/20261011111627_add_search_index_is_hidden/snapshot.json
new file mode 100644
index 0000000000..37aa72e06f
--- /dev/null
+++ b/apps/api/migrations/20261011111627_add_search_index_is_hidden/snapshot.json
@@ -0,0 +1,17009 @@
+{
+ "version": "8",
+ "dialect": "postgres",
+ "id": "a3b555f1-3780-4d7e-9714-a4fa88b4b704",
+ "prevIds": [
+ "680724d8-a62f-48ca-aa75-7e3f07114a50"
+ ],
+ "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_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_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_moderators_permissions",
+ "entityType": "tables",
+ "schema": "public"
+ },
+ {
+ "isRlsEnabled": true,
+ "name": "core_navigation",
+ "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_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_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_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"
+ },
+ {
+ "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_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_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_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": "serial",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "id",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "integer",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "parentId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(16)",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "'header'",
+ "generated": null,
+ "identity": null,
+ "name": "location",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(16)",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "kind",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(50)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "pluginId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(120)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "presetId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "text",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "href",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(64)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "icon",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "boolean",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "false",
+ "generated": null,
+ "identity": null,
+ "name": "isOpenInNewTab",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "integer",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "0",
+ "generated": null,
+ "identity": null,
+ "name": "position",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "timestamp",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "now()",
+ "generated": null,
+ "identity": null,
+ "name": "createdAt",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "timestamp",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "now()",
+ "generated": null,
+ "identity": null,
+ "name": "updatedAt",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": "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": "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": "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": "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"
+ },
+ {
+ "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": "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": "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": "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": "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
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_files_user_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": "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": "position",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_position_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "nameExplicit": true,
+ "columns": [
+ {
+ "value": "location",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_location_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "nameExplicit": true,
+ "columns": [
+ {
+ "value": "parentId",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_parent_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": "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": "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": "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": "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": "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_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": "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": 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": [
+ "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": [
+ "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": [
+ "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": [
+ "parentId"
+ ],
+ "schemaTo": "public",
+ "tableTo": "core_navigation",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "NO ACTION",
+ "onDelete": "SET NULL",
+ "name": "core_navigation_parentId_core_navigation_id_fkey",
+ "entityType": "fks",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": [
+ "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_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"
+ },
+ {
+ "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": [
+ "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_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_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_moderators_permissions_pkey",
+ "schema": "public",
+ "table": "core_moderators_permissions",
+ "entityType": "pks"
+ },
+ {
+ "columns": [
+ "id"
+ ],
+ "nameExplicit": false,
+ "name": "core_navigation_pkey",
+ "schema": "public",
+ "table": "core_navigation",
+ "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": [
+ "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_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"
+ },
+ {
+ "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": [
+ "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/api/migrations/20261011120604_add_search_index_image/migration.sql b/apps/api/migrations/20261011120604_add_search_index_image/migration.sql
new file mode 100644
index 0000000000..baed3d2a71
--- /dev/null
+++ b/apps/api/migrations/20261011120604_add_search_index_image/migration.sql
@@ -0,0 +1,3 @@
+ALTER TABLE "core_search_index" ADD COLUMN "imageId" integer;--> statement-breakpoint
+CREATE INDEX "core_search_index_image_id_idx" ON "core_search_index" ("imageId");--> statement-breakpoint
+ALTER TABLE "core_search_index" ADD CONSTRAINT "core_search_index_imageId_core_files_id_fkey" FOREIGN KEY ("imageId") REFERENCES "core_files"("id") ON DELETE SET NULL;
\ No newline at end of file
diff --git a/apps/api/migrations/20261011120604_add_search_index_image/snapshot.json b/apps/api/migrations/20261011120604_add_search_index_image/snapshot.json
new file mode 100644
index 0000000000..44817394b4
--- /dev/null
+++ b/apps/api/migrations/20261011120604_add_search_index_image/snapshot.json
@@ -0,0 +1,17060 @@
+{
+ "version": "8",
+ "dialect": "postgres",
+ "id": "27a31513-4f49-4cab-aa26-2538019a87d9",
+ "prevIds": [
+ "a3b555f1-3780-4d7e-9714-a4fa88b4b704"
+ ],
+ "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_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_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_moderators_permissions",
+ "entityType": "tables",
+ "schema": "public"
+ },
+ {
+ "isRlsEnabled": true,
+ "name": "core_navigation",
+ "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_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_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_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"
+ },
+ {
+ "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_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_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_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": "serial",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "id",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "integer",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "parentId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(16)",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "'header'",
+ "generated": null,
+ "identity": null,
+ "name": "location",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(16)",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "kind",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(50)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "pluginId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(120)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "presetId",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "text",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "href",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "varchar(64)",
+ "typeSchema": null,
+ "notNull": false,
+ "dimensions": 0,
+ "default": null,
+ "generated": null,
+ "identity": null,
+ "name": "icon",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "boolean",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "false",
+ "generated": null,
+ "identity": null,
+ "name": "isOpenInNewTab",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "integer",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "0",
+ "generated": null,
+ "identity": null,
+ "name": "position",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "timestamp",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "now()",
+ "generated": null,
+ "identity": null,
+ "name": "createdAt",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "type": "timestamp",
+ "typeSchema": null,
+ "notNull": true,
+ "dimensions": 0,
+ "default": "now()",
+ "generated": null,
+ "identity": null,
+ "name": "updatedAt",
+ "entityType": "columns",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": "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": "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": "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"
+ },
+ {
+ "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": "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": "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": "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": "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
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_files_user_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": "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": "position",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_position_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "nameExplicit": true,
+ "columns": [
+ {
+ "value": "location",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_location_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "nameExplicit": true,
+ "columns": [
+ {
+ "value": "parentId",
+ "isExpression": false,
+ "asc": true,
+ "nullsFirst": false,
+ "opclass": null
+ }
+ ],
+ "isUnique": false,
+ "where": null,
+ "with": "",
+ "method": "btree",
+ "concurrently": false,
+ "name": "core_navigation_parent_idx",
+ "entityType": "indexes",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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": "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": "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": "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": "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": "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_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": "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": 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": [
+ "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": [
+ "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": [
+ "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": [
+ "parentId"
+ ],
+ "schemaTo": "public",
+ "tableTo": "core_navigation",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "NO ACTION",
+ "onDelete": "SET NULL",
+ "name": "core_navigation_parentId_core_navigation_id_fkey",
+ "entityType": "fks",
+ "schema": "public",
+ "table": "core_navigation"
+ },
+ {
+ "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_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"
+ },
+ {
+ "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": [
+ "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_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_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_moderators_permissions_pkey",
+ "schema": "public",
+ "table": "core_moderators_permissions",
+ "entityType": "pks"
+ },
+ {
+ "columns": [
+ "id"
+ ],
+ "nameExplicit": false,
+ "name": "core_navigation_pkey",
+ "schema": "public",
+ "table": "core_navigation",
+ "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": [
+ "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_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"
+ },
+ {
+ "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": [
+ "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/content-engine/admincp-bulk-actions.webp b/apps/web/content/docs/content-engine/admincp-bulk-actions.webp
index 1124aa0635..96288a8d30 100644
Binary files a/apps/web/content/docs/content-engine/admincp-bulk-actions.webp and b/apps/web/content/docs/content-engine/admincp-bulk-actions.webp differ
diff --git a/apps/web/content/docs/content-engine/admincp-row-actions.webp b/apps/web/content/docs/content-engine/admincp-row-actions.webp
new file mode 100644
index 0000000000..31289f3057
Binary files /dev/null and b/apps/web/content/docs/content-engine/admincp-row-actions.webp differ
diff --git a/apps/web/content/docs/content-engine/admincp.mdx b/apps/web/content/docs/content-engine/admincp.mdx
index a6b429b80e..9a581ecb1f 100644
--- a/apps/web/content/docs/content-engine/admincp.mdx
+++ b/apps/web/content/docs/content-engine/admincp.mdx
@@ -8,6 +8,7 @@ import { ImgDocs } from "@/components/fumadocs/img";
import articleList from "./admincp-article-list.webp";
import bulkActions from "./admincp-bulk-actions.webp";
import createDialog from "./admincp-create-dialog.webp";
+import rowActions from "./admincp-row-actions.webp";
Every content type registered in the plugin's `src/admin/content.tsx` gets an AdminCP list and a create and edit form without any UI code. Most changes are options in the definition's `admin` block. For anything the options cannot express, you swap one cell, one field or the whole form layout for your own component.
@@ -73,17 +74,35 @@ Every mistake here, such as an unknown field or a gallery in `columns`, throws a
## Bulk actions
-Ticking rows opens a floating bar with **Publish**, **Unpublish** and **Delete**. There is nothing to configure. Publish and Unpublish appear with `publication` and the `can_publish` permission, Delete with `can_delete`. Without any of them, the table has no checkboxes.
+Ticking rows opens a floating bar with two menus and a **Delete** button. **Status** holds Publish and Unpublish, **Visibility** holds Hide and Unhide. Each option says how many of the ticked rows it applies to, such as **2 of 3**, and only those rows change: hiding two visible articles and one already hidden sends two requests, not three. An option that fits none of them is greyed out.
+
+There is nothing to configure. **Status** appears with `publication` and the `can_publish` permission, **Visibility** with [`visibility`](/docs/content-engine/content-visibility) and `can_hide`, **Delete** with `can_delete`. Without any of them, the table has no checkboxes. On a phone the bar shrinks to icons.
Each action asks for confirmation and then sends one request per record to the same route the row buttons use, so events, search indexing and revisions behave as if you clicked every row. When some records fail, for example because someone else saved them meanwhile, the rest still go through. A toast says how many were skipped, and those rows stay ticked.
+## Duplicate and hide records
+
+The **More actions** menu of each row collects the less frequent actions. Two of them come from options in the definition:
+
+- **Duplicate** appears with [`duplication`](/docs/content-engine/duplicate-content), for staff with `can_create` and `can_view`. It makes a draft copy and opens it.
+- **Hide** or **Unhide** appears with [`visibility`](/docs/content-engine/content-visibility), for staff with `can_hide`. A hidden record gets an eye-off icon before its title, with a tooltip such as **Article hidden**, and the toolbar gets a **Visibility** filter with **All**, **Visible** and **Hidden**.
+
+
+
+Each action asks for confirmation, refreshes the list and shows a toast. On the edit page, `ContentFormActions` adds a **Hide** or **Unhide** button next to **Save changes**, and `ContentFormStatus` shows the same **Hidden** badge with a short explanation.
+
## Group form fields into sections
By default the form shows every field except `field.blocks()`, one after another, in a dialog:
@@ -264,7 +283,7 @@ contentTypeAdmin({
}),
```
-`forms.create.layout` and `forms.edit.layout` override the shared one per action. `ContentFormRemainingFields` renders every form field you did not place yourself. In development, the browser console warns about fields the layout never rendered and about a missing `ContentFormHeader`, which holds the title and the back link.
+`forms.create.layout` and `forms.edit.layout` override the shared one per action. For a content type with [`visibility`](/docs/content-engine/content-visibility), `ContentFormHiddenIcon`, `ContentFormHiddenNotice` and `ContentFormVisibilityToggle` from the same import place the icon, the explanation and the button yourself. The blog's editor puts `ContentFormHiddenIcon` before the title and `ContentFormHiddenNotice` under its header. For a one-row header, `ContentFormPublicationLabel` shows **Draft** or **Published** as plain text (hover it for the publish date), and `ContentFormSaveMenu` is **Save changes** with a ▾ menu holding **Publish** or **Unpublish** and **Hide** or **Unhide**, each behind the usual confirmation. `ContentFormRemainingFields` renders every form field you did not place yourself. In development, the browser console warns about fields the layout never rendered and about a missing `ContentFormHeader`, which holds the title and the back link.
## Show a matching skeleton
diff --git a/apps/web/content/docs/content-engine/caching.mdx b/apps/web/content/docs/content-engine/caching.mdx
index 7516668059..6ae2a11ae1 100644
--- a/apps/web/content/docs/content-engine/caching.mdx
+++ b/apps/web/content/docs/content-engine/caching.mdx
@@ -90,7 +90,7 @@ When a front end caches public reads under tags, it needs to know which tags a w
| `contentDeliveryRedirectTag(typeId, slug, locale?)` | `content:example.article:redirect:hello-content-engine` |
| `contentDeliverySitemapTag(typeId, locale?)` | `content:example.article:sitemap` |
-A locale goes after the kind, so a localized type's Polish list is `content:example.localized-article:list:pl`.
+A locale goes after the kind, so a localized type's Polish list is `content:example.localized-article:list:pl`. An id goes in as text, so a [uuid or bigint](/docs/content-engine/id-strategy) record's item tag carries its exact UUID or decimal string.
`contentInvalidationTags` turns a description of one write into the exact tags to expire. Publishing article `3` returns all six tags above:
@@ -121,13 +121,21 @@ export const vitNodeApiConfig = buildApiConfig({
});
```
-VitNode then sends a `POST` to `{origin}/api/vitnode/content/revalidate` when a [scheduled](/docs/content-engine/editorial#schedule-publishing) publish or unpublish runs. Publishing by hand in the AdminCP sends nothing today, so a front end that caches must also expire entries on its own timer.
+VitNode then sends a `POST` to `{origin}/api/vitnode/content/revalidate` in these cases:
+
+| Change | Notifies origins |
+| ------------------------------------------------------------------------------------------- | ---------------------------------------------- |
+| A [scheduled](/docs/content-engine/editorial#schedule-publishing) publish or unpublish runs | Yes |
+| A record is [hidden or unhidden](/docs/content-engine/content-visibility) | Yes, when that changes what the public can see |
+| A publish, unpublish, edit or delete from the AdminCP or the API | No |
+
+Hiding a draft notifies nobody, because nothing public changed. For the changes that send nothing, a front end that caches must expire entries on its own timer, or from a listener for the [content events](/docs/content-engine/events).
The request carries:
- `Authorization: Bearer `, the same secret that runs cron jobs.
- `x-vitnode-timestamp`, the send time in milliseconds.
-- A JSON body with the `contentInvalidationTags` input plus `mode`, which is always `"immediate"` for a scheduled run.
+- A JSON body with the `contentInvalidationTags` input plus `mode`, which is always `"immediate"` for a scheduled run, a hide and an unhide.
The secret travels with the request, so outside development each origin must use `https`. Plain `http` is allowed only for `localhost` and `127.0.0.1`. VitNode sends nothing while `CRON_SECRET` is unset or still the default. It tries each origin twice and does not retry a `403`, which it reads as a wrong secret.
diff --git a/apps/web/content/docs/content-engine/content-visibility-editor.webp b/apps/web/content/docs/content-engine/content-visibility-editor.webp
new file mode 100644
index 0000000000..c62a3136c5
Binary files /dev/null and b/apps/web/content/docs/content-engine/content-visibility-editor.webp differ
diff --git a/apps/web/content/docs/content-engine/content-visibility-filter.webp b/apps/web/content/docs/content-engine/content-visibility-filter.webp
new file mode 100644
index 0000000000..84c77dbfec
Binary files /dev/null and b/apps/web/content/docs/content-engine/content-visibility-filter.webp differ
diff --git a/apps/web/content/docs/content-engine/content-visibility-hide-dialog.webp b/apps/web/content/docs/content-engine/content-visibility-hide-dialog.webp
new file mode 100644
index 0000000000..ac3467dc09
Binary files /dev/null and b/apps/web/content/docs/content-engine/content-visibility-hide-dialog.webp differ
diff --git a/apps/web/content/docs/content-engine/content-visibility.mdx b/apps/web/content/docs/content-engine/content-visibility.mdx
new file mode 100644
index 0000000000..aeabf6bda4
--- /dev/null
+++ b/apps/web/content/docs/content-engine/content-visibility.mdx
@@ -0,0 +1,181 @@
+---
+title: Hide content
+description: Take a published VitNode Content Engine record off the public site, search and sitemap without unpublishing it, then bring it back with the same URL and publish date.
+icon: EyeOff
+---
+
+import { ImgDocs } from "@/components/fumadocs/img";
+import hideDialog from "./content-visibility-hide-dialog.webp";
+import hiddenFilter from "./content-visibility-filter.webp";
+import hiddenEditor from "./content-visibility-editor.webp";
+
+Hiding takes a record off the public site right away while it stays published. It disappears from the public API, its page, search and the sitemap, and unhiding brings it back with its original URL and publish date. Reach for it when a post has to go now and the questions can wait. This guide follows the blog plugin, whose articles can be hidden.
+
+| You want to | Use |
+| ---------------------------------------------------------------------- | --------------------------------------------------------------- |
+| Take a record down for now and put it back as it was | Hide |
+| Turn a record back into a draft to rework it before it goes live again | [Unpublish](/docs/content-engine/public-api#publish-an-article) |
+| Remove it for good | Delete |
+
+## Before you begin
+
+Hiding needs [`publication`](/docs/content-engine/public-api), because a record that is never public has nothing to hide from.
+
+
+
+
+
+### Turn on visibility
+
+The blog's article content type turns it on next to `publication`:
+
+```ts title="plugins/blog/src/content/post.ts"
+export const blogPostContentType = defineContentType({
+ id: "blog.post",
+ tableName: "blog_posts",
+ publication: true,
+ visibility: true, // [!code ++]
+ // ...
+});
+```
+
+`visibility` takes only `true` or `false`. Without `publication` it throws when the content type is defined. With it, `hiddenAt`, `hiddenBy` and `visibility` are reserved and cannot be field names.
+
+
+
+
+
+### Build and migrate
+
+Run `pnpm build:plugins && pnpm db:migrate`, then restart `pnpm dev`. The migration adds two nullable columns to the main table. For the blog, `apps/api/migrations/20261011093549_content_visibility_id_strategies` contains:
+
+```sql title="migration.sql (excerpt)"
+ALTER TABLE "blog_posts" ADD COLUMN "hiddenAt" timestamp;
+ALTER TABLE "blog_posts" ADD COLUMN "hiddenBy" integer;
+CREATE INDEX "blog_posts_hidden_by_idx" ON "blog_posts" ("hiddenBy");
+ALTER TABLE "blog_posts" ADD CONSTRAINT "blog_posts_hiddenBy_core_users_id_fkey" FOREIGN KEY ("hiddenBy") REFERENCES "core_users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+```
+
+Existing records stay visible. `hiddenAt` is when the record was hidden and `hiddenBy` is the staff member who hid it.
+
+
+
+
+
+### Label the permission
+
+Visibility adds a `can_hide` permission, separate from `can_publish`, so a moderator can take records down without being able to publish. The blog labels it next to its other article permissions:
+
+```json title="plugins/blog/src/locales/en.json"
+{
+ "@vitnode/blog:posts:can_hide": "Hide and unhide articles"
+}
+```
+
+Grant it to the staff who should moderate in **AdminCP → Staff**.
+
+
+
+
+
+### Hide an article
+
+Open **AdminCP → Blog → Articles**, open the **More actions** menu of a published article and choose **Hide**. Confirm with **Yes, hide it**:
+
+
+
+A toast says the article is now hidden. The row keeps its **Published** badge, and its title gets an eye-off icon in front with an **Article hidden** tooltip. The **Visibility** filter in the list toolbar shows only hidden or only visible records, and it combines with the **Status** filter:
+
+
+
+The edit page shows the same icon before the title, an **Unhide** action (in the blog's editor, it lives in the ▾ menu next to **Save changes**) and a note that publishing a hidden record does not make it public:
+
+
+
+Choose **Unhide** in the same menu, or on the edit page, to bring the article back. In the database, hiding sets `blog_posts."hiddenAt"` and `"hiddenBy"`, and unhiding clears both.
+
+Cleaning up after a spam wave? Tick several articles and choose **Visibility → Hide** in the floating bar. The menu counts how many of them are still visible, such as **Hide 2 of 3**, and leaves the rest alone. **Unhide** works the same way. See [Bulk actions](/docs/content-engine/admincp#bulk-actions).
+
+
+
+
+
+## What hiding does
+
+A record is public only when it is published, its `publishedAt` is not in the future, and it is not hidden. While a record is hidden:
+
+- The public API list leaves it out and its detail route answers `404`, in every language, including a language that falls back to the default one.
+- Its [page](/docs/content-engine/public-pages) answers `404`, and so do its old slugs instead of redirecting.
+- The [sitemap](/docs/content-engine/seo#sitemap) and `hreflang` alternates leave it out, and [site search](/docs/content-engine/search) marks its document private.
+- Signed [preview links](/docs/content-engine/editorial#preview-links) still work, and the AdminCP still shows it.
+
+## Who can still see it
+
+Hidden doesn't mean gone for the people working on it. Signed in, a record's **authors** and its **editors** still reach it:
+
+- **Authors** are the users in the content type's [`search.authorField`](/docs/content-engine/search), such as the blog's **Author** field.
+- **Editors** are staff with `can_edit` on the content type, such as `posts:can_edit` for the blog.
+
+The route tells whose record it is by its `id`, so `id` must be in `publicApi.fields`. For authors and editors:
+
+- The page opens with an eye-off icon before the title and a **This article is hidden** note, so nobody mistakes it for a live page. The response sends `noindex` and `Cache-Control: private, no-store`, so search engines and caches never keep it.
+- The detail route answers `200`, and `GET .../delivery/resolve/{slug}` returns `hidden: true`.
+- [Site search](/docs/content-engine/search) and the member timeline list it with the eye-off icon before its title and a tooltip like **Article hidden**.
+
+Everyone else, signed in or not, still gets a `404`. Old slugs never redirect to a hidden record, and the list, sitemap and `hreflang` alternates leave it out for everybody.
+
+
+Search learns that a record is hidden when it is hidden or unhidden. Records hidden before you updated VitNode show up for their authors and editors only after a reindex: **AdminCP → Advanced → Search**, then **Reindex** on the collection, such as `blog.post`. See [Search](/docs/content-engine/search).
+
+
+Hiding changes nothing else. `status` and `publishedAt` stay as they are, so unhiding a published record puts it back with its original date. Publishing, unpublishing and scheduled publishes never change visibility, so publishing a hidden record keeps it off the site until someone unhides it. Restoring a revision never changes visibility either.
+
+With [`editorial`](/docs/content-engine/editorial), hiding and unhiding raise the record's `version` and store a revision, shown as **Hidden** or **Unhidden** in the history. Hiding a record that is already hidden changes nothing: no write, no revision and no event.
+
+Hiding is per record. To take one language off the site, unpublish that translation instead.
+
+## Hide from the API
+
+The admin module has `POST /{id}/hide` and `POST /{id}/unhide`, such as `POST /api/@vitnode/blog/admin/content/posts/703/hide` for the blog. Both need `can_hide` and accept an optional body:
+
+```json
+{ "expectedVersion": 4 }
+```
+
+With `expectedVersion`, the call fails with `409` and `CONTENT_VERSION_CONFLICT` when someone saved the record meanwhile, like any [editorial write](/docs/content-engine/editorial#safe-concurrent-edits). Both routes answer `200` with `{ changed, row }`, where `changed` is `false` when the record was already in that state. A malformed id is `400` and a missing record is `404`. With `delivery.redirects`, unhiding can also fail with `409` when another record took the URL while this one was hidden.
+
+The admin list route accepts `?visibility=hidden` or `?visibility=visible`, and it combines with `?status=`.
+
+From your own code, `hide(id, options)` and `unhide(id, options)` exist on the services when visibility is on. See [Services](/docs/content-engine/services#hide-duplicate-and-content-ids).
+
+## Events and caches
+
+A hide emits `content.blog.post.hidden` with `{ actorUserId, contentId, hiddenAt }`, and an unhide emits `unhidden` with `{ actorUserId, contentId }`. Both update the search index and the delivery data. See [Events](/docs/content-engine/events).
+
+Front ends listed in [`content.revalidateOrigins`](/docs/content-engine/caching#notify-a-separate-front-end) are notified at once when a hide or unhide changes what the public can see. Hiding a draft notifies nobody, because nothing public changed.
+
+## Check the result
+
+Hide the published "Second post", then request its page and its API entry:
+
+```bash
+curl -o /dev/null -w "%{http_code}\n" "http://localhost:3000/blog/second-post"
+curl -o /dev/null -w "%{http_code}\n" "http://localhost:3000/api/@vitnode/blog/content/blog/second-post"
+```
+
+Both answer `404`, like a draft, and the article drops out of the blog list and the sitemap. In the AdminCP it is still **Published**. Unhide it, and the same requests answer `200` with the original `publishedAt`. Open the page while signed in as one of its authors, and it loads with the hidden note instead.
diff --git a/apps/web/content/docs/content-engine/database.mdx b/apps/web/content/docs/content-engine/database.mdx
index 778bac50cd..135512b1a6 100644
--- a/apps/web/content/docs/content-engine/database.mdx
+++ b/apps/web/content/docs/content-engine/database.mdx
@@ -78,14 +78,16 @@ export const example_advanced_articles_faq =
You never declare these. A field with the same name throws an error.
-| Column | Type | Added when |
-| ------------- | ----------------------------------------------------------- | ------------- |
-| `id` | `serial` primary key | Always |
-| `createdAt` | `timestamp`, defaults to `now()` | Always |
-| `updatedAt` | `timestamp`, defaults to `now()`, refreshed by every update | Always |
-| `status` | `varchar(32)`, `draft` or `published`, defaults to `draft` | `publication` |
-| `publishedAt` | `timestamp`, nullable | `publication` |
-| `version` | `integer`, defaults to `1` | `editorial` |
+| Column | Type | Added when |
+| ------------- | ------------------------------------------------------------------------- | ------------- |
+| `id` | Primary key, typed by [`idStrategy`](#ids-and-shared-tables) | Always |
+| `createdAt` | `timestamp`, defaults to `now()` | Always |
+| `updatedAt` | `timestamp`, defaults to `now()`, refreshed by every update | Always |
+| `status` | `varchar(32)`, `draft` or `published`, defaults to `draft` | `publication` |
+| `publishedAt` | `timestamp`, nullable | `publication` |
+| `version` | `integer`, defaults to `1` | `editorial` |
+| `hiddenAt` | `timestamp`, nullable | `visibility` |
+| `hiddenBy` | `integer`, nullable, references `core_users.id` with `ON DELETE SET NULL` | `visibility` |
Column names are camelCase in SQL, exactly as in TypeScript. Every generated table has row-level security enabled. A field group adds one column per leaf to the main table, so the `syndication` group's `indexable` field becomes `syndicationIndexable`. Column types per field are listed in [Fields](/docs/content-engine/fields).
@@ -93,13 +95,13 @@ Column names are camelCase in SQL, exactly as in TypeScript. Every generated tab
With `localization`, `{tableName}_translations` holds the localized fields:
-| Column | Notes |
-| ------------------------ | ------------------------------------------------------------------------- |
-| `itemId` | References the main table. Deleting the record deletes its translations |
-| `languageId` | References `core_languages.id`. A language with content cannot be deleted |
-| `version` | Per-language version, always present |
-| `createdAt`, `updatedAt` | Same as the main table |
-| `status`, `publishedAt` | With `publication`. Each language is published on its own |
+| Column | Notes |
+| ------------------------ | ------------------------------------------------------------------------------------------------------- |
+| `itemId` | References the main table, with the same type as its `id`. Deleting the record deletes its translations |
+| `languageId` | References `core_languages.id`. A language with content cannot be deleted |
+| `version` | Per-language version, always present |
+| `createdAt`, `updatedAt` | Same as the main table |
+| `status`, `publishedAt` | With `publication`. Each language is published on its own |
The primary key is `(itemId, languageId)`, so a record has at most one translation per language.
@@ -112,12 +114,32 @@ Field names become snake_case in table names, so `relatedArticles` on `example_a
Deleting a record deletes its junction and repeatable rows. Both kinds keep `position` unique per record. That column holds the order an editor picks in the AdminCP.
+Every column that points at a record has the type of that record's key. In a junction table, `itemId` follows the owner's `idStrategy` and `relatedItemId` follows the target's. A repeatable's own `id` is always `serial`, while its `itemId` follows the owner. User and file references are always `integer`.
+
+## IDs and shared tables
+
+The [id strategy](/docs/content-engine/id-strategy) sets the key column:
+
+| `idStrategy` | `id` column |
+| -------------------- | ----------------------------------------------------- |
+| `"serial"` (default) | `serial PRIMARY KEY` |
+| `"uuid"` | `uuid PRIMARY KEY DEFAULT gen_random_uuid()` |
+| `"bigint"` | `bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY` |
+
+Core tables that hold records of every content type store the id as text: `core_content_revisions`, `core_content_schedules`, `core_content_slug_history`, `core_search_index`, the [live editing](/docs/content-engine/live-editing-api#where-the-data-lives) tables `core_content_drafts`, `core_content_field_locks` and `core_content_documents`, and `core_ai_translation_sources`. Their `itemId` is a `varchar(64)` holding `contentIdKey(id)`: the digits of a serial or bigint id, or the UUID. Migration `20261011093549_content_visibility_id_strategies` converted them in place from `integer`, so existing serial keys keep their digits:
+
+```sql title="apps/api/migrations/20261011093549_content_visibility_id_strategies/migration.sql (excerpt)"
+ALTER TABLE "core_content_revisions" ALTER COLUMN "itemId" SET DATA TYPE varchar(64) USING "itemId"::varchar(64);
+```
+
+Custom SQL that joins these tables to a content table needs a cast, such as `"core_content_revisions"."itemId" = "example_articles"."id"::text`.
+
## Generated indexes
The engine creates these indexes without being asked:
- A unique index on every slug, and on every `field.text({ unique: true })`.
-- An index on every single `relation`, `user` and `file` column.
+- An index on every single `relation`, `user` and `file` column, and on `hiddenBy` with `visibility`.
- Indexes on `createdAt` and `updatedAt`.
- `(status, publishedAt)` with `publication`.
- On a translations table: `(languageId, status)` with `publication` or `(languageId)` without it, plus a unique `(languageId, slug)` for each localized slug.
@@ -137,4 +159,6 @@ Changing a definition is a schema change like any other. Build, migrate and read
- **Adding a required field without a default** fails on a table with rows. Add it as nullable, fill it, then make it required in a second migration.
- **Renaming a field** renames its column. Check that the generated SQL says `RENAME COLUMN`, not a drop followed by an add, or the old values are lost.
- **Turning on `localization`** moves localized fields to a new translations table. The generated SQL does not copy existing values, so add the data move to the migration yourself.
+- **Turning on `visibility`** adds two nullable columns, so existing records stay visible.
+- **Changing `idStrategy`** on a table with data is not something the generated SQL can do. It needs a hand-written data migration that converts the key, every column that references it and the keys in the shared tables. See [Change the strategy later](/docs/content-engine/id-strategy#change-the-strategy-later).
- **Never edit or regenerate a migration that has already been applied.** Write a new one instead.
diff --git a/apps/web/content/docs/content-engine/duplicate-content-dialog.webp b/apps/web/content/docs/content-engine/duplicate-content-dialog.webp
new file mode 100644
index 0000000000..5dd73ceef8
Binary files /dev/null and b/apps/web/content/docs/content-engine/duplicate-content-dialog.webp differ
diff --git a/apps/web/content/docs/content-engine/duplicate-content.mdx b/apps/web/content/docs/content-engine/duplicate-content.mdx
new file mode 100644
index 0000000000..18d7e3a856
--- /dev/null
+++ b/apps/web/content/docs/content-engine/duplicate-content.mdx
@@ -0,0 +1,152 @@
+---
+title: Duplicate content
+description: Let editors copy a VitNode Content Engine record into a new draft, with its translations, relations and repeatable rows, from the AdminCP or from your own code.
+icon: Copy
+---
+
+import { ImgDocs } from "@/components/fumadocs/img";
+import duplicateDialog from "./duplicate-content-dialog.webp";
+
+Duplication copies one record into a new draft: every field, every translation, relations in their order and repeatable rows. The blog uses it so an editor can start a new article from a similar one, or prepare a rewrite of a published article without touching the live version.
+
+
+
+
+
+### Turn on duplication
+
+Add `duplication: true` to the definition. The blog's article content type does exactly that:
+
+```ts title="plugins/blog/src/content/post.ts"
+export const blogPostContentType = defineContentType({
+ id: "blog.post",
+ tableName: "blog_posts",
+ publication: true,
+ duplication: true, // [!code ++]
+ // ...
+});
+```
+
+Duplication adds no column, so there is nothing to migrate, and no new permission. Duplicating needs `can_create` and `can_view`, because it creates a record by reading another. For the blog those are **Create articles** and **View articles list**. Run `pnpm build:plugins` and restart `pnpm dev`.
+
+
+
+
+
+### Duplicate an article in the AdminCP
+
+Open **AdminCP → Blog → Articles**, open the **More actions** menu of an article and choose **Duplicate**. Confirm with **Yes, duplicate it**:
+
+
+
+The list refreshes, a toast says the article was duplicated as a draft, and the copy opens on its edit page (or in the edit dialog, for a content type whose `admin.edit.mode` is `"dialog"`). If some of the source's languages are switched off on this site, a second toast lists the ones that were left out.
+
+
+
+
+
+Duplicating the blog's "Hello world", published in English and Polish with its categories and authors, creates a draft with:
+
+| Language | Title | Slug |
+| -------- | -------------------- | -------------------- |
+| English | Hello world (Copy) | `hello-world-copy` |
+| Polish | Witaj świecie (Copy) | `witaj-swiecie-copy` |
+
+The copy has the same categories and the same authors in the same order, and each language starts its own revision history.
+
+## What the copy contains
+
+| Copied | Not copied |
+| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
+| Every declared field, including rich text, groups and blocks | Revisions, schedules and preview links |
+| Repeatable rows, as new rows in the same order | Slug history and redirects |
+| Relation, user and file references, in their order. Files are reused, not uploaded again | Published state and `publishedAt`: the copy is a draft |
+| Every translation, each as a draft with its own first revision | Hidden state: the copy is never [hidden](/docs/content-engine/content-visibility) |
+
+The copy gets a new id, new timestamps and `version` 1. Everything happens in one database transaction, so a failure leaves nothing behind. The source is only read, so its history gets no new revision.
+
+### Titles and slugs
+
+When `admin.titleField` is a `field.text()`, the copy's title gets a suffix in each language, such as "Hello world (Copy)". The source title is shortened when the suffix would push it past the field's `maxLength`. The suffix is the core API message `core.content.duplicate.title_suffix`, resolved in each copied language and falling back to "(Copy)".
+
+Turn the suffix off with `duplication: { titleSuffix: false }`. `titleSuffix: true` with a title field that is not a text field throws when the content type is defined.
+
+Each slug is regenerated from the copy's title, so `hello-world` becomes `hello-world-copy`. A slug without a `source` gets `-copy` appended. When that slug is taken, by a live record or by another record's old URL, the engine tries `-2`, `-3` and so on, up to 20 candidates.
+
+### Unique fields
+
+A `field.text({ unique: true })` cannot keep the source's value. Duplicating such a record without a new value fails before anything is written, with `422` and the code `CONTENT_DUPLICATE_UNIQUE_REQUIRED`. Pass the new value as an override from the API, as shown below.
+
+## Duplicate from the API
+
+The admin module of a content type with duplication has `POST /{id}/duplicate`. For the blog, the module is named after its permission module, `posts`:
+
+```http
+POST /api/@vitnode/blog/admin/content/posts/701/duplicate
+Content-Type: application/json
+
+{
+ "translations": {
+ "en": { "title": "Hello again", "friendlyUrl": "hello-again" },
+ "pl": { "title": "Witaj ponownie" }
+ }
+}
+```
+
+The body is optional:
+
+| Name | Type | Description |
+| -------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------ |
+| `overrides` | Partial shared field values | Values the copy takes instead of the source's. A group is merged leaf by leaf. Validated like a create |
+| `translations` | `{ [locale]: partial localized values }` | Localized values per copied language. A language the source has no translation in is a `400` |
+
+A slug you pass is used as it is, without `-copy`, and a title you pass is used without the "(Copy)" suffix. In the example above, the English copy is "Hello again" at `hello-again`, and the Polish copy is "Witaj ponownie" with the slug `witaj-ponownie` generated from that title.
+
+The response is `201` with `{ id, sourceId, row, locales, skippedLocales }`: the copy's id, the source id, the new row, the copied languages and the languages left out because they are switched off.
+
+| Status | When |
+| ------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
+| `400` | An invalid id, override or translation |
+| `403` | Missing `can_create` or `can_view` |
+| `404` | The source does not exist |
+| `409` | No free slug was found (`CONTENT_DUPLICATE_SLUG_CONFLICT`, with `field`, `locale` and `slug`), or an override collides with another record |
+| `422` | A unique field needs an override (`CONTENT_DUPLICATE_UNIQUE_REQUIRED`, with `fields`) |
+
+## Duplicate from your own code
+
+`service(c).duplicate(sourceId, options)` and `editorialService(c, { pluginId }).duplicate(sourceId, { actor, ...options })` take the same `overrides` and `translations`, plus `tx`. Both exist only when duplication is on, and both return `null` when the source does not exist.
+
+The services do not emit events or index the copy. Run `contentDuplicateEffects` from `@vitnode/core/content/server` after the transaction commits, as the generated route does:
+
+```ts
+import { contentDuplicateEffects, resolveContentActor } from "@vitnode/core/content/server";
+
+const { editorialService } = postContent;
+if (!editorialService) throw new Error("Articles have no editorial features.");
+
+const pluginId = CONFIG_PLUGIN.pluginId;
+const actor = resolveContentActor(c);
+const outcome = await editorialService(c, { pluginId }).duplicate(sourceId, {
+ actor,
+});
+
+if (outcome) {
+ await contentDuplicateEffects(
+ c,
+ postContent,
+ { kind: "editorial", outcome },
+ { actorUserId: actor.userId, pluginId },
+ );
+}
+```
+
+The effects emit `content.blog.post.created` with `duplicatedFromId`, one `translation_created` per copied language, and then `content.blog.post.duplicated`. They also add the copy to the search index as a private draft. See [Events](/docs/content-engine/events).
+
+## Check the result
+
+Duplicate "Hello world" and go back to the list. "Hello world (Copy)" is a **Draft**, and `/blog/hello-world-copy` answers `404` until you publish it. Open the original's **History** and you'll find no new revision. As far as the original knows, nothing happened.
diff --git a/apps/web/content/docs/content-engine/editorial.mdx b/apps/web/content/docs/content-engine/editorial.mdx
index d4c96eeb2a..8e3bf659fd 100644
--- a/apps/web/content/docs/content-engine/editorial.mdx
+++ b/apps/web/content/docs/content-engine/editorial.mdx
@@ -64,7 +64,7 @@ The migration adds a `version` column to `example_articles`. Revisions, schedule
## Revisions
-Every create, update, publish, unpublish and restore stores a snapshot in `core_content_revisions`. `revisions.retention` keeps the newest snapshots per record, 50 by default and at most 500.
+Every create, update, publish, unpublish and restore stores a snapshot in `core_content_revisions`, and so does every hide and unhide with [`visibility`](/docs/content-engine/content-visibility). `revisions.retention` keeps the newest snapshots per record, 50 by default and at most 500.
To see them, open the row's **More actions** menu in the AdminCP list and choose **History**. Each version shows who saved it and when, and **Show changes** lists the fields it changed:
@@ -75,7 +75,7 @@ To see them, open the row's **More actions** menu in the AdminCP list and choose
alt="History of this Article dialog: v3 by Tom Becker expanded to show the title change from Spring menu launch to Spring menu launches Monday and Featured switched on, with Restore buttons on v2 and v1"
/>
-**Restore** puts that version's field values back as a new version, so nothing in between is lost and the publication status stays as it is. It needs `can_restore` and emits `content.example.article.restored`. Anyone with the record open in [live editing](/docs/content-engine/live-editing) gets a notice and a reloaded form.
+**Restore** puts that version's field values back as a new version, so nothing in between is lost. The publication status and the [hidden](/docs/content-engine/content-visibility) state stay as they are. It needs `can_restore` and emits `content.example.article.restored`. Anyone with the record open in [live editing](/docs/content-engine/live-editing) gets a notice and a reloaded form.
## Safe concurrent edits
@@ -146,5 +146,6 @@ A few rules keep schedules sane:
- A time up to two minutes in the past is accepted. Anything older fails with `CONTENT_SCHEDULE_IN_PAST`.
- An unpublish cannot come before a pending publish (`CONTENT_SCHEDULE_ORDER`).
- Booking emits `content.example.article.scheduled` and cancelling emits `schedule_cancelled`. When the time comes, the usual `published` or `unpublished` event carries the `scheduleId`.
+- A scheduled publish of a [hidden](/docs/content-engine/content-visibility) record leaves it hidden, so it stays off the public site until someone unhides it.
If a separate front end caches pages, [Notify a separate front end](/docs/content-engine/caching#notify-a-separate-front-end) tells it about the change.
diff --git a/apps/web/content/docs/content-engine/events.mdx b/apps/web/content/docs/content-engine/events.mdx
index e2100951a4..d7f2efea66 100644
--- a/apps/web/content/docs/content-engine/events.mdx
+++ b/apps/web/content/docs/content-engine/events.mdx
@@ -14,7 +14,7 @@ Which events exist depends on what the definition enables. `example.category` de
| Action | Payload | Needs |
| --------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------ |
-| `created` | `{ contentId }` | always |
+| `created` | `{ contentId, duplicatedFromId? }` | always |
| `updated` | `{ contentId, changedFields }` | always |
| `deleted` | `{ contentId }` | always |
| `published` | `{ contentId, publishedAt, scheduledBy?, scheduleId? }` | `publication` |
@@ -30,9 +30,15 @@ Which events exist depends on what the definition enables. `example.category` de
| `translation_restored` | `{ contentId, locale, languageId, version, changedFields, revisionId, restoredFromRevisionId }` | `localization` + `editorial` |
| `delivery_slug_changed` | `{ contentId, slug, previousSlug, previousPath, canonicalPath, locale }` | `delivery` |
| `delivery_redirect_created` | `{ contentId, previousSlug, previousPath, canonicalPath, locale }` | `delivery` |
+| `duplicated` | `{ actorUserId, contentId, contentTypeId, sourceId }` | `duplication` |
+| `hidden` | `{ actorUserId, contentId, hiddenAt }` | `visibility` |
+| `unhidden` | `{ actorUserId, contentId }` | `visibility` |
A few payload details that change what a listener does:
+- `contentId` has the type of the content type's [id strategy](/docs/content-engine/id-strategy): a `number` for `serial`, a `string` for `uuid` and `bigint`. A bigint id arrives as its exact decimal string.
+- A [duplicate](/docs/content-engine/duplicate-content) emits the copy's `created` with `duplicatedFromId`, one `translation_created` per copied language, then `duplicated`. `duplicatedFromId` is absent on an ordinary create.
+- `hidden` and `unhidden` never replace `published` or `unpublished`, because [hiding](/docs/content-engine/content-visibility) does not change the status.
- `changedFields` lists only the fields whose value actually moved, typed as the content type's own field names. On translation events it names localized fields only.
- `restored` replaces `updated` for a rollback, so a listener that cares about field changes should handle both.
- `publishedAt` is when the record first went live. It is never rewritten, and it can be missing, so guard for `undefined`.
diff --git a/apps/web/content/docs/content-engine/fields.mdx b/apps/web/content/docs/content-engine/fields.mdx
index 3b122e8ec7..bc19a626e8 100644
--- a/apps/web/content/docs/content-engine/fields.mdx
+++ b/apps/web/content/docs/content-engine/fields.mdx
@@ -58,7 +58,7 @@ The second half holds the references: a user picker, two file dropzones and a re
| `field.slug()` | `varchar(maxLength)`, 160 by default, unique | Text input | Yes |
| `field.user()` | `integer` referencing `core_users.id` | User picker | No |
| `field.file()` | `integer` referencing `core_files.id` | File dropzone | No |
-| `field.relation()` | `integer` referencing the target table | Search picker | No |
+| `field.relation()` | The target's key type, referencing its table | Search picker | No |
| `field.group()` | One column per leaf | A fieldset with the leaf controls | Yes, as a whole |
| `field.repeatable()` | A child table | A list of rows you can add, move, remove | No |
| `field.blocks()` | `jsonb`, `NOT NULL DEFAULT '[]'` | Not in the form; edited as widgets | Yes |
@@ -228,7 +228,7 @@ category: field.relation({ required: true, onDelete: "restrict", target: () => c
| `min` | `number` | No | | Fewest targets, 1 to 500. Needs `multiple` |
| `onDelete` | `"restrict"` \| `"cascade"` \| `"set null"` | No | `"restrict"` | What deleting the target does. `"set null"` needs a nullable single relation |
-A single relation must be `required` or `nullable`. A to-many relation can be neither. [Relations](/docs/content-engine/relations) shows the model wiring and the junction tables.
+A single relation must be `required` or `nullable`. A to-many relation can be neither. The column has the type of the target's key: `integer`, `uuid` or `bigint`, depending on its [`idStrategy`](/docs/content-engine/id-strategy). [Relations](/docs/content-engine/relations) shows the model wiring and the junction tables.
## Group
diff --git a/apps/web/content/docs/content-engine/id-strategy.mdx b/apps/web/content/docs/content-engine/id-strategy.mdx
new file mode 100644
index 0000000000..7612ce1695
--- /dev/null
+++ b/apps/web/content/docs/content-engine/id-strategy.mdx
@@ -0,0 +1,117 @@
+---
+title: Record ID strategies
+description: Key VitNode Content Engine records by serial integers, UUIDs or bigint, and see how those ids look in Postgres, JSON, URLs, relations and your own code.
+icon: KeyRound
+---
+
+`idStrategy` decides the type of a content type's primary key. The default, `"serial"`, is an auto-incrementing integer. `"uuid"` gives random ids that reveal nothing about how many records exist. `"bigint"` gives integers that will not run out. Pick it when you create the content type, because changing it later means a [hand-written data migration](#change-the-strategy-later), and nobody enjoys those.
+
+The example plugin keys its tags by UUID:
+
+```ts title="plugins/example/src/content/tag.ts"
+export const tagContentType = defineContentType({
+ id: "example.tag",
+ tableName: "example_tags",
+ idStrategy: "uuid", // [!code ++]
+ localization: { defaultLocale: "en", fallback: "default" },
+ publication: true,
+ fields: {
+ name: field.text({ localized: true, required: true, minLength: 1, maxLength: 100 }),
+ slug: field.slug({ localized: true, source: "name" }),
+ // category and relatedTags relations
+ },
+ // editorial, visibility, duplication, publicApi and admin
+});
+```
+
+## Strategies
+
+| Strategy | Postgres key | In JSON and URLs | In TypeScript |
+| -------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------- |
+| `"serial"` (default) | `serial`, up to 2,147,483,647 | A number: `42` | `number` |
+| `"uuid"` | `uuid`, `DEFAULT gen_random_uuid()` | A lowercase string: `"047d2c6c-1d86-47e2-bcd3-2df9f5359541"` | `string` |
+| `"bigint"` | `bigint GENERATED BY DEFAULT AS IDENTITY`, up to 9,223,372,036,854,775,807 | A decimal string: `"9007199254740994"` | `string` |
+
+Choose by what the ids are for:
+
+- **`serial`** suits most content. Ids are short and readable in URLs and logs. The blog's articles and categories use it.
+- **`uuid`** suits content whose ids should not be guessable or countable, or records created in several places that must not collide. The example plugin's `example.tag` uses it.
+- **`bigint`** suits tables that may outgrow two billion rows, such as events or logs. The example plugin's `example.event` uses it.
+
+Both example types appear in **AdminCP → Example → Tags** and **Events**, and their edit links carry the UUID or the decimal string, such as `/admin/content/example/event/9007199254740994/edit`.
+
+### Why bigint ids are strings
+
+A JavaScript number holds integers exactly only up to 2^53 − 1 (`9007199254740991`). A bigint key can be much larger, and a larger id read as a number is silently rounded to a different record: `Number("9007199254740993")` is `9007199254740992`. VitNode never converts a bigint id through `Number`. Drizzle reads the column in `string` mode, and every API, event, cursor and AdminCP URL carries the exact decimal string.
+
+Once the `example_events` id sequence is past 2^53, the public API still returns every id intact:
+
+```bash
+curl "http://localhost:3000/api/@vitnode/example/content/events/big-launch"
+```
+
+```json title="Response (trimmed)"
+{
+ "id": "9007199254740994",
+ "title": "Big launch",
+ "slug": "big-launch",
+ "primaryTag": { "id": "047d2c6c-1d86-47e2-bcd3-2df9f5359541" },
+ "tags": ["047d2c6c-1d86-47e2-bcd3-2df9f5359541"]
+}
+```
+
+`primaryTag` and `tags` point at `example.tag` records, so they carry UUIDs. Keep bigint ids as strings in your own code too.
+
+## Valid ids
+
+Every route that takes an id parses it with the content type's strategy before touching the database. Anything else answers `400`, never a database error:
+
+| Strategy | Accepted | Refused, for example |
+| -------- | ---------------------------------------------------------------------------------------- | -------------------------------------- |
+| `serial` | A positive integer up to 2,147,483,647, or its digits in a URL | `abc`, `0012`, `-1` |
+| `bigint` | Positive decimal digits up to 9,223,372,036,854,775,807, without a sign or leading zeros | `0012`, `-1`, `9223372036854775808` |
+| `uuid` | Lowercase, hyphenated 8-4-4-4-12 hex | An uppercase UUID, `not-a-uuid`, `123` |
+
+Each record has exactly one spelling, so one record is never cached or indexed under two keys.
+
+## Where ids appear
+
+Every Content Engine feature works with all three strategies: the public API, the AdminCP lists, editors, pickers and edit links, [public pages](/docs/content-engine/public-pages) and sitemaps, previews, schedules, revisions, [live editing](/docs/content-engine/live-editing), events, search, pagination cursors, [duplicate](/docs/content-engine/duplicate-content) and [hide](/docs/content-engine/content-visibility).
+
+- **Relations** use the key type of the record they point at. A bigint event that links to uuid tags gets a `uuid` foreign key and a `bigint`-to-`uuid` junction table. See [Relations across id strategies](/docs/content-engine/relations#relations-across-id-strategies).
+- **Shared core tables** that hold records of any content type, such as revisions, schedules, slug history, live editing drafts and the search index, store the id as text in a `varchar(64)` `itemId` column. See [Database](/docs/content-engine/database#ids-and-shared-tables).
+- **Events** type `contentId` by strategy: `number` for serial, `string` for uuid and bigint.
+- **Sitemaps** page through records in key order. For a uuid content type that order is lexical, not creation order, and every record still appears once.
+- **Repeatable rows** keep their own `serial` ids, whatever the owner uses. User and file references stay integers.
+
+## Helpers
+
+Import these from `@vitnode/core/content` when your own code handles ids:
+
+| Helper | Returns | Use it to |
+| -------------------------------------- | -------------------- | ---------------------------------------------------------------------------- |
+| `ContentIdOf` | `number` or `string` | Type an id of one content type |
+| `ContentId` | `number \| string` | Type an id in code that handles any content type |
+| `parseContentIdOf(definition, value)` | The id, or `null` | Validate an id from a request, a job payload or a URL |
+| `parseContentId(strategy, value)` | The id, or `null` | The same, when you hold only the strategy |
+| `contentIdParamSchema(strategy)` | A Zod schema | Validate a path or query parameter. A serial id becomes a number |
+| `contentIdSchema(strategy)` | A Zod schema | Validate an id inside a JSON body |
+| `contentAnyIdSchema` | A Zod schema | Accept an id of any strategy, never rounding a bigint |
+| `contentIdKey(id)` | `string` | Store an id in a text column, cache key or log. Serial ids keep their digits |
+| `contentIdFromKey(strategy, key)` | The id, or `null` | Turn a stored key back into an id |
+| `compareContentIds(strategy, a, b)` | `number` | Sort ids the way Postgres does |
+
+`CONTENT_SERIAL_MAX` (`2147483647`) and `CONTENT_BIGINT_MAX` (`"9223372036854775807"`) are exported too. A custom route that reads an id is shown in [Services](/docs/content-engine/services#hide-duplicate-and-content-ids).
+
+## Change the strategy later
+
+The strategy is part of the table's schema, and the engine does not convert existing data. Don't change `idStrategy` on a content type that has records and then run `db:migrate`. The generated SQL cannot turn integer keys into UUIDs.
+
+To switch a live content type, write the data migration yourself:
+
+1. Add the new key column and fill it for every row.
+2. Convert every column that references the old key: to-one relation columns in other content types, junction tables (`itemId` and `relatedItemId`), the translations table's `itemId` and repeatable child tables' `itemId`.
+3. Rewrite the keys stored for that content type in the shared tables: `core_content_revisions`, `core_content_schedules`, `core_content_slug_history`, `core_search_index`, `core_content_drafts`, `core_content_field_locks`, `core_content_documents` and `core_ai_translation_sources`.
+4. Swap the primary key and foreign key constraints, then change `idStrategy` and check that generating migrations again produces no further changes.
+
+Old URLs and API clients that stored the previous ids stop working, so plan redirects if ids appear in public URLs. Creating a new content type and copying the records into it is often simpler.
diff --git a/apps/web/content/docs/content-engine/index.mdx b/apps/web/content/docs/content-engine/index.mdx
index eff126206e..7f2c1a263d 100644
--- a/apps/web/content/docs/content-engine/index.mdx
+++ b/apps/web/content/docs/content-engine/index.mdx
@@ -7,7 +7,7 @@ icon: Boxes
import { ImgDocs } from "@/components/fumadocs/img";
import articlesList from "./index-articles-list.webp";
-The Content Engine turns one TypeScript definition into structured content for your plugin. You describe the fields of an article or a category, and VitNode generates the database table, Zod validation, staff-only API routes, staff permissions and AdminCP screens. Optional blocks add drafts, a public API, pages with SEO metadata, revisions, scheduling, live editing, translations and search.
+The Content Engine turns one TypeScript definition into structured content for your plugin. You describe the fields of an article or a category, and VitNode generates the database table, Zod validation, staff-only API routes, staff permissions and AdminCP screens. Optional blocks add drafts, a public API, pages with SEO metadata, revisions, scheduling, live editing, translations, search, hiding and duplication.
This is the whole definition behind the example plugin's **Categories** screen:
@@ -53,6 +53,8 @@ Its sibling `example.article` turns on more blocks. Same engine, more fields, a
| `liveEditing` | Field locks, an autosaved shared draft and presence in the AdminCP edit form |
| `localization` | A translations table and per-language fields and publishing |
| `search` | Records in the site [search](/docs/content-engine/search) index |
+| `visibility` | **Hide** and **Unhide** actions and a `can_hide` permission |
+| `duplication` | A **Duplicate** action that copies a record into a new draft |
Content types live in code and in your migrations, not in the database. There is no screen for creating a content type at runtime.
@@ -71,6 +73,9 @@ Content types live in code and in your migrations, not in the database. There is
| Store and render formatted text | [Rich text](/docs/content-engine/rich-text) |
| Keep revisions, share previews or schedule publishing | [Editorial](/docs/content-engine/editorial) |
| Let several editors work on one record at the same time | [Live editing](/docs/content-engine/live-editing) |
+| Take a record off the public site without unpublishing | [Hide content](/docs/content-engine/content-visibility) |
+| Let editors copy a record as a new draft | [Duplicate content](/docs/content-engine/duplicate-content) |
+| Key records by UUID or bigint instead of serial integers | [Record ID strategies](/docs/content-engine/id-strategy) |
| Change list columns, form sections or field components | [AdminCP](/docs/content-engine/admincp) |
| Read and write content from your own API routes | [Services](/docs/content-engine/services) |
| React to created, updated or published records | [Events](/docs/content-engine/events) |
diff --git a/apps/web/content/docs/content-engine/live-editing-api.mdx b/apps/web/content/docs/content-engine/live-editing-api.mdx
index f774319c1f..0b1998a046 100644
--- a/apps/web/content/docs/content-engine/live-editing-api.mdx
+++ b/apps/web/content/docs/content-engine/live-editing-api.mdx
@@ -117,6 +117,8 @@ Rich text documents are [Yjs](https://yjs.dev) documents, one per record, field
| `core_content_field_locks` | Active field locks with their holder and expiry |
| `core_content_documents` | The Yjs state of each rich text field, per record and language |
+Each table keys the record by its id as text in a `varchar(64)` `itemId`, so live editing works with every [id strategy](/docs/content-engine/id-strategy). The socket accepts a uuid or bigint id and checks it against the content type's strategy, refusing a malformed one.
+
The daily `content-editorial-cleanup` [cron job](/docs/dev/cron) removes expired locks, documents untouched for 30 days, and drafts untouched for 30 days whose record has moved on since. A stale draft whose record has not changed is kept, because it is somebody's unsaved work. When an editor's last tab leaves a record, their locks go too.
## Use live state in a custom form layout
@@ -149,7 +151,7 @@ Register it with `forms: { layout: ArticleFormLayout }` in the type's `contentTy
| `ContentLivePresence` | Avatars of everyone else in the record. `max` sets how many show before **+N**, 5 by default |
| `ContentLiveFieldPresence` | Avatars of the people in one `field` and `locale` |
| `ContentLiveLanguagePresence` | Who is working in one `locale` |
-| `ContentLiveStatus` | The autosave state: **Saving…**, **Draft saved at…**, **Draft not saved**, **Unsaved changes** |
+| `ContentLiveStatus` | The autosave state: **Saving…**, **Autosaved 5 minutes ago** (with an amber dot while the draft is not saved into the record), **Autosave failed** |
| `useContentLive()` | The session: `session.members`, `session.locks`, `status` (`saving`, `savedAt`, `failed`, `dirty`) and `coEditing` |
| `useContentRichTextReplace()` | `(field, locale, document) => void` that replaces a rich text field through the shared editor, so everyone sees it and it can be undone. `null` while rich text is not co-edited |
diff --git a/apps/web/content/docs/content-engine/live-editing.mdx b/apps/web/content/docs/content-engine/live-editing.mdx
index e3074ec0be..d4e98fb80c 100644
--- a/apps/web/content/docs/content-engine/live-editing.mdx
+++ b/apps/web/content/docs/content-engine/live-editing.mdx
@@ -58,9 +58,9 @@ A lock lasts 60 seconds and renews every 20 seconds while the editor stays in th
### Autosave and the shared draft
-About 1.5 seconds after you stop typing in a field you hold, the value is saved to the record's draft. The header shows **Saving…** and then **Draft saved at 14:32**, or **Draft not saved** when the write failed. Next to it, **Unsaved changes** stays until someone saves the draft into the record.
+About 1.5 seconds after you stop typing in a field you hold, the value is saved to the record's draft. Close the tab and it's still there, but readers don't see it yet. The header shows **Saving…** and then **Autosaved just now**, later **Autosaved 5 minutes ago**, or **Autosave failed** when the write failed. An amber dot in front means the draft holds changes the record doesn't have yet, and it stays until someone clicks **Save changes**. Hover it for a reminder.
-Changed your mind? **Discard** next to **Unsaved changes** throws the draft away after you confirm, and the form goes back to the last saved version. It is a team draft, so everyone editing the record goes back too, and they get a short note saying so.
+Changed your mind? **Discard** next to the autosave time throws the draft away after you confirm, and the form goes back to the last saved version. It is a team draft, so everyone editing the record goes back too, and they get a short note saying so.
There is one draft per record and language, shared by the whole team. When you open the record, you see the draft, not only what was last saved. **Save** commits it through the usual [version check](/docs/content-engine/editorial#safe-concurrent-edits) and creates one revision. Autosave itself never creates revisions, emits no events and leaves search and caches alone. [Preview links](/docs/content-engine/editorial#preview-links) also ignore the draft until someone saves.
@@ -86,6 +86,6 @@ Restoring a revision or deleting the record throws away its drafts, locks and sh
1. Sign in at `/admin` as two staff members with `can_edit`, for example in two browser profiles.
2. Open the same record's edit form in both.
3. Click into **Title** in one window. The other window shows the outline and name tag, and the field turns read-only there.
-4. Type a few words and wait two seconds. The other window shows the new value, and the header of the first says **Draft saved at…**.
+4. Type a few words and wait two seconds. The other window shows the new value, and the header of the first says **Autosaved just now**.
Building your own form layout, or calling the lock and draft routes yourself? See the [live editing API](/docs/content-engine/live-editing-api).
diff --git a/apps/web/content/docs/content-engine/localization.mdx b/apps/web/content/docs/content-engine/localization.mdx
index 2ab720ef0f..2b8bbdf45f 100644
--- a/apps/web/content/docs/content-engine/localization.mdx
+++ b/apps/web/content/docs/content-engine/localization.mdx
@@ -117,7 +117,7 @@ This is the blog plugin's category dialog, where `name` is `field.text({ localiz
Saving the form sends the shared fields and every language you typed into in one request: `POST /localized` for a new record, `PUT /{id}/localized` for an existing one. The server writes them in one transaction. A new record must include its default language. A Polish-only edit does not touch the shared row, so it does not bump the record's version or expire the English cache.
-With publication, each language has its own status. Publishing the record publishes its languages too, and you can then unpublish one language alone. A translation is public only when both the record and that translation are published. With `editorial`, each language also keeps its own revisions and preview links.
+With publication, each language has its own status. Publishing the record publishes its languages too, and you can then unpublish one language alone. A translation is public only when both the record and that translation are published, and the record is not [hidden](/docs/content-engine/content-visibility). With `editorial`, each language also keeps its own revisions and preview links.
The example plugin registers `example.localized-article` on the API only, so
diff --git a/apps/web/content/docs/content-engine/meta.json b/apps/web/content/docs/content-engine/meta.json
index 9faf979039..950813ba38 100644
--- a/apps/web/content/docs/content-engine/meta.json
+++ b/apps/web/content/docs/content-engine/meta.json
@@ -17,9 +17,12 @@
"relations",
"localization",
"rich-text",
+ "id-strategy",
"---Editorial---",
"editorial",
"live-editing",
+ "content-visibility",
+ "duplicate-content",
"---Customize---",
"admincp",
"services",
diff --git a/apps/web/content/docs/content-engine/production.mdx b/apps/web/content/docs/content-engine/production.mdx
index 271f6fec13..759a268d26 100644
--- a/apps/web/content/docs/content-engine/production.mdx
+++ b/apps/web/content/docs/content-engine/production.mdx
@@ -36,7 +36,7 @@ publicApi: {
## Grant the right permissions
-- [ ] **Give staff only what they need** in **AdminCP → Staff**. Each content type gets `can_view`, `can_create`, `can_edit` and `can_delete`, plus `can_publish` with `publication` and `can_restore` with `editorial`.
+- [ ] **Give staff only what they need** in **AdminCP → Staff**. Each content type gets `can_view`, `can_create`, `can_edit` and `can_delete`, plus `can_publish` with `publication`, `can_restore` with `editorial` and `can_hide` with [`visibility`](/docs/content-engine/content-visibility).
- [ ] **Guard your own admin routes.** Generated routes check their permissions themselves. A custom route next to them needs its own `adminStaffPermission`, as shown in [Services](/docs/content-engine/services#example-3-a-feature-this-article-button).
## Ship the migration
diff --git a/apps/web/content/docs/content-engine/public-api.mdx b/apps/web/content/docs/content-engine/public-api.mdx
index 1efadaa73e..cf4d0ae927 100644
--- a/apps/web/content/docs/content-engine/public-api.mdx
+++ b/apps/web/content/docs/content-engine/public-api.mdx
@@ -251,6 +251,6 @@ All routes are `GET` and live under `/api/{pluginId}/content/{publicApi.path}`.
| `/delivery/item/{id}` | Canonical URL and SEO metadata for one record, only with delivery |
| `/delivery/sitemap` | Sitemap entries, only with `delivery.sitemap` |
-The list accepts `first` or `last` (at most 50, also the default), `cursor`, `page`, `search` over `searchableFields`, `orderBy`, `order` and one parameter per filterable field. A record is public only when its `status` is `published` and its `publishedAt` is set and not later than the database clock. Every `publicApi` option is in the [content type reference](/docs/content-engine/reference#publicapi).
+The list accepts `first` or `last` (at most 50, also the default), `cursor`, `page`, `search` over `searchableFields`, `orderBy`, `order` and one parameter per filterable field. A record is public only when its `status` is `published`, its `publishedAt` is set and not later than the database clock, and it is not [hidden](/docs/content-engine/content-visibility). Every `publicApi` option is in the [content type reference](/docs/content-engine/reference#publicapi).
Next, give each article a web page with [Public pages](/docs/content-engine/public-pages), or see how these reads are cached in [Caching](/docs/content-engine/caching).
diff --git a/apps/web/content/docs/content-engine/public-pages.mdx b/apps/web/content/docs/content-engine/public-pages.mdx
index a1af3387d3..4ab984be1c 100644
--- a/apps/web/content/docs/content-engine/public-pages.mdx
+++ b/apps/web/content/docs/content-engine/public-pages.mdx
@@ -235,7 +235,7 @@ curl http://localhost:3000/api/@vitnode/example/content/articles/delivery/resolv
## Keep old URLs working
-Renaming a slug breaks links people already shared. With `delivery.redirects`, the old slug is stored in `core_content_slug_history` when an editor changes it, and the resolve route answers `{ "type": "redirect", "status": 308, "location": "/articles/new-slug" }`. `contentDeliveryPage` turns that into a `308` redirect.
+Renaming a slug breaks links people already shared. With `delivery.redirects`, the old slug is stored in `core_content_slug_history` when an editor changes it, and the resolve route answers `{ "type": "redirect", "status": 308, "location": "/articles/new-slug" }`. `contentDeliveryPage` turns that into a `308` redirect. While a record is [hidden](/docs/content-engine/content-visibility), its page and its old slugs answer `404` instead.
## Sitemap entries
diff --git a/apps/web/content/docs/content-engine/reference.mdx b/apps/web/content/docs/content-engine/reference.mdx
index 41a05f1b72..2d1490eae4 100644
--- a/apps/web/content/docs/content-engine/reference.mdx
+++ b/apps/web/content/docs/content-engine/reference.mdx
@@ -50,40 +50,43 @@ Many of these rules are type errors too, so your editor often complains before t
## Top-level options
-| Name | Type | Required | Default | Description |
-| -------------- | ----------------------------------- | -------- | ------- | ------------------------------------------------------------------------------- |
-| `id` | `string` | Yes | | `plugin.entity`, such as `example.article`. See [Names](#names) |
-| `tableName` | `string` | Yes | | Postgres table name, such as `example_articles` |
-| `fields` | `Record` | Yes | | At least one field built with a [`field.*` helper](/docs/content-engine/fields) |
-| `admin` | [`admin`](#admin) | No | `{}` | AdminCP path, list, form and title |
-| `publication` | `boolean` | No | off | Draft and published states |
-| `publicApi` | [`publicApi`](#publicapi) | No | off | Read-only public routes |
-| `delivery` | `true` \| [`delivery`](#delivery) | No | off | Public page URLs, SEO metadata, redirects and sitemap |
-| `editorial` | `true` \| [`editorial`](#editorial) | No | off | Revisions, preview links and scheduling |
-| `liveEditing` | `boolean` | No | `false` | [Live editing](#liveediting) in the AdminCP. Needs `editorial` |
-| `localization` | [`localization`](#localization) | No | off | A translation table for `localized: true` fields |
-| `search` | [`search`](#search) | No | off | Site search indexing |
-| `indexes` | [`indexes`](#indexes) | No | `[]` | Extra database indexes |
-
-A feature block is on when it is present. `publicApi`, `localization` and `search` take an options object. `publication` and `liveEditing` are `true`, and `editorial` and `delivery` take `true` or an options object. Leave a block out, or set it to `false`, to keep it off. Write `true` or the object directly rather than a `boolean` variable, because the generated types read the literal to decide which columns and routes exist.
+| Name | Type | Required | Default | Description |
+| -------------- | --------------------------------------- | -------- | ---------- | ------------------------------------------------------------------------------- |
+| `id` | `string` | Yes | | `plugin.entity`, such as `example.article`. See [Names](#names) |
+| `tableName` | `string` | Yes | | Postgres table name, such as `example_articles` |
+| `fields` | `Record` | Yes | | At least one field built with a [`field.*` helper](/docs/content-engine/fields) |
+| `idStrategy` | `"serial"` \| `"uuid"` \| `"bigint"` | No | `"serial"` | Type of the primary key. See [`idStrategy`](#idstrategy) |
+| `admin` | [`admin`](#admin) | No | `{}` | AdminCP path, list, form and title |
+| `publication` | `boolean` | No | off | Draft and published states |
+| `publicApi` | [`publicApi`](#publicapi) | No | off | Read-only public routes |
+| `delivery` | `true` \| [`delivery`](#delivery) | No | off | Public page URLs, SEO metadata, redirects and sitemap |
+| `editorial` | `true` \| [`editorial`](#editorial) | No | off | Revisions, preview links and scheduling |
+| `liveEditing` | `boolean` | No | `false` | [Live editing](#liveediting) in the AdminCP. Needs `editorial` |
+| `localization` | [`localization`](#localization) | No | off | A translation table for `localized: true` fields |
+| `search` | [`search`](#search) | No | off | Site search indexing |
+| `visibility` | `boolean` | No | off | [Hide and unhide](#visibility) records. Needs `publication` |
+| `duplication` | `true` \| [`duplication`](#duplication) | No | off | A [Duplicate](#duplication) action that copies a record into a new draft |
+| `indexes` | [`indexes`](#indexes) | No | `[]` | Extra database indexes |
+
+A feature block is on when it is present. `publicApi`, `localization` and `search` take an options object. `publication`, `liveEditing` and `visibility` are `true`, and `editorial`, `delivery` and `duplication` take `true` or an options object. Leave a block out, or set it to `false`, to keep it off. Write `true` or the object directly rather than a `boolean` variable, because the generated types read the literal to decide which columns and routes exist.
### Names
-| Name | Rule |
-| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `id` | Matches `/^[a-z0-9]+(?:\.[a-z0-9-]+)+$/`: lowercase, at least two dot-separated segments, dashes allowed after the first. At most 100 characters with `editorial` or `search` |
-| `tableName` | snake_case, starts with a letter, at most 63 characters |
-| Field names | camelCase, start with a lowercase letter |
-| Reserved fields | `id`, `createdAt` and `updatedAt` always. `status` and `publishedAt` with `publication`. `version` with `editorial` |
-| Reserved for the list route | `cursor`, `first`, `last`, `order`, `orderBy` and `search`, because they are query parameters of the generated list route. Checked at plugin registration |
-| Localized fields | Cannot be named `itemId`, `languageId`, `version`, `createdAt` or `updatedAt` (translation table columns). A localized type cannot expose a public field called `locale` |
+| Name | Rule |
+| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `id` | Matches `/^[a-z0-9]+(?:\.[a-z0-9-]+)+$/`: lowercase, at least two dot-separated segments, dashes allowed after the first. At most 100 characters with `editorial` or `search` |
+| `tableName` | snake_case, starts with a letter, at most 63 characters |
+| Field names | camelCase, start with a lowercase letter |
+| Reserved fields | `id`, `createdAt` and `updatedAt` always. `status` and `publishedAt` with `publication`. `version` with `editorial`. `hiddenAt`, `hiddenBy` and `visibility` with `visibility` |
+| Reserved for the list route | `cursor`, `first`, `last`, `order`, `orderBy` and `search`, because they are query parameters of the generated list route. Checked at plugin registration |
+| Localized fields | Cannot be named `itemId`, `languageId`, `version`, `createdAt` or `updatedAt` (translation table columns). A localized type cannot expose a public field called `locale` |
Two names are derived from the id:
- The **entity key** is the id without its first segment, with further dots turned into `_`. `example.article` becomes `article`. Strings live under `{pluginId}.content.{entityKey}`, for example `@vitnode/example.content.article`.
- The **permission module** is the entity key with anything outside `a-z0-9` turned into `_`, so `example.localized-article` becomes `localized_article`. Permissions are named `@vitnode/example:article:can_view`. Override it with `admin.permissionModule`.
-Every content type gets `can_view`, `can_create`, `can_edit` and `can_delete`. `publication` adds `can_publish` and `editorial` adds `can_restore`.
+Every content type gets `can_view`, `can_create`, `can_edit` and `can_delete`. `publication` adds `can_publish`, `editorial` adds `can_restore` and `visibility` adds `can_hide`. Duplicating needs `can_create` and `can_view`, so `duplication` adds no permission.
## `admin`
@@ -251,6 +254,7 @@ Keeps published records in the [site search index](/docs/dev/search). Drafts nev
| `pathTemplate` | `string` | Yes | The result URL. Starts with `/`, contains `{slug}` exactly once, at most 512 characters |
| `descriptionField` | field name | No | Shown in result excerpts. Text, textarea or richText |
| `authorField` | field name | No | A top-level `field.user()` credited in the index. It does not have to be public |
+| `imageField` | field name | No | A shared single `field.file()` shown as the result image. Must be in `publicApi.fields` |
Every field except `authorField` must be in `publicApi.fields`, or a result snippet would leak a private value. Leave the language out of `pathTemplate`, because your [i18n settings](/docs/dev/i18n) add the locale prefix.
@@ -264,6 +268,43 @@ search: {
},
```
+## `visibility`
+
+`visibility: true` adds the nullable `hiddenAt` and `hiddenBy` columns, the `can_hide` permission, the `POST /{id}/hide` and `POST /{id}/unhide` staff routes and a **Visibility** filter in the AdminCP list. A hidden record is left out of every public read while it keeps its `status` and `publishedAt`. It has no other options. Guide: [Hide content](/docs/content-engine/content-visibility).
+
+```ts title="plugins/blog/src/content/post.ts"
+publication: true,
+visibility: true,
+```
+
+## `duplication`
+
+Adds a **Duplicate** action and the `POST /{id}/duplicate` staff route, which copy a record and its translations into a new draft. Pass `true`, or an object to change the title suffix. Guide: [Duplicate content](/docs/content-engine/duplicate-content).
+
+| Name | Type | Default | Description |
+| ------------- | --------- | ---------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `titleSuffix` | `boolean` | On when `admin.titleField` is a `field.text()` | Adds a localized "(Copy)" to the copy's title. `true` with any other title field throws |
+
+```ts title="plugins/blog/src/content/post.ts"
+duplication: true,
+```
+
+## `idStrategy`
+
+The type of the primary key. Every foreign key, junction column and translation `itemId` that points at the record takes the same type. Guide: [Record ID strategies](/docs/content-engine/id-strategy).
+
+| Value | Postgres key | In JSON |
+| -------------------- | ----------------------------------------- | ------------------ |
+| `"serial"` (default) | `serial` | A number |
+| `"uuid"` | `uuid`, `DEFAULT gen_random_uuid()` | A lowercase string |
+| `"bigint"` | `bigint GENERATED BY DEFAULT AS IDENTITY` | A decimal string |
+
+Any other value throws. Changing the strategy of a content type that already has records needs a [hand-written data migration](/docs/content-engine/id-strategy#change-the-strategy-later).
+
+```ts title="plugins/example/src/content/event.ts"
+idStrategy: "bigint",
+```
+
## `indexes`
Extra database indexes on the base table. The engine already indexes slugs, `unique: true` text fields, foreign keys, `createdAt`, `updatedAt` and `(status, publishedAt)`. A declared index on the same columns replaces the generated one instead of adding a second. Guide: [Database and migrations](/docs/content-engine/database).
@@ -313,10 +354,13 @@ Each row is a rule `defineContentType` enforces, with the start of the message i
| `delivery.seo.fallbackDescriptionField` | `delivery.seo.descriptionField` | ``delivery.seo.fallbackDescriptionField is set without `descriptionField`.`` |
| `editorial.preview` | `publicApi` | ``editorial.preview needs `publicApi: { path, fields }`.`` |
| `editorial.scheduling` | `publication` | ``editorial.scheduling needs `publication: true`.`` |
+| `visibility` | `publication` | ``visibility needs `publication: true`.`` |
+| `duplication.titleSuffix: true` | `admin.titleField` pointing at a `field.text()` | ``duplication.titleSuffix needs `admin.titleField` to be a text field`` |
| A `localized: true` field | `localization` | ``Field "title" is `localized: true` but the content type has no `localization: { defaultLocale }` block`` |
| `localization` | At least one `localized: true` field | ``localization is enabled but no field is marked `localized: true`,`` |
| Any block with an `enabled` key | Nothing: a block is on when present | `publicApi.enabled is not an option.` |
| `publication` or `liveEditing` as an object | `true` or `false` | ``publication is `true` or `false`.`` |
+| `visibility` as an object | `true` or `false` | ``visibility is `true` or `false`.`` |
| `admin.list.thumbnailField` | `admin.titleField` in `admin.list.columns` | `admin.list.thumbnailField is drawn in the title column, but admin.titleField` |
| `admin.form.sections` | No `admin.form.fields` | ``admin.form declares both `fields` and `sections`.`` |
| `admin.list.defaultOrderBy` | A system column or an `admin.list.orderableFields` entry | `admin.list.defaultOrderBy is "x", which is not in admin.list.orderableFields.` |
diff --git a/apps/web/content/docs/content-engine/relations.mdx b/apps/web/content/docs/content-engine/relations.mdx
index ca19a5a015..7c92b07555 100644
--- a/apps/web/content/docs/content-engine/relations.mdx
+++ b/apps/web/content/docs/content-engine/relations.mdx
@@ -162,6 +162,41 @@ The generated migration creates one table per junction and repeatable field.
+## Relations across id strategies
+
+A relation can point at a content type with a different [`idStrategy`](/docs/content-engine/id-strategy). The foreign key always takes the type of the key it references. The example plugin's `example.event` uses `bigint` and links to `uuid` tags and `serial` categories:
+
+```ts title="plugins/example/src/content/event.ts"
+import type { ContentRelationTarget } from "@vitnode/core/content";
+
+import { categoryContentType } from "./category";
+import { tagContentType } from "./tag";
+
+fields: {
+ primaryTag: field.relation({
+ nullable: true,
+ onDelete: "set null",
+ target: (): ContentRelationTarget<"uuid"> => tagContentType,
+ }),
+ category: field.relation({
+ nullable: true,
+ onDelete: "set null",
+ target: () => categoryContentType,
+ }),
+ tags: field.relation({ multiple: true, ordered: true, target: () => tagContentType }),
+ relatedEvents: field.relation({ multiple: true, onDelete: "cascade", self: true }),
+},
+```
+
+| Field | Column or junction table |
+| --------------- | ------------------------------------------------------------------- |
+| `primaryTag` | `uuid` column referencing `example_tags.id` |
+| `category` | `integer` column referencing `example_categories.id` |
+| `tags` | `example_events_tags` with `itemId bigint` and `relatedItemId uuid` |
+| `relatedEvents` | `example_events_related_events` with both columns `bigint` |
+
+`field.relation()` reads the target's strategy from `target`, so the API takes and returns tag ids as strings and category ids as numbers. When two content type modules import each other, TypeScript cannot infer a type through the cycle and falls back to serial. Annotate the thunk with `ContentRelationTarget<"uuid">` or `ContentRelationTarget<"bigint">`, as `primaryTag` does. At runtime, a `references` entry whose column type disagrees with the target's strategy throws and names the field.
+
## Write related values
A relation takes ids. A to-many relation and a repeatable take the whole list, which replaces what the record had:
diff --git a/apps/web/content/docs/content-engine/search.mdx b/apps/web/content/docs/content-engine/search.mdx
index 7caf0b1385..7bb1a3624b 100644
--- a/apps/web/content/docs/content-engine/search.mdx
+++ b/apps/web/content/docs/content-engine/search.mdx
@@ -55,6 +55,7 @@ export const articleContentType = defineContentType({
- `contentFields` is the searchable body. It takes at least one field and no duplicates. Text, textarea, rich text or slug fields, plus repeatable leaves such as `"faq.answer"`. Rich text is indexed as its words, never as JSON. The title always ranks higher than the body, so listing it here as well only repeats it in the excerpt.
- `pathTemplate` is the result URL. It starts with `/` and contains `{slug}` exactly once. Leave the language out, because your i18n settings add it (see [Localized content types](#localized-content-types)).
- `authorField` is optional and credits a top-level `field.user()` on [member timelines](/docs/dev/search#member-timelines).
+- `imageField` is optional and shows a `field.file()` image next to each result. See [Credit several authors and add an image](#credit-several-authors-and-add-an-image).
Every field except `authorField` must be in `publicApi.fields`. Otherwise a result snippet would leak a private value, so the definition throws instead: `search.titleField names "x", which is not in publicApi.fields.` `authorField` may stay private, which is why `author` is not in the public list above. All options are in the [reference](/docs/content-engine/reference#search).
@@ -81,16 +82,62 @@ Both buttons need the **Rebuild and clear the search index** staff permission (`
+## Credit several authors and add an image
+
+A result can show everyone who wrote the record and a picture of it, on `/search`, `/discover` and member timelines. The blog does both: an article lists all its authors and its cover image.
+
+{/* Image prompt: A VitNode search result card in light theme. Top left, three small overlapping round avatars followed by "admin, devloop_tester and aXen · Aug 15, 4:14 PM". Below, a bold title "Hello Content Engine" and two lines of grey excerpt. On the right, a rounded 16:9 cover photo thumbnail. 1200x400. */}
+
+Make the author field hold several users, add a single image field, and point `search` at both:
+
+```ts title="plugins/blog/src/content/post.ts"
+export const blogPostContentType = defineContentType({
+ fields: {
+ title: field.text({ required: true }),
+ friendlyUrl: field.slug({ source: "title" }),
+ content: field.richText(),
+ // [!code ++:6]
+ authorId: field.user({ min: 1, multiple: true, ordered: true }),
+ coverImage: field.file({
+ allowedExtensions: [".jpg", ".jpeg", ".png", ".webp", ".avif"],
+ allowedMimeTypes: ["image/jpeg", "image/png", "image/webp", "image/avif"],
+ }),
+ },
+ publication: true,
+ publicApi: {
+ path: "blog",
+ fields: ["id", "title", "friendlyUrl", "content", "coverImage"], // [!code highlight]
+ },
+ search: {
+ titleField: "title",
+ contentFields: ["title", "content"],
+ pathTemplate: "/blog/{slug}",
+ // [!code ++:2]
+ authorField: "authorId",
+ imageField: "coverImage",
+ },
+});
+```
+
+- **Authors.** With `multiple: true`, every user in the field is credited, and `ordered: true` keeps the order you pick in the editor. A result shows up to three overlapping avatars and the names in that order, such as **admin, devloop_tester and aXen**. Past three it says **admin, devloop_tester and 2 others**. Every co-author gets the record on their own timeline.
+- **Image.** `imageField` names one shared `field.file()`, not a list and not a localized field, and it must be in `publicApi.fields`, because everybody who finds the result sees it. It shows as a small 16:9 thumbnail on the right of the result, and full width above the text on phones. Records without an image show none, and a file that is not an image is skipped.
+
+The definition throws when either one points at the wrong kind of field, for example `search.imageField names "gallery", which is not a shared single field.file() on the record itself.`
+
+Adding `authorField` or `imageField` to content that already exists needs a **Reindex** of the collection, so older records pick them up. After that, changing the authors or the image re-indexes the record on save.
+
+In the API, each result carries `authors` (id, name, `nameCode`, avatar) in order, `authorIds`, and `image` with `url`, `width` and `height`, or `null`.
+
## What gets indexed and when
-Every record is in the index, but only public ones show up on `/search`. A draft is stored as a private document without a URL. With `authorField`, it appears on its author's own timeline and on the AdminCP user page, but never in public results.
+Every record is in the index, but only public ones show up on `/search`. A draft is stored as a private document without a URL. A [hidden](/docs/content-engine/content-visibility) record's document turns private the moment it is hidden, and public again when it is unhidden. With `authorField`, it appears on its author's own timeline and on the AdminCP user page, but never in public results.
-| Write | Search index |
-| ------------------------------------------------------------------------ | ----------------------------- |
-| Create, edit, publish, unpublish, restore or delete in the AdminCP | Updated right after the write |
-| A scheduled publish or unpublish | Updated when the job runs |
-| Your own route using the editorial service and `contentEditorialEffects` | Updated |
-| The plain `service` from `model.service(c)` | Not updated |
+| Write | Search index |
+| ------------------------------------------------------------------------------------------- | ----------------------------- |
+| Create, edit, publish, unpublish, restore, hide, unhide, duplicate or delete in the AdminCP | Updated right after the write |
+| A scheduled publish or unpublish | Updated when the job runs |
+| Your own route using the editorial service and `contentEditorialEffects` | Updated |
+| The plain `service` from `model.service(c)` | Not updated |
An edit rewrites the document only when an indexed field changed: the title, description, content fields, slug or author. Unpublishing keeps the document but makes it private, so the record drops out of `/search` at once. Deleting the record removes its document.
diff --git a/apps/web/content/docs/content-engine/seo.mdx b/apps/web/content/docs/content-engine/seo.mdx
index bc933238df..0a60b3fdd2 100644
--- a/apps/web/content/docs/content-engine/seo.mdx
+++ b/apps/web/content/docs/content-engine/seo.mdx
@@ -152,7 +152,8 @@ curl "http://localhost:3000/api/@vitnode/example/content/articles/delivery/sitem
- A page holds 1,000 entries by default and up to 50,000 with `?limit=`. `cursor` is the `itemId` to continue after, so pass `nextCursor` back as `?cursor=` until it is `null`.
- `lastModified` is the record's `updatedAt`, or the translation's when that is newer.
-- Records whose `noIndexField` is `true` are left out.
+- Records whose `noIndexField` is `true` are left out, and so are [hidden](/docs/content-engine/content-visibility) records.
+- Entries come in id order. For a [uuid](/docs/content-engine/id-strategy) content type that order is lexical, not creation order, and every record still appears once.
- A localized type returns one language per request. Ask for another with `?locale=`:
```bash
diff --git a/apps/web/content/docs/content-engine/services.mdx b/apps/web/content/docs/content-engine/services.mdx
index 76fbb45355..208bf74277 100644
--- a/apps/web/content/docs/content-engine/services.mdx
+++ b/apps/web/content/docs/content-engine/services.mdx
@@ -326,22 +326,109 @@ If someone saved the article after version 3 was loaded, the answer is a `409`:
Load the article again, take the new version, and retry. A job without a signed-in user passes `CONTENT_SYSTEM_ACTOR` instead of `resolveContentActor(c)`.
+## Hide, duplicate and content IDs
+
+A content type with [`visibility`](/docs/content-engine/content-visibility) or [`duplication`](/docs/content-engine/duplicate-content) adds methods to `service` and `editorialService`. They exist in the types only when the option is on, so calling `hide` on a content type without visibility is a compile error.
+
+| Method | `service` options | `editorialService` options |
+| ------------------------------------------ | ------------------------------------ | ------------------------------------------- |
+| `hide(id, options)`, `unhide(id, options)` | `{ actorUserId?, tx? }` | `{ actor, expectedVersion?, tx? }` |
+| `duplicate(sourceId, options)` | `{ overrides?, translations?, tx? }` | `{ actor, overrides?, translations?, tx? }` |
+
+Hiding a record that is already hidden returns `changed: false` and writes nothing. The editorial `hide` and `unhide` raise the version and store a revision, and the editorial `duplicate` stores a first revision for the copy and for each copied translation. All of them return `null` when the record does not exist.
+
+Like the other service methods, these emit no events. Run the effects after the transaction commits, as the generated routes do:
+
+```ts
+import { contentVisibilityEffects, resolveContentActor } from "@vitnode/core/content/server";
+
+const { editorialService } = postContent;
+if (!editorialService) throw new Error("Articles have no editorial.");
+
+const pluginId = CONFIG_PLUGIN.pluginId;
+const outcome = await editorialService(c, { pluginId }).hide(703, {
+ actor: resolveContentActor(c),
+});
+
+if (outcome) {
+ await contentVisibilityEffects(c, postContent, outcome, { pluginId });
+}
+```
+
+`contentVisibilityEffects` emits `hidden` or `unhidden`, updates the search index and the delivery data, and [notifies front ends](/docs/content-engine/caching#notify-a-separate-front-end). It does nothing for an outcome with `changed: false`. For a copy, call `contentDuplicateEffects`, shown in [Duplicate content](/docs/content-engine/duplicate-content#duplicate-from-your-own-code).
+
+### Content IDs
+
+Service methods take and return ids typed by the content type's [`idStrategy`](/docs/content-engine/id-strategy): `ContentIdOf` is `number` for a serial type and `string` for a uuid or bigint one. Never pass an id through `Number()` in code that may meet a bigint type.
+
+A custom route reads an id from the URL as text. Parse it with the content type's strategy before calling a service, so a malformed id answers `400` instead of reaching the database. The example plugin's events use bigint ids:
+
+```ts title="plugins/example/src/api/modules/events/title.route.ts"
+import { buildRoute } from "@vitnode/core/api/lib/route";
+import { parseContentIdOf } from "@vitnode/core/content";
+import { HTTPException } from "hono/http-exception";
+import { z } from "zod";
+
+import { CONFIG_PLUGIN } from "@/const";
+import { eventContentType } from "@/content/event";
+import { eventContent } from "@/database/events";
+
+export const eventTitleRoute = buildRoute({
+ pluginId: CONFIG_PLUGIN.pluginId,
+ route: {
+ method: "get",
+ path: "/{id}/title",
+ description: "The title of one published event",
+ responses: {
+ 200: {
+ content: {
+ "application/json": {
+ schema: z.object({ id: z.string(), title: z.string() }),
+ },
+ },
+ description: "The event title",
+ },
+ 400: { description: "Invalid event id" },
+ 404: { description: "Event not found" },
+ },
+ },
+ handler: async c => {
+ const id = parseContentIdOf(eventContentType, c.req.param("id"));
+ if (id === null) {
+ throw new HTTPException(400, { message: "Invalid event id." });
+ }
+
+ const { publicService } = eventContent;
+ if (!publicService) throw new Error("Events have no public API.");
+
+ const event = await publicService(c).findById(id);
+ if (!event) throw new HTTPException(404, { message: "Event not found." });
+
+ return c.json({ id, title: event.title }, 200);
+ },
+});
+```
+
+`id` is a `string` here, because `example.event` uses bigint. For a route that validates its parameters with Zod, `contentIdParamSchema(eventContentType.idStrategy)` accepts exactly what `parseContentIdOf` accepts. Code that handles content types it does not know statically uses `ContentId` (`number | string`) and `contentAnyIdSchema`. Every helper is listed in [Record ID strategies](/docs/content-engine/id-strategy#helpers).
+
## Reference
### Service methods
-`publicService` only reads: `findMany({ filters, orderBy, query })`, `findById(id)` and `findBySlug(slug)`, each limited to published records and public fields. `editorialService` only writes: `create`, `update`, `delete`, `publish`, `unpublish`, `restore`, plus `relations` and `repeatable`. `service` has everything below:
-
-| Method | Returns |
-| ---------------------------------------------- | -------------------------------------------------------------------------------- |
-| `findMany({ filters, orderBy, query, where })` | `{ edges, pageInfo }`, drafts included. `where` takes a Drizzle `SQL` condition |
-| `findById(id)` | The row, or `null` |
-| `findRowById(id)` | The row with display labels for relations and users, or `null` |
-| `findDetail(id)` | The row with relation, repeatable and file values, or `null` |
-| `create(values)` | The new row |
-| `update(id, values)` | `{ row, changedFields }`, or `null` when the id does not exist |
-| `delete(id)` | The deleted row, or `null` |
-| `publish(id)`, `unpublish(id)` | `{ changed, publishedAt, row }`, or `null`. Only with `publication` |
+`publicService` only reads: `findMany({ filters, orderBy, query })`, `findById(id)` and `findBySlug(slug)`, each limited to published records and public fields. `editorialService` only writes: `create`, `update`, `delete`, `publish`, `unpublish`, `restore`, plus `relations` and `repeatable`, and `hide`, `unhide` and `duplicate` when their option is on. `service` has everything below:
+
+| Method | Returns |
+| ---------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `findMany({ filters, orderBy, query, where })` | `{ edges, pageInfo }`, drafts included. `where` takes a Drizzle `SQL` condition |
+| `findById(id)` | The row, or `null` |
+| `findRowById(id)` | The row with display labels for relations and users, or `null` |
+| `findDetail(id)` | The row with relation, repeatable and file values, or `null` |
+| `create(values)` | The new row |
+| `update(id, values)` | `{ row, changedFields }`, or `null` when the id does not exist |
+| `delete(id)` | The deleted row, or `null` |
+| `publish(id)`, `unpublish(id)` | `{ changed, publishedAt, row }`, or `null`. Only with `publication` |
+| `hide(id)`, `unhide(id)` | `{ changed, hiddenAt, hiddenBy, row }`, or `null`. Only with `visibility` |
+| `duplicate(sourceId)` | `{ row, sourceId, translations, skippedLocales }`, or `null`. Only with `duplication` |
| `advanced(id)`, `advancedFields(id, fields)` | Values of to-many relations, repeatables and galleries |
| `options(field, search?, ids?)` | `{ value, label, color? }[]` for a relation or user picker |
| `relations.` | `add`, `remove`, `set`, `reorder`, `get` for a to-many relation |
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 e1796918ab..c18b93c20c 100644
--- a/apps/web/content/docs/dev/events/built-in-events.mdx
+++ b/apps/web/content/docs/dev/events/built-in-events.mdx
@@ -624,9 +624,14 @@ its id: `content..`. For the example plugin's `example.article`
that means `content.example.article.created`, and for the blog's `blog.post` it
means `content.blog.post.created`.
+Every payload's `contentId` (and `sourceId` and `duplicatedFromId`) has the
+content type's [id type](/docs/content-engine/id-strategy): a `number` for the
+default `serial` strategy, a `string` for `uuid` and `bigint`. A bigint id
+arrives as its exact decimal string, so never pass it through `Number()`.
+
Which actions exist depends on what the definition opts into. A content type
that declares nothing beyond its fields emits three events; one that declares
-everything emits sixteen.
+everything emits nineteen.
| The definition declares | Events it adds |
| ------------------------------------ | ------------------------------------------------------------------- |
@@ -638,6 +643,8 @@ everything emits sixteen.
| `localization` **and** `publication` | `translation_published`, `translation_unpublished` |
| `localization` **and** `editorial` | `translation_restored` |
| `delivery` | `delivery_slug_changed`, `delivery_redirect_created` |
+| `duplication` | `duplicated` |
+| `visibility` | `hidden`, `unhidden` |
The gating is in the types, not just at runtime: `ContentEventsFor` expands to
literal keys only for the features the definition enables. The example plugin's
@@ -658,6 +665,9 @@ the map and a listener for it does not compile.
| `restored` | `{ contentId, changedFields, version, revisionId, restoredFromRevisionId }` | A record is rolled back to an earlier revision - emitted **instead of** `updated` |
| `scheduled` | `{ contentId, action, actorUserId, scheduledFor, scheduleId }` | A publish or unpublish is booked for later |
| `schedule_cancelled` | `{ contentId, action, actorUserId, scheduleId }` | A pending booking is called off |
+| `duplicated` | `{ actorUserId, contentId, contentTypeId, sourceId }` | A record was copied into a new draft, right after the copy's own `created` |
+| `hidden` | `{ actorUserId, contentId, hiddenAt }` | A visible record is taken off the public site without being unpublished |
+| `unhidden` | `{ actorUserId, contentId }` | A hidden record is made visible again |
@@ -666,13 +676,18 @@ the map and a listener for it does not compile.
type={{
contentId: {
description: 'Id of the created, updated or deleted row.',
- type: 'number',
+ type: 'ContentIdOf',
},
changedFields: {
description:
"Update only - the fields whose value actually changed, narrowed to this content type's own field names. An update that changes nothing emits no event at all.",
type: 'ContentFieldName[]',
},
+ duplicatedFromId: {
+ description:
+ 'Set on the `created` of a duplicate, with the id of the record it was copied from. Absent for an ordinary create, so a listener can tell copies apart without waiting for `duplicated`.',
+ type: 'ContentIdOf',
+ },
}}
/>
@@ -692,7 +707,7 @@ carries neither.
type={{
contentId: {
description: 'Id of the record whose visibility moved.',
- type: 'number',
+ type: 'ContentIdOf',
},
publishedAt: {
description:
@@ -729,7 +744,7 @@ than a rewrite - which is why a restore emits one event and not both.
type={{
contentId: {
description: 'Id of the restored record.',
- type: 'number',
+ type: 'ContentIdOf',
},
changedFields: {
description:
@@ -753,8 +768,8 @@ than a rewrite - which is why a restore emits one event and not both.
/>
**A listener would** do exactly what its `updated` listener does. A restore
-never moves `status` or `publishedAt`, so nothing watching visibility has to
-handle it.
+never moves `status`, `publishedAt` or `hiddenAt`, so nothing watching
+visibility has to handle it.
@@ -768,7 +783,7 @@ with `scheduleId` and `scheduledBy` set.
type={{
contentId: {
description: 'Id of the record the booking is about.',
- type: 'number',
+ type: 'ContentIdOf',
},
action: {
description: 'Which transition was booked, or cancelled.',
@@ -794,6 +809,69 @@ with `scheduleId` and `scheduledBy` set.
**A listener would** show an editorial calendar, warn an author that two
bookings collide, or pre-warm a render shortly before `scheduledFor`.
+
+
+
+A [duplicate](/docs/content-engine/duplicate-content) first emits the copy's
+ordinary `created` (with `duplicatedFromId`) and one `translation_created` per
+copied language, then `duplicated`. Indexing already ran for `created`, so
+`duplicated` is a notification only.
+
+',
+ },
+ contentTypeId: {
+ description: 'The content type id, such as `blog.post`.',
+ type: 'string',
+ },
+ sourceId: {
+ description:
+ 'Id of the record that was copied. It is only read, never changed.',
+ type: 'ContentIdOf',
+ },
+ }}
+/>
+
+**A listener would** credit the original author in an audit log, or link the
+copy to its source in a plugin-owned table.
+
+
+
+
+[Hiding](/docs/content-engine/content-visibility) takes a record off the public
+site without touching `status` or `publishedAt`, so a hidden record emits
+neither `unpublished` nor, when unhidden, `published`. Hiding a record that is
+already hidden emits nothing.
+
+',
+ },
+ hiddenAt: {
+ description: 'When the record was hidden. Sent with `hidden` only.',
+ type: 'Date',
+ },
+ }}
+/>
+
+**A listener would** purge a CDN entry, pull the record from an external
+search engine, or tell the author that a moderator took their article down.
+Hiding a draft emits the event too, though nothing public changed.
+
@@ -821,7 +899,7 @@ has to go and ask which language moved.
contentId: {
description:
'Id of the record the translation belongs to - the base row, not the translation row.',
- type: 'number',
+ type: 'ContentIdOf',
},
locale: {
description:
@@ -897,7 +975,7 @@ different facts with different audiences.
type={{
contentId: {
description: 'Id of the record whose URL moved.',
- type: 'number',
+ type: 'ContentIdOf',
},
slug: {
description: 'Slug changed only - the slug the record answers to now.',
@@ -1045,7 +1123,9 @@ inspects `failures` and retries the whole delivery when it is non-empty.
publication transitions, per-locale translation events and slug history. The
six names below are re-emitted from those by listeners registered on the
plugin's own `admin` module, so existing consumers keep working. Prefer the
- `content.*` ones for anything new.
+ `content.*` ones for anything new. A duplicated article re-emits
+ `blog.post.created` once; `duplicated`, `hidden` and `unhidden` have no blog
+ adapter.
| Event | Payload | Re-emitted from |
diff --git a/apps/web/content/docs/dev/search-elasticsearch.mdx b/apps/web/content/docs/dev/search-elasticsearch.mdx
index 250dd309c8..7df73dc9dd 100644
--- a/apps/web/content/docs/dev/search-elasticsearch.mdx
+++ b/apps/web/content/docs/dev/search-elasticsearch.mdx
@@ -86,6 +86,14 @@ collection) needs the **Rebuild and clear the search index** permission
mapping.
+
+ Documents now carry an `itemKey` keyword with the record id as text, so
+ [uuid and bigint](/docs/content-engine/id-strategy) records can be found.
+ VitNode adds the field to an existing index the first time it uses it. Older
+ documents get a value on the next **Rebuild index**; until then, results fall
+ back to the numeric `itemId`, which works for serial ids only.
+
+
Do not delete `core_search_index`. It remains VitNode's source of truth and
lets you switch providers without losing your map back home.
diff --git a/apps/web/content/docs/dev/search.mdx b/apps/web/content/docs/dev/search.mdx
index 1e222b31f9..9d00cd4ef6 100644
--- a/apps/web/content/docs/dev/search.mdx
+++ b/apps/web/content/docs/dev/search.mdx
@@ -119,12 +119,14 @@ Every member gets a timeline: everything credited to them, newest first. It live
Who sees what depends on who's looking:
-| Viewer | Published | Drafts |
-| --- | --- | --- |
-| Anyone, on `/search` and `/discover` | Yes | No |
-| Anyone, on a member's profile | Yes | No |
-| The member, on their own profile | Yes | Yes, marked **Draft** |
-| Staff, on the AdminCP user page | Yes | Yes, marked **Draft** |
+| Viewer | Published | Hidden | Drafts |
+| --- | --- | --- | --- |
+| Anyone, on `/search` and `/discover` | Yes | Only its authors and editors, with an eye-off icon | No |
+| Anyone, on a member's profile | Yes | Only its authors and editors, with an eye-off icon | No |
+| The member, on their own profile | Yes | Yes, with an eye-off icon | Yes, marked **Draft** |
+| Staff, on the AdminCP user page | Yes | Yes, with an eye-off icon | Yes, marked **Draft** |
+
+The **Hidden** column follows [Who can still see it](/docs/content-engine/content-visibility#who-can-still-see-it). An editor is staff with `can_edit` on the content type.
A draft has no public page yet, so its title isn't a link. Nobody gets sent to a 404.
@@ -145,7 +147,7 @@ export const blogPostContentType = defineContentType({
})
```
-The first author is the one shown next to the result. After turning `authorField` on for content that already exists, rebuild the index so older records get their authors.
+Every author is shown on the result, in the field's order, on `/search`, `/discover` and timelines alike. It shows overlapping avatars, then the names, such as **admin, devloop_tester and aXen**. Past three authors the list shortens to **admin, devloop_tester and 2 others**. Each hit in the API carries `authorIds` and `authors` (id, name, `nameCode`, avatar) in that order, and `author` stays the first one for code that only needs a single name. After turning `authorField` on for content that already exists, rebuild the index so older records get their authors.
The timelines come from two routes:
@@ -208,9 +210,10 @@ A rebuild is a queued job, so it only runs once [cron](/docs/dev/cron) is runnin
type: 'string',
},
itemId: {
- description: 'Primary key of the indexed record.',
+ description:
+ 'Primary key of the indexed record. A number for serial ids, a string for Content Engine types with a uuid or bigint idStrategy. Stored as text in core_search_index.',
required: true,
- type: 'number',
+ type: 'number | string',
},
title: {
description: 'Document title (indexed with highest search relevance).',
@@ -238,6 +241,17 @@ A rebuild is a queued job, so it only runs once [cron](/docs/dev/cron) is runnin
type: 'boolean',
default: 'true',
},
+ imageId: {
+ description:
+ 'A `core_files` id shown as the result image. Results resolve it to `image: { url, width, height }`; a file that is not an image is skipped.',
+ type: 'number',
+ },
+ isHidden: {
+ description:
+ 'A published record that was hidden. Set it together with `isPublic: false` and keep `url`. Its authors and editors still find it in search and on timelines, marked with an eye-off icon.',
+ type: 'boolean',
+ default: 'false',
+ },
}}
/>
diff --git a/apps/web/content/docs/guides/blog.mdx b/apps/web/content/docs/guides/blog.mdx
index ab755c82e5..09dd0f85a7 100644
--- a/apps/web/content/docs/guides/blog.mdx
+++ b/apps/web/content/docs/guides/blog.mdx
@@ -108,7 +108,7 @@ The article editor reads top to bottom like the published article: the cover
image and its alt text, then the title, slug and content. The checks before
publishing live in the **SEO** sheet, so the text gets the whole width.
-{/* Image prompt: VitNode AdminCP blog article editor at full width. A wide cover image with Replace file and Remove buttons in its corner, alt text field under it, a large article title and slug, then a TipTap editor. Header with Translate, SEO with a small amber badge "2", AI review, a Draft/Published switch and Save changes. Light theme, 1440x900. */}
+{/* Image prompt: VitNode AdminCP blog article editor at full width. A wide cover image with Replace file and Remove buttons in its corner, alt text field under it, a large article title and slug, then a TipTap editor. Header with Translate, SEO with a small amber badge "2", AI review, a muted "● Published" label and a split Save changes button with a dropdown arrow. Light theme, 1440x900. */}
### Check the article before you publish
@@ -137,8 +137,21 @@ text, or **Open** a language that is missing a translation.
### Publish or unpublish
-The **Draft / Published** switch sits next to **Save changes**. Switching asks
-for confirmation first, because it changes what readers see immediately.
+The header shows whether the article is a **Draft** or **Published** (hover it
+to see when it went live). To change that, open the arrow next to **Save
+changes** and pick **Publish** or **Unpublish**. It asks for confirmation
+first, because readers see the change immediately. **Hide** and **Unhide** live
+in the same menu.
+
+### Hide or duplicate an article
+
+The **More actions** menu of an article in the list has **Hide** and
+**Duplicate**. Hiding takes a published article off the site, search and the
+sitemap without unpublishing it, and **Unhide** brings it back with the same
+URL and date. It needs the **Hide and unhide articles** permission. Duplicating
+makes a draft copy with every translation, such as "Hello world (Copy)". See
+[Hide content](/docs/content-engine/content-visibility) and
+[Duplicate content](/docs/content-engine/duplicate-content).
### Translate side by side
diff --git a/apps/web/src/locales/@vitnode/blog/pl.json b/apps/web/src/locales/@vitnode/blog/pl.json
index 38df53ecd8..fbc4599d12 100644
--- a/apps/web/src/locales/@vitnode/blog/pl.json
+++ b/apps/web/src/locales/@vitnode/blog/pl.json
@@ -164,7 +164,12 @@
},
"title": "Blog",
"post": {
- "published": "Opublikowano"
+ "published": "Opublikowano",
+ "hidden": {
+ "label": "Artykuł ukryty",
+ "title": "Ten artykuł jest ukryty",
+ "desc": "Widzą go tylko jego autorzy i redaktorzy. Pozostali zobaczą stronę „nie znaleziono”, a artykuł nie pojawia się w wyszukiwarce ani w mapie strony."
+ }
}
},
"@vitnode/blog:categories": "Kategorie",
diff --git a/apps/web/src/locales/@vitnode/core/pl.json b/apps/web/src/locales/@vitnode/core/pl.json
index 5c2329ada1..eba1ea59a1 100644
--- a/apps/web/src/locales/@vitnode/core/pl.json
+++ b/apps/web/src/locales/@vitnode/core/pl.json
@@ -2736,6 +2736,8 @@
"discoverDesc": "Zobacz najnowszą aktywność w społeczności.",
"discoverTitle": "Odkrywaj",
"draft": "Szkic",
+ "hidden": "{type} (ukryte)",
+ "more_authors": "{count, plural, one {# inna osoba} few {# inne osoby} many {# innych osób} other {# innej osoby}}",
"empty": "Nic tu jeszcze nie ma.",
"loadMore": "Wczytaj więcej",
"loading": "Wczytywanie…",
diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css
index a3abdb57e3..dd29f55e14 100644
--- a/apps/web/src/styles.css
+++ b/apps/web/src/styles.css
@@ -11,7 +11,7 @@
:root:not(.dark) {
color-scheme: light;
- --background: oklch(1 0 0);
+ --background: oklch(0.985 0.002 264);
--foreground: oklch(0.214 0.006 264);
--card: oklch(1 0 0);
--card-foreground: oklch(0.214 0.006 264);
diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/styles.css b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/styles.css
index 8d32d701ac..939dccdf39 100644
--- a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/styles.css
+++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/styles.css
@@ -9,7 +9,7 @@
:root:not(.dark) {
color-scheme: light;
- --background: oklch(1 0 0);
+ --background: oklch(0.985 0.002 264);
--foreground: oklch(0.214 0.006 264);
--card: oklch(1 0 0);
--card-foreground: oklch(0.214 0.006 264);
diff --git a/packages/elasticsearch/src/index.ts b/packages/elasticsearch/src/index.ts
index b5344e280b..9d37a831bd 100644
--- a/packages/elasticsearch/src/index.ts
+++ b/packages/elasticsearch/src/index.ts
@@ -6,6 +6,7 @@ import type {
SearchQueryParams,
SearchResult,
} from "@vitnode/core/api/models/search";
+import type { ContentId } from "@vitnode/core/content";
import { Client, errors } from "@elastic/elasticsearch";
@@ -47,8 +48,11 @@ interface EsSource {
containerType: null | string;
content: string;
createdAt: string;
+ imageId?: null | number;
+ isHidden?: boolean;
isPublic: boolean;
- itemId: number;
+ itemId?: number;
+ itemKey?: string;
itemType: string;
languageCode: string;
metadata: Record;
@@ -57,11 +61,13 @@ interface EsSource {
url: null | string;
}
+const itemKeyOf = (itemId: ContentId): string => String(itemId);
+
const docId = (
itemType: string,
- itemId: number,
+ itemId: ContentId,
languageCode: string,
-): string => `${itemType}:${itemId}:${languageCode}`;
+): string => `${itemType}:${itemKeyOf(itemId)}:${languageCode}`;
interface EsErrorBody {
error?: { type?: string };
@@ -78,7 +84,8 @@ const toSource = (doc: SearchDocument): EsSource => ({
// reason a mirrored document disagrees with the canonical row.
pluginId: doc.pluginId ?? "core",
itemType: doc.itemType,
- itemId: doc.itemId,
+ ...(typeof doc.itemId === "number" ? { itemId: doc.itemId } : {}),
+ itemKey: itemKeyOf(doc.itemId),
languageCode: doc.languageCode ?? "",
authorIds: [...new Set(doc.authorIds ?? [])],
title: doc.title,
@@ -87,6 +94,8 @@ const toSource = (doc: SearchDocument): EsSource => ({
containerId: doc.containerId ?? null,
url: doc.url ?? null,
isPublic: doc.isPublic ?? true,
+ isHidden: doc.isHidden ?? false,
+ imageId: doc.imageId ?? null,
metadata: doc.metadata ?? {},
createdAt: (doc.createdAt instanceof Date
? doc.createdAt
@@ -94,6 +103,38 @@ const toSource = (doc: SearchDocument): EsSource => ({
).toISOString(),
});
+const visibleFilter = (
+ params: SearchQueryParams,
+): estypes.QueryDslQueryContainer => {
+ const access = params.hiddenAccess;
+ const viewer: estypes.QueryDslQueryContainer[] = [
+ ...(access?.authorId === undefined
+ ? []
+ : [{ term: { authorIds: access.authorId } }]),
+ ...(access?.itemTypes.length
+ ? [{ terms: { itemType: [...access.itemTypes] } }]
+ : []),
+ ];
+ if (viewer.length === 0) return { term: { isPublic: true } };
+
+ return {
+ bool: {
+ minimum_should_match: 1,
+ should: [
+ { term: { isPublic: true } },
+ {
+ bool: {
+ filter: [
+ { term: { isHidden: true } },
+ { bool: { minimum_should_match: 1, should: viewer } },
+ ],
+ },
+ },
+ ],
+ },
+ };
+};
+
const buildFilters = (
params: SearchQueryParams,
): estypes.QueryDslQueryContainer[] => {
@@ -123,7 +164,7 @@ const buildFilters = (
});
}
if (!params.includePrivate) {
- filter.push({ term: { isPublic: true } });
+ filter.push(visibleFilter(params));
}
return filter;
@@ -205,18 +246,26 @@ const mapHit = (hit: estypes.SearchHit): null | SearchHit => {
const source = hit._source;
if (!source) return null;
+ const itemId: ContentId | undefined = source.itemId ?? source.itemKey;
+ if (itemId === undefined) return null;
+
return {
- id: source.itemId,
+ id: typeof itemId === "number" ? itemId : 0,
pluginId: source.pluginId,
itemType: source.itemType,
- itemId: source.itemId,
+ itemId,
languageCode: source.languageCode,
authorId: source.authorIds?.[0] ?? null,
+ authorIds: source.authorIds ?? [],
+ authors: [],
title: source.title,
content: source.content,
containerType: source.containerType,
containerId: source.containerId,
url: source.url,
+ isHidden: source.isHidden ?? false,
+ image: null,
+ imageId: source.imageId ?? null,
isPublic: source.isPublic,
metadata: source.metadata,
createdAt: new Date(source.createdAt),
@@ -255,7 +304,18 @@ export const ElasticsearchSearchAdapter = (
const createIndexIfMissing = async (): Promise => {
const es = getClient();
- if (await es.indices.exists({ index })) return;
+ if (await es.indices.exists({ index })) {
+ await es.indices.putMapping({
+ index,
+ properties: {
+ imageId: { type: "integer" },
+ isHidden: { type: "boolean" },
+ itemKey: { type: "keyword" },
+ },
+ });
+
+ return;
+ }
try {
await es.indices.create({
@@ -265,6 +325,7 @@ export const ElasticsearchSearchAdapter = (
pluginId: { type: "keyword" },
itemType: { type: "keyword" },
itemId: { type: "integer" },
+ itemKey: { type: "keyword" },
languageCode: { type: "keyword" },
authorIds: { type: "integer" },
title: { type: "text" },
@@ -273,6 +334,8 @@ export const ElasticsearchSearchAdapter = (
containerId: { type: "integer" },
url: { type: "keyword" },
isPublic: { type: "boolean" },
+ isHidden: { type: "boolean" },
+ imageId: { type: "integer" },
createdAt: { type: "date" },
metadata: { type: "object", enabled: false },
},
@@ -372,6 +435,7 @@ export const ElasticsearchSearchAdapter = (
// named one, which is how a single translation is taken down without
// touching the others.
delete: async (_c, itemType, itemId, languageCode) => {
+ await ensureIndex();
await getClient().deleteByQuery(
{
index,
@@ -379,11 +443,15 @@ export const ElasticsearchSearchAdapter = (
bool: {
filter: [
{ term: { itemType } },
- { term: { itemId } },
...(languageCode === undefined
? []
: [{ term: { languageCode } }]),
],
+ minimum_should_match: 1,
+ should: [
+ { term: { itemKey: itemKeyOf(itemId) } },
+ ...(typeof itemId === "number" ? [{ term: { itemId } }] : []),
+ ],
},
},
},
diff --git a/packages/vitnode/src/api/adapters/search/postgres.ts b/packages/vitnode/src/api/adapters/search/postgres.ts
index 15530d7448..9ffd4fa650 100644
--- a/packages/vitnode/src/api/adapters/search/postgres.ts
+++ b/packages/vitnode/src/api/adapters/search/postgres.ts
@@ -1,4 +1,5 @@
import type { SQL } from "drizzle-orm";
+import type { PgColumn } from "drizzle-orm/pg-core";
import type { Context } from "hono";
import {
@@ -28,6 +29,7 @@ import type {
import { parseSearchOffset } from "@/api/lib/search-offset";
import { storageUrlOf } from "@/api/lib/storage-url";
+import { searchItemIdFromKey } from "@/api/models/search";
import { core_files } from "@/database/files";
import { core_search_index, resolveSearchTextConfig } from "@/database/search";
import { core_users } from "@/database/users";
@@ -44,6 +46,27 @@ const requestedTranslation = alias(
const DEFAULT_PAGE_SIZE = 20;
const MAX_PAGE_SIZE = 100;
+const visibleCondition = (
+ table: Record<"authorIds" | "isHidden" | "isPublic" | "itemType", PgColumn>,
+ params: SearchQueryParams,
+): SQL | undefined => {
+ if (params.includePrivate) return undefined;
+
+ const access = params.hiddenAccess;
+ const viewer = or(
+ access?.authorId === undefined
+ ? undefined
+ : arrayContains(table.authorIds, [access.authorId]),
+ access?.itemTypes.length
+ ? inArray(table.itemType, [...access.itemTypes])
+ : undefined,
+ );
+
+ return viewer
+ ? or(eq(table.isPublic, true), and(eq(table.isHidden, true), viewer))
+ : eq(table.isPublic, true);
+};
+
const fallbackLanguageConditions = (
c: Context,
params: SearchQueryParams,
@@ -63,9 +86,7 @@ const fallbackLanguageConditions = (
eq(requestedTranslation.itemType, core_search_index.itemType),
eq(requestedTranslation.itemId, core_search_index.itemId),
eq(requestedTranslation.languageCode, languageCode),
- params.includePrivate
- ? undefined
- : eq(requestedTranslation.isPublic, true),
+ visibleCondition(requestedTranslation, params),
),
),
),
@@ -117,9 +138,8 @@ const buildFilters = (
if (params.dateTo) {
conditions.push(lte(core_search_index.createdAt, params.dateTo));
}
- if (!params.includePrivate) {
- conditions.push(eq(core_search_index.isPublic, true));
- }
+ const visible = visibleCondition(core_search_index, params);
+ if (visible) conditions.push(visible);
return conditions.length ? and(...conditions) : undefined;
};
@@ -215,12 +235,15 @@ export const PostgresSearchAdapter = (): SearchProviderApiPlugin => ({
itemId: core_search_index.itemId,
languageCode: core_search_index.languageCode,
authorId: leadAuthorId,
+ authorIds: core_search_index.authorIds,
title: core_search_index.title,
content: core_search_index.content,
containerType: core_search_index.containerType,
containerId: core_search_index.containerId,
url: core_search_index.url,
isPublic: core_search_index.isPublic,
+ isHidden: core_search_index.isHidden,
+ imageId: core_search_index.imageId,
metadata: core_search_index.metadata,
createdAt: core_search_index.createdAt,
score: rankExpr,
@@ -243,19 +266,25 @@ export const PostgresSearchAdapter = (): SearchProviderApiPlugin => ({
const hasNextPage = rows.length > size;
const sliced = rows.slice(0, size);
+ const { contentTypes } = c.get("core");
const edges: SearchHit[] = sliced.map(row => ({
id: row.id,
pluginId: row.pluginId,
itemType: row.itemType,
- itemId: row.itemId,
+ itemId: searchItemIdFromKey(contentTypes, row.itemType, row.itemId),
languageCode: row.languageCode,
authorId: row.authorId,
+ authorIds: row.authorIds,
+ authors: [],
title: row.title,
content: row.content,
containerType: row.containerType,
containerId: row.containerId,
url: row.url,
isPublic: row.isPublic,
+ isHidden: row.isHidden,
+ image: null,
+ imageId: row.imageId,
metadata: row.metadata,
createdAt: row.createdAt,
score: row.score,
diff --git a/packages/vitnode/src/api/lib/pagination-cursor.test.ts b/packages/vitnode/src/api/lib/pagination-cursor.test.ts
index 289661f2c8..d84c10a332 100644
--- a/packages/vitnode/src/api/lib/pagination-cursor.test.ts
+++ b/packages/vitnode/src/api/lib/pagination-cursor.test.ts
@@ -28,6 +28,7 @@ import {
const probes = camelCase.table("cursor_probes", {
big: bigint({ mode: "bigint" }),
+ bigString: bigint({ mode: "string" }),
clock: time(),
clockTz: time({ withTimezone: true }),
day: date(),
@@ -535,3 +536,53 @@ describe("minting keeps the database's own representation", () => {
);
});
});
+
+describe('a string-mode bigint, which `idStrategy: "bigint"` keys by', () => {
+ const BEYOND_SAFE = "9007199254740993";
+
+ it("is an identifier column that keeps its decimal string exact", () => {
+ expect(isPaginationIdentifierColumn(probes.bigString)).toBe(true);
+ expect(cursorIdentifierOf(probes.bigString, BEYOND_SAFE)).toBe(BEYOND_SAFE);
+ expect(cursorIdentifierForColumn(probes.bigString, BEYOND_SAFE)).toBe(
+ BEYOND_SAFE,
+ );
+ });
+
+ it("orders as a bigint, binding the canonical string rather than a number", () => {
+ expect(cursorValueOf(probes.bigString, BEYOND_SAFE)).toBe(BEYOND_SAFE);
+ expect(cursorValueForColumn(probes.bigString, BEYOND_SAFE)).toBe(
+ BEYOND_SAFE,
+ );
+ });
+
+ it("refuses what the column could never hold with a 400", () => {
+ for (const value of ["1.5", "abc", "9223372036854775808", "-1"]) {
+ let status = 0;
+ try {
+ cursorIdentifierForColumn(probes.bigString, value);
+ } catch (error) {
+ status = statusOf(error);
+ }
+
+ expect([value, status]).toEqual([value, 400]);
+ }
+ expect(() => cursorValueForColumn(probes.bigString, "1.5")).toThrow(
+ HTTPException,
+ );
+ });
+
+ it("round-trips a cursor without a Number in between", () => {
+ const cursor = {
+ column: "bigString",
+ id: BEYOND_SAFE,
+ value: BEYOND_SAFE,
+ };
+
+ expect(
+ decodePaginationCursor(encodePaginationCursor(cursor), {
+ column: "bigString",
+ primary: probes.bigString,
+ }),
+ ).toEqual(cursor);
+ });
+});
diff --git a/packages/vitnode/src/api/lib/pagination-cursor.ts b/packages/vitnode/src/api/lib/pagination-cursor.ts
index ebe1d80e3c..ff80da4a0d 100644
--- a/packages/vitnode/src/api/lib/pagination-cursor.ts
+++ b/packages/vitnode/src/api/lib/pagination-cursor.ts
@@ -39,6 +39,9 @@ const baseDataTypeOf = (column: PgColumn): string =>
const isUuidColumn = (column: PgColumn): boolean =>
column.getSQLType().toLowerCase() === "uuid";
+const isStringInt64Column = (column: PgColumn): boolean =>
+ column.dataType === "string int64";
+
const isArrayColumn = (column: PgColumn): boolean => column.dimensions > 0;
const badRequest = (message: string): HTTPException =>
@@ -71,6 +74,7 @@ export const isCursorSortableColumn = (column: PgColumn): boolean =>
const kindOf = (column: PgColumn): CursorKind => {
if (!isArrayColumn(column) && temporalTypeOf(column)) return "temporal";
if (!isArrayColumn(column) && isUuidColumn(column)) return "uuid";
+ if (!isArrayColumn(column) && isStringInt64Column(column)) return "bigint";
const kind = isArrayColumn(column)
? undefined
@@ -226,6 +230,9 @@ export const cursorValueOf = (
case "bigint": {
if (typeof value === "bigint") return value.toString();
if (typeof value === "number") return String(value);
+ if (typeof value === "string" && DECIMAL_INTEGER.test(value)) {
+ return value;
+ }
break;
}
case "boolean": {
@@ -298,7 +305,7 @@ export const cursorValueForColumn = (
const parsed = postgresBigint(value);
if (parsed === undefined) throw badRequest(INVALID_CURSOR);
- return parsed;
+ return isStringInt64Column(column) ? parsed.toString() : parsed;
}
case "boolean": {
if (typeof value !== "boolean") throw badRequest(INVALID_CURSOR);
@@ -358,6 +365,7 @@ type IdentifierKind = "bigint" | "number" | "uuid";
const identifierKindOf = (column: PgColumn): IdentifierKind | undefined => {
if (isArrayColumn(column)) return undefined;
if (isUuidColumn(column)) return "uuid";
+ if (isStringInt64Column(column)) return "bigint";
const baseDataType = baseDataTypeOf(column);
if (baseDataType === "bigint" || baseDataType === "number") {
@@ -377,6 +385,13 @@ export const cursorIdentifierOf = (
switch (identifierKindOf(column)) {
case "bigint":
if (typeof value === "bigint" && value > 0n) return value.toString();
+ if (
+ typeof value === "string" &&
+ POSITIVE_DECIMAL_INTEGER.test(value) &&
+ postgresBigint(value) !== undefined
+ ) {
+ return value;
+ }
break;
case "number":
if (
@@ -405,7 +420,9 @@ export const cursorIdentifierForColumn = (
case "bigint":
if (typeof value === "string" && POSITIVE_DECIMAL_INTEGER.test(value)) {
const parsed = postgresBigint(value);
- if (parsed !== undefined) return parsed;
+ if (parsed !== undefined) {
+ return isStringInt64Column(column) ? parsed.toString() : parsed;
+ }
}
break;
case "number":
diff --git a/packages/vitnode/src/api/lib/response-cache-headers.test.ts b/packages/vitnode/src/api/lib/response-cache-headers.test.ts
index 1a771b7a99..9af6d8c732 100644
--- a/packages/vitnode/src/api/lib/response-cache-headers.test.ts
+++ b/packages/vitnode/src/api/lib/response-cache-headers.test.ts
@@ -111,6 +111,7 @@ const isSharedCacheable = (value: string): boolean => {
};
const DECLARED = {
+ "content/server/delivery-routes.ts": ["private, no-store"],
"content/server/public-routes.ts": ["private, no-store"],
"tanstack/start/document-headers.ts": ["private, no-store"],
} satisfies Record;
diff --git a/packages/vitnode/src/api/lib/with-pagination.ts b/packages/vitnode/src/api/lib/with-pagination.ts
index 599eff9d18..a6492c3113 100644
--- a/packages/vitnode/src/api/lib/with-pagination.ts
+++ b/packages/vitnode/src/api/lib/with-pagination.ts
@@ -217,6 +217,7 @@ async function fetchTotalCount(
type PaginationIdentifierDataType =
| "bigint"
| "number"
+ | "string int64"
| "string uuid"
| `bigint ${ColumnDataBigIntConstraint}`
| `number ${ColumnDataNumberConstraint}`;
diff --git a/packages/vitnode/src/api/models/search.test.ts b/packages/vitnode/src/api/models/search.test.ts
index d02e558bb7..61a1568038 100644
--- a/packages/vitnode/src/api/models/search.test.ts
+++ b/packages/vitnode/src/api/models/search.test.ts
@@ -6,10 +6,12 @@ import type { RegisteredContentType } from "@/content/registry";
import { core_search_index } from "@/database/search";
import {
+ testBigintEventContentType,
testLocalizedPageContentType,
testLocalizedSearchPageContentType,
testSearchablePostContentType,
testStrictLocalizedSearchPageContentType,
+ testUuidTagContentType,
} from "@/tests/content-fixtures";
import type { SearchDocument, SearchProviderApiPlugin } from "./search";
@@ -18,6 +20,7 @@ import { PostgresSearchAdapter } from "../adapters/search/postgres";
import {
assertSearchProviderCapabilities,
normalizeSearchIndexerPage,
+ searchItemIdFromKey,
searchLanguageFallbacks,
SearchModel,
} from "./search";
@@ -482,3 +485,46 @@ describe("SearchModel language fallback", () => {
expect(provider.search).toHaveBeenCalledWith(c, { authorId: 1 });
});
});
+
+describe("item ids under every strategy", () => {
+ const BEYOND_SAFE = "9007199254740993";
+ const UUID = "0198f6f7-d4a2-7ce1-a2ee-4f5f1f2f3a4b";
+ const types = [
+ registered(testSearchablePostContentType),
+ registered(testBigintEventContentType),
+ registered(testUuidTagContentType),
+ ];
+
+ it("stores every id as its key, and hands the provider the id itself", async () => {
+ const provider = createProvider();
+ const { c, values } = createContext(provider);
+
+ await new SearchModel(c).index({
+ content: "Body",
+ createdAt: new Date("2026-01-01"),
+ itemId: BEYOND_SAFE,
+ itemType: "test.bigint-event",
+ title: "Event",
+ });
+
+ expect(values.mock.calls[0][0]).toMatchObject({ itemId: BEYOND_SAFE });
+ expect(provider.index).toHaveBeenCalledWith(
+ c,
+ expect.objectContaining({ itemId: BEYOND_SAFE }),
+ );
+ });
+
+ it("reads a key back as the id its content type uses", () => {
+ expect(searchItemIdFromKey(types, "test.searchable", "42")).toBe(42);
+ expect(searchItemIdFromKey(types, "test.bigint-event", BEYOND_SAFE)).toBe(
+ BEYOND_SAFE,
+ );
+ expect(searchItemIdFromKey(types, "test.uuid-tag", UUID)).toBe(UUID);
+ });
+
+ it("keeps a numeric key a number for an item type that is not a content type", () => {
+ expect(searchItemIdFromKey(types, "forum.topic", "7")).toBe(7);
+ expect(searchItemIdFromKey([], "forum.topic", "7")).toBe(7);
+ expect(searchItemIdFromKey(types, "forum.topic", "abc")).toBe("abc");
+ });
+});
diff --git a/packages/vitnode/src/api/models/search.ts b/packages/vitnode/src/api/models/search.ts
index 82de823181..a2906bbdf6 100644
--- a/packages/vitnode/src/api/models/search.ts
+++ b/packages/vitnode/src/api/models/search.ts
@@ -3,13 +3,16 @@ import type { Context } from "hono";
import { and, eq, inArray } from "drizzle-orm";
import { alias } from "drizzle-orm/pg-core";
+import type { ContentId } from "@/content/ids";
import type { RegisteredContentType } from "@/content/registry";
import { storageUrlOf } from "@/api/lib/storage-url";
+import { contentIdFromKey, contentIdKey } from "@/content/ids";
import { contentLocalesMatch } from "@/content/locale";
import { core_files } from "@/database/files";
import { core_search_index } from "@/database/search";
import { core_users } from "@/database/users";
+import { parseImageDimensions } from "@/lib/api/upload";
import { stripHtml } from "@/lib/strip-html";
const authorAvatarFile = alias(core_files, "search_author_avatar_file");
@@ -20,8 +23,10 @@ export interface SearchDocument {
containerType?: string;
content: string;
createdAt: Date;
+ imageId?: null | number;
+ isHidden?: boolean;
isPublic?: boolean;
- itemId: number;
+ itemId: ContentId;
itemType: string;
// Locale of this projection. Multi-language content emits one document per
// language; single-language content may leave it empty.
@@ -44,6 +49,7 @@ export interface SearchQueryParams {
dateFrom?: Date;
dateTo?: Date;
first?: number;
+ hiddenAccess?: SearchHiddenAccess;
includePrivate?: boolean;
itemTypes?: string[];
// Restrict results to one locale (the viewer's). Rows with an empty
@@ -54,6 +60,11 @@ export interface SearchQueryParams {
term?: string;
}
+export interface SearchHiddenAccess {
+ authorId?: number;
+ itemTypes: readonly string[];
+}
+
export interface SearchLanguageFallback {
itemType: string;
languageCode: string;
@@ -72,6 +83,23 @@ export const searchLanguageFallbacks = (
: [],
);
+const NUMERIC_KEY = /^[1-9][0-9]{0,14}$/;
+
+export const searchItemIdFromKey = (
+ contentTypes: readonly RegisteredContentType[],
+ itemType: string,
+ key: string,
+): ContentId => {
+ const contentType = contentTypes.find(
+ entry => entry.definition.id === itemType,
+ );
+ if (contentType) {
+ return contentIdFromKey(contentType.definition.idStrategy, key) ?? key;
+ }
+
+ return NUMERIC_KEY.test(key) ? Number(key) : key;
+};
+
export interface SearchHitAuthor {
avatarColor: string;
avatarUrl: null | string;
@@ -80,16 +108,27 @@ export interface SearchHitAuthor {
nameCode: string;
}
+export interface SearchHitImage {
+ height?: number;
+ url: string;
+ width?: number;
+}
+
export interface SearchHit {
author: null | SearchHitAuthor;
authorId: null | number;
+ authorIds: number[];
+ authors: SearchHitAuthor[];
containerId: null | number;
containerType: null | string;
content: string;
createdAt: Date;
id: number;
+ image: null | SearchHitImage;
+ imageId: null | number;
+ isHidden: boolean;
isPublic: boolean;
- itemId: number;
+ itemId: ContentId;
itemType: string;
languageCode: string;
metadata: Record;
@@ -257,12 +296,13 @@ export interface SearchProviderApiPlugin {
* that does not with a localized searchable content type refuses to boot. See
* {@link assertSearchProviderCapabilities}.
*/
- delete: (
+ // eslint-disable-next-line @typescript-eslint/method-signature-style
+ delete(
c: Context,
itemType: string,
- itemId: number,
+ itemId: ContentId,
languageCode?: string,
- ) => Promise;
+ ): Promise;
index: (c: Context, doc: SearchDocument) => Promise;
name: string;
ping?: (c: Context) => Promise;
@@ -272,7 +312,7 @@ export interface SearchProviderApiPlugin {
const toRow = (doc: SearchDocument) => ({
pluginId: doc.pluginId ?? "core",
itemType: doc.itemType,
- itemId: doc.itemId,
+ itemId: contentIdKey(doc.itemId),
languageCode: doc.languageCode ?? "",
authorIds: [...new Set(doc.authorIds ?? [])],
title: doc.title,
@@ -281,6 +321,8 @@ const toRow = (doc: SearchDocument) => ({
containerId: doc.containerId ?? null,
url: doc.url ?? null,
isPublic: doc.isPublic ?? true,
+ isHidden: doc.isHidden ?? false,
+ imageId: doc.imageId ?? null,
metadata: doc.metadata ?? {},
createdAt: doc.createdAt,
updatedAt: doc.updatedAt ?? null,
@@ -294,17 +336,17 @@ export class SearchModel {
protected readonly c: Context;
- // Providers that don't join the users table (e.g. Elasticsearch) return hits
- // with `authorId` but `author: null`; fill in the display fields here.
private async hydrateAuthors(edges: SearchHit[]): Promise {
- const missing = [
- ...new Set(
- edges.flatMap(edge =>
- !edge.author && edge.authorId ? [edge.authorId] : [],
- ),
- ),
- ];
- if (missing.length === 0) return edges;
+ const idsOf = (edge: SearchHit): number[] =>
+ edge.authorIds.length > 0
+ ? edge.authorIds
+ : edge.authorId
+ ? [edge.authorId]
+ : [];
+ const wanted = [...new Set(edges.flatMap(idsOf))];
+ if (wanted.length === 0) {
+ return edges.map(edge => ({ ...edge, authorIds: [], authors: [] }));
+ }
const rows = await this.c
.get("db")
@@ -317,7 +359,7 @@ export class SearchModel {
})
.from(core_users)
.leftJoin(authorAvatarFile, eq(authorAvatarFile.id, core_users.avatarId))
- .where(inArray(core_users.id, missing));
+ .where(inArray(core_users.id, wanted));
const byId = new Map(
rows.map(({ avatarKey, ...row }) => [
@@ -326,11 +368,70 @@ export class SearchModel {
]),
);
- return edges.map(edge =>
- edge.author || !edge.authorId
- ? edge
- : { ...edge, author: byId.get(edge.authorId) ?? null },
+ return edges.map(edge => {
+ const authorIds = idsOf(edge);
+ const authors = authorIds.flatMap(id => {
+ const author = byId.get(id);
+
+ return author ? [author] : [];
+ });
+
+ return {
+ ...edge,
+ author: edge.author ?? authors[0] ?? null,
+ authorIds,
+ authors,
+ };
+ });
+ }
+
+ private async hydrateImages(edges: SearchHit[]): Promise {
+ const wanted = [
+ ...new Set(
+ edges.flatMap(edge => (edge.imageId === null ? [] : [edge.imageId])),
+ ),
+ ];
+ if (wanted.length === 0) {
+ return edges.map(edge => ({ ...edge, image: null }));
+ }
+
+ const rows = await this.c
+ .get("db")
+ .select({
+ id: core_files.id,
+ key: core_files.key,
+ metadata: core_files.metadata,
+ mimeType: core_files.mimeType,
+ })
+ .from(core_files)
+ .where(inArray(core_files.id, wanted));
+
+ const byId = new Map(
+ rows.flatMap(row => {
+ const url = row.mimeType?.startsWith("image/")
+ ? storageUrlOf(this.c, row.key)
+ : null;
+ if (!url) return [];
+ const dimensions = parseImageDimensions(row.metadata);
+
+ return [
+ [
+ row.id,
+ {
+ url,
+ ...(dimensions
+ ? { height: dimensions.height, width: dimensions.width }
+ : {}),
+ },
+ ] as const,
+ ];
+ }),
);
+
+ return edges.map(edge => ({
+ ...edge,
+ image: edge.imageId === null ? null : (byId.get(edge.imageId) ?? null),
+ }));
}
private provider(): SearchProviderApiPlugin {
@@ -379,6 +480,8 @@ export class SearchModel {
containerId: row.containerId,
url: row.url,
isPublic: row.isPublic,
+ isHidden: row.isHidden,
+ imageId: row.imageId,
metadata: row.metadata,
createdAt: row.createdAt,
updatedAt: row.updatedAt,
@@ -435,7 +538,7 @@ export class SearchModel {
*/
async delete(
itemType: string,
- itemId: number,
+ itemId: ContentId,
languageCode?: string,
): Promise {
await this.c
@@ -444,7 +547,7 @@ export class SearchModel {
.where(
and(
eq(core_search_index.itemType, itemType),
- eq(core_search_index.itemId, itemId),
+ eq(core_search_index.itemId, contentIdKey(itemId)),
languageCode === undefined
? undefined
: eq(core_search_index.languageCode, languageCode),
@@ -497,6 +600,9 @@ export class SearchModel {
languageFallbacks.length > 0 ? { ...params, languageFallbacks } : params,
);
- return { ...result, edges: await this.hydrateAuthors(result.edges) };
+ return {
+ ...result,
+ edges: await this.hydrateImages(await this.hydrateAuthors(result.edges)),
+ };
}
}
diff --git a/packages/vitnode/src/api/modules/admin/ai/routes/translation-sources.route.ts b/packages/vitnode/src/api/modules/admin/ai/routes/translation-sources.route.ts
index bc93cb5feb..9560e8d501 100644
--- a/packages/vitnode/src/api/modules/admin/ai/routes/translation-sources.route.ts
+++ b/packages/vitnode/src/api/modules/admin/ai/routes/translation-sources.route.ts
@@ -4,12 +4,23 @@ import { and, eq } from "drizzle-orm";
import { HTTPException } from "hono/http-exception";
import { z } from "zod";
+import type { ContentId } from "@/content/ids";
+
import { checkStaffPermission } from "@/api/lib/check-staff-permission";
import { buildRoute } from "@/api/lib/route";
import { CONFIG_PLUGIN } from "@/config";
+import {
+ contentAnyIdSchema,
+ contentIdKey,
+ parseContentId,
+} from "@/content/ids";
import { core_ai_translation_sources } from "@/database/ai";
-const assertCanEditContent = async (c: Context, contentTypeId: string) => {
+const assertCanEditContentItem = async (
+ c: Context,
+ contentTypeId: string,
+ requestedItemId: ContentId,
+): Promise => {
const registered = c
.get("core")
.contentTypes.find(entry => entry.definition.id === contentTypeId);
@@ -23,6 +34,16 @@ const assertCanEditContent = async (c: Context, contentTypeId: string) => {
type: "admin",
});
if (!allowed) throw new HTTPException(403);
+
+ const itemId = parseContentId(
+ registered.definition.idStrategy,
+ requestedItemId,
+ );
+ if (itemId === null) {
+ throw new HTTPException(400, { message: "Invalid identifier." });
+ }
+
+ return contentIdKey(itemId);
};
const zodTranslationSourceRecord = z.object({
@@ -45,7 +66,7 @@ export const getTranslationSourcesAdminRoute = buildRoute({
request: {
query: z.object({
contentTypeId: z.string().min(1).max(255),
- itemId: z.coerce.number().int().positive(),
+ itemId: contentAnyIdSchema,
}),
},
responses: {
@@ -60,8 +81,12 @@ export const getTranslationSourcesAdminRoute = buildRoute({
},
},
handler: async c => {
- const { contentTypeId, itemId } = c.req.valid("query");
- await assertCanEditContent(c, contentTypeId);
+ const { contentTypeId, itemId: requestedItemId } = c.req.valid("query");
+ const itemId = await assertCanEditContentItem(
+ c,
+ contentTypeId,
+ requestedItemId,
+ );
const records = await c
.get("db")
@@ -111,7 +136,7 @@ export const saveTranslationSourcesAdminRoute = buildRoute({
)
.min(1)
.max(100),
- itemId: z.number().int().positive(),
+ itemId: contentAnyIdSchema,
locale: z.string().min(2).max(32),
sourceLocale: z.string().min(2).max(32),
}),
@@ -129,9 +154,18 @@ export const saveTranslationSourcesAdminRoute = buildRoute({
},
},
handler: async c => {
- const { contentTypeId, fields, itemId, locale, sourceLocale } =
- c.req.valid("json");
- await assertCanEditContent(c, contentTypeId);
+ const {
+ contentTypeId,
+ fields,
+ itemId: requestedItemId,
+ locale,
+ sourceLocale,
+ } = c.req.valid("json");
+ const itemId = await assertCanEditContentItem(
+ c,
+ contentTypeId,
+ requestedItemId,
+ );
const updatedById = c.get("admin")?.user.id ?? null;
for (const entry of fields) {
diff --git a/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.test.ts b/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.test.ts
index 9a0f103a77..2ba4d23c59 100644
--- a/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.test.ts
+++ b/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.test.ts
@@ -331,6 +331,27 @@ describe("executeContentSchedule", () => {
expect(dispatchedPayload(dispatch).payload.wasPublic).toBe(true);
});
+ it("says a hidden record was never public before an unpublish", async () => {
+ const { c, dispatch } = harness({
+ editorial: {
+ unpublish: vi.fn().mockResolvedValue({
+ ...outcome,
+ operation: "unpublish",
+ row: {
+ ...row,
+ hiddenAt: new Date("2026-08-06T00:00:00.000Z"),
+ status: "draft",
+ },
+ }),
+ },
+ schedule: { ...pending, action: "unpublish" },
+ });
+
+ await executeContentSchedule(c, { generation: 1, scheduleId: 55 });
+
+ expect(dispatchedPayload(dispatch).payload.wasPublic).toBe(false);
+ });
+
it("is JSON, so the queue can store and replay it", async () => {
const { c, dispatch } = harness();
diff --git a/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.ts b/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.ts
index aefb1f7220..517f094577 100644
--- a/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.ts
+++ b/packages/vitnode/src/api/modules/content/helpers/execute-content-schedule.ts
@@ -1,16 +1,19 @@
import type { Context } from "hono";
+import type { ContentId } from "@/content/ids";
import type { ContentEditorialOutcome } from "@/content/server/editorial-service";
import type { ContentScheduleEffectsPayload } from "@/content/server/schedule-effects";
import type { AnyContentTypeDefinition } from "@/content/types";
import { CONTENT_QUEUE_TASK_SCHEDULE_EFFECTS } from "@/content/const";
+import { contentIdFromKey } from "@/content/ids";
import { CONTENT_SYSTEM_ACTOR } from "@/content/server/actor";
-import { findContentModel } from "@/content/server/model";
+import { contentDefinitionOf, findContentModel } from "@/content/server/model";
import {
claimContentSchedule,
settleContentSchedule,
} from "@/content/server/schedules-model";
+import { isContentBaseRowPublic } from "@/content/server/visibility";
/** What the run decided, so the task logs something worth reading. */
export interface ContentScheduleOutcome {
@@ -50,8 +53,8 @@ const slugOf = (
*
* `wasPublic` is derived rather than read back: the transition guards on the
* state it is leaving (`status <> 'published'` to publish, `= 'published'` to
- * unpublish), so a *changed* publish came from a non-public row and a changed
- * unpublish from a public one. That removes the extra `SELECT` the old code did
+ * unpublish), so a *changed* publish came from a draft and a changed unpublish
+ * from a published row. That removes the extra `SELECT` the old code did
* outside the lock, and removes with it the window where the answer could have
* been someone else's write.
*/
@@ -65,7 +68,7 @@ const effectsPayload = ({
action: "publish" | "unpublish";
createdBy: null | number;
id: number;
- itemId: number;
+ itemId: ContentId;
};
definition: AnyContentTypeDefinition;
outcome: ContentEditorialOutcome;
@@ -89,7 +92,10 @@ const effectsPayload = ({
scheduleId: claimed.id,
scheduledBy: claimed.createdBy,
version: outcome.version,
- wasPublic: claimed.action === "unpublish",
+ wasPublic: isContentBaseRowPublic({
+ ...row,
+ status: claimed.action === "unpublish" ? "published" : "draft",
+ }),
};
};
@@ -157,9 +163,21 @@ export const executeContentSchedule = async (
}
const { model, pluginId } = entry;
+ const definition = contentDefinitionOf(model);
+
+ const itemId = contentIdFromKey(definition.idStrategy, claimed.itemId);
+ if (itemId === null) {
+ await settleContentSchedule(tx, claimed.id, {
+ expectedStatus: "pending",
+ lastError: `Schedule ${claimed.id} names "${claimed.itemId}", which is not a ${definition.idStrategy} identifier of "${claimed.contentTypeId}".`,
+ status: "cancelled",
+ });
+
+ return { kind: "skipped", reason: "not an identifier of this type" };
+ }
const outcome = await editorialService(c, { pluginId })[claimed.action](
- claimed.itemId,
+ itemId,
{
// No fake user id anywhere. Who *asked* for this is on the schedule
// row and travels in the event as `scheduledBy`.
@@ -189,8 +207,8 @@ export const executeContentSchedule = async (
}
const effects = effectsPayload({
- claimed,
- definition: model.definition,
+ claimed: { ...claimed, itemId },
+ definition,
outcome,
pluginId,
});
diff --git a/packages/vitnode/src/api/modules/search/routes/search.route.ts b/packages/vitnode/src/api/modules/search/routes/search.route.ts
index 2cb2627875..770f6246be 100644
--- a/packages/vitnode/src/api/modules/search/routes/search.route.ts
+++ b/packages/vitnode/src/api/modules/search/routes/search.route.ts
@@ -1,6 +1,7 @@
import { z } from "@hono/zod-openapi";
import { CONFIG_PLUGIN } from "@/config";
+import { contentSearchHiddenAccess } from "@/content/server/hidden-access";
import { buildRoute } from "../../../lib/route";
import { zodPaginationQuery } from "../../../lib/with-pagination";
@@ -14,11 +15,19 @@ const zodSearchPageInfo = z.object({
endCursor: z.number().nullable(),
});
+const zodSearchHitAuthor = z.object({
+ id: z.number(),
+ name: z.string(),
+ nameCode: z.string(),
+ avatarColor: z.string(),
+ avatarUrl: z.string().nullable(),
+});
+
export const zodSearchHitSchema = z.object({
id: z.number(),
pluginId: z.string(),
itemType: z.string(),
- itemId: z.number(),
+ itemId: z.union([z.number().int(), z.string().max(64)]),
languageCode: z.string(),
authorId: z.number().nullable(),
title: z.string(),
@@ -27,18 +36,21 @@ export const zodSearchHitSchema = z.object({
containerId: z.number().nullable(),
url: z.string().nullable(),
isPublic: z.boolean(),
- metadata: z.record(z.string(), z.unknown()),
- createdAt: z.date(),
- score: z.number().nullable(),
- author: z
+ isHidden: z.boolean(),
+ image: z
.object({
- id: z.number(),
- name: z.string(),
- nameCode: z.string(),
- avatarColor: z.string(),
- avatarUrl: z.string().nullable(),
+ url: z.string(),
+ width: z.number().optional(),
+ height: z.number().optional(),
})
.nullable(),
+ imageId: z.number().nullable(),
+ metadata: z.record(z.string(), z.unknown()),
+ createdAt: z.date(),
+ score: z.number().nullable(),
+ author: zodSearchHitAuthor.nullable(),
+ authorIds: z.array(z.number()),
+ authors: z.array(zodSearchHitAuthor),
});
/**
@@ -124,6 +136,7 @@ export const searchRoute = buildRoute({
first: positiveIntOrUndefined(query.first),
cursor: query.cursor,
languageCode: query.lang,
+ hiddenAccess: await contentSearchHiddenAccess(c),
includePrivate: false,
});
diff --git a/packages/vitnode/src/api/modules/search/routes/timeline.route.ts b/packages/vitnode/src/api/modules/search/routes/timeline.route.ts
index 3daecd4741..8a0cd5211b 100644
--- a/packages/vitnode/src/api/modules/search/routes/timeline.route.ts
+++ b/packages/vitnode/src/api/modules/search/routes/timeline.route.ts
@@ -2,7 +2,10 @@ import type { Context } from "hono";
import { z } from "@hono/zod-openapi";
+import type { SearchHiddenAccess } from "@/api/models/search";
+
import { CONFIG_PLUGIN } from "@/config";
+import { contentSearchHiddenAccess } from "@/content/server/hidden-access";
import { buildRoute } from "../../../lib/route";
import { zodPaginationQuery } from "../../../lib/with-pagination";
@@ -21,10 +24,12 @@ export const searchTimeline = async (
c: Context,
{
authorId,
+ hiddenAccess,
includePrivate,
query,
}: {
authorId: number;
+ hiddenAccess?: SearchHiddenAccess;
includePrivate: boolean;
query: z.infer;
},
@@ -33,6 +38,7 @@ export const searchTimeline = async (
authorId,
cursor: query.cursor,
first: positiveIntOrUndefined(query.first),
+ hiddenAccess,
includePrivate,
languageCode: query.lang,
sort: "newest",
@@ -63,9 +69,13 @@ export const timelineRoute = buildRoute({
handler: async c => {
const authorId = Number(c.req.valid("param").userId);
+ const includePrivate = c.get("user")?.id === authorId;
const result = await searchTimeline(c, {
authorId,
- includePrivate: c.get("user")?.id === authorId,
+ hiddenAccess: includePrivate
+ ? undefined
+ : await contentSearchHiddenAccess(c),
+ includePrivate,
query: c.req.valid("query"),
});
diff --git a/packages/vitnode/src/components/hidden-icon.tsx b/packages/vitnode/src/components/hidden-icon.tsx
new file mode 100644
index 0000000000..72e4741b86
--- /dev/null
+++ b/packages/vitnode/src/components/hidden-icon.tsx
@@ -0,0 +1,28 @@
+import { cn } from "cn";
+import { EyeOffIcon } from "lucide-react";
+
+import { TooltipWithContent } from "@/components/ui/tooltip";
+
+export const HiddenIcon = ({
+ className,
+ focusable = true,
+ label,
+}: {
+ className?: string;
+ focusable?: boolean;
+ label: string;
+}) => (
+
+
+
+
+
+);
diff --git a/packages/vitnode/src/components/logo-vitnode.tsx b/packages/vitnode/src/components/logo-vitnode.tsx
index dcc4a8c5a9..66c31706ad 100644
--- a/packages/vitnode/src/components/logo-vitnode.tsx
+++ b/packages/vitnode/src/components/logo-vitnode.tsx
@@ -4,11 +4,13 @@ export const LogoVitNode = ({
className,
idPrefix = "vitnode-logo",
small,
+ wordmarkClassName,
...props
}: React.ComponentProps<"svg"> & {
/** Namespace for this instance's gradient ids. See the note above. */
idPrefix?: string;
small?: boolean;
+ wordmarkClassName?: string;
}) => {
if (small)
return (
@@ -57,7 +59,7 @@ export const LogoVitNode = ({
{...props}
>
Logo VitNode
-
+
{
canExpand: (row: T) => boolean;
expandedIdOf: (row: T) => string;
- isExpanded: (id: number) => boolean;
- toggle: (id: number) => void;
+ isExpanded: (id: DataTableRowId) => boolean;
+ toggle: (id: DataTableRowId) => void;
}
const reorderColumn = (): ColumnDef => ({
@@ -134,7 +135,7 @@ const ReorderableBodyDataTable = ({
searchParams,
}: Pick, "filters" | "order"> & {
renderRow: (row: T) => React.ReactNode;
- reorder: (activeId: number, overId: number) => void;
+ reorder: (activeId: DataTableRowId, overId: DataTableRowId) => void;
reorderable: NonNullable["reorderable"]>;
rows: T[];
searchParams: URLSearchParams;
@@ -148,7 +149,7 @@ const ReorderableBodyDataTable = ({
},
filterIds: filters?.map(filter => filter.id) ?? [],
});
- const rowLabelOf = (id: number) => {
+ const rowLabelOf = (id: DataTableRowId) => {
const row = rows.find(item => item.id === id);
return row ? reorderable.getRowLabel?.(row) : undefined;
diff --git a/packages/vitnode/src/components/table/data-table-content.tsx b/packages/vitnode/src/components/table/data-table-content.tsx
index c3455825f3..6d353c486b 100644
--- a/packages/vitnode/src/components/table/data-table-content.tsx
+++ b/packages/vitnode/src/components/table/data-table-content.tsx
@@ -18,8 +18,10 @@ import {
TableRow,
} from "../ui/table";
+export type DataTableRowId = number | string;
+
export interface DataTableTMin {
- id: number;
+ id: DataTableRowId;
}
export interface SearchParamsDataTable {
diff --git a/packages/vitnode/src/components/table/expansion.tsx b/packages/vitnode/src/components/table/expansion.tsx
index 13fac80ce2..5cfae78edb 100644
--- a/packages/vitnode/src/components/table/expansion.tsx
+++ b/packages/vitnode/src/components/table/expansion.tsx
@@ -5,13 +5,15 @@ import * as m from "motion/react-m";
import React from "react";
import { useTranslations } from "use-intl";
+import type { DataTableRowId } from "./data-table-content";
+
import { MotionFeatures } from "../motion-features";
import { Button } from "../ui/button";
import { TableCell, TableRow } from "../ui/table";
export interface ExpandableDataTable {
canExpand?: (row: T) => boolean;
- defaultExpanded?: number[];
+ defaultExpanded?: DataTableRowId[];
render: (row: T) => React.ReactNode;
}
@@ -19,10 +21,10 @@ export const useRowExpansionDataTable = ({
defaultExpanded,
rowIds,
}: {
- defaultExpanded?: number[];
- rowIds: number[];
+ defaultExpanded?: DataTableRowId[];
+ rowIds: DataTableRowId[];
}) => {
- const [expanded, setExpanded] = React.useState(
+ const [expanded, setExpanded] = React.useState(
defaultExpanded ?? [],
);
const pageKey = rowIds.join(",");
@@ -39,11 +41,11 @@ export const useRowExpansionDataTable = ({
}
const isExpanded = React.useCallback(
- (id: number) => expanded.includes(id),
+ (id: DataTableRowId) => expanded.includes(id),
[expanded],
);
- const toggle = React.useCallback((id: number) => {
+ const toggle = React.useCallback((id: DataTableRowId) => {
setExpanded(current =>
current.includes(id)
? current.filter(item => item !== id)
diff --git a/packages/vitnode/src/components/table/filters.test.ts b/packages/vitnode/src/components/table/filters.test.ts
new file mode 100644
index 0000000000..268c715f31
--- /dev/null
+++ b/packages/vitnode/src/components/table/filters.test.ts
@@ -0,0 +1,18 @@
+import { describe, expect, it } from "vitest";
+
+import { nextFilterSelection } from "./filters";
+
+describe("nextFilterSelection", () => {
+ it("replaces the value of a single-value filter, and clears it on a second pick", () => {
+ expect(nextFilterSelection([], "hidden", true)).toEqual(["hidden"]);
+ expect(nextFilterSelection(["hidden"], "visible", true)).toEqual([
+ "visible",
+ ]);
+ expect(nextFilterSelection(["hidden"], "hidden", true)).toEqual([]);
+ });
+
+ it("toggles one value of a multi-value filter, keeping the rest", () => {
+ expect(nextFilterSelection(["a"], "b")).toEqual(["a", "b"]);
+ expect(nextFilterSelection(["a", "b"], "a")).toEqual(["b"]);
+ });
+});
diff --git a/packages/vitnode/src/components/table/filters.tsx b/packages/vitnode/src/components/table/filters.tsx
index a307c7fe79..c78f53ace1 100644
--- a/packages/vitnode/src/components/table/filters.tsx
+++ b/packages/vitnode/src/components/table/filters.tsx
@@ -32,8 +32,21 @@ export interface FilterDataTable {
label: string;
onSearch?: (search: string) => Promise;
options?: FilterOption[];
+ single?: { allLabel: string };
}
+export const nextFilterSelection = (
+ selected: readonly string[],
+ value: string,
+ single = false,
+): string[] => {
+ if (single) return selected.includes(value) ? [] : [value];
+
+ return selected.includes(value)
+ ? selected.filter(item => item !== value)
+ : [...selected, value];
+};
+
function FilterItem({ filter }: { filter: FilterDataTable }) {
const t = useTranslations("core.global");
const { isPending, navigate, searchParams } = useDataTableUrl();
@@ -72,13 +85,9 @@ function FilterItem({ filter }: { filter: FilterDataTable }) {
};
const toggle = (value: string) => {
- const next = new Set(selectedSet);
- if (next.has(value)) {
- next.delete(value);
- } else {
- next.add(value);
- }
- applySelection([...next]);
+ applySelection(
+ nextFilterSelection(selected, value, Boolean(filter.single)),
+ );
};
const selectedStaticOptions = isAsync
@@ -134,23 +143,35 @@ function FilterItem({ filter }: { filter: FilterDataTable }) {
<>
{t("results_not_found")}
+ {filter.single ? (
+ applySelection([])}
+ value={filter.single.allLabel}
+ >
+ {filter.single.allLabel}
+
+ ) : null}
{options.map(option => {
const isSelected = selectedSet.has(option.value);
return (
toggle(option.value)}
value={option.value}
>
-
+ {filter.single ? null : (
+
+ )}
{option.label}
);
@@ -158,7 +179,7 @@ function FilterItem({ filter }: { filter: FilterDataTable }) {
>
)}
- {selected.length > 0 && (
+ {selected.length > 0 && !filter.single && (
<>
diff --git a/packages/vitnode/src/components/table/reorder-state.ts b/packages/vitnode/src/components/table/reorder-state.ts
index 877aaa7842..b6939edc25 100644
--- a/packages/vitnode/src/components/table/reorder-state.ts
+++ b/packages/vitnode/src/components/table/reorder-state.ts
@@ -1,22 +1,24 @@
import { arrayMove } from "@dnd-kit/sortable";
+import type { DataTableRowId } from "./data-table-content";
+
import { readTableOrder, readTableSearch, type TableOrder } from "./url-state";
export interface ReorderDetailsDataTable {
- activeId: number;
+ activeId: DataTableRowId;
from: number;
- overId: number;
+ overId: DataTableRowId;
to: number;
}
export interface RowMoveDataTable extends ReorderDetailsDataTable {
- ids: number[];
+ ids: DataTableRowId[];
}
export const moveRowId = (
- ids: readonly number[],
- activeId: number,
- overId: number,
+ ids: readonly DataTableRowId[],
+ activeId: DataTableRowId,
+ overId: DataTableRowId,
): null | RowMoveDataTable => {
const from = ids.indexOf(activeId);
const to = ids.indexOf(overId);
diff --git a/packages/vitnode/src/components/table/reorder.tsx b/packages/vitnode/src/components/table/reorder.tsx
index ea3794d5de..e461ba6606 100644
--- a/packages/vitnode/src/components/table/reorder.tsx
+++ b/packages/vitnode/src/components/table/reorder.tsx
@@ -28,22 +28,24 @@ import React from "react";
import { toast } from "sonner";
import { useTranslations } from "use-intl";
-import type { DataTableTMin } from "./data-table-content";
+import type { DataTableRowId, DataTableTMin } from "./data-table-content";
import { Button } from "../ui/button";
import { moveRowId, type ReorderDetailsDataTable } from "./reorder-state";
+type RowIdOf = T extends { id: infer TId } ? TId : DataTableRowId;
+
export interface ReorderableDataTable {
disabled?: boolean;
getRowLabel?: (row: T) => string;
onReorder: (
- ids: number[],
+ ids: RowIdOf[],
details: ReorderDetailsDataTable,
) => Promise | void;
}
interface RowOrderOverride {
- ids: number[];
+ ids: DataTableRowId[];
key: string;
}
@@ -67,7 +69,7 @@ export const useRowOrderDataTable = ({
return row ? [row] : [];
});
- const reorder = (activeId: number, overId: number) => {
+ const reorder = (activeId: DataTableRowId, overId: DataTableRowId) => {
const move = moveRowId(ids, activeId, overId);
if (!move || !onReorder) return;
@@ -77,7 +79,7 @@ export const useRowOrderDataTable = ({
const persist = async () => {
try {
- await onReorder(move.ids, {
+ await onReorder(move.ids as RowIdOf[], {
activeId: move.activeId,
from: move.from,
overId: move.overId,
@@ -123,9 +125,9 @@ export function ReorderProviderDataTable({
onMove,
}: {
children: React.ReactNode;
- ids: number[];
- labelOf: (id: number) => string | undefined;
- onMove: (activeId: number, overId: number) => void;
+ ids: DataTableRowId[];
+ labelOf: (id: DataTableRowId) => string | undefined;
+ onMove: (activeId: DataTableRowId, overId: DataTableRowId) => void;
}) {
const t = useTranslations("core.global.data_table");
const contextId = React.useId();
@@ -144,7 +146,7 @@ export function ReorderProviderDataTable({
}),
);
- const spoken = (activeId: number, overId: number) => ({
+ const spoken = (activeId: DataTableRowId, overId: DataTableRowId) => ({
name:
labelOf(activeId) ??
t("row_fallback", { position: ids.indexOf(activeId) + 1 }),
@@ -154,17 +156,13 @@ export function ReorderProviderDataTable({
const announcements: Announcements = {
onDragCancel: ({ active }) =>
- t("reorder_cancelled", spoken(Number(active.id), Number(active.id))),
+ t("reorder_cancelled", spoken(active.id, active.id)),
onDragEnd: ({ active, over }) =>
- over
- ? t("reorder_ended", spoken(Number(active.id), Number(over.id)))
- : undefined,
+ over ? t("reorder_ended", spoken(active.id, over.id)) : undefined,
onDragOver: ({ active, over }) =>
- over
- ? t("reorder_over", spoken(Number(active.id), Number(over.id)))
- : undefined,
+ over ? t("reorder_over", spoken(active.id, over.id)) : undefined,
onDragStart: ({ active }) =>
- t("reorder_started", spoken(Number(active.id), Number(active.id))),
+ t("reorder_started", spoken(active.id, active.id)),
};
return (
@@ -178,7 +176,7 @@ export function ReorderProviderDataTable({
id={contextId}
modifiers={[restrictToVerticalAxis, restrictToParentElement]}
onDragEnd={({ active, over }) => {
- if (over) onMove(Number(active.id), Number(over.id));
+ if (over) onMove(active.id, over.id);
}}
sensors={sensors}
>
@@ -198,7 +196,7 @@ export function SortableRowGroupDataTable({
}: {
children: React.ReactNode;
disabled: boolean;
- id: number;
+ id: DataTableRowId;
label?: string;
position: number;
}) {
diff --git a/packages/vitnode/src/components/table/selection.tsx b/packages/vitnode/src/components/table/selection.tsx
index d8063d1834..8099079e43 100644
--- a/packages/vitnode/src/components/table/selection.tsx
+++ b/packages/vitnode/src/components/table/selection.tsx
@@ -5,6 +5,8 @@ import React from "react";
import { createPortal } from "react-dom";
import { useTranslations } from "use-intl";
+import type { DataTableRowId } from "./data-table-content";
+
import { MotionFeatures } from "../motion-features";
import { Button } from "../ui/button";
import { Checkbox } from "../ui/checkbox";
@@ -16,10 +18,10 @@ import { TooltipWithContent } from "../ui/tooltip";
export interface SelectionDataTable {
allSelected: boolean;
clear: () => void;
- isSelected: (id: number) => boolean;
- selected: number[];
+ isSelected: (id: DataTableRowId) => boolean;
+ selected: DataTableRowId[];
someSelected: boolean;
- toggle: (id: number) => void;
+ toggle: (id: DataTableRowId) => void;
toggleAll: (next: boolean) => void;
}
@@ -48,9 +50,9 @@ export function SelectionProviderDataTable({
rowIds,
}: {
children: React.ReactNode;
- rowIds: number[];
+ rowIds: DataTableRowId[];
}) {
- const [selected, setSelected] = React.useState([]);
+ const [selected, setSelected] = React.useState([]);
const pageKey = rowIds.join(",");
const [prevPageKey, setPrevPageKey] = React.useState(pageKey);
@@ -104,7 +106,7 @@ export function SelectAllDataTable() {
);
}
-export function SelectRowDataTable({ id }: { id: number }) {
+export function SelectRowDataTable({ id }: { id: DataTableRowId }) {
const t = useTranslations("core.global.data_table");
const { isSelected, toggle } = useDataTableSelection();
@@ -122,7 +124,7 @@ export function RowSelectableDataTable({
id,
}: {
children: React.ReactNode;
- id: number;
+ id: DataTableRowId;
}) {
const { isSelected } = useDataTableSelection();
diff --git a/packages/vitnode/src/components/ui/alert-dialog.tsx b/packages/vitnode/src/components/ui/alert-dialog.tsx
index 5671764e93..d10c451956 100644
--- a/packages/vitnode/src/components/ui/alert-dialog.tsx
+++ b/packages/vitnode/src/components/ui/alert-dialog.tsx
@@ -92,7 +92,7 @@ function AlertDialogContent({
{
);
};
-const createIndicator = (area: HTMLElement, indicator: HTMLElement) => {
+const createIndicator = (
+ area: HTMLElement,
+ indicator: HTMLElement,
+ { isGliding }: { isGliding: boolean },
+) => {
+ const setTransition = (property: string) => {
+ if (isGliding) indicator.style.transitionProperty = property;
+ };
let current: Element | null = null;
const measure = (item: Element) => {
@@ -74,7 +81,7 @@ const createIndicator = (area: HTMLElement, indicator: HTMLElement) => {
const show = (item: Element | null, isVisible = true) => {
if (!item) {
- if (current) indicator.style.transitionProperty = "opacity, scale";
+ if (current) setTransition("opacity, scale");
current = null;
setVisible(false);
@@ -84,11 +91,11 @@ const createIndicator = (area: HTMLElement, indicator: HTMLElement) => {
const box = measure(item);
if (item === current) {
if (!isPlacedAt(box)) {
- indicator.style.transitionProperty = "scale";
+ setTransition("scale");
place(box);
}
} else {
- indicator.style.transitionProperty = current ? "" : "opacity, scale";
+ setTransition(current ? "" : "opacity, scale");
current = item;
place(box);
}
@@ -127,8 +134,8 @@ export const glideSidebarIndicators = (area: HTMLElement) => {
return () => undefined;
}
- const hover = createIndicator(area, hoverElement);
- const active = createIndicator(area, activeElement);
+ const hover = createIndicator(area, hoverElement, { isGliding: true });
+ const active = createIndicator(area, activeElement, { isGliding: false });
let hoveredItem: Element | null = null;
const press = (item: Element | null) => {
diff --git a/packages/vitnode/src/components/ui/sidebar.test.tsx b/packages/vitnode/src/components/ui/sidebar.test.tsx
index b7dc8df922..e16c592efd 100644
--- a/packages/vitnode/src/components/ui/sidebar.test.tsx
+++ b/packages/vitnode/src/components/ui/sidebar.test.tsx
@@ -111,7 +111,7 @@ describe("SidebarContent gliding indicators", () => {
expect(indicator("active").style.width).toBe("200px");
});
- it("glides the active indicator to the newly active item", async () => {
+ it("moves the active indicator to the newly active item without gliding", async () => {
const { rerender } = render();
rerender();
diff --git a/packages/vitnode/src/components/ui/sidebar.tsx b/packages/vitnode/src/components/ui/sidebar.tsx
index 5136843c59..94ec0cf430 100644
--- a/packages/vitnode/src/components/ui/sidebar.tsx
+++ b/packages/vitnode/src/components/ui/sidebar.tsx
@@ -407,7 +407,7 @@ function SidebarContent({
/>
{children}
diff --git a/packages/vitnode/src/content/admin/route.test.ts b/packages/vitnode/src/content/admin/route.test.ts
index 4e17a2626c..0721ff2abb 100644
--- a/packages/vitnode/src/content/admin/route.test.ts
+++ b/packages/vitnode/src/content/admin/route.test.ts
@@ -108,6 +108,40 @@ describe("resolveContentAdminRoute", () => {
).toBeUndefined();
});
+ describe("under another id strategy", () => {
+ const strategyOf = (idStrategy: "bigint" | "uuid") =>
+ defineContentType({
+ admin: { edit: { mode: "page" } },
+ fields: { title: field.text({ required: true }) },
+ id: `test.${idStrategy}`,
+ idStrategy,
+ tableName: `test_${idStrategy}`,
+ }) as AnyContentTypeDefinition;
+ const uuidType = strategyOf("uuid");
+ const bigintType = strategyOf("bigint");
+ const UUID = "0198f6f7-d4a2-7ce1-a2ee-4f5f1f2f3a4b";
+
+ it.each([
+ ["a uuid", uuidType, "uuid", UUID],
+ [
+ "a bigint beyond Number.MAX_SAFE_INTEGER",
+ bigintType,
+ "bigint",
+ "9007199254740993",
+ ],
+ ])(
+ "reads %s record's edit URL as its exact string id",
+ (_name, definition, segment, itemId) => {
+ expect(
+ resolveContentAdminRoute(
+ ["test", segment, itemId, "edit"],
+ lookupOf(definition),
+ ),
+ ).toEqual({ action: "edit", contentTypeId: definition.id, itemId });
+ },
+ );
+ });
+
it("prefers an exact content type path over a create page", () => {
// `blog/post/create` is a legal address, so the content type that really
// lives there keeps its own list screen.
diff --git a/packages/vitnode/src/content/admin/route.ts b/packages/vitnode/src/content/admin/route.ts
index 0b01e22eb6..f675715f73 100644
--- a/packages/vitnode/src/content/admin/route.ts
+++ b/packages/vitnode/src/content/admin/route.ts
@@ -1,9 +1,11 @@
+import type { ContentId, ContentIdStrategy } from "../ids";
import type { AnyContentTypeDefinition } from "../types";
import {
CONTENT_ADMIN_CREATE_SEGMENT,
CONTENT_ADMIN_EDIT_SEGMENT,
} from "../const";
+import { parseContentId } from "../ids";
/** What `/admin/content/[...slug]` was actually asked for. */
export type ContentAdminAction = "create" | "edit" | "list";
@@ -12,22 +14,18 @@ export interface ContentAdminRoute {
action: ContentAdminAction;
/** The content type id the slug resolved to. */
contentTypeId: string;
- /** The record being edited. Only ever set for `edit`. */
- itemId?: number;
+ itemId?: ContentId;
}
export type ContentTypeLookup = (
adminPath: string,
) => AnyContentTypeDefinition | undefined;
-/** Only a positive integer is a record id - `01`, `1.5` and `-1` are not. */
-const parseItemId = (segment: string | undefined): null | number => {
- if (segment === undefined || !/^[1-9][0-9]*$/.test(segment)) return null;
-
- const id = Number(segment);
-
- return Number.isSafeInteger(id) ? id : null;
-};
+const parseItemId = (
+ strategy: ContentIdStrategy,
+ segment: string | undefined,
+): ContentId | null =>
+ segment === undefined ? null : parseContentId(strategy, segment);
export const resolveContentAdminRoute = (
slug: readonly string[],
@@ -48,12 +46,12 @@ export const resolveContentAdminRoute = (
}
if (last === CONTENT_ADMIN_EDIT_SEGMENT) {
- const itemId = parseItemId(slug[slug.length - 2]);
- if (itemId === null) return undefined;
-
const definition = lookup(slug.slice(0, -2).join("/"));
if (definition?.admin.edit.mode !== "page") return undefined;
+ const itemId = parseItemId(definition.idStrategy, slug[slug.length - 2]);
+ if (itemId === null) return undefined;
+
return { action: "edit", contentTypeId: definition.id, itemId };
}
diff --git a/packages/vitnode/src/content/admin/spec.test.ts b/packages/vitnode/src/content/admin/spec.test.ts
index 485068ba30..fcbc97319f 100644
--- a/packages/vitnode/src/content/admin/spec.test.ts
+++ b/packages/vitnode/src/content/admin/spec.test.ts
@@ -290,7 +290,13 @@ describe("buildContentColumnSpec", () => {
expect(
buildContentColumnSpec({ definition: listed, labelEnum, labelField }),
).toEqual([
- { kind: "text", label: "Title", name: "title", thumbnail: "cover" },
+ {
+ kind: "text",
+ label: "Title",
+ name: "title",
+ thumbnail: "cover",
+ title: true,
+ },
{ kind: "user", label: "Authors", multiple: true, name: "authors" },
]);
});
diff --git a/packages/vitnode/src/content/admin/spec.ts b/packages/vitnode/src/content/admin/spec.ts
index d75a62fb06..7898957b54 100644
--- a/packages/vitnode/src/content/admin/spec.ts
+++ b/packages/vitnode/src/content/admin/spec.ts
@@ -1,5 +1,6 @@
import { z } from "zod";
+import type { ContentId, ContentIdStrategy } from "../ids";
import type {
AnyContentTypeDefinition,
ContentFieldAiAssist,
@@ -20,6 +21,7 @@ import {
contentRepeatableMax,
contentRepeatableMin,
} from "../advanced";
+import { contentIdFromKey, contentIdKey, contentIdSchema } from "../ids";
import {
contentFieldPath,
contentInnerFields,
@@ -71,6 +73,7 @@ export interface ContentFormFieldSpec {
required: boolean;
targetContentTypeId?: string;
+ targetIdStrategy?: ContentIdStrategy;
}
export interface ContentFormSectionSpec {
@@ -107,6 +110,7 @@ export interface ContentColumnSpec {
/** Enum value -> translated label, for badge cells. */
options?: Record;
thumbnail?: string;
+ title?: boolean;
}
export type ContentFieldLabeller = (
@@ -235,7 +239,10 @@ export const projectFormField = (
// `resolveReferenceTargets` already does per request, so a circular
// reference is as safe here as it is there.
...(fieldValue.kind === "relation"
- ? { targetContentTypeId: fieldValue.target().id }
+ ? {
+ targetContentTypeId: fieldValue.target().id,
+ targetIdStrategy: fieldValue.target().idStrategy,
+ }
: {}),
};
case "slug":
@@ -352,6 +359,7 @@ export const buildContentColumnSpec = ({
...(fieldValue && isContentReferenceCollection(fieldValue)
? { multiple: true }
: {}),
+ ...(name === definition.admin.titleField ? { title: true } : {}),
...(name === definition.admin.titleField &&
definition.admin.list.thumbnailField !== null
? { thumbnail: definition.admin.list.thumbnailField }
@@ -425,12 +433,33 @@ const richTextFormSchema = (spec: ContentFormFieldSpec): z.ZodType => {
: doc;
};
+const stringIdStrategy = (
+ spec: ContentFormFieldSpec,
+): ContentIdStrategy | undefined =>
+ spec.kind === "relation" && spec.targetIdStrategy !== "serial"
+ ? spec.targetIdStrategy
+ : undefined;
+
const referenceSetSchema = (spec: ContentFormFieldSpec): z.ZodType => {
- const schema = z.array(z.number());
+ const strategy = stringIdStrategy(spec);
+ const schema = z.array(
+ strategy === undefined ? z.number() : contentIdSchema(strategy),
+ );
return spec.minItems === undefined ? schema : schema.min(spec.minItems);
};
+export const contentOptionValueToId = (
+ spec: ContentFormFieldSpec,
+ value: string,
+): ContentId | null => {
+ const strategy = stringIdStrategy(spec);
+
+ return strategy === undefined
+ ? Number(value)
+ : contentIdFromKey(strategy, value);
+};
+
const baseFieldSchema = (spec: ContentFormFieldSpec): z.ZodType => {
switch (spec.kind) {
case "blocks":
@@ -532,7 +561,10 @@ const toInitialValue = (
if (fieldSpec.multiple === true) return current;
if (current === null || current === undefined) return undefined;
- const id = typeof current === "number" ? current.toString() : "";
+ const id =
+ typeof current === "number" || typeof current === "string"
+ ? contentIdKey(current)
+ : "";
return { label: labels[fieldSpec.name] ?? id, value: id };
};
@@ -579,7 +611,7 @@ export const contentFormValuesToPayload = (
const option = value as ContentReferenceOption | null | undefined;
if (!option?.value) return [name, null];
- return [name, Number(option.value)];
+ return [name, contentOptionValueToId(fieldSpec, option.value)];
}),
);
diff --git a/packages/vitnode/src/content/cache.test.ts b/packages/vitnode/src/content/cache.test.ts
index eca5bc7284..c1eb0e39f7 100644
--- a/packages/vitnode/src/content/cache.test.ts
+++ b/packages/vitnode/src/content/cache.test.ts
@@ -6,6 +6,7 @@ import {
contentPublicListTag,
contentPublicSlugTag,
isContentPubliclyVisible,
+ isContentTranslationPubliclyVisible,
} from "./cache";
import { CONTENT_CACHE_TAG_MAX_LENGTH } from "./const";
@@ -106,6 +107,33 @@ describe("isContentPubliclyVisible", () => {
}),
).toBe(false);
});
+
+ it.each([
+ ["refuses a hidden published row", past, false],
+ [
+ "refuses a hidden row as a schedule payload carries it",
+ past.toISOString(),
+ false,
+ ],
+ ["shows a published row that is not hidden", null, true],
+ ])("%s", (_name, hiddenAt, visible) => {
+ expect(
+ isContentPubliclyVisible({
+ hiddenAt,
+ publishedAt: past,
+ status: "published",
+ }),
+ ).toBe(visible);
+ });
+
+ it("takes every language down with a hidden base row", () => {
+ expect(
+ isContentTranslationPubliclyVisible({
+ base: { hiddenAt: past, publishedAt: past, status: "published" },
+ translation: { publishedAt: past, status: "published" },
+ }),
+ ).toBe(false);
+ });
});
describe("the invalidation matrix", () => {
diff --git a/packages/vitnode/src/content/cache.ts b/packages/vitnode/src/content/cache.ts
index 17e571e694..d09989df3f 100644
--- a/packages/vitnode/src/content/cache.ts
+++ b/packages/vitnode/src/content/cache.ts
@@ -1,7 +1,9 @@
+import type { ContentId } from "./ids";
import type { ContentLocalizationFallback } from "./types";
import { CONTENT_CACHE_TAG_MAX_LENGTH } from "./const";
import { clampWithFingerprint } from "./hash";
+import { contentIdKey } from "./ids";
import { contentLocalesMatch, normalizeContentLocale } from "./locale";
const tag = (...parts: (number | string)[]): string =>
@@ -26,9 +28,10 @@ export const contentPublicListTag = (
/** One row, by identifier, in one locale. */
export const contentPublicItemTag = (
contentTypeId: string,
- id: number,
+ id: ContentId,
locale?: string,
-): string => tag(contentTypeId, "item", ...localeParts(locale), id);
+): string =>
+ tag(contentTypeId, "item", ...localeParts(locale), contentIdKey(id));
export const contentPublicSlugTag = (
contentTypeId: string,
@@ -38,9 +41,10 @@ export const contentPublicSlugTag = (
export const contentDeliveryTag = (
contentTypeId: string,
- id: number,
+ id: ContentId,
locale?: string,
-): string => tag(contentTypeId, "delivery", ...localeParts(locale), id);
+): string =>
+ tag(contentTypeId, "delivery", ...localeParts(locale), contentIdKey(id));
export const contentDeliveryRedirectTag = (
contentTypeId: string,
@@ -76,7 +80,7 @@ export interface ContentSitemapChange {
export interface ContentInvalidationInput {
contentTypeId: string;
delivery?: ContentDeliveryInvalidation;
- id: number;
+ id: ContentId;
/** Whether the row is publicly reachable *after* the mutation. */
isPublic: boolean;
@@ -149,7 +153,7 @@ const deliveryTags = ({
}: {
contentTypeId: string;
delivery: ContentDeliveryInvalidation | undefined;
- id: number;
+ id: ContentId;
locales: readonly {
isPublic: boolean;
locale: string | undefined;
@@ -283,12 +287,15 @@ export const contentLocaleInvalidationMode = (
};
export const isContentPubliclyVisible = ({
+ hiddenAt,
publishedAt,
status,
}: {
+ hiddenAt?: Date | null | string;
publishedAt: Date | null | string | undefined;
status: string | undefined;
}): boolean => {
+ if (hiddenAt !== undefined && hiddenAt !== null) return false;
if (status !== "published" || publishedAt === null) return false;
if (publishedAt === undefined) return false;
@@ -303,6 +310,7 @@ export const isContentTranslationPubliclyVisible = ({
translation,
}: {
base: {
+ hiddenAt?: Date | null | string;
publishedAt: Date | null | string | undefined;
status: string | undefined;
};
diff --git a/packages/vitnode/src/content/conflicts.ts b/packages/vitnode/src/content/conflicts.ts
index 67fdb44ea1..1b7a96912e 100644
--- a/packages/vitnode/src/content/conflicts.ts
+++ b/packages/vitnode/src/content/conflicts.ts
@@ -3,10 +3,12 @@ import { z } from "zod";
import {
CONTENT_CONFLICT_CODES,
CONTENT_DELIVERY_CODES,
+ CONTENT_DUPLICATE_CODES,
CONTENT_SCHEDULE_CODES,
CONTENT_TRANSLATION_CONFLICT_CODES,
CONTENT_UNPROCESSABLE_CODES,
} from "./const";
+import { contentAnyIdSchema } from "./ids";
export type ContentDeliveryCode =
(typeof CONTENT_DELIVERY_CODES)[keyof typeof CONTENT_DELIVERY_CODES];
@@ -26,12 +28,12 @@ export const zodContentConflict = z.discriminatedUnion("code", [
contentTypeId: z.string(),
currentVersion: z.number().int(),
expectedVersion: z.number().int(),
- itemId: z.number().int(),
+ itemId: contentAnyIdSchema,
}),
z.object({
code: z.literal(CONTENT_CONFLICT_CODES.unique),
contentTypeId: z.string(),
- itemId: z.number().int().nullable(),
+ itemId: contentAnyIdSchema.nullable(),
}),
]);
@@ -43,19 +45,19 @@ export const zodContentTranslationConflict = z.discriminatedUnion("code", [
contentTypeId: z.string(),
currentVersion: z.number().int(),
expectedVersion: z.number().int(),
- itemId: z.number().int(),
+ itemId: contentAnyIdSchema,
locale: z.string(),
}),
z.object({
code: z.literal(CONTENT_TRANSLATION_CONFLICT_CODES.defaultRequired),
contentTypeId: z.string(),
- itemId: z.number().int(),
+ itemId: contentAnyIdSchema,
locale: z.string(),
}),
z.object({
code: z.literal(CONTENT_TRANSLATION_CONFLICT_CODES.exists),
contentTypeId: z.string(),
- itemId: z.number().int(),
+ itemId: contentAnyIdSchema,
locale: z.string(),
}),
z.object({
@@ -66,7 +68,7 @@ export const zodContentTranslationConflict = z.discriminatedUnion("code", [
z.object({
code: z.literal(CONTENT_TRANSLATION_CONFLICT_CODES.unique),
contentTypeId: z.string(),
- itemId: z.number().int().nullable(),
+ itemId: contentAnyIdSchema.nullable(),
locale: z.string(),
}),
]);
@@ -182,3 +184,36 @@ export const parseContentUnprocessable = (
return null;
}
};
+
+export const zodContentDuplicateRejection = z.discriminatedUnion("code", [
+ z.object({
+ code: z.literal(CONTENT_DUPLICATE_CODES.slugConflict),
+ contentTypeId: z.string(),
+ field: z.string(),
+ locale: z.string().nullable(),
+ slug: z.string(),
+ }),
+ z.object({
+ code: z.literal(CONTENT_DUPLICATE_CODES.uniqueRequired),
+ contentTypeId: z.string(),
+ fields: z.array(z.string()),
+ }),
+]);
+
+export type ContentDuplicateRejection = z.infer<
+ typeof zodContentDuplicateRejection
+>;
+
+export const parseContentDuplicateRejection = (
+ body: string | undefined,
+): ContentDuplicateRejection | null => {
+ if (body === undefined || body === "") return null;
+
+ try {
+ const parsed = zodContentDuplicateRejection.safeParse(JSON.parse(body));
+
+ return parsed.success ? parsed.data : null;
+ } catch {
+ return null;
+ }
+};
diff --git a/packages/vitnode/src/content/const.ts b/packages/vitnode/src/content/const.ts
index 927454c7c2..fff2e44f71 100644
--- a/packages/vitnode/src/content/const.ts
+++ b/packages/vitnode/src/content/const.ts
@@ -4,6 +4,18 @@ export const CONTENT_PUBLICATION_FIELDS = ["status", "publishedAt"] as const;
export const CONTENT_EDITORIAL_FIELDS = ["version"] as const;
+export const CONTENT_VISIBILITY_FIELDS = ["hiddenAt", "hiddenBy"] as const;
+
+export const CONTENT_VISIBILITY_ACTIONS = ["hide", "unhide"] as const;
+
+export const CONTENT_VISIBILITY_FILTERS = ["hidden", "visible"] as const;
+
+export const CONTENT_ID_STRATEGIES = ["serial", "uuid", "bigint"] as const;
+
+export const CONTENT_DEFAULT_ID_STRATEGY = "serial";
+
+export const CONTENT_ID_KEY_LENGTH = 64;
+
export const CONTENT_TRANSLATION_SYSTEM_FIELDS = [
"itemId",
"languageId",
@@ -252,8 +264,10 @@ export const CONTENT_SEARCH_PATH_MAX_LENGTH = 512;
export const CONTENT_REVISION_OPERATIONS = [
"create",
"delete",
+ "hide",
"publish",
"restore",
+ "unhide",
"unpublish",
"update",
] as const;
@@ -382,6 +396,7 @@ export const CONTENT_PERMISSIONS = {
create: "can_create",
delete: "can_delete",
edit: "can_edit",
+ hide: "can_hide",
publish: "can_publish",
restore: "can_restore",
view: "can_view",
@@ -403,3 +418,19 @@ export const CONTENT_TRANSLATION_CONFLICT_CODES = {
export const CONTENT_UNPROCESSABLE_CODES = {
notRestorable: "CONTENT_REVISION_NOT_RESTORABLE",
} as const;
+
+export const CONTENT_DUPLICATE_CODES = {
+ slugConflict: "CONTENT_DUPLICATE_SLUG_CONFLICT",
+ uniqueRequired: "CONTENT_DUPLICATE_UNIQUE_REQUIRED",
+} as const;
+
+export const CONTENT_DUPLICATE_SLUG_CANDIDATES = 20;
+
+export const CONTENT_DUPLICATE_SLUG_ATTEMPTS = 3;
+
+export const CONTENT_DUPLICATE_SLUG_SUFFIX = "copy";
+
+export const CONTENT_DUPLICATE_TITLE_SUFFIX = "(Copy)";
+
+export const CONTENT_DUPLICATE_TITLE_SUFFIX_KEY =
+ "core.content.duplicate.title_suffix";
diff --git a/packages/vitnode/src/content/define-fields.ts b/packages/vitnode/src/content/define-fields.ts
index 18db05bc70..8fd3841b6e 100644
--- a/packages/vitnode/src/content/define-fields.ts
+++ b/packages/vitnode/src/content/define-fields.ts
@@ -16,6 +16,7 @@ import {
editorialFields,
publicationFields,
systemFields,
+ visibilityFields,
} from "./define-shared";
import { ContentEngineError } from "./errors";
import { scalarFieldConstraintIssue } from "./field-constraints";
@@ -63,6 +64,7 @@ export const assertFieldName = (
name: string,
publication: boolean,
editorial: boolean,
+ visibility: boolean,
): void => {
if (systemFields.includes(name)) {
throw new ContentEngineError(
@@ -85,6 +87,20 @@ export const assertFieldName = (
);
}
+ if (visibility && visibilityFields.includes(name)) {
+ throw new ContentEngineError(
+ `"${name}" is generated by \`visibility\` and cannot also be declared as a field. Rename the field, or drop \`visibility\`.`,
+ { contentTypeId: id },
+ );
+ }
+
+ if (visibility && name === "visibility") {
+ throw new ContentEngineError(
+ `"visibility" is the admin list's hidden/visible filter once \`visibility\` is enabled, so it cannot also be a field name. Rename the field.`,
+ { contentTypeId: id },
+ );
+ }
+
if (!CONTENT_FIELD_NAME_PATTERN.test(name)) {
throw new ContentEngineError(
`Field "${name}" must be camelCase and start with a lowercase letter.`,
diff --git a/packages/vitnode/src/content/define-lifecycle.ts b/packages/vitnode/src/content/define-lifecycle.ts
new file mode 100644
index 0000000000..813420f091
--- /dev/null
+++ b/packages/vitnode/src/content/define-lifecycle.ts
@@ -0,0 +1,82 @@
+import type { ContentIdStrategy } from "./ids";
+import type {
+ ContentDuplicationInput,
+ ContentFieldMap,
+ ResolvedContentAdminConfig,
+ ResolvedContentDuplicationConfig,
+ ResolvedContentVisibilityConfig,
+} from "./types";
+
+import { CONTENT_DEFAULT_ID_STRATEGY, CONTENT_ID_STRATEGIES } from "./const";
+import { ContentEngineError } from "./errors";
+
+export const resolveIdStrategy = (
+ id: string,
+ idStrategy: unknown,
+): ContentIdStrategy => {
+ if (idStrategy === undefined) return CONTENT_DEFAULT_ID_STRATEGY;
+
+ if (!(CONTENT_ID_STRATEGIES as readonly unknown[]).includes(idStrategy)) {
+ throw new ContentEngineError(
+ `idStrategy must be one of ${CONTENT_ID_STRATEGIES.map(value => `"${value}"`).join(", ")}, not ${JSON.stringify(idStrategy)}.`,
+ { contentTypeId: id },
+ );
+ }
+
+ return idStrategy as ContentIdStrategy;
+};
+
+export const resolveVisibility = (
+ id: string,
+ visibility: boolean | undefined,
+ publication: boolean,
+): ResolvedContentVisibilityConfig => {
+ if (visibility !== undefined && typeof visibility !== "boolean") {
+ throw new ContentEngineError(
+ "visibility is `true` or `false`. It has no options of its own.",
+ { contentTypeId: id },
+ );
+ }
+ if (visibility !== true) return { enabled: false };
+
+ if (!publication) {
+ throw new ContentEngineError(
+ "visibility needs `publication: true`. Hiding takes a record off the public site, and a content type without publication has none.",
+ { contentTypeId: id },
+ );
+ }
+
+ return { enabled: true };
+};
+
+export const resolveDuplication = (
+ id: string,
+ duplication: ContentDuplicationInput | undefined,
+ fields: ContentFieldMap,
+ admin: ResolvedContentAdminConfig,
+): ResolvedContentDuplicationConfig => {
+ if (duplication === undefined || duplication === false) {
+ return { enabled: false, titleSuffixField: null };
+ }
+
+ const titleSuffix =
+ duplication === true ? undefined : duplication.titleSuffix;
+
+ if (titleSuffix === false) {
+ return { enabled: true, titleSuffixField: null };
+ }
+
+ const titleField = admin.titleField;
+ if (titleField !== null && fields[titleField]?.kind === "text") {
+ return { enabled: true, titleSuffixField: titleField };
+ }
+
+ if (titleSuffix === true) {
+ throw new ContentEngineError(
+ `duplication.titleSuffix needs \`admin.titleField\` to be a text field, and "${String(titleField)}" is not one. Drop \`titleSuffix\` or point \`admin.titleField\` at a text field.`,
+ { contentTypeId: id },
+ );
+ }
+
+ return { enabled: true, titleSuffixField: null };
+};
diff --git a/packages/vitnode/src/content/define-search.ts b/packages/vitnode/src/content/define-search.ts
index 26c4181615..5f8f009b89 100644
--- a/packages/vitnode/src/content/define-search.ts
+++ b/packages/vitnode/src/content/define-search.ts
@@ -30,6 +30,7 @@ const disabledSearch: ResolvedContentSearchConfig = {
contentFields: [],
descriptionField: null,
enabled: false,
+ imageField: null,
pathTemplate: "",
titleField: "",
};
@@ -105,6 +106,41 @@ const assertSearchAuthorField = (
}
};
+const assertSearchImageField = (
+ id: string,
+ fields: ContentFieldMap,
+ exposed: ReadonlySet,
+ name: string,
+): void => {
+ const target = resolveFieldTarget(fields, name);
+ if (!target) {
+ throw new ContentEngineError(
+ `search.imageField references unknown field "${name}".`,
+ { contentTypeId: id },
+ );
+ }
+
+ const { descriptor } = target;
+ if (
+ target.container !== "row" ||
+ descriptor.kind !== "file" ||
+ descriptor.multiple ||
+ descriptor.localized === true
+ ) {
+ throw new ContentEngineError(
+ `search.imageField names "${name}", which is not a shared single \`field.file()\` on the record itself. A result shows one image.`,
+ { contentTypeId: id },
+ );
+ }
+
+ if (!exposed.has(name)) {
+ throw new ContentEngineError(
+ `search.imageField names "${name}", which is not in publicApi.fields. A result shows the image to everyone who can find it, so it has to be public already.`,
+ { contentTypeId: id },
+ );
+ }
+};
+
const LEGACY_LOCALE_PREFIX = `/${CONTENT_SEARCH_LOCALE_PLACEHOLDER}/`;
const resolveSearchPathTemplate = (
@@ -294,11 +330,17 @@ export const resolveSearch = (
const authorField = search.authorField ?? null;
if (authorField !== null) assertSearchAuthorField(id, fields, authorField);
+ const imageField = search.imageField ?? null;
+ if (imageField !== null) {
+ assertSearchImageField(id, fields, exposed, imageField);
+ }
+
return {
authorField,
contentFields,
descriptionField,
enabled: true,
+ imageField,
pathTemplate,
titleField,
};
diff --git a/packages/vitnode/src/content/define-shared.ts b/packages/vitnode/src/content/define-shared.ts
index 7fc3298f9e..18b11a7240 100644
--- a/packages/vitnode/src/content/define-shared.ts
+++ b/packages/vitnode/src/content/define-shared.ts
@@ -4,6 +4,7 @@ import {
CONTENT_EDITORIAL_FIELDS,
CONTENT_PUBLICATION_FIELDS,
CONTENT_SYSTEM_FIELDS,
+ CONTENT_VISIBILITY_FIELDS,
} from "./const";
import { ContentEngineError } from "./errors";
import { splitContentFieldPath } from "./paths";
@@ -21,6 +22,7 @@ export const EXPLICIT_SEARCHABLE_KINDS = new Set<
export const systemFields: readonly string[] = CONTENT_SYSTEM_FIELDS;
export const publicationFields: readonly string[] = CONTENT_PUBLICATION_FIELDS;
export const editorialFields: readonly string[] = CONTENT_EDITORIAL_FIELDS;
+export const visibilityFields: readonly string[] = CONTENT_VISIBILITY_FIELDS;
export const assertKnownColumns = (
id: string,
@@ -87,6 +89,7 @@ const CONTENT_OPTION_PATHS: readonly (readonly string[])[] = [
["delivery"],
["delivery", "redirects"],
["delivery", "sitemap"],
+ ["duplication"],
["editorial"],
["editorial", "preview"],
["editorial", "scheduling"],
@@ -94,6 +97,7 @@ const CONTENT_OPTION_PATHS: readonly (readonly string[])[] = [
["publicApi"],
["publication"],
["search"],
+ ["visibility"],
];
const CONTENT_OPTIONS_WITH_REQUIRED_KEYS = new Set([
diff --git a/packages/vitnode/src/content/define.ts b/packages/vitnode/src/content/define.ts
index b74ff3a5ec..b85bf05769 100644
--- a/packages/vitnode/src/content/define.ts
+++ b/packages/vitnode/src/content/define.ts
@@ -1,3 +1,4 @@
+import type { ContentIdStrategy } from "./ids";
import type {
AnyContentTypeDefinition,
ContentAdminConfig,
@@ -7,6 +8,8 @@ import type {
ContentDeliveryInput,
ContentDeliveryNoIndexField,
ContentDeliveryTitleField,
+ ContentDuplicationEnabled,
+ ContentDuplicationInput,
ContentEditorialEnabled,
ContentEditorialInput,
ContentFieldMap,
@@ -26,10 +29,12 @@ import type {
ContentSearchTitleField,
ContentTypeDefinition,
ResolvedContentDeliveryConfig,
+ ResolvedContentDuplicationConfig,
ResolvedContentEditorialConfig,
ResolvedContentLocalizationConfig,
ResolvedContentPublicApiConfig,
ResolvedContentSearchConfig,
+ ResolvedContentVisibilityConfig,
} from "./types";
import { contentEntityKey } from "./admin/labels";
@@ -52,6 +57,11 @@ import {
assertSlugSources,
bindSelfRelations,
} from "./define-fields";
+import {
+ resolveDuplication,
+ resolveIdStrategy,
+ resolveVisibility,
+} from "./define-lifecycle";
import { resolvePublicApi } from "./define-public-api";
import { resolveSearch } from "./define-search";
import {
@@ -60,6 +70,7 @@ import {
editorialFields,
publicationFields,
systemFields,
+ visibilityFields,
} from "./define-shared";
import { resolveContentDelivery } from "./delivery";
import { ContentEngineError } from "./errors";
@@ -193,12 +204,17 @@ export const defineContentType = <
ContentDeliveryNoIndexField
> = false,
TPublicPath extends string = string,
+ TVisibility extends boolean = false,
+ TDuplication extends ContentDuplicationInput = false,
+ TIdStrategy extends ContentIdStrategy = "serial",
>({
admin = {},
delivery,
+ duplication,
editorial,
fields,
id,
+ idStrategy,
indexes = [],
liveEditing,
localization,
@@ -206,6 +222,7 @@ export const defineContentType = <
publication,
search,
tableName,
+ visibility,
}: {
admin?: ContentAdminConfig<
TFields,
@@ -215,9 +232,12 @@ export const defineContentType = <
delivery?: TDelivery;
+ duplication?: TDuplication;
+
editorial?: TEditorial;
fields: TFields;
id: TId;
+ idStrategy?: TIdStrategy;
indexes?: ContentIndexInput<
TFields,
TPublication,
@@ -238,6 +258,7 @@ export const defineContentType = <
search?: TSearch;
tableName: string;
+ visibility?: TVisibility;
}): ContentTypeDefinition<
TId,
TFields,
@@ -250,7 +271,10 @@ export const defineContentType = <
ContentSchedulingEnabled,
ContentLocalizationEnabled,
ContentDeliveryEnabled,
- TPublicPath
+ TPublicPath,
+ TVisibility,
+ ContentDuplicationEnabled,
+ TIdStrategy
> => {
if (!CONTENT_ID_PATTERN.test(id)) {
throw new ContentEngineError(
@@ -298,11 +322,13 @@ export const defineContentType = <
assertContentOptionShapes(id, {
admin,
delivery,
+ duplication,
editorial,
localization,
publicApi,
publication,
search,
+ visibility,
});
if (publication !== undefined && typeof publication !== "boolean") {
@@ -328,9 +354,22 @@ export const defineContentType = <
{ contentTypeId: id },
);
}
+ const resolvedIdStrategy = resolveIdStrategy(id, idStrategy);
+ const resolvedVisibility = resolveVisibility(
+ id,
+ visibility,
+ publicationEnabled,
+ );
+ const visibilityEnabled = resolvedVisibility.enabled;
for (const name of fieldNames) {
- assertFieldName(id, name, publicationEnabled, editorialEnabled);
+ assertFieldName(
+ id,
+ name,
+ publicationEnabled,
+ editorialEnabled,
+ visibilityEnabled,
+ );
assertFieldKind(id, name, fieldMap[name]);
assertField(id, name, fieldMap[name]);
}
@@ -368,6 +407,7 @@ export const defineContentType = <
...systemFields,
...(publicationEnabled ? publicationFields : []),
...(editorialEnabled ? editorialFields : []),
+ ...(visibilityEnabled ? visibilityFields : []),
]);
const resolvedIndexes = resolveContentIndexes({
contentTypeId: id,
@@ -389,6 +429,7 @@ export const defineContentType = <
fields: sharedColumns,
publication: publicationEnabled,
tableName,
+ visibility: visibilityEnabled,
});
// Every declared field, in declaration order: the AdminCP renders one form,
@@ -467,6 +508,13 @@ export const defineContentType = <
publication: publicationEnabled,
});
+ const resolvedDuplication = resolveDuplication(
+ id,
+ duplication,
+ fieldMap,
+ resolvedAdmin,
+ );
+
const definition: ContentTypeDefinition<
TId,
TFields,
@@ -479,13 +527,19 @@ export const defineContentType = <
ContentSchedulingEnabled,
ContentLocalizationEnabled,
ContentDeliveryEnabled,
- TPublicPath
+ TPublicPath,
+ TVisibility,
+ ContentDuplicationEnabled,
+ TIdStrategy
> = {
admin: resolvedAdmin,
advanced: resolvedAdvanced,
delivery: resolvedDelivery as ResolvedContentDeliveryConfig<
ContentDeliveryEnabled
>,
+ duplication: resolvedDuplication as ResolvedContentDuplicationConfig<
+ ContentDuplicationEnabled
+ >,
editorial: resolvedEditorial as ResolvedContentEditorialConfig<
ContentEditorialEnabled,
ContentPreviewEnabled,
@@ -494,6 +548,7 @@ export const defineContentType = <
// The rebound copy, so a self-relation resolves rather than throwing.
fields: fieldMap as unknown as TFields,
id,
+ idStrategy: resolvedIdStrategy as TIdStrategy,
indexes: resolvedIndexes,
liveEditing: { enabled: liveEditing === true },
localization: resolvedLocalization as ResolvedContentLocalizationConfig<
@@ -521,21 +576,28 @@ export const defineContentType = <
ContentSchedulingEnabled,
ContentLocalizationEnabled,
ContentDeliveryEnabled,
- TPublicPath
+ TPublicPath,
+ TVisibility,
+ ContentDuplicationEnabled,
+ TIdStrategy
>
>({
admin: resolvedAdmin,
advanced: resolvedAdvanced,
editorial: editorialEnabled,
fields: fieldMap,
+ idStrategy: resolvedIdStrategy,
localization: resolvedLocalization,
publicApi: resolvedPublicApi,
publication: publicationEnabled,
+ visibility: visibilityEnabled,
}),
search: resolvedSearch as ResolvedContentSearchConfig<
ContentSearchEnabled
>,
tableName,
+ visibility:
+ resolvedVisibility as ResolvedContentVisibilityConfig,
};
return definition;
diff --git a/packages/vitnode/src/content/errors.ts b/packages/vitnode/src/content/errors.ts
index a5667da8b2..3e6a18f7ec 100644
--- a/packages/vitnode/src/content/errors.ts
+++ b/packages/vitnode/src/content/errors.ts
@@ -1,4 +1,5 @@
import type { CONTENT_ADVANCED_CODES } from "./const";
+import type { ContentId } from "./ids";
import type { ContentScheduleCode } from "./schedules";
export type ContentAdvancedCode =
@@ -62,7 +63,7 @@ export class ContentVersionConflict extends ContentEngineError {
contentTypeId: string;
currentVersion: number;
expectedVersion: number;
- itemId: number;
+ itemId: ContentId;
}) {
super(
`This record is at version ${currentVersion}, not ${expectedVersion}. Someone else saved it first.`,
@@ -77,7 +78,7 @@ export class ContentVersionConflict extends ContentEngineError {
readonly currentVersion: number;
readonly expectedVersion: number;
- readonly itemId: number;
+ readonly itemId: ContentId;
}
/**
@@ -130,7 +131,7 @@ export class ContentTranslationVersionConflict extends ContentEngineError {
contentTypeId: string;
currentVersion: number;
expectedVersion: number;
- itemId: number;
+ itemId: ContentId;
locale: string;
}) {
super(
@@ -147,7 +148,7 @@ export class ContentTranslationVersionConflict extends ContentEngineError {
readonly currentVersion: number;
readonly expectedVersion: number;
- readonly itemId: number;
+ readonly itemId: ContentId;
readonly locale: string;
}
@@ -166,7 +167,7 @@ export class ContentDefaultTranslationRequired extends ContentEngineError {
locale,
}: {
contentTypeId: string;
- itemId: number;
+ itemId: ContentId;
locale: string;
}) {
super(
@@ -179,7 +180,7 @@ export class ContentDefaultTranslationRequired extends ContentEngineError {
this.locale = locale;
}
- readonly itemId: number;
+ readonly itemId: ContentId;
readonly locale: string;
}
@@ -190,7 +191,7 @@ export class ContentTranslationExists extends ContentEngineError {
locale,
}: {
contentTypeId: string;
- itemId: number;
+ itemId: ContentId;
locale: string;
}) {
super(
@@ -203,7 +204,7 @@ export class ContentTranslationExists extends ContentEngineError {
this.locale = locale;
}
- readonly itemId: number;
+ readonly itemId: ContentId;
readonly locale: string;
}
@@ -239,7 +240,7 @@ export class ContentTranslationItemMissing extends ContentEngineError {
itemId,
}: {
contentTypeId: string;
- itemId: number;
+ itemId: ContentId;
}) {
super(`No record with id ${itemId} to translate.`, { contentTypeId });
@@ -247,7 +248,7 @@ export class ContentTranslationItemMissing extends ContentEngineError {
this.itemId = itemId;
}
- readonly itemId: number;
+ readonly itemId: ContentId;
}
/**
@@ -274,7 +275,7 @@ export class ContentAdvancedInputError extends ContentInputError {
code: ContentAdvancedCode;
contentTypeId: string;
field: string;
- ids: number[];
+ ids: ContentId[];
message: string;
}) {
super(message, { contentTypeId });
@@ -287,7 +288,7 @@ export class ContentAdvancedInputError extends ContentInputError {
readonly code: ContentAdvancedCode;
readonly field: string;
- readonly ids: number[];
+ readonly ids: ContentId[];
}
/**
@@ -374,3 +375,53 @@ export class ContentScheduleError extends ContentEngineError {
readonly code: ContentScheduleCode;
}
+
+export class ContentDuplicateSlugConflict extends ContentEngineError {
+ constructor({
+ contentTypeId,
+ field,
+ locale,
+ slug,
+ }: {
+ contentTypeId: string;
+ field: string;
+ locale: null | string;
+ slug: string;
+ }) {
+ super(
+ locale === null
+ ? `Could not find a free "${field}" for the copy (last tried "${slug}"). Send "${field}" explicitly.`
+ : `Could not find a free "${field}" in "${locale}" for the copy (last tried "${slug}"). Send "${field}" explicitly.`,
+ { contentTypeId },
+ );
+
+ this.name = "ContentDuplicateSlugConflict";
+ this.field = field;
+ this.locale = locale;
+ this.slug = slug;
+ }
+
+ readonly field: string;
+ readonly locale: null | string;
+ readonly slug: string;
+}
+
+export class ContentDuplicateUniqueRequired extends ContentEngineError {
+ constructor({
+ contentTypeId,
+ fields,
+ }: {
+ contentTypeId: string;
+ fields: string[];
+ }) {
+ super(
+ `A copy needs a new value for ${fields.map(name => `"${name}"`).join(", ")}: ${fields.length === 1 ? "it is" : "they are"} unique, and the source already holds the current one.`,
+ { contentTypeId },
+ );
+
+ this.name = "ContentDuplicateUniqueRequired";
+ this.fields = fields;
+ }
+
+ readonly fields: string[];
+}
diff --git a/packages/vitnode/src/content/events.ts b/packages/vitnode/src/content/events.ts
index 43e8eb5acd..ed4fe79f93 100644
--- a/packages/vitnode/src/content/events.ts
+++ b/packages/vitnode/src/content/events.ts
@@ -1,3 +1,4 @@
+import type { ContentIdOf } from "./ids";
import type { ContentFieldName, ContentLocalizedFieldName } from "./types";
export type ContentEventAction =
@@ -5,6 +6,8 @@ export type ContentEventAction =
| "deleted"
| "delivery_redirect_created"
| "delivery_slug_changed"
+ | "duplicated"
+ | "hidden"
| "published"
| "restored"
| "schedule_cancelled"
@@ -15,24 +18,48 @@ export type ContentEventAction =
| "translation_restored"
| "translation_unpublished"
| "translation_updated"
+ | "unhidden"
| "unpublished"
| "updated";
-export interface ContentCreatedPayload {
- contentId: number;
+export interface ContentCreatedPayload {
+ contentId: TId;
}
-export interface ContentDeletedPayload {
- contentId: number;
+export interface ContentDuplicableCreatedPayload {
+ contentId: TId;
+ duplicatedFromId?: TId;
+}
+
+export interface ContentDuplicatedPayload {
+ actorUserId: null | number;
+ contentId: TId;
+ contentTypeId: string;
+ sourceId: TId;
+}
+
+export interface ContentHiddenPayload {
+ actorUserId: null | number;
+ contentId: TId;
+ hiddenAt: Date;
+}
+
+export interface ContentUnhiddenPayload {
+ actorUserId: null | number;
+ contentId: TId;
+}
+
+export interface ContentDeletedPayload {
+ contentId: TId;
}
export interface ContentUpdatedPayload {
changedFields: ContentFieldName[];
- contentId: number;
+ contentId: ContentIdOf;
}
-export interface ContentPublishedPayload {
- contentId: number;
+export interface ContentPublishedPayload {
+ contentId: TId;
/** When the row was published for the *first* time; never rewritten. */
publishedAt: Date;
@@ -41,8 +68,8 @@ export interface ContentPublishedPayload {
scheduleId?: number;
}
-export interface ContentUnpublishedPayload {
- contentId: number;
+export interface ContentUnpublishedPayload {
+ contentId: TId;
/** As on `published`: who scheduled it, when a schedule fired it. */
scheduledBy?: null | number;
/** As on `published`: the booking, and the idempotency key for retries. */
@@ -51,7 +78,7 @@ export interface ContentUnpublishedPayload {
export interface ContentRestoredPayload {
changedFields: ContentFieldName[];
- contentId: number;
+ contentId: ContentIdOf;
/** The revision the values came from. */
restoredFromRevisionId: number;
/** The revision this restore itself created. */
@@ -59,19 +86,19 @@ export interface ContentRestoredPayload {
version: number;
}
-export interface ContentScheduledPayload {
+export interface ContentScheduledPayload {
action: "publish" | "unpublish";
/** The staff member who booked it. */
actorUserId: null | number;
- contentId: number;
+ contentId: TId;
scheduledFor: Date;
scheduleId: number;
}
-export interface ContentScheduleCancelledPayload {
+export interface ContentScheduleCancelledPayload {
action: "publish" | "unpublish";
actorUserId: null | number;
- contentId: number;
+ contentId: TId;
scheduleId: number;
}
@@ -79,11 +106,11 @@ type ContentPublicationEventsFor =
TDefinition extends { publication: { enabled: true } }
? Record<
`content.${TDefinition["id"]}.published`,
- ContentPublishedPayload
+ ContentPublishedPayload>
> &
Record<
`content.${TDefinition["id"]}.unpublished`,
- ContentUnpublishedPayload
+ ContentUnpublishedPayload>
>
: Record;
@@ -103,11 +130,11 @@ type ContentEditorialEventsFor =
(TDefinition extends { editorial: { scheduling: { enabled: true } } }
? Record<
`content.${TDefinition["id"]}.schedule_cancelled`,
- ContentScheduleCancelledPayload
+ ContentScheduleCancelledPayload>
> &
Record<
`content.${TDefinition["id"]}.scheduled`,
- ContentScheduledPayload
+ ContentScheduledPayload>
>
: Record);
@@ -125,8 +152,8 @@ type ContentEditorialEventsFor =
* inspect `changedFields` to tell them apart would get it wrong the first time a
* field was renamed.
*/
-export interface ContentTranslationEventPayload {
- contentId: number;
+export interface ContentTranslationEventPayload {
+ contentId: TId;
languageId: number;
/** The canonical `core_languages.code`. */
locale: string;
@@ -134,7 +161,9 @@ export interface ContentTranslationEventPayload {
version: number;
}
-export interface ContentTranslationCreatedPayload extends ContentTranslationEventPayload {
+export interface ContentTranslationCreatedPayload<
+ TId = number,
+> extends ContentTranslationEventPayload {
/**
* The revision this mutation wrote.
*
@@ -147,29 +176,35 @@ export interface ContentTranslationCreatedPayload extends ContentTranslationEven
export interface ContentTranslationUpdatedPayload<
TDefinition,
-> extends ContentTranslationEventPayload {
+> extends ContentTranslationEventPayload> {
/** Localized field names this write moved. Never a shared field. */
changedFields: ContentLocalizedFieldName[];
revisionId?: number;
}
-export interface ContentTranslationDeletedPayload extends ContentTranslationEventPayload {
+export interface ContentTranslationDeletedPayload<
+ TId = number,
+> extends ContentTranslationEventPayload {
revisionId?: number;
}
-export interface ContentTranslationPublishedPayload extends ContentTranslationEventPayload {
+export interface ContentTranslationPublishedPayload<
+ TId = number,
+> extends ContentTranslationEventPayload {
/** When this language was first published; never rewritten. */
publishedAt: Date | null;
revisionId?: number;
}
-export interface ContentTranslationUnpublishedPayload extends ContentTranslationEventPayload {
+export interface ContentTranslationUnpublishedPayload<
+ TId = number,
+> extends ContentTranslationEventPayload {
revisionId?: number;
}
export interface ContentTranslationRestoredPayload<
TDefinition,
-> extends ContentTranslationEventPayload {
+> extends ContentTranslationEventPayload> {
changedFields: ContentLocalizedFieldName[];
/** The revision the values came from - always one of this locale's own. */
restoredFromRevisionId: number;
@@ -204,21 +239,21 @@ type ContentLocalizationEventsFor =
}
? Record<
`content.${TDefinition["id"]}.translation_published`,
- ContentTranslationPublishedPayload
+ ContentTranslationPublishedPayload>
> &
Record<
`content.${TDefinition["id"]}.translation_unpublished`,
- ContentTranslationUnpublishedPayload
+ ContentTranslationUnpublishedPayload>
>
: Record) &
(TDefinition extends { localization: { enabled: true } }
? Record<
`content.${TDefinition["id"]}.translation_created`,
- ContentTranslationCreatedPayload
+ ContentTranslationCreatedPayload>
> &
Record<
`content.${TDefinition["id"]}.translation_deleted`,
- ContentTranslationDeletedPayload
+ ContentTranslationDeletedPayload>
> &
Record<
`content.${TDefinition["id"]}.translation_updated`,
@@ -239,10 +274,10 @@ type ContentLocalizationEventsFor =
* `locale` is `null` when the slug is shared - a content type that is not
* localized, or a localized one whose slug lives on the base row.
*/
-export interface ContentDeliverySlugChangedPayload {
+export interface ContentDeliverySlugChangedPayload {
/** The path the record answers to now. */
canonicalPath: string;
- contentId: number;
+ contentId: TId;
locale: null | string;
/** The path it answered to before, or `null` when it had no public URL yet. */
previousPath: null | string;
@@ -260,10 +295,10 @@ export interface ContentDeliverySlugChangedPayload {
* field", and it is why this is a separate event from the one above rather than a
* boolean on it.
*/
-export interface ContentDeliveryRedirectCreatedPayload {
+export interface ContentDeliveryRedirectCreatedPayload {
/** Where the historical path now redirects to. */
canonicalPath: string;
- contentId: number;
+ contentId: TId;
locale: null | string;
/** The retired path, which now answers with a permanent redirect. */
previousPath: string;
@@ -288,11 +323,31 @@ type ContentDeliveryEventsFor =
TDefinition extends { delivery: { enabled: true } }
? Record<
`content.${TDefinition["id"]}.delivery_redirect_created`,
- ContentDeliveryRedirectCreatedPayload
+ ContentDeliveryRedirectCreatedPayload>
> &
Record<
`content.${TDefinition["id"]}.delivery_slug_changed`,
- ContentDeliverySlugChangedPayload
+ ContentDeliverySlugChangedPayload>
+ >
+ : Record;
+
+type ContentDuplicationEventsFor =
+ TDefinition extends { duplication: { enabled: true } }
+ ? Record<
+ `content.${TDefinition["id"]}.duplicated`,
+ ContentDuplicatedPayload>
+ >
+ : Record;
+
+type ContentVisibilityEventsFor =
+ TDefinition extends { visibility: { enabled: true } }
+ ? Record<
+ `content.${TDefinition["id"]}.hidden`,
+ ContentHiddenPayload>
+ > &
+ Record<
+ `content.${TDefinition["id"]}.unhidden`,
+ ContentUnhiddenPayload>
>
: Record;
@@ -316,11 +371,21 @@ type ContentDeliveryEventsFor =
*/
export type ContentEventsFor =
ContentDeliveryEventsFor &
+ ContentDuplicationEventsFor &
ContentEditorialEventsFor &
ContentLocalizationEventsFor &
ContentPublicationEventsFor &
- Record<`content.${TDefinition["id"]}.created`, ContentCreatedPayload> &
- Record<`content.${TDefinition["id"]}.deleted`, ContentDeletedPayload> &
+ ContentVisibilityEventsFor &
+ Record<
+ `content.${TDefinition["id"]}.created`,
+ TDefinition extends { duplication: { enabled: true } }
+ ? ContentDuplicableCreatedPayload>
+ : ContentCreatedPayload>
+ > &
+ Record<
+ `content.${TDefinition["id"]}.deleted`,
+ ContentDeletedPayload>
+ > &
Record<
`content.${TDefinition["id"]}.updated`,
ContentUpdatedPayload
diff --git a/packages/vitnode/src/content/fields.ts b/packages/vitnode/src/content/fields.ts
index bc4e4d18b5..107c8bea75 100644
--- a/packages/vitnode/src/content/fields.ts
+++ b/packages/vitnode/src/content/fields.ts
@@ -11,6 +11,7 @@ import type {
ContentNumberField,
ContentOnDelete,
ContentRelationField,
+ ContentRelationTarget,
ContentRepeatableField,
ContentRichTextField,
ContentSlugField,
@@ -293,6 +294,7 @@ const relation = <
TMultiple extends boolean = false,
TOrdered extends boolean = false,
TSelf extends boolean = false,
+ TTarget extends ContentRelationTarget = ContentRelationTarget<"serial">,
>(
args: SharedArgs & {
min?: number;
@@ -301,9 +303,16 @@ const relation = <
ordered?: TOrdered;
/** The target is this content type. Mutually exclusive with `target`. */
self?: TSelf;
- target?: () => AnyContentTypeDefinition;
+ target?: () => TTarget;
},
-): ContentRelationField => ({
+): ContentRelationField<
+ TRequired,
+ TNullable,
+ TMultiple,
+ TOrdered,
+ TSelf,
+ TSelf extends true ? "serial" : TTarget["idStrategy"]
+> => ({
...args,
...shared(args),
kind: "relation",
@@ -314,7 +323,9 @@ const relation = <
onDelete: args.onDelete ?? "restrict",
ordered: (args.ordered ?? false) as TOrdered,
self: (args.self ?? false) as TSelf,
- target: args.target ?? unboundSelfTarget,
+ target: (args.target ?? unboundSelfTarget) as () => ContentRelationTarget<
+ TSelf extends true ? "serial" : TTarget["idStrategy"]
+ >,
});
const group = <
diff --git a/packages/vitnode/src/content/id-strategy.test-d.ts b/packages/vitnode/src/content/id-strategy.test-d.ts
new file mode 100644
index 0000000000..77588a7237
--- /dev/null
+++ b/packages/vitnode/src/content/id-strategy.test-d.ts
@@ -0,0 +1,156 @@
+import { describe, expectTypeOf, it } from "vitest";
+
+import type {
+ testArticleContentType,
+ testBigintEventContentType,
+ testBigintPageContentType,
+ testCategoryContentType,
+ testUuidTagContentType,
+} from "@/tests/content-fixtures";
+
+import type { ContentEventsFor } from "./events";
+import type { ContentIdOf } from "./ids";
+import type { ContentService } from "./server/service";
+import type {
+ ContentCreateInput,
+ ContentDetail,
+ ContentFilterInput,
+ ContentPublicRelation,
+ ContentPublicSelect,
+ ContentRelationTarget,
+ ContentSelect,
+ ContentTranslationRow,
+} from "./types";
+
+type Tag = typeof testUuidTagContentType;
+type Event = typeof testBigintEventContentType;
+type Page = typeof testBigintPageContentType;
+
+describe("ContentIdOf", () => {
+ it("is a number for serial and a string for uuid and bigint", () => {
+ expectTypeOf<
+ ContentIdOf
+ >().toEqualTypeOf();
+ expectTypeOf>().toEqualTypeOf();
+ expectTypeOf>().toEqualTypeOf();
+ });
+});
+
+describe("rows", () => {
+ it("types `id` by the content type's own strategy", () => {
+ expectTypeOf["id"]>().toEqualTypeOf();
+ expectTypeOf["id"]>().toEqualTypeOf();
+ expectTypeOf<
+ ContentSelect["id"]
+ >().toEqualTypeOf();
+ });
+
+ it("types a to-one relation by its target's strategy", () => {
+ expectTypeOf["primaryTag"]>().toEqualTypeOf<
+ null | string
+ >();
+ expectTypeOf["category"]>().toEqualTypeOf<
+ null | number
+ >();
+ expectTypeOf["category"]>().toEqualTypeOf<
+ null | number
+ >();
+ });
+
+ it("types a to-many relation by its target's strategy", () => {
+ expectTypeOf["tags"]>().toEqualTypeOf();
+ expectTypeOf["tags"]>().toEqualTypeOf<
+ string[] | undefined
+ >();
+ });
+
+ it("re-points a self-relation at the owner's strategy", () => {
+ expectTypeOf["relatedEvents"]>().toEqualTypeOf<
+ string[]
+ >();
+ expectTypeOf["relatedTags"]>().toEqualTypeOf();
+ });
+
+ it("keeps a repeatable child's own id a number", () => {
+ expectTypeOf<
+ ContentDetail["sessions"][number]["id"]
+ >().toEqualTypeOf();
+ });
+
+ it("types a translation's itemId by the owner's strategy", () => {
+ expectTypeOf<
+ ContentTranslationRow["itemId"]
+ >().toEqualTypeOf();
+ expectTypeOf<
+ ContentTranslationRow["itemId"]
+ >().toEqualTypeOf();
+ });
+
+ it("types a membership filter by the target's strategy", () => {
+ expectTypeOf["tags"]>().toEqualTypeOf<
+ undefined | { contains: string }
+ >();
+ });
+});
+
+describe("the public projection", () => {
+ it("carries string ids for uuid and bigint", () => {
+ expectTypeOf["id"]>().toEqualTypeOf();
+ expectTypeOf<
+ ContentPublicSelect["primaryTag"]
+ >().toEqualTypeOf | null>();
+ expectTypeOf<
+ ContentPublicSelect["category"]
+ >().toEqualTypeOf();
+ expectTypeOf["tags"]>().toEqualTypeOf<
+ string[]
+ >();
+ });
+});
+
+describe("services", () => {
+ it("take the content type's own id", () => {
+ expectTypeOf<
+ Parameters["findById"]>[0]
+ >().toEqualTypeOf();
+ expectTypeOf<
+ Parameters["findById"]>[0]
+ >().toEqualTypeOf();
+ });
+
+ it("type a collection's targets by their own strategy", () => {
+ type Tags = ContentService["relations"]["tags"];
+
+ expectTypeOf[0]>().toEqualTypeOf();
+ expectTypeOf[1]>().toEqualTypeOf();
+ expectTypeOf>>().toEqualTypeOf();
+ });
+});
+
+describe("events", () => {
+ it("carry the content type's own id", () => {
+ type Events = ContentEventsFor;
+
+ expectTypeOf<
+ Events["content.test.bigint-event.created"]["contentId"]
+ >().toEqualTypeOf();
+ expectTypeOf<
+ Events["content.test.bigint-event.hidden"]["contentId"]
+ >().toEqualTypeOf();
+ expectTypeOf<
+ ContentEventsFor<
+ typeof testArticleContentType
+ >["content.test.article.created"]["contentId"]
+ >().toEqualTypeOf();
+ });
+});
+
+describe("relation targets", () => {
+ it("infer serial for every relation written before strategies existed", () => {
+ type Category = (typeof testArticleContentType)["fields"]["category"];
+
+ expectTypeOf>().toEqualTypeOf<
+ ContentRelationTarget<"serial">
+ >();
+ });
+});
diff --git a/packages/vitnode/src/content/ids.test.ts b/packages/vitnode/src/content/ids.test.ts
new file mode 100644
index 0000000000..d95578e1a6
--- /dev/null
+++ b/packages/vitnode/src/content/ids.test.ts
@@ -0,0 +1,149 @@
+import { describe, expect, it } from "vitest";
+
+import { testBigintEventContentType } from "@/tests/content-fixtures";
+
+import { ContentEngineError } from "./errors";
+import {
+ compareContentIds,
+ CONTENT_BIGINT_MAX,
+ CONTENT_SERIAL_MAX,
+ contentIdSchema,
+ contentRelationStrategy,
+ isContentId,
+ parseContentId,
+ requireContentId,
+} from "./ids";
+
+const UUID = "0198f6f7-d4a2-7ce1-a2ee-4f5f1f2f3a4b";
+const BEYOND_SAFE = "9007199254740993";
+
+describe("parseContentId", () => {
+ describe("serial", () => {
+ it("reads a positive integer as a number, from a number or its digits", () => {
+ expect(parseContentId("serial", 42)).toBe(42);
+ expect(parseContentId("serial", "42")).toBe(42);
+ expect(parseContentId("serial", CONTENT_SERIAL_MAX)).toBe(
+ CONTENT_SERIAL_MAX,
+ );
+ });
+
+ it.each([0, -1, 1.5, CONTENT_SERIAL_MAX + 1, "007", "1e3", " 1", "", null])(
+ "refuses %o",
+ value => {
+ expect(parseContentId("serial", value)).toBeNull();
+ },
+ );
+ });
+
+ describe("bigint", () => {
+ it("keeps a value beyond Number.MAX_SAFE_INTEGER as its exact digits", () => {
+ expect(parseContentId("bigint", BEYOND_SAFE)).toBe(BEYOND_SAFE);
+ expect(parseContentId("bigint", CONTENT_BIGINT_MAX)).toBe(
+ CONTENT_BIGINT_MAX,
+ );
+ expect(parseContentId("bigint", 9_007_199_254_740_993n)).toBe(
+ BEYOND_SAFE,
+ );
+ });
+
+ it("accepts a safe JavaScript number, and refuses one that was already rounded", () => {
+ expect(parseContentId("bigint", 42)).toBe("42");
+ expect(parseContentId("bigint", 2 ** 53)).toBeNull();
+ });
+
+ it.each(["9223372036854775808", "0", "-1", "01", "1.5", "abc", ""])(
+ "refuses %o",
+ value => {
+ expect(parseContentId("bigint", value)).toBeNull();
+ },
+ );
+ });
+
+ describe("uuid", () => {
+ it("accepts the canonical lowercase spelling only", () => {
+ expect(parseContentId("uuid", UUID)).toBe(UUID);
+ expect(parseContentId("uuid", UUID.toUpperCase())).toBeNull();
+ expect(parseContentId("uuid", `{${UUID}}`)).toBeNull();
+ expect(parseContentId("uuid", UUID.replaceAll("-", ""))).toBeNull();
+ expect(parseContentId("uuid", 42)).toBeNull();
+ });
+ });
+});
+
+describe("isContentId", () => {
+ it("is true only for the strategy's own representation", () => {
+ expect(isContentId("serial", 7)).toBe(true);
+ expect(isContentId("serial", "7")).toBe(false);
+ expect(isContentId("bigint", "7")).toBe(true);
+ expect(isContentId("bigint", 7)).toBe(false);
+ expect(isContentId("uuid", UUID)).toBe(true);
+ });
+});
+
+describe("requireContentId", () => {
+ it("throws rather than handing back a sentinel", () => {
+ expect(() => requireContentId("uuid", 0, "test.tag")).toThrow(
+ ContentEngineError,
+ );
+ });
+});
+
+describe("compareContentIds", () => {
+ it("orders bigints numerically without losing precision", () => {
+ expect(compareContentIds("bigint", "10", "9")).toBeGreaterThan(0);
+ expect(compareContentIds("bigint", BEYOND_SAFE, "9007199254740992")).toBe(
+ 1,
+ );
+ });
+
+ it("orders uuids lexically and serials numerically", () => {
+ expect(compareContentIds("uuid", "a", "b")).toBe(-1);
+ expect(compareContentIds("serial", 10, 9)).toBeGreaterThan(0);
+ });
+});
+
+describe("schemas", () => {
+ it("validate a JSON id per strategy", () => {
+ expect(contentIdSchema("serial").safeParse(7).success).toBe(true);
+ expect(contentIdSchema("serial").safeParse("7").success).toBe(false);
+ expect(contentIdSchema("bigint").safeParse(BEYOND_SAFE).success).toBe(true);
+ expect(contentIdSchema("bigint").safeParse(7).success).toBe(false);
+ expect(contentIdSchema("uuid").safeParse(UUID.toUpperCase()).success).toBe(
+ false,
+ );
+ });
+
+ it("type relation values by the target's strategy, a self-relation by the owner's", () => {
+ const { create } = testBigintEventContentType.schemas;
+
+ expect(
+ create.safeParse({
+ primaryTag: UUID,
+ relatedEvents: [BEYOND_SAFE],
+ tags: [UUID],
+ title: "Valid",
+ }).success,
+ ).toBe(true);
+ expect(create.safeParse({ primaryTag: 7, title: "x" }).success).toBe(false);
+ expect(create.safeParse({ relatedEvents: [7], title: "x" }).success).toBe(
+ false,
+ );
+ expect(create.safeParse({ category: 7, title: "x" }).success).toBe(true);
+ });
+});
+
+describe("contentRelationStrategy", () => {
+ it("is the target's strategy, or the owner's for a self-relation", () => {
+ const { fields } = testBigintEventContentType;
+
+ expect(
+ contentRelationStrategy(testBigintEventContentType, fields.primaryTag),
+ ).toBe("uuid");
+ expect(
+ contentRelationStrategy(testBigintEventContentType, fields.category),
+ ).toBe("serial");
+ expect(
+ contentRelationStrategy(testBigintEventContentType, fields.relatedEvents),
+ ).toBe("bigint");
+ });
+});
diff --git a/packages/vitnode/src/content/ids.ts b/packages/vitnode/src/content/ids.ts
new file mode 100644
index 0000000000..768b31677b
--- /dev/null
+++ b/packages/vitnode/src/content/ids.ts
@@ -0,0 +1,206 @@
+import { z } from "zod";
+
+import type { CONTENT_ID_STRATEGIES } from "./const";
+
+import { CONTENT_ID_KEY_LENGTH } from "./const";
+import { ContentEngineError } from "./errors";
+
+export type ContentIdStrategy = (typeof CONTENT_ID_STRATEGIES)[number];
+
+export type ContentIdOfStrategy = TStrategy extends "serial"
+ ? number
+ : string;
+
+export type ContentIdOf = TDefinition extends {
+ idStrategy: infer TStrategy;
+}
+ ? ContentIdOfStrategy
+ : number;
+
+export type ContentId = number | string;
+
+export const CONTENT_SERIAL_MAX = 2_147_483_647;
+
+export const CONTENT_BIGINT_MAX = "9223372036854775807";
+
+const SERIAL_PATTERN = /^[1-9][0-9]{0,9}$/;
+const BIGINT_PATTERN = /^[1-9][0-9]{0,18}$/;
+const UUID_PATTERN =
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
+
+const withinBigint = (value: string): boolean =>
+ value.length < CONTENT_BIGINT_MAX.length ||
+ (value.length === CONTENT_BIGINT_MAX.length && value <= CONTENT_BIGINT_MAX);
+
+export const parseContentId = (
+ strategy: ContentIdStrategy,
+ value: unknown,
+): ContentId | null => {
+ if (strategy === "uuid") {
+ return typeof value === "string" && UUID_PATTERN.test(value) ? value : null;
+ }
+
+ if (strategy === "bigint") {
+ if (typeof value === "number") {
+ return Number.isSafeInteger(value) && value > 0 ? String(value) : null;
+ }
+ if (typeof value === "bigint") {
+ const text = value.toString();
+
+ return value > 0n && withinBigint(text) ? text : null;
+ }
+
+ return typeof value === "string" &&
+ BIGINT_PATTERN.test(value) &&
+ withinBigint(value)
+ ? value
+ : null;
+ }
+
+ if (typeof value === "number") {
+ return Number.isInteger(value) && value > 0 && value <= CONTENT_SERIAL_MAX
+ ? value
+ : null;
+ }
+ if (typeof value === "string" && SERIAL_PATTERN.test(value)) {
+ const parsed = Number(value);
+
+ return parsed <= CONTENT_SERIAL_MAX ? parsed : null;
+ }
+
+ return null;
+};
+
+export const parseContentIdOf = <
+ TDefinition extends { idStrategy: ContentIdStrategy },
+>(
+ definition: TDefinition,
+ value: unknown,
+): ContentIdOf | null =>
+ parseContentId(
+ definition.idStrategy,
+ value,
+ ) as ContentIdOf | null;
+
+export const contentIdKey = (id: ContentId): string => String(id);
+
+export const contentIdFromKey = (
+ strategy: ContentIdStrategy,
+ key: string,
+): ContentId | null => parseContentId(strategy, key);
+
+export const isContentId = (
+ strategy: ContentIdStrategy,
+ value: unknown,
+): value is ContentId => {
+ const parsed = parseContentId(strategy, value);
+
+ return parsed !== null && parsed === value;
+};
+
+export const contentIdSchema = (
+ strategy: ContentIdStrategy,
+): z.ZodType =>
+ strategy === "serial"
+ ? z.number().int().positive().max(CONTENT_SERIAL_MAX)
+ : strategy === "bigint"
+ ? z
+ .string()
+ .regex(BIGINT_PATTERN, "Expected a positive decimal bigint.")
+ .refine(withinBigint, "Out of range for a bigint identifier.")
+ : z.string().regex(UUID_PATTERN, "Expected a lowercase UUID.");
+
+export const contentAnyIdSchema: z.ZodType = z.union([
+ z.number().int().positive().max(CONTENT_SERIAL_MAX),
+ z.string().min(1).max(CONTENT_ID_KEY_LENGTH),
+]);
+
+export const contentIdParamSchema = (
+ strategy: ContentIdStrategy,
+): z.ZodType =>
+ z.string().transform((value, ctx) => {
+ const parsed = parseContentId(strategy, value);
+ if (parsed === null) {
+ ctx.addIssue({
+ code: "custom",
+ message:
+ strategy === "uuid"
+ ? "Expected a lowercase UUID."
+ : "Expected a positive integer identifier.",
+ });
+
+ return z.NEVER;
+ }
+
+ return parsed;
+ });
+
+export const compareContentIds = (
+ strategy: ContentIdStrategy,
+ a: ContentId,
+ b: ContentId,
+): number => {
+ if (strategy === "serial") return Number(a) - Number(b);
+
+ const left = String(a);
+ const right = String(b);
+ if (strategy === "bigint" && left.length !== right.length) {
+ return left.length - right.length;
+ }
+
+ return left < right ? -1 : left > right ? 1 : 0;
+};
+
+export const requireContentId = (
+ strategy: ContentIdStrategy,
+ value: unknown,
+ contentTypeId?: string,
+): ContentId => {
+ const parsed = parseContentId(strategy, value);
+ if (parsed === null) {
+ throw new ContentEngineError(
+ `Expected a ${strategy} record identifier, got ${JSON.stringify(typeof value === "bigint" ? value.toString() : value)}.`,
+ { contentTypeId },
+ );
+ }
+
+ return parsed;
+};
+
+export const contentIdsOf = (
+ strategy: ContentIdStrategy,
+ values: readonly unknown[],
+): ContentId[] => {
+ const ids: ContentId[] = [];
+ for (const value of values) {
+ const parsed = parseContentId(strategy, value);
+ if (parsed !== null) ids.push(parsed);
+ }
+
+ return ids;
+};
+
+export const contentIdSqlType = (
+ strategy: ContentIdStrategy,
+): "bigint" | "integer" | "uuid" =>
+ strategy === "serial" ? "integer" : strategy;
+
+export const contentRelationStrategy = (
+ owner: { id: string; idStrategy: ContentIdStrategy },
+ fieldValue: {
+ self: boolean;
+ target: () => undefined | { idStrategy: ContentIdStrategy };
+ },
+): ContentIdStrategy => {
+ if (fieldValue.self) return owner.idStrategy;
+
+ const target = fieldValue.target();
+ if (!target) {
+ throw new ContentEngineError(
+ "A relation's target resolved to nothing. Usually a circular import between content type modules that read a target while it was still loading.",
+ { contentTypeId: owner.id },
+ );
+ }
+
+ return target.idStrategy;
+};
diff --git a/packages/vitnode/src/content/index.ts b/packages/vitnode/src/content/index.ts
index c90c62355c..a101b634ae 100644
--- a/packages/vitnode/src/content/index.ts
+++ b/packages/vitnode/src/content/index.ts
@@ -76,10 +76,12 @@ export type {
export {
parseContentConflict,
parseContentDeliveryConflict,
+ parseContentDuplicateRejection,
parseContentTranslationConflict,
parseContentUnprocessable,
zodContentConflict,
zodContentDeliveryConflict,
+ zodContentDuplicateRejection,
zodContentTranslationConflict,
zodContentUnprocessable,
} from "./conflicts";
@@ -88,6 +90,7 @@ export type {
ContentConflictCode,
ContentDeliveryCode,
ContentDeliveryConflict,
+ ContentDuplicateRejection,
ContentTranslationConflict,
ContentTranslationConflictCode,
ContentUnprocessable,
@@ -107,6 +110,7 @@ export {
CONTENT_DELIVERY_REDIRECT_STATUS,
CONTENT_DELIVERY_RESOLUTIONS,
CONTENT_DELIVERY_TITLE_KINDS,
+ CONTENT_DUPLICATE_CODES,
CONTENT_EDITORIAL_FIELDS,
CONTENT_ENUM_DEFAULT_LENGTH,
CONTENT_FILE_CODES,
@@ -163,6 +167,9 @@ export {
CONTENT_TRANSLATION_SYSTEM_FIELDS,
CONTENT_TRANSLATION_TABLE_SUFFIX,
CONTENT_UNPROCESSABLE_CODES,
+ CONTENT_VISIBILITY_ACTIONS,
+ CONTENT_VISIBILITY_FIELDS,
+ CONTENT_VISIBILITY_FILTERS,
isContentPublicationStatus,
isContentSitemapChangeFrequency,
isFilterableFieldKind,
@@ -200,6 +207,8 @@ export {
ContentDefaultTranslationRequired,
ContentDeliveryNotEnabled,
ContentDeliverySlugReserved,
+ ContentDuplicateSlugConflict,
+ ContentDuplicateUniqueRequired,
ContentEngineError,
ContentInputError,
ContentLanguageError,
@@ -215,8 +224,11 @@ export type {
ContentDeletedPayload,
ContentDeliveryRedirectCreatedPayload,
ContentDeliverySlugChangedPayload,
+ ContentDuplicableCreatedPayload,
+ ContentDuplicatedPayload,
ContentEventAction,
ContentEventsFor,
+ ContentHiddenPayload,
ContentPublishedPayload,
ContentRestoredPayload,
ContentTranslationCreatedPayload,
@@ -226,6 +238,7 @@ export type {
ContentTranslationRestoredPayload,
ContentTranslationUnpublishedPayload,
ContentTranslationUpdatedPayload,
+ ContentUnhiddenPayload,
ContentUnpublishedPayload,
ContentUpdatedPayload,
} from "./events";
@@ -254,6 +267,29 @@ export type {
ContentFileRejection,
} from "./files";
export { clampWithFingerprint, fingerprint } from "./hash";
+export {
+ compareContentIds,
+ CONTENT_BIGINT_MAX,
+ CONTENT_SERIAL_MAX,
+ contentAnyIdSchema,
+ contentIdFromKey,
+ contentIdKey,
+ contentIdParamSchema,
+ contentIdSchema,
+ contentIdsOf,
+ contentIdSqlType,
+ contentRelationStrategy,
+ isContentId,
+ parseContentId,
+ parseContentIdOf,
+ requireContentId,
+} from "./ids";
+export type {
+ ContentId,
+ ContentIdOf,
+ ContentIdOfStrategy,
+ ContentIdStrategy,
+} from "./ids";
export {
contentIndexName,
contentTranslationPrimaryKeyName,
@@ -389,6 +425,9 @@ export type {
ContentDeliverySeoConfig,
ContentDeliverySitemapConfig,
ContentDeliveryTitleField,
+ ContentDuplicationConfig,
+ ContentDuplicationEnabled,
+ ContentDuplicationInput,
ContentEditorialConfig,
ContentEditorialEnabled,
ContentEditorialField,
@@ -427,7 +466,11 @@ export type {
ContentPublicSelect,
ContentReferenceField,
ContentReferenceFieldName,
+ ContentReferenceIdOf,
ContentRelationField,
+ ContentRelationFilter,
+ ContentRelationIdOf,
+ ContentRelationTarget,
ContentRichTextField,
ContentSchedulingEnabled,
ContentSearchAuthorField,
@@ -452,10 +495,14 @@ export type {
ContentUpdateInput,
ContentUserField,
ContentValuesOf,
+ ContentVisibilityField,
+ ContentVisibilityFilter,
DeliverableContentTypeDefinition,
+ DuplicableContentTypeDefinition,
EditorialContentTypeDefinition,
FilterableContentFieldKind,
FilterableContentFieldName,
+ HideableContentTypeDefinition,
LocalizedContentTypeDefinition,
PreviewableContentTypeDefinition,
PublicContentTypeDefinition,
@@ -463,12 +510,19 @@ export type {
ResolvedContentAdminConfig,
ResolvedContentDeliveryConfig,
ResolvedContentDeliverySeoConfig,
+ ResolvedContentDuplicationConfig,
ResolvedContentEditorialConfig,
ResolvedContentIndex,
ResolvedContentLocalizationConfig,
ResolvedContentPublicApiConfig,
ResolvedContentPublicationConfig,
ResolvedContentSearchConfig,
+ ResolvedContentVisibilityConfig,
SchedulableContentTypeDefinition,
SearchableContentTypeDefinition,
} from "./types";
+export { contentVisibilityTransition, isContentHidden } from "./visibility";
+export type {
+ ContentVisibilityAction,
+ ContentVisibilityTransition,
+} from "./visibility";
diff --git a/packages/vitnode/src/content/indexes.ts b/packages/vitnode/src/content/indexes.ts
index b6ff7daa25..eef7a71974 100644
--- a/packages/vitnode/src/content/indexes.ts
+++ b/packages/vitnode/src/content/indexes.ts
@@ -192,12 +192,14 @@ export const resolveContentIndexes = ({
fields,
publication = false,
tableName,
+ visibility = false,
}: {
contentTypeId: string;
declared: readonly ContentIndexConfig[];
fields: ContentFieldMap;
publication?: boolean;
tableName: string;
+ visibility?: boolean;
}): ResolvedContentIndex[] => {
const seenNames = new Map();
const seenSignatures = new Set();
@@ -252,6 +254,7 @@ export const resolveContentIndexes = ({
...(publication
? [named(tableName, { on: ["status", "publishedAt"] })]
: []),
+ ...(visibility ? [named(tableName, { on: ["hiddenBy"] })] : []),
];
const bySignature = new Map();
diff --git a/packages/vitnode/src/content/live/protocol.ts b/packages/vitnode/src/content/live/protocol.ts
index f928534268..673d30a6c7 100644
--- a/packages/vitnode/src/content/live/protocol.ts
+++ b/packages/vitnode/src/content/live/protocol.ts
@@ -1,8 +1,11 @@
+import type { ContentId } from "@/content/ids";
+
+import { contentIdKey } from "@/content/ids";
import { createWebSocketChannel } from "@/ws/types";
export interface ContentLiveRoomRef {
contentTypeId: string;
- itemId: number;
+ itemId: ContentId;
}
export interface ContentLiveDocRef extends ContentLiveRoomRef {
@@ -138,7 +141,8 @@ export const contentLiveChannel = createWebSocketChannel<
export const contentLiveRoom = ({
contentTypeId,
itemId,
-}: ContentLiveRoomRef): string => `content:${contentTypeId}:${itemId}`;
+}: ContentLiveRoomRef): string =>
+ `content:${contentTypeId}:${contentIdKey(itemId)}`;
export const contentLiveDocRoom = ({
contentTypeId,
@@ -146,12 +150,14 @@ export const contentLiveDocRoom = ({
itemId,
locale,
}: ContentLiveDocRef): string =>
- `content-doc:${contentTypeId}:${itemId}:${field}:${locale ?? "_"}`;
+ `content-doc:${contentTypeId}:${contentIdKey(itemId)}:${field}:${locale ?? "_"}`;
export const sameContentLiveRoom = (
a: ContentLiveRoomRef,
b: ContentLiveRoomRef,
-): boolean => a.contentTypeId === b.contentTypeId && a.itemId === b.itemId;
+): boolean =>
+ a.contentTypeId === b.contentTypeId &&
+ contentIdKey(a.itemId) === contentIdKey(b.itemId);
export const sameContentLiveDoc = (
a: ContentLiveDocRef,
diff --git a/packages/vitnode/src/content/public.test-d.ts b/packages/vitnode/src/content/public.test-d.ts
index 0eb0766687..c866cad54b 100644
--- a/packages/vitnode/src/content/public.test-d.ts
+++ b/packages/vitnode/src/content/public.test-d.ts
@@ -8,7 +8,7 @@ import type {
import { testPostContentType } from "@/tests/content-fixtures";
import type {
- ContentPublicReadOptions,
+ ContentPublicItemReadOptions,
ContentPublicService,
ContentPublicSlugReadOptions,
} from "./server/public-service";
@@ -180,7 +180,7 @@ describe("publicApi types", () => {
// names a *language*, which chooses which translation the predicate runs
// against and can never relax it.
expectTypeOf().parameters.toEqualTypeOf<
- [number, ContentPublicReadOptions?]
+ [number, ContentPublicItemReadOptions?]
>();
expectTypeOf().parameters.toEqualTypeOf<
[string, ContentPublicSlugReadOptions?]
diff --git a/packages/vitnode/src/content/registry.ts b/packages/vitnode/src/content/registry.ts
index d12c050b5c..8a0fc15faa 100644
--- a/packages/vitnode/src/content/registry.ts
+++ b/packages/vitnode/src/content/registry.ts
@@ -3,6 +3,7 @@ import type {
PermissionStaffEntryInput,
PermissionStaffModulesInput,
} from "../api/lib/permission-staff";
+import type { ContentId } from "./ids";
import type { AnyContentTypeDefinition } from "./types";
import {
@@ -16,6 +17,7 @@ import {
RESERVED_FILTER_KEYS,
} from "./const";
import { ContentEngineError } from "./errors";
+import { contentIdKey } from "./ids";
import { partitionContentFields } from "./localization";
/** A definition plus the plugin that registered it. */
@@ -342,9 +344,9 @@ export const contentCreateHref = (
/** `/admin/content/blog/articles/42/edit` - the generated edit **page**. */
export const contentEditHref = (
definition: ContentAdminAddressable,
- itemId: number,
+ itemId: ContentId,
): string =>
- `${contentAdminHref(definition)}/${itemId}/${CONTENT_ADMIN_EDIT_SEGMENT}`;
+ `${contentAdminHref(definition)}/${contentIdKey(itemId)}/${CONTENT_ADMIN_EDIT_SEGMENT}`;
/**
* The edit URL with `{id}` still in it.
@@ -355,11 +357,7 @@ export const contentEditHref = (
*/
export const contentEditHrefTemplate = (
definition: ContentAdminAddressable,
-): string =>
- contentEditHref(
- definition,
- CONTENT_EDIT_HREF_PLACEHOLDER as unknown as number,
- );
+): string => contentEditHref(definition, CONTENT_EDIT_HREF_PLACEHOLDER);
/** The token {@link contentEditHrefTemplate} leaves behind for the client. */
export const CONTENT_EDIT_HREF_PLACEHOLDER = "{id}";
@@ -397,6 +395,14 @@ export const contentPermissionEntries = (
},
]
: []),
+ ...(definition?.visibility.enabled
+ ? [
+ {
+ dependsOn: [CONTENT_PERMISSIONS.view],
+ permission: CONTENT_PERMISSIONS.hide,
+ },
+ ]
+ : []),
// Restoring is the one generated operation that rewrites many fields at once
// from a source the editor did not type, so it gets its own gate. It depends
// on `can_edit` rather than `can_view`: somebody who may not edit must not
@@ -488,6 +494,7 @@ export const contentFilterableFields = (
.filter(([, field]) => isFilterableFieldKind(field.kind))
.map(([name]) => name),
...(definition.publication.enabled ? ["status"] : []),
+ ...(definition.visibility.enabled ? ["visibility"] : []),
].sort((a, b) => a.localeCompare(b));
};
diff --git a/packages/vitnode/src/content/revisions.ts b/packages/vitnode/src/content/revisions.ts
index 6b0bd508ea..7a9ecedfdc 100644
--- a/packages/vitnode/src/content/revisions.ts
+++ b/packages/vitnode/src/content/revisions.ts
@@ -3,6 +3,7 @@ import type {
CONTENT_REVISION_OPERATIONS,
CONTENT_TRANSLATION_REVISION_OPERATIONS,
} from "./const";
+import type { ContentId } from "./ids";
import type { RichTextDocument } from "./rich-text/document";
export type ContentRevisionOperation =
@@ -21,8 +22,8 @@ export interface ContentActor {
export type ContentSnapshotScalar = boolean | null | number | string;
export type ContentSnapshotValue =
+ | ContentId[]
| ContentSnapshotScalar
- | number[]
| Record
| Record[]
| RichTextDocument;
@@ -32,12 +33,13 @@ export interface ContentRevisionSnapshot {
createdAt: string;
/** Every declared field, by name. */
fields: Record;
- id: number;
+ id: ContentId;
/** Present only for a content type with the publication lifecycle. */
publication?: { publishedAt: null | string; status: string };
schemaVersion: number;
updatedAt: string;
version: number;
+ visibility?: { hiddenAt: null | string; hiddenBy: null | number };
}
export interface ContentTranslationRevisionSnapshot {
@@ -45,7 +47,7 @@ export interface ContentTranslationRevisionSnapshot {
createdAt: string;
/** Every *localized* field, by name. */
fields: Record;
- itemId: number;
+ itemId: ContentId;
languageId: number;
/** The canonical `core_languages.code` at the time of the mutation. */
locale: string;
diff --git a/packages/vitnode/src/content/schemas.ts b/packages/vitnode/src/content/schemas.ts
index b2da282c1e..af1163888d 100644
--- a/packages/vitnode/src/content/schemas.ts
+++ b/packages/vitnode/src/content/schemas.ts
@@ -1,5 +1,6 @@
import { z } from "zod";
+import type { ContentIdOf, ContentIdStrategy } from "./ids";
import type {
AnyContentTypeDefinition,
ContentCreateInput,
@@ -32,9 +33,11 @@ import {
CONTENT_RELATION_COLLECTION_MAX,
CONTENT_SLUG_DEFAULT_LENGTH,
CONTENT_SYSTEM_FIELDS,
+ CONTENT_VISIBILITY_FILTERS,
isFilterableFieldKind,
} from "./const";
import { zodContentFileDescriptor } from "./files";
+import { contentIdSchema, parseContentId } from "./ids";
import {
contentLocalizationDisabled,
partitionContentFields,
@@ -62,6 +65,12 @@ const DISABLED_PUBLIC_API: ResolvedContentPublicApiConfig = {
slugField: "",
};
+type ContentIdParamSchemaOf = [ContentIdOf] extends [
+ number,
+]
+ ? z.ZodCoercedNumber
+ : z.ZodType>;
+
export interface ContentTranslationSchemas<
TDefinition = AnyContentTypeDefinition,
> {
@@ -77,7 +86,10 @@ export interface ContentTranslationSchemas<
*/
form: z.ZodObject;
/** Path parameters for a translation route: the item, then the locale. */
- params: z.ZodObject<{ id: z.ZodCoercedNumber; locale: z.ZodString }>;
+ params: z.ZodObject<{
+ id: ContentIdParamSchemaOf;
+ locale: z.ZodString;
+ }>;
/** One translation as it comes back: metadata plus `values`. */
select: z.ZodObject;
/** One translation without its values - what the list route returns. */
@@ -107,7 +119,7 @@ export interface ContentSchemas {
/** `orderBy` allowlist plus direction. */
order: z.ZodObject;
/** Path parameters for the detail/update/delete routes. */
- params: z.ZodObject<{ id: z.ZodCoercedNumber }>;
+ params: z.ZodObject<{ id: ContentIdParamSchemaOf }>;
/**
* Equality filters the public list route accepts, one per
* `publicApi.filterableFields`. Empty when public exposure is off.
@@ -166,9 +178,48 @@ const numberSchema = (fieldValue: {
return schema;
};
-/** Row identifiers are always positive integers, whatever the field kind. */
const referenceSchema = (): z.ZodNumber => z.number().int().positive();
+const recordIdSchema = (strategy: ContentIdStrategy): z.ZodType =>
+ strategy === "serial" ? referenceSchema() : contentIdSchema(strategy);
+
+const recordIdOutputSchema = (strategy: ContentIdStrategy): z.ZodType =>
+ strategy === "serial" ? z.number() : z.string();
+
+const relationStrategyNow = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy,
+): ContentIdStrategy | null => {
+ if (fieldValue.kind !== "relation") return "serial";
+ if (fieldValue.self) return owner;
+
+ try {
+ return (
+ (fieldValue.target() as undefined | { idStrategy?: ContentIdStrategy })
+ ?.idStrategy ?? null
+ );
+ } catch {
+ return null;
+ }
+};
+
+const relationStrategyLater = (
+ fieldValue: ContentFieldDescriptor,
+): ContentIdStrategy =>
+ fieldValue.kind === "relation" ? fieldValue.target().idStrategy : "serial";
+
+const relationIdSchema = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy,
+ build: (strategy: ContentIdStrategy) => z.ZodType = recordIdSchema,
+): z.ZodType => {
+ const strategy = relationStrategyNow(fieldValue, owner);
+
+ return strategy === null
+ ? z.lazy(() => build(relationStrategyLater(fieldValue)))
+ : build(strategy);
+};
+
const blocksSelectSchema = (): z.ZodType => z.array(zodContentNode);
const blocksInputSchema = (fieldValue: ContentFieldDescriptor): z.ZodType =>
@@ -183,7 +234,10 @@ const blocksInputSchema = (fieldValue: ContentFieldDescriptor): z.ZodType =>
);
/** The value as it leaves the API. */
-const baseSelectSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
+const baseSelectSchema = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy = "serial",
+): z.ZodType => {
switch (fieldValue.kind) {
case "blocks":
return blocksSelectSchema();
@@ -217,8 +271,8 @@ const baseSelectSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
return numberSchema(fieldValue);
case "relation":
return fieldValue.multiple
- ? z.array(referenceSchema())
- : referenceSchema();
+ ? z.array(relationIdSchema(fieldValue, owner))
+ : relationIdSchema(fieldValue, owner);
case "repeatable": {
const inner = contentInnerFields(fieldValue);
@@ -256,7 +310,10 @@ const baseSelectSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
};
/** The value as it arrives from a client. `dateTime` is an ISO 8601 string. */
-const baseInputSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
+const baseInputSchema = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy = "serial",
+): z.ZodType => {
if (fieldValue.kind === "dateTime") return z.iso.datetime();
if (fieldValue.kind === "richText") {
return createRichTextDocumentSchema({
@@ -265,7 +322,7 @@ const baseInputSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
});
}
- return baseSelectSchema(fieldValue);
+ return baseSelectSchema(fieldValue, owner);
};
const applyNullable = (
@@ -299,7 +356,10 @@ const applyPresence = (
return schema.optional();
};
-const relationSetSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
+const relationSetSchema = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy,
+): z.ZodType => {
const min = (fieldValue as { min?: number }).min;
// A file collection carries its own ceiling and defaults to a much lower one:
// every entry is a stored object the record pins against deletion, where a
@@ -308,7 +368,13 @@ const relationSetSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
fieldValue.kind === "file"
? contentFileCollectionMax(fieldValue)
: CONTENT_RELATION_COLLECTION_MAX;
- let schema = z.array(referenceSchema()).max(max);
+ let schema = z
+ .array(
+ fieldValue.kind === "relation"
+ ? relationIdSchema(fieldValue, owner)
+ : referenceSchema(),
+ )
+ .max(max);
if (min !== undefined) schema = schema.min(min);
return schema.refine(value => new Set(value).size === value.length, {
@@ -383,6 +449,7 @@ const groupPatchSchema = (fieldValue: ContentFieldDescriptor): z.ZodType => {
const inputShape = (
fields: ContentFieldMap,
names: readonly string[],
+ owner: ContentIdStrategy = "serial",
): z.ZodRawShape =>
Object.fromEntries(
names.map(name => {
@@ -400,13 +467,13 @@ const inputShape = (
return [name, repeatableSchema(fieldValue).default([])];
}
if (isContentReferenceCollection(fieldValue)) {
- return [name, relationSetSchema(fieldValue).default([])];
+ return [name, relationSetSchema(fieldValue, owner).default([])];
}
return [
name,
applyPresence(
- applyNullable(baseInputSchema(fieldValue), fieldValue),
+ applyNullable(baseInputSchema(fieldValue, owner), fieldValue),
fieldValue,
),
];
@@ -421,6 +488,7 @@ export const contentFieldValuesObject = (
const updateShape = (
fields: ContentFieldMap,
names: readonly string[],
+ owner: ContentIdStrategy = "serial",
): z.ZodRawShape =>
Object.fromEntries(
names.map(name => {
@@ -436,12 +504,15 @@ const updateShape = (
return [name, repeatableSchema(fieldValue).optional()];
}
if (isContentReferenceCollection(fieldValue)) {
- return [name, relationSetSchema(fieldValue).optional()];
+ return [name, relationSetSchema(fieldValue, owner).optional()];
}
return [
name,
- applyNullable(baseInputSchema(fieldValue), fieldValue).optional(),
+ applyNullable(
+ baseInputSchema(fieldValue, owner),
+ fieldValue,
+ ).optional(),
];
}),
);
@@ -454,7 +525,32 @@ export const contentFieldUpdateSchema = (
? undefined
: (updateShape(fields, [name])[name] as z.ZodType);
-const filterShape = (fields: ContentFieldMap): z.ZodRawShape =>
+const relationFilterIdSchema = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy,
+): z.ZodType => {
+ const strategy = relationStrategyNow(fieldValue, owner);
+ if (strategy === "serial") return z.coerce.number();
+
+ return z.string().transform((value, ctx) => {
+ const parsed = parseContentId(
+ strategy ?? relationStrategyLater(fieldValue),
+ value,
+ );
+ if (parsed === null) {
+ ctx.addIssue({ code: "custom", message: "Invalid identifier." });
+
+ return z.NEVER;
+ }
+
+ return parsed;
+ });
+};
+
+const filterShape = (
+ fields: ContentFieldMap,
+ owner: ContentIdStrategy,
+): z.ZodRawShape =>
Object.fromEntries(
Object.entries(fields)
.filter(([, fieldValue]) => isFilterableFieldKind(fieldValue.kind))
@@ -467,7 +563,12 @@ const filterShape = (fields: ContentFieldMap): z.ZodRawShape =>
case "number":
return [name, z.coerce.number().optional()];
case "relation":
- case "user":
+ case "user": {
+ const id =
+ fieldValue.kind === "relation"
+ ? relationFilterIdSchema(fieldValue, owner)
+ : z.coerce.number();
+
// A to-many reference filters by membership, and it arrives from a
// query string as one identifier: `?categories=7`. The transform is
// what turns it into the `{ contains }` object the query builder
@@ -477,22 +578,25 @@ const filterShape = (fields: ContentFieldMap): z.ZodRawShape =>
return fieldValue.multiple
? [
name,
- z.coerce
- .number()
+ id
.optional()
.transform(value =>
value === undefined ? undefined : { contains: value },
),
]
- : [name, z.coerce.number().optional()];
+ : [name, id.optional()];
+ }
default:
return [name, z.string().optional()];
}
}),
);
-const publicRelationSchema = (): z.ZodObject =>
- z.object({ id: z.number() });
+const publicRelationSchema = (
+ fieldValue: ContentFieldDescriptor,
+ owner: ContentIdStrategy,
+): z.ZodObject =>
+ z.object({ id: relationIdSchema(fieldValue, owner, recordIdOutputSchema) });
export const groupPublicLeafPaths = (
names: readonly string[],
@@ -538,6 +642,7 @@ const publicSelectShape = (
fields: ContentFieldMap,
publicApi: ResolvedContentPublicApiConfig,
localization: ResolvedContentLocalizationConfig,
+ owner: ContentIdStrategy,
): z.ZodRawShape => ({
// The language actually served, which with a fallback is not always the one
// that was asked for. `defineContentType` reserves the name on a localized
@@ -547,7 +652,7 @@ const publicSelectShape = (
publicApi.fields
.filter(name => splitContentFieldPath(name) === null)
.map(name => {
- if (name === "id") return [name, z.number()];
+ if (name === "id") return [name, recordIdOutputSchema(owner)];
if (name === "createdAt" || name === "updatedAt") {
return [name, z.date()];
}
@@ -577,14 +682,24 @@ const publicSelectShape = (
// `{ id }` objects: the single-relation wrapper exists so a `null`
// relation is distinguishable from a missing key, and an empty array
// already says that on its own.
- if (fieldValue.multiple) return [name, z.array(z.number())];
+ if (fieldValue.multiple) {
+ return [
+ name,
+ z.array(
+ relationIdSchema(fieldValue, owner, recordIdOutputSchema),
+ ),
+ ];
+ }
- const relation = publicRelationSchema();
+ const relation = publicRelationSchema(fieldValue, owner);
return [name, fieldValue.nullable ? relation.nullable() : relation];
}
- return [name, applyNullable(baseSelectSchema(fieldValue), fieldValue)];
+ return [
+ name,
+ applyNullable(baseSelectSchema(fieldValue, owner), fieldValue),
+ ];
}),
),
...Object.fromEntries(
@@ -595,13 +710,18 @@ const publicSelectShape = (
),
});
+const idParamSchema = (strategy: ContentIdStrategy): z.ZodType =>
+ strategy === "serial" ? z.coerce.number() : contentIdSchema(strategy);
+
const buildTranslationSchemas = ({
admin,
+ idStrategy,
localizedFields,
localization,
publication,
}: {
admin: ResolvedContentAdminConfig;
+ idStrategy: ContentIdStrategy;
localization: ResolvedContentLocalizationConfig;
localizedFields: ContentFieldMap;
publication: boolean;
@@ -610,9 +730,9 @@ const buildTranslationSchemas = ({
const names = Object.keys(localizedFields);
- const create = z.strictObject(inputShape(localizedFields, names));
+ const create = z.strictObject(inputShape(localizedFields, names, idStrategy));
const update = z
- .strictObject(updateShape(localizedFields, names))
+ .strictObject(updateShape(localizedFields, names, idStrategy))
.refine(value => Object.keys(value).length > 0, {
message: "Provide at least one localized field to update.",
});
@@ -623,7 +743,10 @@ const buildTranslationSchemas = ({
// `publish` / `unpublish`.
const selectMeta = z.object({
createdAt: z.date(),
- itemId: z.number().int().positive(),
+ itemId:
+ idStrategy === "serial"
+ ? z.number().int().positive()
+ : recordIdOutputSchema(idStrategy),
languageId: z.number().int().positive(),
locale: z.string(),
...(publication
@@ -641,7 +764,7 @@ const buildTranslationSchemas = ({
names.map(name => [
name,
applyNullable(
- baseSelectSchema(localizedFields[name]),
+ baseSelectSchema(localizedFields[name], idStrategy),
localizedFields[name],
),
]),
@@ -660,15 +783,16 @@ const buildTranslationSchemas = ({
inputShape(
localizedFields,
admin.form.fields.filter(name => localizedFields[name] !== undefined),
+ idStrategy,
),
),
params: z.object({
- id: z.coerce.number(),
+ id: idParamSchema(idStrategy),
// Loose on purpose, like `publicParams.slug`: an unknown locale and a
// malformed one are both answered the same way, and the value is a bound
// parameter rather than an identifier.
locale: z.string().min(1).max(CONTENT_LOCALE_MAX_LENGTH),
- }),
+ }) as unknown as ContentTranslationSchemas["params"],
select: selectMeta.extend({ values }),
selectMeta,
update: update as unknown as z.ZodType<
@@ -692,18 +816,22 @@ export const buildContentSchemas = ({
advanced = contentAdvancedDisabled(),
editorial = false,
fields,
+ idStrategy = "serial",
localization = contentLocalizationDisabled(),
publicApi = DISABLED_PUBLIC_API,
publication = false,
+ visibility = false,
}: {
admin: ResolvedContentAdminConfig;
advanced?: ResolvedContentAdvancedConfig;
editorial?: boolean;
/** Every declared field. Partitioned here, so no caller has to. */
fields: ContentFieldMap;
+ idStrategy?: ContentIdStrategy;
localization?: ResolvedContentLocalizationConfig;
publicApi?: ResolvedContentPublicApiConfig;
publication?: boolean;
+ visibility?: boolean;
}): ContentSchemas => {
// Everything below this line is about the base table, so it reads the shared
// half only. The localized half gets its own schemas at the bottom.
@@ -734,16 +862,27 @@ export const buildContentSchemas = ({
? { version: z.number().int().positive() }
: {};
+ const visibilitySelectShape: z.ZodRawShape = visibility
+ ? {
+ hiddenAt: z.date().nullable(),
+ hiddenBy: z.number().int().nullable(),
+ }
+ : {};
+
const selectShape: z.ZodRawShape = {
- id: z.number(),
+ id: recordIdOutputSchema(idStrategy),
...Object.fromEntries(
fieldNames.map(name => [
name,
- applyNullable(baseSelectSchema(sharedFields[name]), sharedFields[name]),
+ applyNullable(
+ baseSelectSchema(sharedFields[name], idStrategy),
+ sharedFields[name],
+ ),
]),
),
...publicationSelectShape,
...editorialSelectShape,
+ ...visibilitySelectShape,
createdAt: z.date(),
updatedAt: z.date(),
};
@@ -751,9 +890,11 @@ export const buildContentSchemas = ({
// `strictObject` blocks mass assignment: an unknown key is an error, not
// something quietly stripped. System columns are absent from the shape, so
// they can never be set from a request.
- const create = z.strictObject(inputShape(writableFields, writableNames));
+ const create = z.strictObject(
+ inputShape(writableFields, writableNames, idStrategy),
+ );
const update = z
- .strictObject(updateShape(writableFields, writableNames))
+ .strictObject(updateShape(writableFields, writableNames, idStrategy))
.refine(value => Object.keys(value).length > 0, {
message: "Provide at least one field to update.",
});
@@ -767,7 +908,7 @@ export const buildContentSchemas = ({
const selectObject = z.object(selectShape);
const publicSelectObject = z.object(
- publicSelectShape(fields, publicApi, localization),
+ publicSelectShape(fields, publicApi, localization, idStrategy),
);
const publicFilterable = new Set(publicApi.filterableFields);
// Derived from the same `filterShape`, then narrowed to the configured
@@ -781,7 +922,7 @@ export const buildContentSchemas = ({
// over the base table.
const publicFilters = z.object(
Object.fromEntries(
- Object.entries(filterShape(fields)).filter(([name]) =>
+ Object.entries(filterShape(fields, idStrategy)).filter(([name]) =>
publicFilterable.has(name),
),
),
@@ -796,7 +937,10 @@ export const buildContentSchemas = ({
[
...advanced.junctions.map(entry => entry.field),
...advanced.repeatables.map(entry => entry.field),
- ].map(name => [name, baseSelectSchema(collectionFields[name])]),
+ ].map(name => [
+ name,
+ baseSelectSchema(collectionFields[name], idStrategy),
+ ]),
),
),
// The shapes are assembled in a loop, so their Zod types are erased.
@@ -805,10 +949,13 @@ export const buildContentSchemas = ({
// casts. `buildContentSchemas` is covered by `schemas.test-d.ts`.
create: create as unknown as z.ZodType>,
filters: z.object({
- ...filterShape(writableFields),
+ ...filterShape(writableFields, idStrategy),
...(publication
? { status: z.enum(CONTENT_PUBLICATION_STATUSES).optional() }
: {}),
+ ...(visibility
+ ? { visibility: z.enum(CONTENT_VISIBILITY_FILTERS).optional() }
+ : {}),
}),
// The declared form fields, narrowed to the ones this schema describes. A
// localized name is not dropped by accident: `admin.form.fields` covers one
@@ -818,13 +965,16 @@ export const buildContentSchemas = ({
inputShape(
writableFields,
admin.form.fields.filter(name => writableFields[name] !== undefined),
+ idStrategy,
),
),
order: z.object({
order: z.enum(["asc", "desc"]).optional(),
orderBy: z.enum(orderable as [string, ...string[]]).optional(),
}),
- params: z.object({ id: z.coerce.number() }),
+ params: z.object({
+ id: idParamSchema(idStrategy),
+ }) as unknown as ContentSchemas["params"],
publicFilters,
publicOrder: z.object({
order: z.enum(["asc", "desc"]).optional(),
@@ -848,6 +998,7 @@ export const buildContentSchemas = ({
selectObject,
translation: buildTranslationSchemas({
admin,
+ idStrategy,
localization,
localizedFields,
publication,
diff --git a/packages/vitnode/src/content/search.test.ts b/packages/vitnode/src/content/search.test.ts
index d1d3e530d9..d4a7c64e45 100644
--- a/packages/vitnode/src/content/search.test.ts
+++ b/packages/vitnode/src/content/search.test.ts
@@ -72,6 +72,7 @@ describe("search configuration", () => {
contentFields: ["excerpt", "body"],
descriptionField: "excerpt",
enabled: true,
+ imageField: null,
pathTemplate: "/articles/{slug}",
titleField: "title",
});
@@ -83,6 +84,7 @@ describe("search configuration", () => {
contentFields: [],
descriptionField: null,
enabled: false,
+ imageField: null,
pathTemplate: "",
titleField: "",
});
diff --git a/packages/vitnode/src/content/search.ts b/packages/vitnode/src/content/search.ts
index af3ddebf35..da961fc26a 100644
--- a/packages/vitnode/src/content/search.ts
+++ b/packages/vitnode/src/content/search.ts
@@ -1,7 +1,9 @@
+import type { ContentId } from "./ids";
import type { ContentLocaleRouting } from "./public-url";
import type { AnyContentTypeDefinition } from "./types";
import { CONTENT_SEARCH_SLUG_PLACEHOLDER } from "./const";
+import { contentIdKey } from "./ids";
import { isContentReferenceCollection, splitContentFieldPath } from "./paths";
import { contentPublicHref, contentPublicUrl } from "./public-url";
@@ -40,12 +42,12 @@ export const contentSearchUrl = ({
export const contentSearchDocumentId = (
definition: AnyContentTypeDefinition,
- id: number,
+ id: ContentId,
locale?: string,
): string =>
locale === undefined || locale === ""
- ? `${definition.id}:${id}`
- : `${definition.id}:${id}:${locale}`;
+ ? `${definition.id}:${contentIdKey(id)}`
+ : `${definition.id}:${contentIdKey(id)}:${locale}`;
/**
* Every field whose value the search document is built from, including the slug
@@ -68,6 +70,7 @@ export const contentSearchIndexedFieldNames = (
...search.contentFields,
publicApi.slugField,
search.authorField,
+ search.imageField,
].filter((name): name is string => Boolean(name)),
),
];
diff --git a/packages/vitnode/src/content/server/advanced-store.ts b/packages/vitnode/src/content/server/advanced-store.ts
index c4d558b604..2882594792 100644
--- a/packages/vitnode/src/content/server/advanced-store.ts
+++ b/packages/vitnode/src/content/server/advanced-store.ts
@@ -12,6 +12,7 @@ import {
} from "drizzle-orm";
import { getTableConfig } from "drizzle-orm/pg-core";
+import type { ContentId, ContentIdStrategy } from "../ids";
import type { AnyContentTypeDefinition, ContentRelationFilter } from "../types";
import type { ContentDatabase } from "./service";
import type { ContentAdvancedTables } from "./types";
@@ -21,6 +22,14 @@ import {
CONTENT_COLLECTION_FIRST_POSITION,
} from "../const";
import { ContentAdvancedInputError, ContentEngineError } from "../errors";
+import {
+ compareContentIds,
+ contentIdKey,
+ contentIdsOf,
+ contentRelationStrategy,
+ parseContentId,
+ requireContentId,
+} from "../ids";
import {
asContentReferenceCollection,
contentInnerFields,
@@ -34,7 +43,7 @@ type ChildValues = Record;
export interface ContentAdvancedStore {
diff: (
tx: ContentDatabase,
- itemId: number,
+ itemId: ContentId,
patch: Record,
) => Promise;
/** Whether the content type declares any advanced collection at all. */
@@ -43,16 +52,16 @@ export interface ContentAdvancedStore {
readonly fields: string[];
load: (
- itemId: number,
+ itemId: ContentId,
database: ContentDatabase,
only?: readonly string[],
) => Promise>;
loadMany: (
- itemIds: readonly number[],
+ itemIds: readonly ContentId[],
database: ContentDatabase,
only?: readonly string[],
- ) => Promise