.github/9
ISSUE_TEMPLATE/3bug_report.md config.yml feature_request.md
workflows/3ci.yml clean-clone.yml release.yml
CODEOWNERS dependabot.yml pull_request_template.md
apps/630
api/250
src/243
common/30
__tests__/3authorize.test.ts bigint-serialization.interceptor.test.ts files-limits.test.ts
filters/1all-exceptions.filter.ts
guards/3auth.guard.ts internal-service.guard.ts rate-limit.guard.ts
interceptors/2actor-context.interceptor.ts bigint-serialization.interceptor.ts
middleware/2idempotency.test.ts idempotency.ts
pipes/1zod-validation.pipe.ts
actor-context.ts audit.service.ts cache.test.ts cache.ts cookies.ts core.module.ts deprecation.ts email.service.ts errors.ts event-bus.ts log-scrubber.test.ts log-scrubber.ts logger.ts permission-cache-bridge.ts prisma.service.ts redis.service.ts trace-metadata.ts types.ts
config/1env.ts
lib/11
__tests__/5crypto.test.ts filter-builder.test.ts jwt.test.ts pagination.test.ts positions.test.ts
authorize.ts crypto.ts filter-builder.ts jwt.ts pagination.ts positions.ts
modules/197
ai/28
__tests__/4ai-writing.test.ts database-ai.test.ts generate-executor.test.ts prompts.test.ts
generator/4executor.ts generate.controller.ts generate.dto.ts generate.service.ts
ai-chat.service.ts ai-rate-limit.ts ai-writing.controller.ts ai-writing.dto.ts ai-writing.service.ts ai.controller.ts ai.module.ts ai.service.ts budget-guard.service.ts database-ai.controller.ts database-ai.dto.ts database-ai.service.ts db-prompts.ts dto.ts gateway-provider.ts ledger.service.ts prompts.ts rag.controller.ts rag.dto.ts rag.service.ts
api-keys/3api-keys.controller.ts api-keys.module.ts api-keys.service.ts
audit/2audit-log.controller.ts audit.module.ts
auth/4auth.controller.ts auth.module.ts auth.service.ts dto.ts
automations/5automations.controller.ts automations.module.ts automations.service.ts dto.ts webhook-incoming.controller.ts
blocks/5
__tests__/1batch-version-cas.test.ts
block.service.ts blocks.controller.ts blocks.module.ts dto.ts
comments/4comments.controller.ts comments.module.ts comments.service.ts dto.ts
databases/9
__tests__/3normalize-select-options.test.ts option-id-canonicalization.test.ts record-open-query-shape.test.ts
database.service.ts databases.controller.ts databases.module.ts dto.ts property-cache-schema.ts query.service.ts
docs/2docs.controller.ts docs.module.ts
files/10
__tests__/1quota.test.ts
dto.ts files.controller.ts files.module.ts files.service.ts quota.ts record.ts s3.ts uploads.controller.ts uploads.service.ts
forms/18debug.controller.ts form.dto.ts forms.controller.ts forms.module.ts forms.service.ts markdown.test.ts markdown.ts optional-auth.guard.ts public-forms.controller.ts public-forms.service.ts question.dto.ts questions.service.ts rate-limit.ts recaptcha.ts slug.ts submissions.controller.ts submissions.service.ts submit-schema.ts
health/3health.controller.ts health.module.ts health.service.ts
integrations/3integrations.controller.ts integrations.module.ts integrations.service.ts
internal/12
__tests__/2flush-query-shape.test.ts internal.endpoints.test.ts
ai-test-seam.controller.ts ai-test-seam.dto.ts ai-test-seam.service.ts internal.controller.ts internal.dto.ts internal.module.ts internal.service.ts test-seam.controller.ts test-seam.dto.ts test-seam.service.ts
notifications/3notifications.controller.ts notifications.module.ts notifications.service.ts
oauth/6
__tests__/1oauth.scopes.test.ts
oauth.controller.ts oauth.module.ts oauth.service.ts scopes.ts token-keys.ts
org/15audit.service.ts embed-preview.controller.ts guards.ts members.service.ts org-admin.controller.ts org-policy.service.ts org.module.ts overview.service.ts policy-effective.controller.ts policy.schema.ts policy.test.ts retention.service.ts totp.test.ts totp.ts two-factor.service.ts
orgs/5dto.ts orgs.controller.ts orgs.module.ts orgs.service.ts util.ts
pages/4dto.ts page.service.ts pages.controller.ts pages.module.ts
scim/15
__tests__/3email-mapping.test.ts etag.test.ts filters.test.ts
etag.ts filters.ts groups.service.ts schemas.ts scim-admin.controller.ts scim-admin.service.ts scim-auth.guard.ts scim-auth.service.ts scim-errors.ts scim.controller.ts scim.module.ts users.service.ts
search/4
__tests__/1search.service.test.ts
search.controller.ts search.module.ts search.service.ts
sessions/3sessions.controller.ts sessions.module.ts sessions.service.ts
share/3share.controller.ts share.module.ts share.service.ts
sso/16
__tests__/4enforcement.test.ts oidc.verify.test.ts provisioning.test.ts saml.validate.test.ts
enforcement.ts oidc.controller.ts oidc.service.ts oidc.ts provisioning.service.ts saml.controller.ts saml.ts schemas.ts sso-admin.controller.ts sso-admin.service.ts sso-secrets.ts sso.module.ts
teams/4dto.ts teams.controller.ts teams.module.ts teams.service.ts
users/4dto.ts users.controller.ts users.module.ts users.service.ts
webhooks/3webhooks.controller.ts webhooks.module.ts webhooks.service.ts
workspaces/4dto.ts workspaces.controller.ts workspaces.module.ts workspaces.service.ts
types/1xmldom.d.ts
app.module.ts constants.ts main.ts
_probe_rawbody.cjs .env.example Dockerfile package.json README.md tsconfig.json vitest.config.ts
realtime/33
src/17auth.ts comments.ts config.ts event-source.ts http-store.ts index.ts metrics.ts notifications.ts page-updated-source.ts presence.ts prisma-store.ts protocol.ts rate-limit.ts room-key.ts rooms.ts server.ts update-log.ts
test/11auth.test.ts config.test.ts event-source.test.ts http-store.test.ts metrics-merge.test.ts page-updated-source.test.ts presence.test.ts protocol.test.ts rate-limit.test.ts rooms.test.ts task-0094-builders.test.ts
.env.example Dockerfile package.json README.md tsconfig.json
web/255
src/244
app/45
__tests__/1theme-tokens.test.ts
(app)/26
w/25
[workspace]/25
ask/1page.tsx
databases/1
[id]/1page.tsx
favorites/1page.tsx
files/1page.tsx
notifications/1page.tsx
page/4
[id]/4
[block]/1page.tsx
share/1page.tsx
layout.tsx page.tsx
search/1page.tsx
settings/10
appearance/1page.tsx
automations/3
[id]/1page.tsx
new/1page.tsx
page.tsx
billing/1page.tsx
developers/1page.tsx
members/1page.tsx
permissions/1page.tsx
teams/1page.tsx
page.tsx
shared/1page.tsx
templates/1page.tsx
trash/1page.tsx
layout.tsx page.tsx
layout.tsx
(auth)/4
login/1page.tsx
register/1page.tsx
reset-password/1page.tsx
layout.tsx
api/2
metrics/1route.ts
v1/1
health/1route.ts
f/1
[slug]/1page.tsx
health/1
ready/1route.ts
org/2
[orgId]/2
admin/2
integrations/1page.tsx
page.tsx
share/1
[id]/1page.tsx
error.tsx global-error.tsx globals.css layout.tsx not-found.tsx page.tsx providers.tsx
components/118
admin/10
org-admin/8ApiKeysTab.tsx AuditTab.tsx MembersTab.tsx OverviewTab.tsx PoliciesTab.tsx RetentionTab.tsx WebhooksTab.tsx WorkspacePicker.tsx
ScimCard.tsx SsoTabs.tsx
ai/6ai-panel.tsx ask-ai-submenu.tsx db-ai-dialog.tsx generate-page-dialog.tsx writing-actions-menu.tsx writing-diff.tsx
automations/5action-editor.tsx condition-editor.tsx lib.ts run-history.tsx trigger-editor.tsx
collaboration/6CursorLayer.tsx OfflineBanner.tsx PresenceBar.tsx README.md ReviewFailedDialog.tsx StatusChip.tsx
comments/3comment-panel.tsx comment-thread.tsx mention-input.tsx
database/27
__tests__/2cell-editor.test.tsx cell-renderer.test.tsx
AiExtractDialog.tsx AiFormulaDialog.tsx AiGenerateDialog.tsx board-view.tsx buttons-panel.tsx calendar-view.tsx cell-editor.tsx cell-renderer.tsx chart-view.tsx database-page-view.tsx database-toolbar.tsx database-view-renderer.tsx db-embedded.tsx filter-builder.tsx form-builder-view.tsx formula-editor.tsx gallery-view.tsx group-builder.tsx list-view.tsx property-editor.tsx record-header.tsx record-panel.tsx sort-builder.tsx table-view.tsx timeline-view.tsx
dialogs/7
__tests__/1move-to-dialog.test.tsx
create-dialog.tsx dialog.tsx file-permissions-dialog.tsx invite-dialog.tsx move-to-dialog.tsx share-dialog.tsx
editor/19
__tests__/3code-block-text.test.ts code-block.test.tsx expandable.test.tsx
block-card.tsx block-renderer.tsx block-save-queue.ts block-toolbar.tsx context-menu.tsx expandable.tsx history-popover.tsx inline-editor.tsx insert-dialog.tsx page-canvas.tsx page-spinner.tsx page-view.tsx selection-toolbar.tsx slash-menu.tsx template-dialog.tsx type-menu.tsx
files/4FileBlock.tsx FileBrowser.tsx FilePicker.tsx PreviewModal.tsx
form/4form-field.tsx form-renderer.tsx form-responses-view.tsx form-view.tsx
layout/8
__tests__/1page-tree-icon.test.tsx
command-palette.tsx factory-logo.tsx page-tree-node.tsx sidebar.tsx theme-provider.tsx topbar.tsx workspace-shell.tsx
mentions/3
__tests__/1mention-model.test.ts
mention-model.ts MentionPopup.tsx
search/3ask-ai-search.tsx results-list.tsx search-dialog.tsx
settings/10
api-keys/4ApiKeyCreateDialog.tsx ApiKeyRevealDialog.tsx ApiKeyTable.tsx ScopesBadge.tsx
webhooks/5CurlExamples.tsx DeliveryInspector.tsx EventExplorer.tsx OverviewTab.tsx WebhooksTab.tsx
settings-shell.tsx
ui/3confirm-dialog.tsx form.tsx toaster.tsx
hooks/21
__tests__/4realtime-frame-handler.test.ts use-blocks.test.ts use-database-options.test.ts use-workspace.test.tsx
realtime-frame-handler.ts use-ai-stream.ts use-auth.ts use-blocks.ts use-database.ts use-db-ai-stream.ts use-forms.ts use-members.ts use-mention-sources.ts use-notifications.ts use-offline-status.ts use-pages.ts use-presence-announcer.ts use-presence-toasts.ts use-presence.ts use-realtime.ts use-workspace.ts
lib/50
__tests__/21ai-database.test.ts ai-generate.test.ts ai-sse.test.ts ai-writing.test.ts api-keys.test.ts api-members.test.ts auth-refresh.test.ts auth-store.test.ts batch-queue-drop.test.ts block-content.test.ts clipboard-import.test.ts code-highlight.test.ts offline-status.test.ts presence-announcer.test.ts presence-color.test.ts presence-cursor.test.ts presence-emitter.test.ts realtime-url.test.ts search.test.ts utils.test.ts writing-diff.test.ts
files/7
__tests__/2picker.test.ts upload.test.ts
api.ts picker.ts upload-store.ts upload.ts use-file-uploads.ts
ai-database.ts ai.ts api-keys.ts api.ts auth-store.ts batch-queue.ts block-content.ts clipboard-import.ts code-highlight.ts constants.ts offline-status.ts org-admin.ts presence-announcer.ts presence-color.ts presence-cursor.ts presence-editor-views.ts presence-emitter.ts query-client.ts realtime.ts search.ts types.ts utils.ts
stores/8
__tests__/1block-patch-store.test.ts
block-patch-store.ts comment-pill-store.ts database-store.ts editor-store.ts offlineQueue.ts presence-store.ts ui-store.ts
instrumentation.ts middleware.ts
.env.example Dockerfile next-env.d.ts next.config.mjs package.json postcss.config.mjs README.md tailwind.config.ts tsconfig.json tsconfig.tsbuildinfo vitest.config.ts
worker/92
src/87
__tests__/13ai-embedding.test.ts ai-request.test.ts ai-usage-budget.test.ts audit-export.test.ts email-decision.test.ts encrypt.test.ts health-search-index-lag.test.ts mime.test.ts retention.test.ts s3-sign.test.ts search-index.test.ts smtp.test.ts webhook-sign.test.ts
health/1server.ts
lib/12
__tests__/1clamav.test.ts
clamav.ts encrypt.ts job-otel.ts mime.ts notify.ts prisma.ts redis-stream.ts redis.ts s3.ts sharp.ts smtp.ts
processors/56
automations/28
__tests__/3condition-evaluator.spec.ts executors.spec.ts run-pipeline.spec.ts
executors/17assign-user.ts call-integration.ts change-status.ts classify.ts create-notification.ts create-page.ts email-cap.ts helpers.ts integration-registry.ts permission.ts record-write.ts registry.ts run-ai-action.ts send-email.ts send-webhook.ts types.ts update-record.ts
condition-evaluator.ts dead-letter.ts log.ts matcher.ts pipeline.ts run-state.ts schedule.ts watchdog.ts
files/15
__tests__/4errors.test.ts scan-gate.test.ts status.test.ts temp.test.ts
steps/4finalize.ts metadata.ts scan.ts thumbnails.ts
cleanup.ts errors.ts generateThumbs.ts processor.ts status.ts temp.ts types.ts
search-index/4builders.ts grants.ts index.ts processor.ts
ai-embedding.ts ai.processor.ts audit-export.ts automations.processor.ts email-decision.processor.ts email.processor.ts maintenance.processor.ts retention.ts webhooks.processor.ts
config.ts events.ts index.ts logger.ts queues.ts
.env.example Dockerfile package.json README.md tsconfig.json
docs/73
api/17ai.md authentication.md automations.md blocks.md comments.md databases.md files.md forms.md openapi.yaml org-admin.md pages.md scim.md search.md sso.md versioning.md webhooks.md workspaces.md
architecture/10ai-architecture.md automation.md backend-architecture.md database-architecture.md frontend-architecture.md realtime-architecture.md search-architecture.md security-architecture.md storage.md system-architecture.md
database/2database-architecture.md redis-keys.md
development/8admin-guide.md coding-standards.md deployment.md development-guide.md files-pipeline.md perf-report.md performance.md testing.md
product/4functional-requirements.md non-functional-requirements.md product-requirements.md ux-requirements.md
requirements/1requirements-matrix.md
security/5audit-report.md files.md forms.md license-allowlist.md security-architecture.md
tasks/16phase-00-foundation.md phase-01-authentication.md phase-02-workspace.md phase-03-pages.md phase-04-editor.md phase-05-databases.md phase-06-relations.md phase-07-collaboration.md phase-08-search.md phase-09-files.md phase-10-forms.md phase-11-automation.md phase-12-ai.md phase-13-api.md phase-14-enterprise.md phase-15-production.md
ui/9ai.md automations.md design-system.md developers.md files.md forms.md org-admin.md scim.md sso.md
support-matrix.md
infrastructure/71
caddy/1Caddyfile
docker/6
init/101-extensions.sql
opensearch/1init-indices.json
.env.docker docker-compose.yml opensearch-init.sh README.md
kubernetes/40
observability/20
alertmanager/1alertmanager.yaml
grafana/8
dashboards/6ai.json api-overview.json infra.json realtime.json search.json workers-queues.json
provisioning/2
dashboards/1dashboards.yaml
datasources/1datasource.yaml
prometheus/3alerts.yaml recording-rules.yaml scrape.yaml
scripts/1sync-sources.mjs
alertmanager.yaml grafana.yaml kustomization.yaml namespace.yaml node-exporter.yaml otel-collector.yaml prometheus.yaml
postgres/7configmap.yaml cronjob-backup.yaml cronjob-opensearch-snapshot.yaml pgbouncer.yaml replica.yaml statefulset.yaml walg-iam-policy.yaml
api.yaml configmap.yaml ingress.yaml kustomization.yaml namespace.yaml networkpolicy.yaml pdb.yaml README.md realtime.yaml redis.yaml secret.example.yaml web.yaml worker.yaml
nginx/2nginx.conf README.md
observability/14
alertmanager/1alertmanager.yaml
grafana/8
dashboards/6ai.json api-overview.json infra.json realtime.json search.json workers-queues.json
provisioning/2
dashboards/1dashboards.yaml
datasources/1datasource.yaml
prometheus/3alerts.yaml recording-rules.yaml scrape.yaml
scripts/1dashboard-completeness.mjs
README.md
terraform/8compute.tf data.tf main.tf network.tf outputs.tf README.md security.tf variables.tf
packages/289
ai/24
src/20
providers/7anthropic.ts google.ts http.ts index.ts openai-compatible.ts rag.test.ts writing.test.ts
schemas/2database.ts generate.ts
adapters.test.ts config.test.ts config.ts gateway.test.ts gateway.ts index.ts tools.test.ts tools.ts types.ts usage.test.ts usage.ts
package.json README.md tsconfig.json vitest.config.ts
auth/11
src/7index.ts passwords.test.ts passwords.ts sessions.test.ts sessions.ts tokens.test.ts tokens.ts
package.json README.md tsconfig.json vitest.config.ts
collaboration/17
src/13awareness.ts codec.test.ts codec.ts index.ts lww.test.ts lww.ts mapping.ts offline.ts outbox.test.ts outbox.ts provider.test.ts provider.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
config/7
src/4eslint.base.js index.ts prettier.base.json tsconfig.base.json
package.json README.md tsconfig.json
database-client/5
src/2index.test.ts index.ts
package.json README.md tsconfig.json
database-engine/33
src/29
filter/2filter.test.ts index.ts
formula/8evaluator.ts formula.test.ts functions.ts index.ts lexer.ts parser.ts types.ts validate.ts
query/6group.ts index.ts paginate.ts pivot.ts query.test.ts sort.ts
relations/2index.ts relations.test.ts
rollups/2index.ts rollups.test.ts
values/5dates.ts index.ts registry.ts types.ts values.test.ts
views/3buttons.ts index.ts views.test.ts
index.ts
package.json README.md tsconfig.json vitest.config.ts
editor/25
src/21
marks/1highlight.ts
nodes/2equation.ts mention.ts
autosave.test.ts autosave.ts clipboard.test.ts clipboard.ts codec.test.ts codec.ts context-menu.test.ts context-menu.ts diff.test.ts diff.ts factory.ts history.test.ts history.ts index.ts positions.ts slash.test.ts slash.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
observability/20
src/16
__tests__/8db-redis-metrics.test.ts metrics.test.ts otel.test.ts pino-otel.test.ts prometheus.test.ts resource.test.ts scrubber.test.ts traceparent.test.ts
index.ts metrics.ts otel.ts pino-otel.ts prometheus.ts resource.ts scrubber.ts traceparent.ts
package.json README.md tsconfig.json vitest.config.ts
permissions/11
src/7index.ts levels.test.ts levels.ts resolve.test.ts resolve.ts rules.test.ts rules.ts
package.json README.md tsconfig.json vitest.config.ts
search/22
src/18chunking.test.ts chunking.ts client.test.ts client.ts embeddings.test.ts embeddings.ts hybrid.test.ts hybrid.ts index.ts indexer.test.ts indexer.ts mapping.test.ts mapping.ts queries.test.ts queries.ts rrf.test.ts rrf.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
shared/61
src/57
dto/17ai.dto.ts auth.dto.test.ts auth.dto.ts block.dto.ts browser-safety.test.ts comment.dto.ts database.dto.test.ts database.dto.ts file.dto.ts formula-ast.ts index.ts notification.dto.ts page.dto.ts search.dto.ts share.dto.ts webhook.dto.ts workspace.dto.ts
events/8audit-catalog.test.ts audit-catalog.ts audit-csv.test.ts audit-csv.ts audit-scope.test.ts audit-scope.ts catalog.test.ts catalog.ts
realtime/6comment-events.ts frames.test.ts frames.ts notification-policy.ts notification-prefs.ts task-0094.test.ts
automation.test.ts automation.ts constants.ts crypto.test.ts crypto.ts env.ts errors.ts events.test.ts events.ts forms.test.ts forms.ts index.ts markdown.test.ts markdown.ts mentions.test.ts mentions.ts net.test.ts net.ts positions.test.ts positions.ts presence.test.ts presence.ts security-headers.ts webhook-delivery.test.ts webhook-delivery.ts webhook-events.ts
package.json README.md tsconfig.json vitest.config.ts
storage/16
src/12client.test.ts client.ts index.ts keys.test.ts keys.ts mime.test.ts mime.ts presign.test.ts presign.ts thumbnails.test.ts thumbnails.ts types.ts
package.json README.md tsconfig.json vitest.config.ts
ui/37
src/33
components/19avatar.tsx badge.tsx button.tsx checkbox.tsx command.tsx context-menu.tsx dialog.tsx dropdown-menu.tsx empty-state.tsx index.ts popover.tsx separator.tsx skeleton.tsx slider.tsx spinner.tsx switch.tsx tabs.tsx toast.tsx tooltip.tsx
color.ts command-filter.test.ts command-filter.ts focus.test.ts focus.ts formatters.test.ts formatters.ts index.ts theme.test.ts theme.ts toast-store.test.ts toast-store.ts tokens.test.ts tokens.ts
package.json README.md tsconfig.json vitest.config.ts
prisma/16
migrations/13
20260927000000_init/1migration.sql
20260928000000_search_documents_content_hash/1migration.sql
20260929000000_workspace_usage_storage_bytes/1migration.sql
20260930000000_form_submitted_notification_type/1migration.sql
20261001000000_ai_phase12/1migration.sql
20261002000000_webhooks_secret_encrypted_dlq/1migration.sql
20261002111436_webhook_delivery_latency/1migration.sql
20261002120000_org_admin_2fa_retention_unique/1migration.sql
20261002215124_audit_export/1migration.sql
20261003210000_perf_indexes_hot_paths/1migration.sql
20261004004500_perf_indexes_hot_paths_2/1migration.sql
migration_lock.toml README.md
schema.prisma seed.ts verify.ts
scripts/7backup-health.ts docs-completeness.mjs generate-openapi.mjs minio-init.ts opensearch-reindex.ts storage-orphans.ts verify-clean-clone.sh
tests/169
e2e/63
.auth/1user.json
fixtures/7
files/6clip.mp4 clip.wav clip.webm hero-1400.png note.docx note.txt
realtime.ts
mocks/2oidc-issuer.ts saml-idp.ts
playwright-report/3
data/2a6557bae9c2714a658968d4eb8534195c08ebda8.png e3092d07d00a16063e46385c02a559a9054fa847.webm
index.html
reports/1files-security.json
specs/34ai-database.spec.ts ai-generate.spec.ts ai-rag.spec.ts ai-security.spec.ts ai-writing.spec.ts ai.spec.ts api-keys.spec.ts appearance-theme.spec.ts auth.spec.ts automation.spec.ts collab-two-tab.spec.ts comments.spec.ts databases.spec.ts default-workspace-alias.spec.ts developers.spec.ts editor.spec.ts files.spec.ts final-flow.spec.ts forms.spec.ts oauth.spec.ts org-admin.spec.ts pages.spec.ts performance.spec.ts presence-cursors.spec.ts qa-paste-toggle.spec.ts realtime.spec.ts scim.spec.ts search-index-lag.spec.ts search.spec.ts sharing.spec.ts sso.spec.ts task-0094-comments-notifications.spec.ts webhooks.spec.ts workspace.spec.ts
test-results-final-flow/3
final-flow-Release-v1-0-fi-6c06b-w-state-carries-sequential--chromium-desktop/2test-failed-1.png trace.zip
.last-run.json
utils/4api.ts dnd.ts search-lag.ts wait.ts
.gitignore fixtures.ts global-setup.ts package.json playwright.config.ts playwright.final-flow.config.ts README.md tsconfig.json
fixtures/1
files/1make-sparse.ts
integration/60
ai-capability/2ai-app.capability.test.ts gateway.capability.test.ts
drill/2seed-drill.mjs verify-restore.mjs
fixtures/5
files/5clip.mp4 clip.wav doc.pdf hero-1400.png note.txt
helpers/3api.ts containers.ts seed.ts
realtime/11control-channel.test.ts convergence.test.ts flush-rebase-http.test.ts handshake.test.ts heartbeat-limits.test.ts lifecycle.test.ts presence.test.ts rebase.test.ts resume.test.ts rt-helpers.ts task-0094-fanout.test.ts
ai-chat.integration.test.ts ai-database.integration.test.ts ai-generate.integration.test.ts ai-rag.integration.test.ts ai-writing.integration.test.ts api-keys.integration.test.ts audit-completeness.integration.test.ts audit-export-s3.integration.test.ts auth.integration.test.ts automation-pipeline.integration.test.ts automations.integration.test.ts blocks.integration.test.ts cache-invalidation.integration.test.ts comments.integration.test.ts databases.integration.test.ts files-lifecycle.integration.test.ts files-pipeline.integration.test.ts files-security.integration.test.ts files.integration.test.ts forms-responses.integration.test.ts forms.integration.test.ts oauth.integration.test.ts openapi.contract.test.ts org-admin.integration.test.ts package.json pages.integration.test.ts permissions.integration.test.ts README.md replica-routing.integration.test.ts retention-engine.integration.test.ts scim.integration.test.ts search.integration.test.ts sso.integration.test.ts tsconfig.json vitest.config.ts webhooks.integration.test.ts workspace.integration.test.ts
performance/28
fixtures/1search-100k.ts
helpers/2seed-100k.mjs seed-1k-load.mjs
reports/7api-load-smoke.json database-load-smoke.json editor-local.json realtime-load.json search-full.json search-last.json search-reduced.json
api-load.js api.js archive.tar database-load.js database.js editor-local.mjs extract-100k-env.mjs package.json README.md realtime-1k.js realtime-load.js realtime.js run-realtime-load.sh search-search.k6.js search-summary.json seed-100k.mjs threshold-breach-demo.js verify-zero-op-loss.mjs
security/16
helpers/1app.ts
audit-report.test.ts auth-paths.test.ts deps.test.ts formula-fuzz.test.ts gitleaks-config.test.ts headers.test.ts images.test.ts oracle.ts package.json permission-fuzz.test.ts rate-limits.test.ts README.md tsconfig.json upload-abuse.test.ts vitest.config.ts
README.md
.dockerignore .env .env.bak-task0125 .env.example .eslintrc.json .gitignore .npmrc .prettierignore .prettierrc.json AGENTS.md ARCHITECTURE.md CHANGELOG.md CONTRIBUTING.md gitleaks.toml LICENSE package.json pnpm-lock.yaml pnpm-workspace.yaml PRODUCT-SPEC.md README.md ROADMAP.md SECURITY.md tsconfig.json turbo.json
migration.sqlprisma/migrations/20260927000000_init/migration.sqlraw← 20260927000000_init56,507 B← Back to the app
1-- CreateEnum
2CREATE TYPE "WorkspaceRole" AS ENUM ('OWNER', 'ADMIN', 'MEMBER', 'GUEST');
3 
4-- CreateEnum
5CREATE TYPE "PermissionLevel" AS ENUM ('NONE', 'VIEW', 'COMMENT', 'EDIT', 'FULL_ACCESS');
6 
7-- CreateEnum
8CREATE TYPE "ShareScope" AS ENUM ('PRIVATE', 'WORKSPACE', 'TEAM', 'USERS', 'PUBLIC');
9 
10-- CreateEnum
11CREATE TYPE "BlockType" AS ENUM ('PARAGRAPH', 'HEADING_1', 'HEADING_2', 'HEADING_3', 'QUOTE', 'CALLOUT', 'BULLETED_LIST', 'NUMBERED_LIST', 'TODO', 'TOGGLE', 'IMAGE', 'VIDEO', 'AUDIO', 'FILE', 'BOOKMARK', 'EMBED', 'CODE', 'EQUATION', 'COLUMN', 'COLUMN_LIST', 'DIVIDER', 'SPACER', 'DATABASE', 'LINKED_DATABASE', 'TABLE', 'CHART', 'FORM', 'SYNCED_BLOCK', 'CHILD_PAGE', 'CHILD_DATABASE');
12 
13-- CreateEnum
14CREATE TYPE "PropertyType" AS ENUM ('TITLE', 'TEXT', 'RICH_TEXT', 'NUMBER', 'SELECT', 'MULTI_SELECT', 'STATUS', 'DATE', 'DATE_RANGE', 'PERSON', 'EMAIL', 'PHONE', 'URL', 'CHECKBOX', 'FILES', 'CREATED_TIME', 'CREATED_BY', 'LAST_EDITED_TIME', 'LAST_EDITED_BY', 'RELATION', 'ROLLUP', 'FORMULA', 'BUTTON', 'UNIQUE_ID');
15 
16-- CreateEnum
17CREATE TYPE "ViewType" AS ENUM ('TABLE', 'LIST', 'BOARD', 'GALLERY', 'CALENDAR', 'TIMELINE', 'CHART', 'DASHBOARD', 'FORM');
18 
19-- CreateEnum
20CREATE TYPE "RelationCardinality" AS ENUM ('ONE_TO_ONE', 'ONE_TO_MANY', 'MANY_TO_MANY');
21 
22-- CreateEnum
23CREATE TYPE "RollupAggregate" AS ENUM ('COUNT', 'SUM', 'AVERAGE', 'MIN', 'MAX', 'PERCENT', 'UNIQUE');
24 
25-- CreateEnum
26CREATE TYPE "AutomationTriggerType" AS ENUM ('RECORD_CREATED', 'RECORD_UPDATED', 'PROPERTY_CHANGED', 'PAGE_CREATED', 'FORM_SUBMITTED', 'SCHEDULE', 'WEBHOOK', 'MANUAL');
27 
28-- CreateEnum
29CREATE TYPE "AutomationActionType" AS ENUM ('UPDATE_RECORD', 'CREATE_PAGE', 'SEND_EMAIL', 'SEND_WEBHOOK', 'CREATE_NOTIFICATION', 'ASSIGN_USER', 'CHANGE_STATUS', 'CALL_INTEGRATION', 'RUN_AI_ACTION');
30 
31-- CreateEnum
32CREATE TYPE "AutomationStatus" AS ENUM ('DRAFT', 'ACTIVE', 'PAUSED', 'ARCHIVED');
33 
34-- CreateEnum
35CREATE TYPE "AutomationRunStatus" AS ENUM ('PENDING', 'RUNNING', 'SUCCEEDED', 'FAILED', 'DEAD_LETTER');
36 
37-- CreateEnum
38CREATE TYPE "NotificationChannel" AS ENUM ('IN_APP', 'EMAIL', 'WEBHOOK');
39 
40-- CreateEnum
41CREATE TYPE "NotificationType" AS ENUM ('MENTION', 'COMMENT', 'ASSIGNMENT', 'PAGE_SHARED', 'TASK_ASSIGNED', 'DATABASE_CHANGE', 'AUTOMATION', 'INTEGRATION');
42 
43-- CreateEnum
44CREATE TYPE "FileStatus" AS ENUM ('UPLOADING', 'SCANNING', 'READY', 'VIRUS_DETECTED', 'FAILED');
45 
46-- CreateEnum
47CREATE TYPE "FormQuestionType" AS ENUM ('SHORT_TEXT', 'LONG_TEXT', 'NUMBER', 'EMAIL', 'DATE', 'CHECKBOX', 'SINGLE_SELECT', 'MULTI_SELECT', 'RATING', 'FILE');
48 
49-- CreateEnum
50CREATE TYPE "FormStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'CLOSED');
51 
52-- CreateEnum
53CREATE TYPE "AuditActorType" AS ENUM ('USER', 'API_KEY', 'SYSTEM', 'INTEGRATION');
54 
55-- CreateEnum
56CREATE TYPE "ApiKeyScope" AS ENUM ('READ', 'WRITE', 'ADMIN');
57 
58-- CreateEnum
59CREATE TYPE "WebhookDeliveryStatus" AS ENUM ('PENDING', 'DELIVERED', 'FAILED', 'REJECTED');
60 
61-- CreateEnum
62CREATE TYPE "UserStatus" AS ENUM ('ACTIVE', 'INVITED', 'SUSPENDED');
63 
64-- CreateEnum
65CREATE TYPE "InvitationStatus" AS ENUM ('PENDING', 'ACCEPTED', 'DECLINED', 'REVOKED', 'EXPIRED');
66 
67-- CreateEnum
68CREATE TYPE "SessionStatus" AS ENUM ('ACTIVE', 'REVOKED', 'EXPIRED');
69 
70-- CreateEnum
71CREATE TYPE "EmailVerificationStatus" AS ENUM ('UNVERIFIED', 'PENDING', 'VERIFIED');
72 
73-- CreateEnum
74CREATE TYPE "PasswordResetStatus" AS ENUM ('PENDING', 'USED', 'EXPIRED', 'REVOKED');
75 
76-- CreateEnum
77CREATE TYPE "SSOProviderType" AS ENUM ('SAML', 'OIDC');
78 
79-- CreateEnum
80CREATE TYPE "RetentionPolicyType" AS ENUM ('PURGE', 'HOLD');
81 
82-- CreateTable
83CREATE TABLE "users" (
84    "id" TEXT NOT NULL,
85    "email" TEXT NOT NULL,
86    "emailVerifiedAt" TIMESTAMP(3),
87    "emailVerification" "EmailVerificationStatus" NOT NULL DEFAULT 'UNVERIFIED',
88    "passwordHash" TEXT,
89    "name" TEXT NOT NULL,
90    "displayName" TEXT,
91    "avatarUrl" TEXT,
92    "status" "UserStatus" NOT NULL DEFAULT 'ACTIVE',
93    "locale" TEXT NOT NULL DEFAULT 'en-US',
94    "timezone" TEXT NOT NULL DEFAULT 'UTC',
95    "theme" TEXT NOT NULL DEFAULT 'system',
96    "notificationPrefs" JSONB NOT NULL DEFAULT '{}',
97    "lastLoginAt" TIMESTAMP(3),
98    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
99    "updatedAt" TIMESTAMP(3) NOT NULL,
100 
101    CONSTRAINT "users_pkey" PRIMARY KEY ("id")
102);
103 
104-- CreateTable
105CREATE TABLE "refresh_tokens" (
106    "id" TEXT NOT NULL,
107    "tokenHash" TEXT NOT NULL,
108    "userId" TEXT NOT NULL,
109    "sessionAgent" TEXT,
110    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
111    "expiresAt" TIMESTAMP(3) NOT NULL,
112    "revokedAt" TIMESTAMP(3),
113    "replacedBy" TEXT,
114 
115    CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id")
116);
117 
118-- CreateTable
119CREATE TABLE "sessions" (
120    "id" TEXT NOT NULL,
121    "userId" TEXT NOT NULL,
122    "tokenHash" TEXT NOT NULL,
123    "userAgent" TEXT,
124    "ipAddress" TEXT,
125    "status" "SessionStatus" NOT NULL DEFAULT 'ACTIVE',
126    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
127    "expiresAt" TIMESTAMP(3) NOT NULL,
128    "revokedAt" TIMESTAMP(3),
129 
130    CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
131);
132 
133-- CreateTable
134CREATE TABLE "email_verifications" (
135    "id" TEXT NOT NULL,
136    "userId" TEXT NOT NULL,
137    "tokenHash" TEXT NOT NULL,
138    "expiresAt" TIMESTAMP(3) NOT NULL,
139    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
140 
141    CONSTRAINT "email_verifications_pkey" PRIMARY KEY ("id")
142);
143 
144-- CreateTable
145CREATE TABLE "password_resets" (
146    "id" TEXT NOT NULL,
147    "userId" TEXT NOT NULL,
148    "tokenHash" TEXT NOT NULL,
149    "status" "PasswordResetStatus" NOT NULL DEFAULT 'PENDING',
150    "expiresAt" TIMESTAMP(3) NOT NULL,
151    "usedAt" TIMESTAMP(3),
152    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
153 
154    CONSTRAINT "password_resets_pkey" PRIMARY KEY ("id")
155);
156 
157-- CreateTable
158CREATE TABLE "organizations" (
159    "id" TEXT NOT NULL,
160    "name" TEXT NOT NULL,
161    "slug" TEXT NOT NULL,
162    "logoUrl" TEXT,
163    "ownerId" TEXT NOT NULL,
164    "policy" JSONB NOT NULL DEFAULT '{}',
165    "ssoConfig" JSONB,
166    "scimConfig" JSONB,
167    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
168    "updatedAt" TIMESTAMP(3) NOT NULL,
169 
170    CONSTRAINT "organizations_pkey" PRIMARY KEY ("id")
171);
172 
173-- CreateTable
174CREATE TABLE "organization_members" (
175    "id" TEXT NOT NULL,
176    "organizationId" TEXT NOT NULL,
177    "userId" TEXT NOT NULL,
178    "role" "WorkspaceRole" NOT NULL DEFAULT 'MEMBER',
179    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
180 
181    CONSTRAINT "organization_members_pkey" PRIMARY KEY ("id")
182);
183 
184-- CreateTable
185CREATE TABLE "sso_providers" (
186    "id" TEXT NOT NULL,
187    "organizationId" TEXT NOT NULL,
188    "type" "SSOProviderType" NOT NULL,
189    "name" TEXT NOT NULL,
190    "config" JSONB NOT NULL,
191    "enforce" BOOLEAN NOT NULL DEFAULT false,
192    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
193    "updatedAt" TIMESTAMP(3) NOT NULL,
194 
195    CONSTRAINT "sso_providers_pkey" PRIMARY KEY ("id")
196);
197 
198-- CreateTable
199CREATE TABLE "sso_identities" (
200    "id" TEXT NOT NULL,
201    "providerId" TEXT NOT NULL,
202    "externalId" TEXT NOT NULL,
203    "userId" TEXT NOT NULL,
204    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
205 
206    CONSTRAINT "sso_identities_pkey" PRIMARY KEY ("id")
207);
208 
209-- CreateTable
210CREATE TABLE "retention_policies" (
211    "id" TEXT NOT NULL,
212    "organizationId" TEXT NOT NULL,
213    "type" "RetentionPolicyType" NOT NULL,
214    "scope" TEXT NOT NULL,
215    "retainDays" INTEGER,
216    "config" JSONB NOT NULL DEFAULT '{}',
217    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
218    "updatedAt" TIMESTAMP(3) NOT NULL,
219 
220    CONSTRAINT "retention_policies_pkey" PRIMARY KEY ("id")
221);
222 
223-- CreateTable
224CREATE TABLE "workspaces" (
225    "id" TEXT NOT NULL,
226    "organizationId" TEXT,
227    "name" TEXT NOT NULL,
228    "slug" TEXT NOT NULL,
229    "iconUrl" TEXT,
230    "logoUrl" TEXT,
231    "description" TEXT,
232    "publicUrl" TEXT,
233    "settings" JSONB NOT NULL DEFAULT '{}',
234    "isPersonal" BOOLEAN NOT NULL DEFAULT false,
235    "ownerId" TEXT,
236    "billingPlan" TEXT NOT NULL DEFAULT 'free',
237    "usageLimits" JSONB NOT NULL DEFAULT '{}',
238    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
239    "updatedAt" TIMESTAMP(3) NOT NULL,
240    "deletedAt" TIMESTAMP(3),
241 
242    CONSTRAINT "workspaces_pkey" PRIMARY KEY ("id")
243);
244 
245-- CreateTable
246CREATE TABLE "workspace_members" (
247    "id" TEXT NOT NULL,
248    "workspaceId" TEXT NOT NULL,
249    "userId" TEXT NOT NULL,
250    "role" "WorkspaceRole" NOT NULL DEFAULT 'MEMBER',
251    "invitedBy" TEXT,
252    "joinedAt" TIMESTAMP(3),
253    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
254    "updatedAt" TIMESTAMP(3) NOT NULL,
255 
256    CONSTRAINT "workspace_members_pkey" PRIMARY KEY ("id")
257);
258 
259-- CreateTable
260CREATE TABLE "invitations" (
261    "id" TEXT NOT NULL,
262    "workspaceId" TEXT NOT NULL,
263    "email" TEXT NOT NULL,
264    "role" "WorkspaceRole" NOT NULL DEFAULT 'MEMBER',
265    "invitedById" TEXT NOT NULL,
266    "tokenHash" TEXT NOT NULL,
267    "status" "InvitationStatus" NOT NULL DEFAULT 'PENDING',
268    "expiresAt" TIMESTAMP(3) NOT NULL,
269    "acceptedAt" TIMESTAMP(3),
270    "revokedAt" TIMESTAMP(3),
271    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
272    "updatedAt" TIMESTAMP(3) NOT NULL,
273 
274    CONSTRAINT "invitations_pkey" PRIMARY KEY ("id")
275);
276 
277-- CreateTable
278CREATE TABLE "teams" (
279    "id" TEXT NOT NULL,
280    "workspaceId" TEXT NOT NULL,
281    "name" TEXT NOT NULL,
282    "slug" TEXT NOT NULL,
283    "description" TEXT,
284    "color" TEXT,
285    "iconUrl" TEXT,
286    "position" TEXT NOT NULL DEFAULT 'a0',
287    "isPrivate" BOOLEAN NOT NULL DEFAULT false,
288    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
289    "updatedAt" TIMESTAMP(3) NOT NULL,
290 
291    CONSTRAINT "teams_pkey" PRIMARY KEY ("id")
292);
293 
294-- CreateTable
295CREATE TABLE "team_members" (
296    "id" TEXT NOT NULL,
297    "teamId" TEXT NOT NULL,
298    "workspaceMemberId" TEXT NOT NULL,
299    "userId" TEXT NOT NULL,
300    "role" "WorkspaceRole" NOT NULL DEFAULT 'MEMBER',
301    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
302 
303    CONSTRAINT "team_members_pkey" PRIMARY KEY ("id")
304);
305 
306-- CreateTable
307CREATE TABLE "pages" (
308    "id" TEXT NOT NULL,
309    "workspaceId" TEXT NOT NULL,
310    "teamId" TEXT,
311    "parentId" TEXT,
312    "grandparentId" TEXT,
313    "position" TEXT NOT NULL DEFAULT 'a0',
314    "title" TEXT NOT NULL DEFAULT '',
315    "icon" TEXT,
316    "coverUrl" TEXT,
317    "description" TEXT,
318    "isPrivate" BOOLEAN NOT NULL DEFAULT false,
319    "isFavorite" BOOLEAN NOT NULL DEFAULT false,
320    "archivedAt" TIMESTAMP(3),
321    "deletedAt" TIMESTAMP(3),
322    "trashedAt" TIMESTAMP(3),
323    "restoredAt" TIMESTAMP(3),
324    "createdBy" TEXT,
325    "updatedBy" TEXT,
326    "version" INTEGER NOT NULL DEFAULT 1,
327    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
328    "updatedAt" TIMESTAMP(3) NOT NULL,
329 
330    CONSTRAINT "pages_pkey" PRIMARY KEY ("id")
331);
332 
333-- CreateTable
334CREATE TABLE "page_favorites" (
335    "id" TEXT NOT NULL,
336    "workspaceId" TEXT NOT NULL,
337    "userId" TEXT NOT NULL,
338    "pageId" TEXT NOT NULL,
339    "position" TEXT NOT NULL DEFAULT 'a0',
340    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
341 
342    CONSTRAINT "page_favorites_pkey" PRIMARY KEY ("id")
343);
344 
345-- CreateTable
346CREATE TABLE "page_versions" (
347    "id" TEXT NOT NULL,
348    "pageId" TEXT NOT NULL,
349    "version" INTEGER NOT NULL,
350    "snapshot" JSONB NOT NULL,
351    "createdBy" TEXT,
352    "note" TEXT,
353    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
354 
355    CONSTRAINT "page_versions_pkey" PRIMARY KEY ("id")
356);
357 
358-- CreateTable
359CREATE TABLE "blocks" (
360    "id" TEXT NOT NULL,
361    "pageId" TEXT NOT NULL,
362    "workspaceId" TEXT NOT NULL,
363    "parentId" TEXT,
364    "type" "BlockType" NOT NULL,
365    "position" TEXT NOT NULL DEFAULT 'a0',
366    "content" JSONB NOT NULL DEFAULT '{}',
367    "properties" JSONB NOT NULL DEFAULT '{}',
368    "isSynced" BOOLEAN NOT NULL DEFAULT false,
369    "syncedSourceId" TEXT,
370    "createdBy" TEXT,
371    "updatedBy" TEXT,
372    "deletedAt" TIMESTAMP(3),
373    "version" INTEGER NOT NULL DEFAULT 1,
374    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
375    "updatedAt" TIMESTAMP(3) NOT NULL,
376 
377    CONSTRAINT "blocks_pkey" PRIMARY KEY ("id")
378);
379 
380-- CreateTable
381CREATE TABLE "block_versions" (
382    "id" TEXT NOT NULL,
383    "blockId" TEXT NOT NULL,
384    "version" INTEGER NOT NULL,
385    "content" JSONB NOT NULL,
386    "properties" JSONB NOT NULL,
387    "createdBy" TEXT,
388    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
389 
390    CONSTRAINT "block_versions_pkey" PRIMARY KEY ("id")
391);
392 
393-- CreateTable
394CREATE TABLE "databases" (
395    "id" TEXT NOT NULL,
396    "workspaceId" TEXT NOT NULL,
397    "pageId" TEXT,
398    "title" TEXT NOT NULL DEFAULT '',
399    "icon" TEXT,
400    "description" TEXT,
401    "schemaVersion" INTEGER NOT NULL DEFAULT 1,
402    "isArchived" BOOLEAN NOT NULL DEFAULT false,
403    "createdBy" TEXT,
404    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
405    "updatedAt" TIMESTAMP(3) NOT NULL,
406 
407    CONSTRAINT "databases_pkey" PRIMARY KEY ("id")
408);
409 
410-- CreateTable
411CREATE TABLE "database_properties" (
412    "id" TEXT NOT NULL,
413    "databaseId" TEXT NOT NULL,
414    "name" TEXT NOT NULL,
415    "type" "PropertyType" NOT NULL,
416    "position" TEXT NOT NULL DEFAULT 'a0',
417    "isTitle" BOOLEAN NOT NULL DEFAULT false,
418    "isVisible" BOOLEAN NOT NULL DEFAULT true,
419    "required" BOOLEAN NOT NULL DEFAULT false,
420    "config" JSONB NOT NULL DEFAULT '{}',
421    "default" JSONB,
422    "deletedAt" TIMESTAMP(3),
423    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
424    "updatedAt" TIMESTAMP(3) NOT NULL,
425 
426    CONSTRAINT "database_properties_pkey" PRIMARY KEY ("id")
427);
428 
429-- CreateTable
430CREATE TABLE "database_views" (
431    "id" TEXT NOT NULL,
432    "databaseId" TEXT NOT NULL,
433    "name" TEXT NOT NULL,
434    "type" "ViewType" NOT NULL,
435    "position" TEXT NOT NULL DEFAULT 'a0',
436    "config" JSONB NOT NULL DEFAULT '{}',
437    "filter" JSONB,
438    "sort" JSONB,
439    "group" JSONB,
440    "pageSize" INTEGER,
441    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
442    "updatedAt" TIMESTAMP(3) NOT NULL,
443 
444    CONSTRAINT "database_views_pkey" PRIMARY KEY ("id")
445);
446 
447-- CreateTable
448CREATE TABLE "database_records" (
449    "id" TEXT NOT NULL,
450    "workspaceId" TEXT NOT NULL,
451    "databaseId" TEXT NOT NULL,
452    "pageId" TEXT,
453    "coverUrl" TEXT,
454    "icon" TEXT,
455    "archivedAt" TIMESTAMP(3),
456    "isSubItem" BOOLEAN NOT NULL DEFAULT false,
457    "position" TEXT NOT NULL DEFAULT 'a0',
458    "version" INTEGER NOT NULL DEFAULT 1,
459    "createdBy" TEXT,
460    "createdTime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
461    "lastEditedBy" TEXT,
462    "lastEditedTime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
463    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
464    "updatedAt" TIMESTAMP(3) NOT NULL,
465 
466    CONSTRAINT "database_records_pkey" PRIMARY KEY ("id")
467);
468 
469-- CreateTable
470CREATE TABLE "record_properties" (
471    "id" TEXT NOT NULL,
472    "recordId" TEXT NOT NULL,
473    "propertyId" TEXT NOT NULL,
474    "value" JSONB,
475    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
476    "updatedAt" TIMESTAMP(3) NOT NULL,
477 
478    CONSTRAINT "record_properties_pkey" PRIMARY KEY ("id")
479);
480 
481-- CreateTable
482CREATE TABLE "relations" (
483    "id" TEXT NOT NULL,
484    "databaseId" TEXT NOT NULL,
485    "targetDatabaseId" TEXT NOT NULL,
486    "propertyId" TEXT,
487    "reversePropertyId" TEXT,
488    "name" TEXT NOT NULL,
489    "targetName" TEXT,
490    "cardinality" "RelationCardinality" NOT NULL DEFAULT 'MANY_TO_MANY',
491    "bidirectional" BOOLEAN NOT NULL DEFAULT true,
492    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
493    "updatedAt" TIMESTAMP(3) NOT NULL,
494 
495    CONSTRAINT "relations_pkey" PRIMARY KEY ("id")
496);
497 
498-- CreateTable
499CREATE TABLE "relation_links" (
500    "id" TEXT NOT NULL,
501    "databaseId" TEXT NOT NULL,
502    "recordId" TEXT NOT NULL,
503    "targetRecordId" TEXT NOT NULL,
504    "targetDatabaseId" TEXT NOT NULL,
505    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
506 
507    CONSTRAINT "relation_links_pkey" PRIMARY KEY ("id")
508);
509 
510-- CreateTable
511CREATE TABLE "rollups" (
512    "id" TEXT NOT NULL,
513    "databaseId" TEXT NOT NULL,
514    "propertyId" TEXT,
515    "relationId" TEXT NOT NULL,
516    "targetPropertyId" TEXT NOT NULL,
517    "aggregate" "RollupAggregate" NOT NULL,
518    "filter" JSONB,
519    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
520    "updatedAt" TIMESTAMP(3) NOT NULL,
521 
522    CONSTRAINT "rollups_pkey" PRIMARY KEY ("id")
523);
524 
525-- CreateTable
526CREATE TABLE "formulas" (
527    "id" TEXT NOT NULL,
528    "databaseId" TEXT NOT NULL,
529    "propertyId" TEXT,
530    "expression" TEXT NOT NULL,
531    "ast" JSONB NOT NULL,
532    "returnType" TEXT NOT NULL,
533    "dependencies" TEXT[],
534    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
535    "updatedAt" TIMESTAMP(3) NOT NULL,
536 
537    CONSTRAINT "formulas_pkey" PRIMARY KEY ("id")
538);
539 
540-- CreateTable
541CREATE TABLE "database_buttons" (
542    "id" TEXT NOT NULL,
543    "databaseId" TEXT NOT NULL,
544    "propertyId" TEXT,
545    "name" TEXT NOT NULL,
546    "icon" TEXT,
547    "color" TEXT,
548    "actions" JSONB NOT NULL,
549    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
550    "updatedAt" TIMESTAMP(3) NOT NULL,
551 
552    CONSTRAINT "database_buttons_pkey" PRIMARY KEY ("id")
553);
554 
555-- CreateTable
556CREATE TABLE "charts" (
557    "id" TEXT NOT NULL,
558    "workspaceId" TEXT NOT NULL,
559    "databaseId" TEXT NOT NULL,
560    "name" TEXT NOT NULL,
561    "chartType" TEXT NOT NULL,
562    "config" JSONB NOT NULL,
563    "filter" JSONB,
564    "position" TEXT NOT NULL DEFAULT 'a0',
565    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
566    "updatedAt" TIMESTAMP(3) NOT NULL,
567 
568    CONSTRAINT "charts_pkey" PRIMARY KEY ("id")
569);
570 
571-- CreateTable
572CREATE TABLE "dashboards" (
573    "id" TEXT NOT NULL,
574    "workspaceId" TEXT NOT NULL,
575    "name" TEXT NOT NULL,
576    "icon" TEXT,
577    "layout" JSONB NOT NULL DEFAULT '{}',
578    "isPublic" BOOLEAN NOT NULL DEFAULT false,
579    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
580    "updatedAt" TIMESTAMP(3) NOT NULL,
581 
582    CONSTRAINT "dashboards_pkey" PRIMARY KEY ("id")
583);
584 
585-- CreateTable
586CREATE TABLE "dashboard_widgets" (
587    "id" TEXT NOT NULL,
588    "dashboardId" TEXT NOT NULL,
589    "widgetType" TEXT NOT NULL,
590    "sourceRef" JSONB,
591    "position" TEXT NOT NULL DEFAULT 'a0',
592    "layout" JSONB NOT NULL DEFAULT '{}',
593    "filter" JSONB,
594    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
595    "updatedAt" TIMESTAMP(3) NOT NULL,
596 
597    CONSTRAINT "dashboard_widgets_pkey" PRIMARY KEY ("id")
598);
599 
600-- CreateTable
601CREATE TABLE "comments" (
602    "id" TEXT NOT NULL,
603    "workspaceId" TEXT NOT NULL,
604    "teamId" TEXT,
605    "pageId" TEXT,
606    "blockId" TEXT,
607    "recordId" TEXT,
608    "selection" JSONB,
609    "body" TEXT NOT NULL,
610    "mentionIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
611    "pageMentionIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
612    "resolvedAt" TIMESTAMP(3),
613    "resolvedBy" TEXT,
614    "status" TEXT NOT NULL DEFAULT 'open',
615    "createdBy" TEXT NOT NULL,
616    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
617    "updatedAt" TIMESTAMP(3) NOT NULL,
618 
619    CONSTRAINT "comments_pkey" PRIMARY KEY ("id")
620);
621 
622-- CreateTable
623CREATE TABLE "comment_replies" (
624    "id" TEXT NOT NULL,
625    "commentId" TEXT NOT NULL,
626    "body" TEXT NOT NULL,
627    "mentionIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
628    "createdBy" TEXT NOT NULL,
629    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
630    "updatedAt" TIMESTAMP(3) NOT NULL,
631 
632    CONSTRAINT "comment_replies_pkey" PRIMARY KEY ("id")
633);
634 
635-- CreateTable
636CREATE TABLE "comment_reactions" (
637    "id" TEXT NOT NULL,
638    "emoji" TEXT NOT NULL,
639    "userId" TEXT NOT NULL,
640    "commentId" TEXT,
641    "replyId" TEXT,
642    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
643 
644    CONSTRAINT "comment_reactions_pkey" PRIMARY KEY ("id")
645);
646 
647-- CreateTable
648CREATE TABLE "notifications" (
649    "id" TEXT NOT NULL,
650    "workspaceId" TEXT NOT NULL,
651    "userId" TEXT NOT NULL,
652    "type" "NotificationType" NOT NULL,
653    "channel" "NotificationChannel" NOT NULL DEFAULT 'IN_APP',
654    "title" TEXT NOT NULL,
655    "body" TEXT,
656    "link" JSONB,
657    "readAt" TIMESTAMP(3),
658    "actorId" TEXT,
659    "emailSentAt" TIMESTAMP(3),
660    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
661 
662    CONSTRAINT "notifications_pkey" PRIMARY KEY ("id")
663);
664 
665-- CreateTable
666CREATE TABLE "mention_notifications" (
667    "id" TEXT NOT NULL,
668    "userId" TEXT NOT NULL,
669    "mentionerId" TEXT NOT NULL,
670    "targetType" TEXT NOT NULL,
671    "targetId" TEXT NOT NULL,
672    "context" JSONB,
673    "readAt" TIMESTAMP(3),
674    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
675 
676    CONSTRAINT "mention_notifications_pkey" PRIMARY KEY ("id")
677);
678 
679-- CreateTable
680CREATE TABLE "files" (
681    "id" TEXT NOT NULL,
682    "workspaceId" TEXT NOT NULL,
683    "blockId" TEXT,
684    "pageId" TEXT,
685    "name" TEXT NOT NULL,
686    "key" TEXT NOT NULL,
687    "url" TEXT,
688    "size" INTEGER NOT NULL,
689    "mimeType" TEXT NOT NULL,
690    "status" "FileStatus" NOT NULL DEFAULT 'UPLOADING',
691    "metadata" JSONB NOT NULL DEFAULT '{}',
692    "thumbnailKey" TEXT,
693    "thumbnailUrl" TEXT,
694    "scanReport" JSONB,
695    "uploadedBy" TEXT NOT NULL,
696    "permissions" JSONB,
697    "deletedAt" TIMESTAMP(3),
698    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
699    "updatedAt" TIMESTAMP(3) NOT NULL,
700 
701    CONSTRAINT "files_pkey" PRIMARY KEY ("id")
702);
703 
704-- CreateTable
705CREATE TABLE "file_versions" (
706    "id" TEXT NOT NULL,
707    "fileId" TEXT NOT NULL,
708    "version" INTEGER NOT NULL,
709    "key" TEXT NOT NULL,
710    "size" INTEGER NOT NULL,
711    "createdBy" TEXT,
712    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
713 
714    CONSTRAINT "file_versions_pkey" PRIMARY KEY ("id")
715);
716 
717-- CreateTable
718CREATE TABLE "permissions" (
719    "id" TEXT NOT NULL,
720    "workspaceId" TEXT NOT NULL,
721    "granteeType" TEXT NOT NULL,
722    "granteeId" TEXT NOT NULL,
723    "resourceType" TEXT NOT NULL,
724    "resourceId" TEXT NOT NULL,
725    "level" "PermissionLevel" NOT NULL,
726    "inheritsFrom" TEXT,
727    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
728    "updatedAt" TIMESTAMP(3) NOT NULL,
729 
730    CONSTRAINT "permissions_pkey" PRIMARY KEY ("id")
731);
732 
733-- CreateTable
734CREATE TABLE "shares" (
735    "id" TEXT NOT NULL,
736    "workspaceId" TEXT NOT NULL,
737    "pageId" TEXT,
738    "teamId" TEXT,
739    "recordId" TEXT,
740    "token" TEXT NOT NULL,
741    "scope" "ShareScope" NOT NULL DEFAULT 'PRIVATE',
742    "allowComments" BOOLEAN NOT NULL DEFAULT true,
743    "allowDuplicate" BOOLEAN NOT NULL DEFAULT false,
744    "allowSearchIndexing" BOOLEAN NOT NULL DEFAULT false,
745    "passwordHash" TEXT,
746    "expiresAt" TIMESTAMP(3),
747    "createdBy" TEXT NOT NULL,
748    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
749    "updatedAt" TIMESTAMP(3) NOT NULL,
750 
751    CONSTRAINT "shares_pkey" PRIMARY KEY ("id")
752);
753 
754-- CreateTable
755CREATE TABLE "templates" (
756    "id" TEXT NOT NULL,
757    "workspaceId" TEXT NOT NULL,
758    "name" TEXT NOT NULL,
759    "icon" TEXT,
760    "type" TEXT NOT NULL,
761    "sourceRef" JSONB,
762    "sourceDatabaseId" TEXT,
763    "snapshot" JSONB NOT NULL,
764    "isBuiltin" BOOLEAN NOT NULL DEFAULT false,
765    "createdBy" TEXT,
766    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
767    "updatedAt" TIMESTAMP(3) NOT NULL,
768 
769    CONSTRAINT "templates_pkey" PRIMARY KEY ("id")
770);
771 
772-- CreateTable
773CREATE TABLE "automations" (
774    "id" TEXT NOT NULL,
775    "workspaceId" TEXT NOT NULL,
776    "name" TEXT NOT NULL,
777    "description" TEXT,
778    "status" "AutomationStatus" NOT NULL DEFAULT 'DRAFT',
779    "databaseId" TEXT,
780    "createdById" TEXT NOT NULL,
781    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
782    "updatedAt" TIMESTAMP(3) NOT NULL,
783 
784    CONSTRAINT "automations_pkey" PRIMARY KEY ("id")
785);
786 
787-- CreateTable
788CREATE TABLE "automation_triggers" (
789    "id" TEXT NOT NULL,
790    "automationId" TEXT NOT NULL,
791    "type" "AutomationTriggerType" NOT NULL,
792    "config" JSONB NOT NULL,
793    "position" INTEGER NOT NULL DEFAULT 0,
794 
795    CONSTRAINT "automation_triggers_pkey" PRIMARY KEY ("id")
796);
797 
798-- CreateTable
799CREATE TABLE "automation_conditions" (
800    "id" TEXT NOT NULL,
801    "automationId" TEXT NOT NULL,
802    "expression" JSONB NOT NULL,
803    "position" INTEGER NOT NULL DEFAULT 0,
804 
805    CONSTRAINT "automation_conditions_pkey" PRIMARY KEY ("id")
806);
807 
808-- CreateTable
809CREATE TABLE "automation_actions" (
810    "id" TEXT NOT NULL,
811    "automationId" TEXT NOT NULL,
812    "type" "AutomationActionType" NOT NULL,
813    "config" JSONB NOT NULL,
814    "position" INTEGER NOT NULL,
815    "retries" INTEGER NOT NULL DEFAULT 3,
816    "timeoutMs" INTEGER NOT NULL DEFAULT 30000,
817 
818    CONSTRAINT "automation_actions_pkey" PRIMARY KEY ("id")
819);
820 
821-- CreateTable
822CREATE TABLE "automation_runs" (
823    "id" TEXT NOT NULL,
824    "workspaceId" TEXT NOT NULL,
825    "automationId" TEXT NOT NULL,
826    "actionId" TEXT,
827    "status" "AutomationRunStatus" NOT NULL DEFAULT 'PENDING',
828    "triggerEvent" JSONB,
829    "input" JSONB,
830    "output" JSONB,
831    "error" JSONB,
832    "startedAt" TIMESTAMP(3),
833    "finishedAt" TIMESTAMP(3),
834    "retryCount" INTEGER NOT NULL DEFAULT 0,
835    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
836 
837    CONSTRAINT "automation_runs_pkey" PRIMARY KEY ("id")
838);
839 
840-- CreateTable
841CREATE TABLE "automation_logs" (
842    "id" TEXT NOT NULL,
843    "runId" TEXT NOT NULL,
844    "level" TEXT NOT NULL,
845    "message" TEXT NOT NULL,
846    "data" JSONB,
847    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
848 
849    CONSTRAINT "automation_logs_pkey" PRIMARY KEY ("id")
850);
851 
852-- CreateTable
853CREATE TABLE "integrations" (
854    "id" TEXT NOT NULL,
855    "workspaceId" TEXT NOT NULL,
856    "name" TEXT NOT NULL,
857    "provider" TEXT NOT NULL,
858    "config" JSONB NOT NULL,
859    "status" TEXT NOT NULL DEFAULT 'active',
860    "createdById" TEXT NOT NULL,
861    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
862    "updatedAt" TIMESTAMP(3) NOT NULL,
863 
864    CONSTRAINT "integrations_pkey" PRIMARY KEY ("id")
865);
866 
867-- CreateTable
868CREATE TABLE "api_keys" (
869    "id" TEXT NOT NULL,
870    "workspaceId" TEXT NOT NULL,
871    "name" TEXT NOT NULL,
872    "keyHash" TEXT NOT NULL,
873    "prefix" TEXT NOT NULL,
874    "scopes" "ApiKeyScope"[],
875    "rateLimit" INTEGER,
876    "lastUsedAt" TIMESTAMP(3),
877    "expiresAt" TIMESTAMP(3),
878    "revokedAt" TIMESTAMP(3),
879    "createdById" TEXT NOT NULL,
880    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
881 
882    CONSTRAINT "api_keys_pkey" PRIMARY KEY ("id")
883);
884 
885-- CreateTable
886CREATE TABLE "webhooks" (
887    "id" TEXT NOT NULL,
888    "workspaceId" TEXT NOT NULL,
889    "url" TEXT NOT NULL,
890    "secretHash" TEXT NOT NULL,
891    "events" TEXT[],
892    "active" BOOLEAN NOT NULL DEFAULT true,
893    "createdById" TEXT NOT NULL,
894    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
895    "updatedAt" TIMESTAMP(3) NOT NULL,
896 
897    CONSTRAINT "webhooks_pkey" PRIMARY KEY ("id")
898);
899 
900-- CreateTable
901CREATE TABLE "webhook_deliveries" (
902    "id" TEXT NOT NULL,
903    "webhookId" TEXT NOT NULL,
904    "event" TEXT NOT NULL,
905    "payload" JSONB NOT NULL,
906    "status" "WebhookDeliveryStatus" NOT NULL DEFAULT 'PENDING',
907    "attempts" INTEGER NOT NULL DEFAULT 0,
908    "statusCode" INTEGER,
909    "error" TEXT,
910    "deliveredAt" TIMESTAMP(3),
911    "nextRetryAt" TIMESTAMP(3),
912    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
913 
914    CONSTRAINT "webhook_deliveries_pkey" PRIMARY KEY ("id")
915);
916 
917-- CreateTable
918CREATE TABLE "audit_logs" (
919    "id" TEXT NOT NULL,
920    "actorType" "AuditActorType" NOT NULL,
921    "actorId" TEXT NOT NULL,
922    "workspaceId" TEXT,
923    "pageId" TEXT,
924    "resourceType" TEXT NOT NULL,
925    "resourceId" TEXT NOT NULL,
926    "action" TEXT NOT NULL,
927    "ipAddress" TEXT,
928    "userAgent" TEXT,
929    "metadata" JSONB NOT NULL DEFAULT '{}',
930    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
931 
932    CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
933);
934 
935-- CreateTable
936CREATE TABLE "search_documents" (
937    "id" TEXT NOT NULL,
938    "workspaceId" TEXT NOT NULL,
939    "type" TEXT NOT NULL,
940    "refId" TEXT NOT NULL,
941    "title" TEXT NOT NULL,
942    "body" TEXT,
943    "permissions" JSONB NOT NULL,
944    "metadata" JSONB NOT NULL DEFAULT '{}',
945    "indexedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
946 
947    CONSTRAINT "search_documents_pkey" PRIMARY KEY ("id")
948);
949 
950-- CreateTable
951CREATE TABLE "ai_conversations" (
952    "id" TEXT NOT NULL,
953    "workspaceId" TEXT NOT NULL,
954    "userId" TEXT NOT NULL,
955    "title" TEXT,
956    "context" JSONB,
957    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
958    "updatedAt" TIMESTAMP(3) NOT NULL,
959 
960    CONSTRAINT "ai_conversations_pkey" PRIMARY KEY ("id")
961);
962 
963-- CreateTable
964CREATE TABLE "ai_messages" (
965    "id" TEXT NOT NULL,
966    "conversationId" TEXT NOT NULL,
967    "role" TEXT NOT NULL,
968    "content" TEXT NOT NULL,
969    "toolCalls" JSONB,
970    "toolResults" JSONB,
971    "model" TEXT,
972    "tokensIn" INTEGER,
973    "tokensOut" INTEGER,
974    "latencyMs" INTEGER,
975    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
976 
977    CONSTRAINT "ai_messages_pkey" PRIMARY KEY ("id")
978);
979 
980-- CreateTable
981CREATE TABLE "ai_embeddings" (
982    "id" TEXT NOT NULL,
983    "workspaceId" TEXT NOT NULL,
984    "chunkRef" TEXT NOT NULL,
985    "chunkText" TEXT NOT NULL,
986    "vectorId" TEXT NOT NULL,
987    "model" TEXT NOT NULL,
988    "dimension" INTEGER NOT NULL,
989    "metadata" JSONB NOT NULL DEFAULT '{}',
990    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
991 
992    CONSTRAINT "ai_embeddings_pkey" PRIMARY KEY ("id")
993);
994 
995-- CreateTable
996CREATE TABLE "forms" (
997    "id" TEXT NOT NULL,
998    "workspaceId" TEXT NOT NULL,
999    "databaseId" TEXT NOT NULL,
1000    "name" TEXT NOT NULL,
1001    "slug" TEXT NOT NULL,
1002    "description" TEXT,
1003    "status" "FormStatus" NOT NULL DEFAULT 'DRAFT',
1004    "config" JSONB NOT NULL DEFAULT '{}',
1005    "createdById" TEXT NOT NULL,
1006    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
1007    "updatedAt" TIMESTAMP(3) NOT NULL,
1008 
1009    CONSTRAINT "forms_pkey" PRIMARY KEY ("id")
1010);
1011 
1012-- CreateTable
1013CREATE TABLE "form_questions" (
1014    "id" TEXT NOT NULL,
1015    "formId" TEXT NOT NULL,
1016    "label" TEXT NOT NULL,
1017    "description" TEXT,
1018    "type" "FormQuestionType" NOT NULL,
1019    "required" BOOLEAN NOT NULL DEFAULT false,
1020    "validation" JSONB,
1021    "propertyId" TEXT,
1022    "placeholder" TEXT,
1023    "position" TEXT NOT NULL DEFAULT 'a0',
1024    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
1025    "updatedAt" TIMESTAMP(3) NOT NULL,
1026 
1027    CONSTRAINT "form_questions_pkey" PRIMARY KEY ("id")
1028);
1029 
1030-- CreateTable
1031CREATE TABLE "form_submissions" (
1032    "id" TEXT NOT NULL,
1033    "workspaceId" TEXT NOT NULL,
1034    "formId" TEXT NOT NULL,
1035    "recordId" TEXT,
1036    "answers" JSONB NOT NULL,
1037    "submittedBy" TEXT,
1038    "ipAddress" TEXT,
1039    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
1040 
1041    CONSTRAINT "form_submissions_pkey" PRIMARY KEY ("id")
1042);
1043 
1044-- CreateIndex
1045CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
1046 
1047-- CreateIndex
1048CREATE UNIQUE INDEX "refresh_tokens_tokenHash_key" ON "refresh_tokens"("tokenHash");
1049 
1050-- CreateIndex
1051CREATE UNIQUE INDEX "sessions_tokenHash_key" ON "sessions"("tokenHash");
1052 
1053-- CreateIndex
1054CREATE INDEX "sessions_userId_status_idx" ON "sessions"("userId", "status");
1055 
1056-- CreateIndex
1057CREATE UNIQUE INDEX "email_verifications_tokenHash_key" ON "email_verifications"("tokenHash");
1058 
1059-- CreateIndex
1060CREATE INDEX "email_verifications_userId_idx" ON "email_verifications"("userId");
1061 
1062-- CreateIndex
1063CREATE UNIQUE INDEX "password_resets_tokenHash_key" ON "password_resets"("tokenHash");
1064 
1065-- CreateIndex
1066CREATE INDEX "password_resets_userId_idx" ON "password_resets"("userId");
1067 
1068-- CreateIndex
1069CREATE UNIQUE INDEX "organizations_slug_key" ON "organizations"("slug");
1070 
1071-- CreateIndex
1072CREATE UNIQUE INDEX "organization_members_organizationId_userId_key" ON "organization_members"("organizationId", "userId");
1073 
1074-- CreateIndex
1075CREATE UNIQUE INDEX "sso_providers_organizationId_key" ON "sso_providers"("organizationId");
1076 
1077-- CreateIndex
1078CREATE UNIQUE INDEX "sso_identities_providerId_externalId_key" ON "sso_identities"("providerId", "externalId");
1079 
1080-- CreateIndex
1081CREATE UNIQUE INDEX "workspaces_slug_key" ON "workspaces"("slug");
1082 
1083-- CreateIndex
1084CREATE INDEX "workspaces_organizationId_idx" ON "workspaces"("organizationId");
1085 
1086-- CreateIndex
1087CREATE INDEX "workspace_members_userId_idx" ON "workspace_members"("userId");
1088 
1089-- CreateIndex
1090CREATE UNIQUE INDEX "workspace_members_workspaceId_userId_key" ON "workspace_members"("workspaceId", "userId");
1091 
1092-- CreateIndex
1093CREATE UNIQUE INDEX "invitations_tokenHash_key" ON "invitations"("tokenHash");
1094 
1095-- CreateIndex
1096CREATE INDEX "invitations_workspaceId_status_idx" ON "invitations"("workspaceId", "status");
1097 
1098-- CreateIndex
1099CREATE UNIQUE INDEX "invitations_workspaceId_email_role_key" ON "invitations"("workspaceId", "email", "role");
1100 
1101-- CreateIndex
1102CREATE UNIQUE INDEX "teams_workspaceId_slug_key" ON "teams"("workspaceId", "slug");
1103 
1104-- CreateIndex
1105CREATE UNIQUE INDEX "team_members_teamId_userId_key" ON "team_members"("teamId", "userId");
1106 
1107-- CreateIndex
1108CREATE INDEX "pages_workspaceId_parentId_position_idx" ON "pages"("workspaceId", "parentId", "position");
1109 
1110-- CreateIndex
1111CREATE INDEX "pages_workspaceId_deletedAt_idx" ON "pages"("workspaceId", "deletedAt");
1112 
1113-- CreateIndex
1114CREATE INDEX "pages_teamId_idx" ON "pages"("teamId");
1115 
1116-- CreateIndex
1117CREATE UNIQUE INDEX "page_favorites_workspaceId_userId_pageId_key" ON "page_favorites"("workspaceId", "userId", "pageId");
1118 
1119-- CreateIndex
1120CREATE UNIQUE INDEX "page_versions_pageId_version_key" ON "page_versions"("pageId", "version");
1121 
1122-- CreateIndex
1123CREATE INDEX "blocks_pageId_parentId_position_idx" ON "blocks"("pageId", "parentId", "position");
1124 
1125-- CreateIndex
1126CREATE INDEX "blocks_workspaceId_pageId_idx" ON "blocks"("workspaceId", "pageId");
1127 
1128-- CreateIndex
1129CREATE UNIQUE INDEX "block_versions_blockId_version_key" ON "block_versions"("blockId", "version");
1130 
1131-- CreateIndex
1132CREATE INDEX "databases_workspaceId_idx" ON "databases"("workspaceId");
1133 
1134-- CreateIndex
1135CREATE INDEX "database_properties_databaseId_position_idx" ON "database_properties"("databaseId", "position");
1136 
1137-- CreateIndex
1138CREATE UNIQUE INDEX "database_properties_databaseId_name_key" ON "database_properties"("databaseId", "name");
1139 
1140-- CreateIndex
1141CREATE INDEX "database_views_databaseId_position_idx" ON "database_views"("databaseId", "position");
1142 
1143-- CreateIndex
1144CREATE UNIQUE INDEX "database_records_pageId_key" ON "database_records"("pageId");
1145 
1146-- CreateIndex
1147CREATE INDEX "database_records_workspaceId_databaseId_position_idx" ON "database_records"("workspaceId", "databaseId", "position");
1148 
1149-- CreateIndex
1150CREATE INDEX "database_records_databaseId_archivedAt_idx" ON "database_records"("databaseId", "archivedAt");
1151 
1152-- CreateIndex
1153CREATE UNIQUE INDEX "record_properties_recordId_propertyId_key" ON "record_properties"("recordId", "propertyId");
1154 
1155-- CreateIndex
1156CREATE INDEX "relations_databaseId_idx" ON "relations"("databaseId");
1157 
1158-- CreateIndex
1159CREATE INDEX "relations_targetDatabaseId_idx" ON "relations"("targetDatabaseId");
1160 
1161-- CreateIndex
1162CREATE INDEX "relation_links_targetDatabaseId_targetRecordId_idx" ON "relation_links"("targetDatabaseId", "targetRecordId");
1163 
1164-- CreateIndex
1165CREATE UNIQUE INDEX "relation_links_databaseId_recordId_targetDatabaseId_targetR_key" ON "relation_links"("databaseId", "recordId", "targetDatabaseId", "targetRecordId");
1166 
1167-- CreateIndex
1168CREATE INDEX "rollups_databaseId_idx" ON "rollups"("databaseId");
1169 
1170-- CreateIndex
1171CREATE INDEX "formulas_databaseId_idx" ON "formulas"("databaseId");
1172 
1173-- CreateIndex
1174CREATE INDEX "database_buttons_databaseId_idx" ON "database_buttons"("databaseId");
1175 
1176-- CreateIndex
1177CREATE INDEX "charts_workspaceId_databaseId_idx" ON "charts"("workspaceId", "databaseId");
1178 
1179-- CreateIndex
1180CREATE INDEX "dashboards_workspaceId_idx" ON "dashboards"("workspaceId");
1181 
1182-- CreateIndex
1183CREATE INDEX "dashboard_widgets_dashboardId_position_idx" ON "dashboard_widgets"("dashboardId", "position");
1184 
1185-- CreateIndex
1186CREATE INDEX "comments_workspaceId_pageId_idx" ON "comments"("workspaceId", "pageId");
1187 
1188-- CreateIndex
1189CREATE INDEX "comments_workspaceId_blockId_idx" ON "comments"("workspaceId", "blockId");
1190 
1191-- CreateIndex
1192CREATE INDEX "comments_workspaceId_recordId_idx" ON "comments"("workspaceId", "recordId");
1193 
1194-- CreateIndex
1195CREATE INDEX "comment_replies_commentId_idx" ON "comment_replies"("commentId");
1196 
1197-- CreateIndex
1198CREATE UNIQUE INDEX "comment_reactions_commentId_replyId_userId_emoji_key" ON "comment_reactions"("commentId", "replyId", "userId", "emoji");
1199 
1200-- CreateIndex
1201CREATE INDEX "notifications_userId_readAt_idx" ON "notifications"("userId", "readAt");
1202 
1203-- CreateIndex
1204CREATE INDEX "notifications_workspaceId_userId_idx" ON "notifications"("workspaceId", "userId");
1205 
1206-- CreateIndex
1207CREATE INDEX "mention_notifications_userId_readAt_idx" ON "mention_notifications"("userId", "readAt");
1208 
1209-- CreateIndex
1210CREATE UNIQUE INDEX "files_key_key" ON "files"("key");
1211 
1212-- CreateIndex
1213CREATE INDEX "files_workspaceId_deletedAt_idx" ON "files"("workspaceId", "deletedAt");
1214 
1215-- CreateIndex
1216CREATE INDEX "files_blockId_idx" ON "files"("blockId");
1217 
1218-- CreateIndex
1219CREATE UNIQUE INDEX "file_versions_fileId_version_key" ON "file_versions"("fileId", "version");
1220 
1221-- CreateIndex
1222CREATE INDEX "permissions_workspaceId_granteeId_idx" ON "permissions"("workspaceId", "granteeId");
1223 
1224-- CreateIndex
1225CREATE INDEX "permissions_resourceType_resourceId_idx" ON "permissions"("resourceType", "resourceId");
1226 
1227-- CreateIndex
1228CREATE UNIQUE INDEX "permissions_workspaceId_granteeType_granteeId_resourceType__key" ON "permissions"("workspaceId", "granteeType", "granteeId", "resourceType", "resourceId");
1229 
1230-- CreateIndex
1231CREATE UNIQUE INDEX "shares_token_key" ON "shares"("token");
1232 
1233-- CreateIndex
1234CREATE INDEX "shares_workspaceId_pageId_idx" ON "shares"("workspaceId", "pageId");
1235 
1236-- CreateIndex
1237CREATE INDEX "shares_token_idx" ON "shares"("token");
1238 
1239-- CreateIndex
1240CREATE INDEX "templates_workspaceId_type_idx" ON "templates"("workspaceId", "type");
1241 
1242-- CreateIndex
1243CREATE INDEX "automations_workspaceId_status_idx" ON "automations"("workspaceId", "status");
1244 
1245-- CreateIndex
1246CREATE INDEX "automation_triggers_automationId_idx" ON "automation_triggers"("automationId");
1247 
1248-- CreateIndex
1249CREATE INDEX "automation_conditions_automationId_idx" ON "automation_conditions"("automationId");
1250 
1251-- CreateIndex
1252CREATE INDEX "automation_actions_automationId_position_idx" ON "automation_actions"("automationId", "position");
1253 
1254-- CreateIndex
1255CREATE INDEX "automation_runs_workspaceId_automationId_createdAt_idx" ON "automation_runs"("workspaceId", "automationId", "createdAt");
1256 
1257-- CreateIndex
1258CREATE INDEX "automation_runs_status_idx" ON "automation_runs"("status");
1259 
1260-- CreateIndex
1261CREATE INDEX "automation_logs_runId_idx" ON "automation_logs"("runId");
1262 
1263-- CreateIndex
1264CREATE INDEX "integrations_workspaceId_idx" ON "integrations"("workspaceId");
1265 
1266-- CreateIndex
1267CREATE UNIQUE INDEX "api_keys_keyHash_key" ON "api_keys"("keyHash");
1268 
1269-- CreateIndex
1270CREATE INDEX "api_keys_workspaceId_idx" ON "api_keys"("workspaceId");
1271 
1272-- CreateIndex
1273CREATE INDEX "webhooks_workspaceId_idx" ON "webhooks"("workspaceId");
1274 
1275-- CreateIndex
1276CREATE INDEX "webhook_deliveries_webhookId_status_idx" ON "webhook_deliveries"("webhookId", "status");
1277 
1278-- CreateIndex
1279CREATE INDEX "webhook_deliveries_status_nextRetryAt_idx" ON "webhook_deliveries"("status", "nextRetryAt");
1280 
1281-- CreateIndex
1282CREATE INDEX "audit_logs_workspaceId_action_createdAt_idx" ON "audit_logs"("workspaceId", "action", "createdAt");
1283 
1284-- CreateIndex
1285CREATE INDEX "audit_logs_resourceType_resourceId_createdAt_idx" ON "audit_logs"("resourceType", "resourceId", "createdAt");
1286 
1287-- CreateIndex
1288CREATE INDEX "audit_logs_actorType_actorId_createdAt_idx" ON "audit_logs"("actorType", "actorId", "createdAt");
1289 
1290-- CreateIndex
1291CREATE INDEX "search_documents_workspaceId_type_idx" ON "search_documents"("workspaceId", "type");
1292 
1293-- CreateIndex
1294CREATE UNIQUE INDEX "search_documents_type_refId_key" ON "search_documents"("type", "refId");
1295 
1296-- CreateIndex
1297CREATE INDEX "ai_conversations_workspaceId_userId_idx" ON "ai_conversations"("workspaceId", "userId");
1298 
1299-- CreateIndex
1300CREATE INDEX "ai_messages_conversationId_idx" ON "ai_messages"("conversationId");
1301 
1302-- CreateIndex
1303CREATE INDEX "ai_embeddings_workspaceId_idx" ON "ai_embeddings"("workspaceId");
1304 
1305-- CreateIndex
1306CREATE UNIQUE INDEX "ai_embeddings_workspaceId_chunkRef_key" ON "ai_embeddings"("workspaceId", "chunkRef");
1307 
1308-- CreateIndex
1309CREATE UNIQUE INDEX "forms_slug_key" ON "forms"("slug");
1310 
1311-- CreateIndex
1312CREATE INDEX "forms_workspaceId_databaseId_idx" ON "forms"("workspaceId", "databaseId");
1313 
1314-- CreateIndex
1315CREATE INDEX "form_questions_formId_position_idx" ON "form_questions"("formId", "position");
1316 
1317-- CreateIndex
1318CREATE INDEX "form_submissions_workspaceId_formId_createdAt_idx" ON "form_submissions"("workspaceId", "formId", "createdAt");
1319 
1320-- AddForeignKey
1321ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1322 
1323-- AddForeignKey
1324ALTER TABLE "sessions" ADD CONSTRAINT "sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1325 
1326-- AddForeignKey
1327ALTER TABLE "password_resets" ADD CONSTRAINT "password_resets_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1328 
1329-- AddForeignKey
1330ALTER TABLE "organizations" ADD CONSTRAINT "organizations_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
1331 
1332-- AddForeignKey
1333ALTER TABLE "organization_members" ADD CONSTRAINT "organization_members_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1334 
1335-- AddForeignKey
1336ALTER TABLE "organization_members" ADD CONSTRAINT "organization_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1337 
1338-- AddForeignKey
1339ALTER TABLE "sso_providers" ADD CONSTRAINT "sso_providers_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1340 
1341-- AddForeignKey
1342ALTER TABLE "sso_identities" ADD CONSTRAINT "sso_identities_providerId_fkey" FOREIGN KEY ("providerId") REFERENCES "sso_providers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1343 
1344-- AddForeignKey
1345ALTER TABLE "retention_policies" ADD CONSTRAINT "retention_policies_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1346 
1347-- AddForeignKey
1348ALTER TABLE "workspaces" ADD CONSTRAINT "workspaces_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1349 
1350-- AddForeignKey
1351ALTER TABLE "workspaces" ADD CONSTRAINT "workspaces_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "organizations"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1352 
1353-- AddForeignKey
1354ALTER TABLE "workspace_members" ADD CONSTRAINT "workspace_members_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1355 
1356-- AddForeignKey
1357ALTER TABLE "workspace_members" ADD CONSTRAINT "workspace_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1358 
1359-- AddForeignKey
1360ALTER TABLE "invitations" ADD CONSTRAINT "invitations_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1361 
1362-- AddForeignKey
1363ALTER TABLE "teams" ADD CONSTRAINT "teams_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1364 
1365-- AddForeignKey
1366ALTER TABLE "team_members" ADD CONSTRAINT "team_members_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1367 
1368-- AddForeignKey
1369ALTER TABLE "team_members" ADD CONSTRAINT "team_members_workspaceMemberId_fkey" FOREIGN KEY ("workspaceMemberId") REFERENCES "workspace_members"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1370 
1371-- AddForeignKey
1372ALTER TABLE "pages" ADD CONSTRAINT "pages_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1373 
1374-- AddForeignKey
1375ALTER TABLE "pages" ADD CONSTRAINT "pages_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1376 
1377-- AddForeignKey
1378ALTER TABLE "pages" ADD CONSTRAINT "pages_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "pages"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1379 
1380-- AddForeignKey
1381ALTER TABLE "page_favorites" ADD CONSTRAINT "page_favorites_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1382 
1383-- AddForeignKey
1384ALTER TABLE "page_favorites" ADD CONSTRAINT "page_favorites_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1385 
1386-- AddForeignKey
1387ALTER TABLE "page_versions" ADD CONSTRAINT "page_versions_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1388 
1389-- AddForeignKey
1390ALTER TABLE "page_versions" ADD CONSTRAINT "page_versions_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1391 
1392-- AddForeignKey
1393ALTER TABLE "blocks" ADD CONSTRAINT "blocks_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1394 
1395-- AddForeignKey
1396ALTER TABLE "block_versions" ADD CONSTRAINT "block_versions_blockId_fkey" FOREIGN KEY ("blockId") REFERENCES "blocks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1397 
1398-- AddForeignKey
1399ALTER TABLE "block_versions" ADD CONSTRAINT "block_versions_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1400 
1401-- AddForeignKey
1402ALTER TABLE "databases" ADD CONSTRAINT "databases_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1403 
1404-- AddForeignKey
1405ALTER TABLE "database_properties" ADD CONSTRAINT "database_properties_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1406 
1407-- AddForeignKey
1408ALTER TABLE "database_views" ADD CONSTRAINT "database_views_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1409 
1410-- AddForeignKey
1411ALTER TABLE "database_records" ADD CONSTRAINT "database_records_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1412 
1413-- AddForeignKey
1414ALTER TABLE "database_records" ADD CONSTRAINT "database_records_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1415 
1416-- AddForeignKey
1417ALTER TABLE "record_properties" ADD CONSTRAINT "record_properties_recordId_fkey" FOREIGN KEY ("recordId") REFERENCES "database_records"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1418 
1419-- AddForeignKey
1420ALTER TABLE "record_properties" ADD CONSTRAINT "record_properties_propertyId_fkey" FOREIGN KEY ("propertyId") REFERENCES "database_properties"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1421 
1422-- AddForeignKey
1423ALTER TABLE "relations" ADD CONSTRAINT "relations_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1424 
1425-- AddForeignKey
1426ALTER TABLE "relation_links" ADD CONSTRAINT "relation_links_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1427 
1428-- AddForeignKey
1429ALTER TABLE "relation_links" ADD CONSTRAINT "relation_links_recordId_fkey" FOREIGN KEY ("recordId") REFERENCES "database_records"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1430 
1431-- AddForeignKey
1432ALTER TABLE "rollups" ADD CONSTRAINT "rollups_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1433 
1434-- AddForeignKey
1435ALTER TABLE "formulas" ADD CONSTRAINT "formulas_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1436 
1437-- AddForeignKey
1438ALTER TABLE "database_buttons" ADD CONSTRAINT "database_buttons_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1439 
1440-- AddForeignKey
1441ALTER TABLE "charts" ADD CONSTRAINT "charts_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1442 
1443-- AddForeignKey
1444ALTER TABLE "dashboards" ADD CONSTRAINT "dashboards_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1445 
1446-- AddForeignKey
1447ALTER TABLE "dashboard_widgets" ADD CONSTRAINT "dashboard_widgets_dashboardId_fkey" FOREIGN KEY ("dashboardId") REFERENCES "dashboards"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1448 
1449-- AddForeignKey
1450ALTER TABLE "comments" ADD CONSTRAINT "comments_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1451 
1452-- AddForeignKey
1453ALTER TABLE "comments" ADD CONSTRAINT "comments_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1454 
1455-- AddForeignKey
1456ALTER TABLE "comments" ADD CONSTRAINT "comments_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1457 
1458-- AddForeignKey
1459ALTER TABLE "comments" ADD CONSTRAINT "comments_blockId_fkey" FOREIGN KEY ("blockId") REFERENCES "blocks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1460 
1461-- AddForeignKey
1462ALTER TABLE "comments" ADD CONSTRAINT "comments_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1463 
1464-- AddForeignKey
1465ALTER TABLE "comment_replies" ADD CONSTRAINT "comment_replies_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "comments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1466 
1467-- AddForeignKey
1468ALTER TABLE "comment_replies" ADD CONSTRAINT "comment_replies_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1469 
1470-- AddForeignKey
1471ALTER TABLE "comment_reactions" ADD CONSTRAINT "comment_reactions_commentId_fkey" FOREIGN KEY ("commentId") REFERENCES "comments"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1472 
1473-- AddForeignKey
1474ALTER TABLE "comment_reactions" ADD CONSTRAINT "comment_reactions_replyId_fkey" FOREIGN KEY ("replyId") REFERENCES "comment_replies"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1475 
1476-- AddForeignKey
1477ALTER TABLE "notifications" ADD CONSTRAINT "notifications_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1478 
1479-- AddForeignKey
1480ALTER TABLE "notifications" ADD CONSTRAINT "notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1481 
1482-- AddForeignKey
1483ALTER TABLE "mention_notifications" ADD CONSTRAINT "mention_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1484 
1485-- AddForeignKey
1486ALTER TABLE "files" ADD CONSTRAINT "files_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1487 
1488-- AddForeignKey
1489ALTER TABLE "files" ADD CONSTRAINT "files_blockId_fkey" FOREIGN KEY ("blockId") REFERENCES "blocks"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1490 
1491-- AddForeignKey
1492ALTER TABLE "file_versions" ADD CONSTRAINT "file_versions_fileId_fkey" FOREIGN KEY ("fileId") REFERENCES "files"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1493 
1494-- AddForeignKey
1495ALTER TABLE "file_versions" ADD CONSTRAINT "file_versions_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1496 
1497-- AddForeignKey
1498ALTER TABLE "shares" ADD CONSTRAINT "shares_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1499 
1500-- AddForeignKey
1501ALTER TABLE "shares" ADD CONSTRAINT "shares_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1502 
1503-- AddForeignKey
1504ALTER TABLE "shares" ADD CONSTRAINT "shares_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1505 
1506-- AddForeignKey
1507ALTER TABLE "templates" ADD CONSTRAINT "templates_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1508 
1509-- AddForeignKey
1510ALTER TABLE "automations" ADD CONSTRAINT "automations_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1511 
1512-- AddForeignKey
1513ALTER TABLE "automations" ADD CONSTRAINT "automations_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
1514 
1515-- AddForeignKey
1516ALTER TABLE "automation_triggers" ADD CONSTRAINT "automation_triggers_automationId_fkey" FOREIGN KEY ("automationId") REFERENCES "automations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1517 
1518-- AddForeignKey
1519ALTER TABLE "automation_conditions" ADD CONSTRAINT "automation_conditions_automationId_fkey" FOREIGN KEY ("automationId") REFERENCES "automations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1520 
1521-- AddForeignKey
1522ALTER TABLE "automation_actions" ADD CONSTRAINT "automation_actions_automationId_fkey" FOREIGN KEY ("automationId") REFERENCES "automations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1523 
1524-- AddForeignKey
1525ALTER TABLE "automation_runs" ADD CONSTRAINT "automation_runs_automationId_fkey" FOREIGN KEY ("automationId") REFERENCES "automations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1526 
1527-- AddForeignKey
1528ALTER TABLE "automation_runs" ADD CONSTRAINT "automation_runs_actionId_fkey" FOREIGN KEY ("actionId") REFERENCES "automation_actions"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1529 
1530-- AddForeignKey
1531ALTER TABLE "automation_logs" ADD CONSTRAINT "automation_logs_runId_fkey" FOREIGN KEY ("runId") REFERENCES "automation_runs"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1532 
1533-- AddForeignKey
1534ALTER TABLE "integrations" ADD CONSTRAINT "integrations_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1535 
1536-- AddForeignKey
1537ALTER TABLE "api_keys" ADD CONSTRAINT "api_keys_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1538 
1539-- AddForeignKey
1540ALTER TABLE "api_keys" ADD CONSTRAINT "api_keys_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1541 
1542-- AddForeignKey
1543ALTER TABLE "webhooks" ADD CONSTRAINT "webhooks_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1544 
1545-- AddForeignKey
1546ALTER TABLE "webhook_deliveries" ADD CONSTRAINT "webhook_deliveries_webhookId_fkey" FOREIGN KEY ("webhookId") REFERENCES "webhooks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1547 
1548-- AddForeignKey
1549ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1550 
1551-- AddForeignKey
1552ALTER TABLE "audit_logs" ADD CONSTRAINT "audit_logs_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "pages"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1553 
1554-- AddForeignKey
1555ALTER TABLE "search_documents" ADD CONSTRAINT "search_documents_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1556 
1557-- AddForeignKey
1558ALTER TABLE "ai_conversations" ADD CONSTRAINT "ai_conversations_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1559 
1560-- AddForeignKey
1561ALTER TABLE "ai_conversations" ADD CONSTRAINT "ai_conversations_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1562 
1563-- AddForeignKey
1564ALTER TABLE "ai_messages" ADD CONSTRAINT "ai_messages_conversationId_fkey" FOREIGN KEY ("conversationId") REFERENCES "ai_conversations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1565 
1566-- AddForeignKey
1567ALTER TABLE "forms" ADD CONSTRAINT "forms_databaseId_fkey" FOREIGN KEY ("databaseId") REFERENCES "databases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1568 
1569-- AddForeignKey
1570ALTER TABLE "form_questions" ADD CONSTRAINT "form_questions_formId_fkey" FOREIGN KEY ("formId") REFERENCES "forms"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1571 
1572-- AddForeignKey
1573ALTER TABLE "form_submissions" ADD CONSTRAINT "form_submissions_workspaceId_fkey" FOREIGN KEY ("workspaceId") REFERENCES "workspaces"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1574 
1575-- AddForeignKey
1576ALTER TABLE "form_submissions" ADD CONSTRAINT "form_submissions_formId_fkey" FOREIGN KEY ("formId") REFERENCES "forms"("id") ON DELETE CASCADE ON UPDATE CASCADE;
1577 
1578-- AddForeignKey
1579ALTER TABLE "form_submissions" ADD CONSTRAINT "form_submissions_recordId_fkey" FOREIGN KEY ("recordId") REFERENCES "database_records"("id") ON DELETE SET NULL ON UPDATE CASCADE;
1580 
1581