insforge 1.2.10 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -20
- package/.dockerignore +60 -60
- package/.env.example +83 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +65 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -63
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +44 -44
- package/CLAUDE_PLUGIN.md +104 -104
- package/CODE_OF_CONDUCT.md +128 -128
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -30
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -182
- package/assets/Dark.svg +23 -23
- package/auth/package.json +28 -28
- package/auth/src/lib/broadcastService.ts +117 -115
- package/auth/src/pages/SignInPage.tsx +60 -57
- package/auth/src/pages/SignUpPage.tsx +60 -57
- package/auth/tsconfig.json +32 -32
- package/auth/tsconfig.node.json +11 -11
- package/backend/package.json +78 -75
- package/backend/src/api/routes/ai/index.routes.ts +3 -3
- package/backend/src/api/routes/auth/index.routes.ts +667 -570
- package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
- package/backend/src/api/routes/database/advance.routes.ts +37 -16
- package/backend/src/api/routes/database/index.routes.ts +78 -1
- package/backend/src/api/routes/database/records.routes.ts +10 -10
- package/backend/src/api/routes/database/tables.routes.ts +0 -14
- package/backend/src/api/routes/docs/index.routes.ts +75 -76
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +18 -12
- package/backend/src/api/routes/metadata/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
- package/backend/src/api/routes/realtime/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
- package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
- package/backend/src/api/routes/storage/index.routes.ts +18 -12
- package/backend/src/api/routes/usage/index.routes.ts +6 -4
- package/backend/src/infra/database/database.manager.ts +14 -1
- package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
- package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
- package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
- package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
- package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
- package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
- package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
- package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
- package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
- package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
- package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
- package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
- package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
- package/backend/src/infra/realtime/realtime.manager.ts +246 -0
- package/backend/src/infra/realtime/webhook-sender.ts +82 -0
- package/backend/src/infra/security/token.manager.ts +219 -125
- package/backend/src/infra/socket/socket.manager.ts +198 -64
- package/backend/src/providers/ai/openrouter.provider.ts +12 -9
- package/backend/src/providers/email/base.provider.ts +4 -7
- package/backend/src/providers/email/cloud.provider.ts +84 -0
- package/backend/src/providers/oauth/apple.provider.ts +266 -0
- package/backend/src/providers/oauth/index.ts +1 -0
- package/backend/src/server.ts +317 -284
- package/backend/src/services/ai/ai-model.service.ts +5 -5
- package/backend/src/services/ai/chat-completion.service.ts +4 -4
- package/backend/src/services/ai/image-generation.service.ts +3 -3
- package/backend/src/services/auth/auth.service.ts +14 -0
- package/backend/src/services/database/database-table.service.ts +0 -9
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/email/email.service.ts +5 -7
- package/backend/src/services/realtime/index.ts +3 -0
- package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
- package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
- package/backend/src/services/realtime/realtime-message.service.ts +260 -0
- package/backend/src/types/auth.ts +11 -0
- package/backend/src/types/realtime.ts +18 -0
- package/backend/src/types/socket.ts +7 -31
- package/backend/src/utils/cookies.ts +35 -0
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +301 -298
- package/backend/src/utils/sql-parser.ts +90 -0
- package/backend/tests/README.md +133 -133
- package/backend/tests/cleanup-all-test-data.sh +230 -230
- package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
- package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
- package/backend/tests/local/test-ai-config.sh +129 -129
- package/backend/tests/local/test-ai-usage.sh +80 -80
- package/backend/tests/local/test-auth-router.sh +143 -143
- package/backend/tests/local/test-database-router.sh +222 -222
- package/backend/tests/local/test-e2e.sh +240 -240
- package/backend/tests/local/test-fk-errors.sh +96 -96
- package/backend/tests/local/test-functions.sh +123 -123
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -132
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-secrets.sh +249 -249
- package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
- package/backend/tests/local/test-traditional-rest.sh +208 -208
- package/backend/tests/manual/README.md +50 -50
- package/backend/tests/manual/create-large-table-simple.sql +10 -10
- package/backend/tests/manual/seed-large-table.sql +100 -100
- package/backend/tests/manual/setup-large-table-extras.sql +33 -33
- package/backend/tests/manual/test-bulk-upsert.sh +409 -409
- package/backend/tests/manual/test-database-advance.sh +296 -296
- package/backend/tests/manual/test-postgrest-stability.sh +191 -191
- package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
- package/backend/tests/manual/test-rawsql-modes.sh +244 -244
- package/backend/tests/manual/test-universal-storage.sh +263 -263
- package/backend/tests/manual/test-users.sql +17 -17
- package/backend/tests/run-all-tests.sh +139 -139
- package/backend/tests/setup.ts +0 -0
- package/backend/tests/test-config.sh +338 -338
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- package/backend/tsconfig.json +22 -22
- package/claude-plugin/.claude-plugin/plugin.json +24 -24
- package/claude-plugin/README.md +133 -133
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
- package/docker-compose.prod.yml +204 -200
- package/docker-compose.yml +232 -228
- package/docker-init/db/db-init.sql +97 -97
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -236
- package/docs/README.md +44 -44
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +119 -67
- package/docs/core-concepts/ai/architecture.mdx +372 -372
- package/docs/core-concepts/ai/sdk.mdx +213 -213
- package/docs/core-concepts/authentication/architecture.mdx +278 -278
- package/docs/core-concepts/authentication/sdk.mdx +414 -414
- package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
- package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
- package/docs/core-concepts/database/architecture.mdx +255 -255
- package/docs/core-concepts/database/sdk.mdx +382 -382
- package/docs/core-concepts/email/architecture.mdx +101 -0
- package/docs/core-concepts/email/sdk.mdx +53 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -105
- package/docs/core-concepts/functions/sdk.mdx +184 -184
- package/docs/core-concepts/realtime/architecture.mdx +446 -0
- package/docs/core-concepts/realtime/sdk.mdx +409 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -243
- package/docs/core-concepts/storage/sdk.mdx +253 -253
- package/docs/deployment/README.md +94 -94
- package/docs/deployment/deploy-to-aws-ec2.md +564 -564
- package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
- package/docs/deployment/deploy-to-render.md +441 -441
- package/docs/deprecated/insforge-auth-api.md +214 -214
- package/docs/deprecated/insforge-auth-sdk.md +99 -99
- package/docs/deprecated/insforge-db-api.md +358 -358
- package/docs/deprecated/insforge-db-sdk.md +139 -139
- package/docs/deprecated/insforge-debug-sdk.md +156 -156
- package/docs/deprecated/insforge-debug.md +64 -64
- package/docs/deprecated/insforge-instructions.md +123 -123
- package/docs/deprecated/insforge-project.md +117 -117
- package/docs/deprecated/insforge-storage-api.md +278 -278
- package/docs/deprecated/insforge-storage-sdk.md +158 -158
- package/docs/docs.json +232 -210
- package/docs/examples/framework-guides/nextjs.mdx +131 -131
- package/docs/examples/framework-guides/nuxt.mdx +165 -165
- package/docs/examples/framework-guides/react.mdx +165 -165
- package/docs/examples/framework-guides/svelte.mdx +153 -153
- package/docs/examples/framework-guides/vue.mdx +159 -159
- package/docs/examples/overview.mdx +67 -67
- package/docs/favicon.svg +19 -19
- package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
- package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
- package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
- package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
- package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
- package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
- package/docs/images/icons/ai.svg +4 -4
- package/docs/images/logos/nextjs.svg +4 -4
- package/docs/images/logos/nuxt.svg +4 -4
- package/docs/images/logos/react.svg +5 -5
- package/docs/images/logos/svelte.svg +4 -4
- package/docs/images/logos/vue.svg +5 -5
- package/docs/insforge-instructions-sdk.md +89 -88
- package/docs/introduction.mdx +45 -45
- package/docs/logo/dark.svg +22 -22
- package/docs/logo/light.svg +20 -20
- package/docs/partnership.mdx +651 -646
- package/docs/quickstart.mdx +82 -82
- package/docs/showcase.mdx +52 -52
- package/docs/snippets/sdk-installation.mdx +21 -21
- package/docs/snippets/service-icons.mdx +27 -27
- package/examples/oauth/frontend-oauth-example.html +250 -250
- package/examples/response-examples.md +443 -443
- package/frontend/components.json +17 -17
- package/frontend/package.json +69 -69
- package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
- package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
- package/frontend/src/assets/icons/checked.svg +3 -3
- package/frontend/src/assets/icons/connected.svg +3 -3
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -9
- package/frontend/src/assets/icons/pencil.svg +4 -4
- package/frontend/src/assets/icons/refresh.svg +4 -4
- package/frontend/src/assets/icons/step_active.svg +3 -3
- package/frontend/src/assets/icons/step_inactive.svg +11 -11
- package/frontend/src/assets/icons/warning.svg +3 -3
- package/frontend/src/assets/logos/apple.svg +3 -3
- package/frontend/src/assets/logos/claude_code.svg +3 -3
- package/frontend/src/assets/logos/cline.svg +6 -6
- package/frontend/src/assets/logos/cursor.svg +20 -20
- package/frontend/src/assets/logos/discord.svg +8 -8
- package/frontend/src/assets/logos/facebook.svg +3 -3
- package/frontend/src/assets/logos/gemini.svg +19 -19
- package/frontend/src/assets/logos/github.svg +5 -5
- package/frontend/src/assets/logos/google.svg +13 -13
- package/frontend/src/assets/logos/grok.svg +10 -10
- package/frontend/src/assets/logos/insforge_dark.svg +15 -15
- package/frontend/src/assets/logos/insforge_light.svg +15 -15
- package/frontend/src/assets/logos/instagram.svg +1 -1
- package/frontend/src/assets/logos/linkedin.svg +3 -3
- package/frontend/src/assets/logos/openai.svg +10 -10
- package/frontend/src/assets/logos/roo_code.svg +9 -9
- package/frontend/src/assets/logos/spotify.svg +16 -16
- package/frontend/src/assets/logos/tiktok.svg +5 -5
- package/frontend/src/assets/logos/trae.svg +3 -3
- package/frontend/src/assets/logos/windsurf.svg +10 -10
- package/frontend/src/assets/logos/x.svg +3 -3
- package/frontend/src/components/layout/AppHeader.tsx +9 -10
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
- package/frontend/src/features/auth/helpers.tsx +8 -0
- package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
- package/frontend/src/features/database/components/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableForm.tsx +0 -4
- package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
- package/frontend/src/features/database/hooks/useTables.ts +32 -28
- package/frontend/src/features/database/index.ts +1 -0
- package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
- package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
- package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
- package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
- package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
- package/frontend/src/features/database/services/advance.service.ts +0 -26
- package/frontend/src/features/database/services/database.service.ts +55 -0
- package/frontend/src/features/database/services/table.service.ts +0 -6
- package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
- package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
- package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
- package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
- package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
- package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
- package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
- package/frontend/src/features/realtime/index.ts +11 -0
- package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
- package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
- package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
- package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
- package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
- package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
- package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
- package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
- package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
- package/frontend/src/lib/utils/menuItems.ts +24 -0
- package/frontend/src/lib/utils/utils.ts +14 -1
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/functions/deno.json +24 -24
- package/functions/server.ts +315 -315
- package/i18n/README.ar.md +130 -130
- package/i18n/README.de.md +130 -130
- package/i18n/README.es.md +154 -154
- package/i18n/README.fr.md +134 -134
- package/i18n/README.hi.md +129 -129
- package/i18n/README.ja.md +174 -174
- package/i18n/README.ko.md +136 -136
- package/i18n/README.pt-BR.md +131 -131
- package/i18n/README.ru.md +129 -129
- package/i18n/README.zh-CN.md +133 -133
- package/openapi/ai.yaml +715 -715
- package/openapi/auth.yaml +1244 -1244
- package/openapi/email.yaml +158 -0
- package/openapi/functions.yaml +475 -475
- package/openapi/health.yaml +29 -29
- package/openapi/logs.yaml +223 -223
- package/openapi/metadata.yaml +177 -177
- package/openapi/realtime.yaml +699 -0
- package/openapi/records.yaml +381 -381
- package/openapi/secrets.yaml +370 -370
- package/openapi/storage.yaml +875 -875
- package/openapi/tables.yaml +463 -463
- package/package.json +97 -97
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai.schema.ts +63 -59
- package/shared-schemas/src/auth-api.schema.ts +352 -339
- package/shared-schemas/src/auth.schema.ts +1 -1
- package/shared-schemas/src/database-api.schema.ts +32 -1
- package/shared-schemas/src/database.schema.ts +39 -0
- package/shared-schemas/src/docs.schema.ts +26 -0
- package/shared-schemas/src/email-api.schema.ts +30 -0
- package/shared-schemas/src/index.ts +4 -0
- package/shared-schemas/src/metadata.schema.ts +9 -0
- package/shared-schemas/src/realtime-api.schema.ts +111 -0
- package/shared-schemas/src/realtime.schema.ts +143 -0
- package/shared-schemas/tsconfig.json +21 -21
- package/tsconfig.json +7 -7
- package/zeabur/README.md +13 -13
- package/zeabur/template.yml +1032 -1032
- package/.cursor/rules/cursor-rules.mdc +0 -94
- package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
- package/test-gemini.sh +0 -35
- package/test-usage-admin.sh +0 -57
- package/test-usage.sh +0 -50
- /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
- /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
- /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
- /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
- /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
- /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
- /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
- /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
-- Migration: 004 - add reload_postgrest_schema function.
|
|
2
|
-
|
|
3
|
-
DO $$
|
|
4
|
-
BEGIN
|
|
5
|
-
-- Create a function to reload PostgREST schema
|
|
6
|
-
CREATE OR REPLACE FUNCTION reload_postgrest_schema()
|
|
7
|
-
RETURNS void
|
|
8
|
-
LANGUAGE plpgsql
|
|
9
|
-
AS $reload_function$
|
|
10
|
-
BEGIN
|
|
11
|
-
-- Method 1: Use NOTIFY to signal PostgREST to reload schema
|
|
12
|
-
-- PostgREST listens to 'pgrst' channel for schema changes
|
|
13
|
-
NOTIFY pgrst, 'reload schema';
|
|
14
|
-
|
|
15
|
-
RAISE NOTICE 'PostgREST schema reload notification sent';
|
|
16
|
-
END
|
|
17
|
-
$reload_function$;
|
|
18
|
-
|
|
19
|
-
-- Grant execute permission to project_admin and authenticated users
|
|
20
|
-
GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO project_admin;
|
|
21
|
-
GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO authenticated;
|
|
22
|
-
|
|
23
|
-
RAISE NOTICE 'PostgREST schema reload function created successfully';
|
|
1
|
+
-- Migration: 004 - add reload_postgrest_schema function.
|
|
2
|
+
|
|
3
|
+
DO $$
|
|
4
|
+
BEGIN
|
|
5
|
+
-- Create a function to reload PostgREST schema
|
|
6
|
+
CREATE OR REPLACE FUNCTION reload_postgrest_schema()
|
|
7
|
+
RETURNS void
|
|
8
|
+
LANGUAGE plpgsql
|
|
9
|
+
AS $reload_function$
|
|
10
|
+
BEGIN
|
|
11
|
+
-- Method 1: Use NOTIFY to signal PostgREST to reload schema
|
|
12
|
+
-- PostgREST listens to 'pgrst' channel for schema changes
|
|
13
|
+
NOTIFY pgrst, 'reload schema';
|
|
14
|
+
|
|
15
|
+
RAISE NOTICE 'PostgREST schema reload notification sent';
|
|
16
|
+
END
|
|
17
|
+
$reload_function$;
|
|
18
|
+
|
|
19
|
+
-- Grant execute permission to project_admin and authenticated users
|
|
20
|
+
GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO project_admin;
|
|
21
|
+
GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO authenticated;
|
|
22
|
+
|
|
23
|
+
RAISE NOTICE 'PostgREST schema reload function created successfully';
|
|
24
24
|
END $$;
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
-- Migration: 005 - Enable project admin modify any users.
|
|
2
|
-
|
|
3
|
-
DO $$
|
|
4
|
-
BEGIN
|
|
5
|
-
-- Create policy to allow project_admin to update any user
|
|
6
|
-
IF NOT EXISTS (
|
|
7
|
-
SELECT 1 FROM pg_policies
|
|
8
|
-
WHERE tablename = 'users'
|
|
9
|
-
AND policyname = 'Allow project_admin to update any user'
|
|
10
|
-
) THEN
|
|
11
|
-
CREATE POLICY "Allow project_admin to update any user" ON users
|
|
12
|
-
FOR UPDATE
|
|
13
|
-
TO project_admin
|
|
14
|
-
USING (true)
|
|
15
|
-
WITH CHECK (true); -- Ensure project_admin always can update
|
|
16
|
-
END IF;
|
|
17
|
-
|
|
18
|
-
-- Grant necessary permissions
|
|
19
|
-
GRANT SELECT, UPDATE ON users TO project_admin;
|
|
20
|
-
|
|
21
|
-
-- Notify PostgREST to reload schema after policy changes
|
|
22
|
-
IF EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'reload_postgrest_schema') THEN
|
|
23
|
-
PERFORM reload_postgrest_schema();
|
|
24
|
-
RAISE NOTICE 'PostgREST schema reload requested after migration';
|
|
25
|
-
ELSE
|
|
26
|
-
RAISE WARNING 'PostgREST reload function not found - please restart PostgREST manually';
|
|
27
|
-
END IF;
|
|
28
|
-
|
|
29
|
-
RAISE NOTICE 'Migration project-admin-update-users completed successfully';
|
|
1
|
+
-- Migration: 005 - Enable project admin modify any users.
|
|
2
|
+
|
|
3
|
+
DO $$
|
|
4
|
+
BEGIN
|
|
5
|
+
-- Create policy to allow project_admin to update any user
|
|
6
|
+
IF NOT EXISTS (
|
|
7
|
+
SELECT 1 FROM pg_policies
|
|
8
|
+
WHERE tablename = 'users'
|
|
9
|
+
AND policyname = 'Allow project_admin to update any user'
|
|
10
|
+
) THEN
|
|
11
|
+
CREATE POLICY "Allow project_admin to update any user" ON users
|
|
12
|
+
FOR UPDATE
|
|
13
|
+
TO project_admin
|
|
14
|
+
USING (true)
|
|
15
|
+
WITH CHECK (true); -- Ensure project_admin always can update
|
|
16
|
+
END IF;
|
|
17
|
+
|
|
18
|
+
-- Grant necessary permissions
|
|
19
|
+
GRANT SELECT, UPDATE ON users TO project_admin;
|
|
20
|
+
|
|
21
|
+
-- Notify PostgREST to reload schema after policy changes
|
|
22
|
+
IF EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'reload_postgrest_schema') THEN
|
|
23
|
+
PERFORM reload_postgrest_schema();
|
|
24
|
+
RAISE NOTICE 'PostgREST schema reload requested after migration';
|
|
25
|
+
ELSE
|
|
26
|
+
RAISE WARNING 'PostgREST reload function not found - please restart PostgREST manually';
|
|
27
|
+
END IF;
|
|
28
|
+
|
|
29
|
+
RAISE NOTICE 'Migration project-admin-update-users completed successfully';
|
|
30
30
|
END $$;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
-- Migration: 006 - Modify AI usage table
|
|
2
|
-
-- This migration modifies the _ai_usage table to:
|
|
3
|
-
-- 1. Change foreign key constraint on config_id to SET NULL
|
|
4
|
-
-- 2. Make config_id nullable
|
|
5
|
-
-- 3. Add model_id column
|
|
6
|
-
|
|
7
|
-
-- Drop existing foreign key constraint
|
|
8
|
-
ALTER TABLE _ai_usage
|
|
9
|
-
DROP CONSTRAINT IF EXISTS _ai_usage_config_id_fkey;
|
|
10
|
-
|
|
11
|
-
-- Make config_id nullable
|
|
12
|
-
ALTER TABLE _ai_usage
|
|
13
|
-
ALTER COLUMN config_id DROP NOT NULL;
|
|
14
|
-
|
|
15
|
-
-- Add new foreign key constraint with SET NULL on delete
|
|
16
|
-
ALTER TABLE _ai_usage
|
|
17
|
-
ADD CONSTRAINT _ai_usage_config_id_fkey
|
|
18
|
-
FOREIGN KEY (config_id) REFERENCES _ai_configs(id) ON DELETE SET NULL;
|
|
19
|
-
|
|
20
|
-
-- Add new columns for model identification
|
|
21
|
-
ALTER TABLE _ai_usage
|
|
22
|
-
ADD COLUMN IF NOT EXISTS model_id VARCHAR(255);
|
|
23
|
-
|
|
24
|
-
-- Create indexes for the new columns
|
|
1
|
+
-- Migration: 006 - Modify AI usage table
|
|
2
|
+
-- This migration modifies the _ai_usage table to:
|
|
3
|
+
-- 1. Change foreign key constraint on config_id to SET NULL
|
|
4
|
+
-- 2. Make config_id nullable
|
|
5
|
+
-- 3. Add model_id column
|
|
6
|
+
|
|
7
|
+
-- Drop existing foreign key constraint
|
|
8
|
+
ALTER TABLE _ai_usage
|
|
9
|
+
DROP CONSTRAINT IF EXISTS _ai_usage_config_id_fkey;
|
|
10
|
+
|
|
11
|
+
-- Make config_id nullable
|
|
12
|
+
ALTER TABLE _ai_usage
|
|
13
|
+
ALTER COLUMN config_id DROP NOT NULL;
|
|
14
|
+
|
|
15
|
+
-- Add new foreign key constraint with SET NULL on delete
|
|
16
|
+
ALTER TABLE _ai_usage
|
|
17
|
+
ADD CONSTRAINT _ai_usage_config_id_fkey
|
|
18
|
+
FOREIGN KEY (config_id) REFERENCES _ai_configs(id) ON DELETE SET NULL;
|
|
19
|
+
|
|
20
|
+
-- Add new columns for model identification
|
|
21
|
+
ALTER TABLE _ai_usage
|
|
22
|
+
ADD COLUMN IF NOT EXISTS model_id VARCHAR(255);
|
|
23
|
+
|
|
24
|
+
-- Create indexes for the new columns
|
|
25
25
|
CREATE INDEX IF NOT EXISTS idx_ai_usage_model_id ON _ai_usage(model_id);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
-- Drop the _metadata table if it exists
|
|
1
|
+
-- Drop the _metadata table if it exists
|
|
2
2
|
DROP TABLE IF EXISTS _metadata CASCADE;
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
-- Migration: 008 - Create new system tables and rename OAuth connections table
|
|
2
|
-
|
|
3
|
-
-- 1. Create _secrets table for storing application secrets
|
|
4
|
-
CREATE TABLE IF NOT EXISTS _secrets (
|
|
5
|
-
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
6
|
-
name TEXT UNIQUE NOT NULL,
|
|
7
|
-
value_ciphertext TEXT NOT NULL,
|
|
8
|
-
is_active BOOLEAN DEFAULT TRUE,
|
|
9
|
-
last_used_at TIMESTAMPTZ,
|
|
10
|
-
expires_at TIMESTAMPTZ,
|
|
11
|
-
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
12
|
-
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
-- 2. Create _oauth_configs table for OAuth provider configurations
|
|
16
|
-
CREATE TABLE IF NOT EXISTS _oauth_configs (
|
|
17
|
-
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
18
|
-
provider TEXT UNIQUE NOT NULL,
|
|
19
|
-
client_id TEXT,
|
|
20
|
-
secret_id UUID REFERENCES _secrets(id) ON DELETE RESTRICT,
|
|
21
|
-
scopes TEXT[],
|
|
22
|
-
redirect_uri TEXT,
|
|
23
|
-
use_shared_key BOOLEAN DEFAULT FALSE,
|
|
24
|
-
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
25
|
-
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
26
|
-
);
|
|
27
|
-
|
|
28
|
-
-- 3. Create _audit_logs table for storing admin operation logs
|
|
29
|
-
CREATE TABLE IF NOT EXISTS _audit_logs (
|
|
30
|
-
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
31
|
-
actor TEXT NOT NULL,
|
|
32
|
-
action TEXT NOT NULL,
|
|
33
|
-
module TEXT NOT NULL,
|
|
34
|
-
details JSONB,
|
|
35
|
-
ip_address INET,
|
|
36
|
-
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
37
|
-
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
-- 4. Rename _oauth_connections to _account_providers
|
|
41
|
-
DO $$
|
|
42
|
-
BEGIN
|
|
43
|
-
IF EXISTS (SELECT FROM information_schema.tables
|
|
44
|
-
WHERE table_name = '_oauth_connections' AND table_schema = 'public') THEN
|
|
45
|
-
IF EXISTS (SELECT FROM information_schema.tables
|
|
46
|
-
WHERE table_name = '_account_providers' AND table_schema = 'public') THEN
|
|
47
|
-
-- _account_providers already exists, just drop _oauth_connections
|
|
48
|
-
DROP TABLE _oauth_connections CASCADE;
|
|
49
|
-
ELSE
|
|
50
|
-
-- _account_providers doesn't exist, rename _oauth_connections to _account_providers
|
|
51
|
-
ALTER TABLE _oauth_connections RENAME TO _account_providers;
|
|
52
|
-
END IF;
|
|
53
|
-
END IF;
|
|
54
|
-
END $$;
|
|
55
|
-
|
|
56
|
-
-- 5. Drop the old _config system table
|
|
57
|
-
DROP TABLE IF EXISTS _config CASCADE;
|
|
58
|
-
|
|
59
|
-
-- Create indexes for better query performance
|
|
60
|
-
CREATE INDEX IF NOT EXISTS idx_secrets_name ON _secrets(name);
|
|
61
|
-
CREATE INDEX IF NOT EXISTS idx_oauth_configs_provider ON _oauth_configs(provider);
|
|
62
|
-
CREATE INDEX IF NOT EXISTS idx_audit_logs_actor ON _audit_logs(actor);
|
|
63
|
-
CREATE INDEX IF NOT EXISTS idx_audit_logs_module ON _audit_logs(module);
|
|
64
|
-
CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON _audit_logs(created_at DESC);
|
|
65
|
-
|
|
66
|
-
-- Add triggers for updated_at
|
|
67
|
-
DROP TRIGGER IF EXISTS update__secrets_updated_at ON _secrets;
|
|
68
|
-
CREATE TRIGGER update__secrets_updated_at BEFORE UPDATE ON _secrets
|
|
69
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
70
|
-
|
|
71
|
-
DROP TRIGGER IF EXISTS update__oauth_configs_updated_at ON _oauth_configs;
|
|
72
|
-
CREATE TRIGGER update__oauth_configs_updated_at BEFORE UPDATE ON _oauth_configs
|
|
73
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
74
|
-
|
|
75
|
-
DROP TRIGGER IF EXISTS update__audit_logs_updated_at ON _audit_logs;
|
|
76
|
-
CREATE TRIGGER update__audit_logs_updated_at BEFORE UPDATE ON _audit_logs
|
|
1
|
+
-- Migration: 008 - Create new system tables and rename OAuth connections table
|
|
2
|
+
|
|
3
|
+
-- 1. Create _secrets table for storing application secrets
|
|
4
|
+
CREATE TABLE IF NOT EXISTS _secrets (
|
|
5
|
+
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
6
|
+
name TEXT UNIQUE NOT NULL,
|
|
7
|
+
value_ciphertext TEXT NOT NULL,
|
|
8
|
+
is_active BOOLEAN DEFAULT TRUE,
|
|
9
|
+
last_used_at TIMESTAMPTZ,
|
|
10
|
+
expires_at TIMESTAMPTZ,
|
|
11
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
12
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
-- 2. Create _oauth_configs table for OAuth provider configurations
|
|
16
|
+
CREATE TABLE IF NOT EXISTS _oauth_configs (
|
|
17
|
+
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
18
|
+
provider TEXT UNIQUE NOT NULL,
|
|
19
|
+
client_id TEXT,
|
|
20
|
+
secret_id UUID REFERENCES _secrets(id) ON DELETE RESTRICT,
|
|
21
|
+
scopes TEXT[],
|
|
22
|
+
redirect_uri TEXT,
|
|
23
|
+
use_shared_key BOOLEAN DEFAULT FALSE,
|
|
24
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
25
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
-- 3. Create _audit_logs table for storing admin operation logs
|
|
29
|
+
CREATE TABLE IF NOT EXISTS _audit_logs (
|
|
30
|
+
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
31
|
+
actor TEXT NOT NULL,
|
|
32
|
+
action TEXT NOT NULL,
|
|
33
|
+
module TEXT NOT NULL,
|
|
34
|
+
details JSONB,
|
|
35
|
+
ip_address INET,
|
|
36
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
37
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- 4. Rename _oauth_connections to _account_providers
|
|
41
|
+
DO $$
|
|
42
|
+
BEGIN
|
|
43
|
+
IF EXISTS (SELECT FROM information_schema.tables
|
|
44
|
+
WHERE table_name = '_oauth_connections' AND table_schema = 'public') THEN
|
|
45
|
+
IF EXISTS (SELECT FROM information_schema.tables
|
|
46
|
+
WHERE table_name = '_account_providers' AND table_schema = 'public') THEN
|
|
47
|
+
-- _account_providers already exists, just drop _oauth_connections
|
|
48
|
+
DROP TABLE _oauth_connections CASCADE;
|
|
49
|
+
ELSE
|
|
50
|
+
-- _account_providers doesn't exist, rename _oauth_connections to _account_providers
|
|
51
|
+
ALTER TABLE _oauth_connections RENAME TO _account_providers;
|
|
52
|
+
END IF;
|
|
53
|
+
END IF;
|
|
54
|
+
END $$;
|
|
55
|
+
|
|
56
|
+
-- 5. Drop the old _config system table
|
|
57
|
+
DROP TABLE IF EXISTS _config CASCADE;
|
|
58
|
+
|
|
59
|
+
-- Create indexes for better query performance
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_secrets_name ON _secrets(name);
|
|
61
|
+
CREATE INDEX IF NOT EXISTS idx_oauth_configs_provider ON _oauth_configs(provider);
|
|
62
|
+
CREATE INDEX IF NOT EXISTS idx_audit_logs_actor ON _audit_logs(actor);
|
|
63
|
+
CREATE INDEX IF NOT EXISTS idx_audit_logs_module ON _audit_logs(module);
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON _audit_logs(created_at DESC);
|
|
65
|
+
|
|
66
|
+
-- Add triggers for updated_at
|
|
67
|
+
DROP TRIGGER IF EXISTS update__secrets_updated_at ON _secrets;
|
|
68
|
+
CREATE TRIGGER update__secrets_updated_at BEFORE UPDATE ON _secrets
|
|
69
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
70
|
+
|
|
71
|
+
DROP TRIGGER IF EXISTS update__oauth_configs_updated_at ON _oauth_configs;
|
|
72
|
+
CREATE TRIGGER update__oauth_configs_updated_at BEFORE UPDATE ON _oauth_configs
|
|
73
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
74
|
+
|
|
75
|
+
DROP TRIGGER IF EXISTS update__audit_logs_updated_at ON _audit_logs;
|
|
76
|
+
CREATE TRIGGER update__audit_logs_updated_at BEFORE UPDATE ON _audit_logs
|
|
77
77
|
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
-- Migration: 009 - Create function secrets table for edge functions environment variables
|
|
2
|
-
-- This table stores encrypted secrets that are injected into edge functions as Deno.env variables
|
|
3
|
-
|
|
4
|
-
CREATE TABLE IF NOT EXISTS _function_secrets (
|
|
5
|
-
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
6
|
-
key VARCHAR(255) UNIQUE NOT NULL,
|
|
7
|
-
value_ciphertext TEXT NOT NULL, -- Encrypted value using AES-256-GCM
|
|
8
|
-
is_reserved BOOLEAN DEFAULT FALSE, -- System-reserved keys that can't be modified/deleted
|
|
9
|
-
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
10
|
-
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
-- Create index for faster key lookups
|
|
14
|
-
CREATE INDEX IF NOT EXISTS idx_function_secrets_key ON _function_secrets(key);
|
|
15
|
-
|
|
16
|
-
-- Add trigger for updated_at
|
|
17
|
-
DROP TRIGGER IF EXISTS update__function_secrets_updated_at ON _function_secrets;
|
|
18
|
-
CREATE TRIGGER update__function_secrets_updated_at BEFORE UPDATE ON _function_secrets
|
|
19
|
-
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
20
|
-
|
|
21
|
-
-- Note: Reserved system secrets will be initialized by the application on startup
|
|
22
|
-
|
|
23
|
-
-- Rename _edge_functions table to functions
|
|
1
|
+
-- Migration: 009 - Create function secrets table for edge functions environment variables
|
|
2
|
+
-- This table stores encrypted secrets that are injected into edge functions as Deno.env variables
|
|
3
|
+
|
|
4
|
+
CREATE TABLE IF NOT EXISTS _function_secrets (
|
|
5
|
+
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
6
|
+
key VARCHAR(255) UNIQUE NOT NULL,
|
|
7
|
+
value_ciphertext TEXT NOT NULL, -- Encrypted value using AES-256-GCM
|
|
8
|
+
is_reserved BOOLEAN DEFAULT FALSE, -- System-reserved keys that can't be modified/deleted
|
|
9
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
10
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
-- Create index for faster key lookups
|
|
14
|
+
CREATE INDEX IF NOT EXISTS idx_function_secrets_key ON _function_secrets(key);
|
|
15
|
+
|
|
16
|
+
-- Add trigger for updated_at
|
|
17
|
+
DROP TRIGGER IF EXISTS update__function_secrets_updated_at ON _function_secrets;
|
|
18
|
+
CREATE TRIGGER update__function_secrets_updated_at BEFORE UPDATE ON _function_secrets
|
|
19
|
+
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
|
20
|
+
|
|
21
|
+
-- Note: Reserved system secrets will be initialized by the application on startup
|
|
22
|
+
|
|
23
|
+
-- Rename _edge_functions table to functions
|
|
24
24
|
ALTER TABLE IF EXISTS _edge_functions RENAME TO _functions;
|
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
-- Migration: 010 - Modify AI configurations table to support input/output modalities
|
|
2
|
-
-- This migration modifies the _ai_configs table to:
|
|
3
|
-
-- 1. Add new columns: input_modality and output_modality (TEXT arrays)
|
|
4
|
-
-- 2. Migrate existing modality data to input_modality
|
|
5
|
-
-- 3. Set default output_modality based on existing modality
|
|
6
|
-
-- 4. Drop the old modality column
|
|
7
|
-
|
|
8
|
-
DO $$
|
|
9
|
-
BEGIN
|
|
10
|
-
-- Add new columns for input and output modalities
|
|
11
|
-
ALTER TABLE _ai_configs
|
|
12
|
-
ADD COLUMN IF NOT EXISTS input_modality TEXT[] DEFAULT '{text}';
|
|
13
|
-
|
|
14
|
-
ALTER TABLE _ai_configs
|
|
15
|
-
ADD COLUMN IF NOT EXISTS output_modality TEXT[] DEFAULT '{text}';
|
|
16
|
-
|
|
17
|
-
-- Check if modality column exists and migrate data if it does
|
|
18
|
-
IF EXISTS (
|
|
19
|
-
SELECT 1
|
|
20
|
-
FROM information_schema.columns
|
|
21
|
-
WHERE table_schema = 'public'
|
|
22
|
-
AND table_name = '_ai_configs'
|
|
23
|
-
AND column_name = 'modality'
|
|
24
|
-
) THEN
|
|
25
|
-
-- Migrate existing modality data to input_modality
|
|
26
|
-
-- For most cases, we'll set input_modality to the existing modality
|
|
27
|
-
-- and output_modality to the same value, only supporting text and image
|
|
28
|
-
UPDATE _ai_configs
|
|
29
|
-
SET
|
|
30
|
-
input_modality = CASE
|
|
31
|
-
WHEN modality = 'multi' THEN '{text,image}'::TEXT[]
|
|
32
|
-
WHEN modality = 'image' THEN '{text,image}'::TEXT[]
|
|
33
|
-
ELSE ARRAY[modality]::TEXT[]
|
|
34
|
-
END,
|
|
35
|
-
output_modality = CASE
|
|
36
|
-
WHEN modality = 'multi' THEN '{text,image}'::TEXT[]
|
|
37
|
-
WHEN modality = 'text' THEN '{text}'::TEXT[]
|
|
38
|
-
WHEN modality = 'image' THEN '{text,image}'::TEXT[]
|
|
39
|
-
ELSE '{text}'::TEXT[]
|
|
40
|
-
END
|
|
41
|
-
WHERE input_modality = '{text}' OR input_modality IS NULL;
|
|
42
|
-
END IF;
|
|
43
|
-
|
|
44
|
-
-- Make the new columns NOT NULL after migration
|
|
45
|
-
ALTER TABLE _ai_configs
|
|
46
|
-
ALTER COLUMN input_modality SET NOT NULL;
|
|
47
|
-
|
|
48
|
-
ALTER TABLE _ai_configs
|
|
49
|
-
ALTER COLUMN output_modality SET NOT NULL;
|
|
50
|
-
|
|
51
|
-
-- Drop the old modality column
|
|
52
|
-
ALTER TABLE _ai_configs
|
|
53
|
-
DROP COLUMN IF EXISTS modality;
|
|
54
|
-
|
|
55
|
-
-- Create indexes for the new TEXT array columns for better query performance
|
|
56
|
-
CREATE INDEX IF NOT EXISTS idx_ai_configs_input_modality ON _ai_configs USING GIN (input_modality);
|
|
57
|
-
CREATE INDEX IF NOT EXISTS idx_ai_configs_output_modality ON _ai_configs USING GIN (output_modality);
|
|
58
|
-
|
|
59
|
-
-- Drop existing constraints if they exist, then add them
|
|
60
|
-
ALTER TABLE _ai_configs
|
|
61
|
-
DROP CONSTRAINT IF EXISTS check_input_modality_not_empty;
|
|
62
|
-
|
|
63
|
-
ALTER TABLE _ai_configs
|
|
64
|
-
ADD CONSTRAINT check_input_modality_not_empty
|
|
65
|
-
CHECK (array_length(input_modality, 1) > 0);
|
|
66
|
-
|
|
67
|
-
ALTER TABLE _ai_configs
|
|
68
|
-
DROP CONSTRAINT IF EXISTS check_output_modality_not_empty;
|
|
69
|
-
|
|
70
|
-
ALTER TABLE _ai_configs
|
|
71
|
-
ADD CONSTRAINT check_output_modality_not_empty
|
|
72
|
-
CHECK (array_length(output_modality, 1) > 0);
|
|
73
|
-
|
|
74
|
-
-- Drop existing constraints if they exist, then add them
|
|
75
|
-
ALTER TABLE _ai_configs
|
|
76
|
-
DROP CONSTRAINT IF EXISTS check_input_modality_valid;
|
|
77
|
-
|
|
78
|
-
ALTER TABLE _ai_configs
|
|
79
|
-
ADD CONSTRAINT check_input_modality_valid
|
|
80
|
-
CHECK (
|
|
81
|
-
input_modality <@ '{text,image}'::TEXT[]
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
ALTER TABLE _ai_configs
|
|
85
|
-
DROP CONSTRAINT IF EXISTS check_output_modality_valid;
|
|
86
|
-
|
|
87
|
-
ALTER TABLE _ai_configs
|
|
88
|
-
ADD CONSTRAINT check_output_modality_valid
|
|
89
|
-
CHECK (
|
|
90
|
-
output_modality <@ '{text,image}'::TEXT[]
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
END $$;
|
|
1
|
+
-- Migration: 010 - Modify AI configurations table to support input/output modalities
|
|
2
|
+
-- This migration modifies the _ai_configs table to:
|
|
3
|
+
-- 1. Add new columns: input_modality and output_modality (TEXT arrays)
|
|
4
|
+
-- 2. Migrate existing modality data to input_modality
|
|
5
|
+
-- 3. Set default output_modality based on existing modality
|
|
6
|
+
-- 4. Drop the old modality column
|
|
7
|
+
|
|
8
|
+
DO $$
|
|
9
|
+
BEGIN
|
|
10
|
+
-- Add new columns for input and output modalities
|
|
11
|
+
ALTER TABLE _ai_configs
|
|
12
|
+
ADD COLUMN IF NOT EXISTS input_modality TEXT[] DEFAULT '{text}';
|
|
13
|
+
|
|
14
|
+
ALTER TABLE _ai_configs
|
|
15
|
+
ADD COLUMN IF NOT EXISTS output_modality TEXT[] DEFAULT '{text}';
|
|
16
|
+
|
|
17
|
+
-- Check if modality column exists and migrate data if it does
|
|
18
|
+
IF EXISTS (
|
|
19
|
+
SELECT 1
|
|
20
|
+
FROM information_schema.columns
|
|
21
|
+
WHERE table_schema = 'public'
|
|
22
|
+
AND table_name = '_ai_configs'
|
|
23
|
+
AND column_name = 'modality'
|
|
24
|
+
) THEN
|
|
25
|
+
-- Migrate existing modality data to input_modality
|
|
26
|
+
-- For most cases, we'll set input_modality to the existing modality
|
|
27
|
+
-- and output_modality to the same value, only supporting text and image
|
|
28
|
+
UPDATE _ai_configs
|
|
29
|
+
SET
|
|
30
|
+
input_modality = CASE
|
|
31
|
+
WHEN modality = 'multi' THEN '{text,image}'::TEXT[]
|
|
32
|
+
WHEN modality = 'image' THEN '{text,image}'::TEXT[]
|
|
33
|
+
ELSE ARRAY[modality]::TEXT[]
|
|
34
|
+
END,
|
|
35
|
+
output_modality = CASE
|
|
36
|
+
WHEN modality = 'multi' THEN '{text,image}'::TEXT[]
|
|
37
|
+
WHEN modality = 'text' THEN '{text}'::TEXT[]
|
|
38
|
+
WHEN modality = 'image' THEN '{text,image}'::TEXT[]
|
|
39
|
+
ELSE '{text}'::TEXT[]
|
|
40
|
+
END
|
|
41
|
+
WHERE input_modality = '{text}' OR input_modality IS NULL;
|
|
42
|
+
END IF;
|
|
43
|
+
|
|
44
|
+
-- Make the new columns NOT NULL after migration
|
|
45
|
+
ALTER TABLE _ai_configs
|
|
46
|
+
ALTER COLUMN input_modality SET NOT NULL;
|
|
47
|
+
|
|
48
|
+
ALTER TABLE _ai_configs
|
|
49
|
+
ALTER COLUMN output_modality SET NOT NULL;
|
|
50
|
+
|
|
51
|
+
-- Drop the old modality column
|
|
52
|
+
ALTER TABLE _ai_configs
|
|
53
|
+
DROP COLUMN IF EXISTS modality;
|
|
54
|
+
|
|
55
|
+
-- Create indexes for the new TEXT array columns for better query performance
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_ai_configs_input_modality ON _ai_configs USING GIN (input_modality);
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_ai_configs_output_modality ON _ai_configs USING GIN (output_modality);
|
|
58
|
+
|
|
59
|
+
-- Drop existing constraints if they exist, then add them
|
|
60
|
+
ALTER TABLE _ai_configs
|
|
61
|
+
DROP CONSTRAINT IF EXISTS check_input_modality_not_empty;
|
|
62
|
+
|
|
63
|
+
ALTER TABLE _ai_configs
|
|
64
|
+
ADD CONSTRAINT check_input_modality_not_empty
|
|
65
|
+
CHECK (array_length(input_modality, 1) > 0);
|
|
66
|
+
|
|
67
|
+
ALTER TABLE _ai_configs
|
|
68
|
+
DROP CONSTRAINT IF EXISTS check_output_modality_not_empty;
|
|
69
|
+
|
|
70
|
+
ALTER TABLE _ai_configs
|
|
71
|
+
ADD CONSTRAINT check_output_modality_not_empty
|
|
72
|
+
CHECK (array_length(output_modality, 1) > 0);
|
|
73
|
+
|
|
74
|
+
-- Drop existing constraints if they exist, then add them
|
|
75
|
+
ALTER TABLE _ai_configs
|
|
76
|
+
DROP CONSTRAINT IF EXISTS check_input_modality_valid;
|
|
77
|
+
|
|
78
|
+
ALTER TABLE _ai_configs
|
|
79
|
+
ADD CONSTRAINT check_input_modality_valid
|
|
80
|
+
CHECK (
|
|
81
|
+
input_modality <@ '{text,image}'::TEXT[]
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
ALTER TABLE _ai_configs
|
|
85
|
+
DROP CONSTRAINT IF EXISTS check_output_modality_valid;
|
|
86
|
+
|
|
87
|
+
ALTER TABLE _ai_configs
|
|
88
|
+
ADD CONSTRAINT check_output_modality_valid
|
|
89
|
+
CHECK (
|
|
90
|
+
output_modality <@ '{text,image}'::TEXT[]
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
END $$;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
-- Migration: 011 - Drop function secrets table and update main secrets table
|
|
2
|
-
-- This migration is part of the refactoring to unify all secrets management
|
|
3
|
-
|
|
4
|
-
-- 1. Drop the _function_secrets table (replaced by main _secrets table)
|
|
5
|
-
DROP TRIGGER IF EXISTS update__function_secrets_updated_at ON _function_secrets;
|
|
6
|
-
DROP INDEX IF EXISTS idx_function_secrets_key;
|
|
7
|
-
DROP TABLE IF EXISTS _function_secrets;
|
|
8
|
-
|
|
9
|
-
-- 2. Add is_reserved column to _secrets table
|
|
10
|
-
ALTER TABLE _secrets
|
|
11
|
-
ADD COLUMN IF NOT EXISTS is_reserved BOOLEAN DEFAULT FALSE;
|
|
12
|
-
|
|
13
|
-
-- 3. Rename name column to key
|
|
14
|
-
ALTER TABLE _secrets
|
|
15
|
-
RENAME COLUMN name TO key;
|
|
1
|
+
-- Migration: 011 - Drop function secrets table and update main secrets table
|
|
2
|
+
-- This migration is part of the refactoring to unify all secrets management
|
|
3
|
+
|
|
4
|
+
-- 1. Drop the _function_secrets table (replaced by main _secrets table)
|
|
5
|
+
DROP TRIGGER IF EXISTS update__function_secrets_updated_at ON _function_secrets;
|
|
6
|
+
DROP INDEX IF EXISTS idx_function_secrets_key;
|
|
7
|
+
DROP TABLE IF EXISTS _function_secrets;
|
|
8
|
+
|
|
9
|
+
-- 2. Add is_reserved column to _secrets table
|
|
10
|
+
ALTER TABLE _secrets
|
|
11
|
+
ADD COLUMN IF NOT EXISTS is_reserved BOOLEAN DEFAULT FALSE;
|
|
12
|
+
|
|
13
|
+
-- 3. Rename name column to key
|
|
14
|
+
ALTER TABLE _secrets
|
|
15
|
+
RENAME COLUMN name TO key;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
-- Migration: 012 - Add uploaded_by column to _storage table
|
|
2
|
-
-- This migration adds a foreign key relationship to track which account uploaded each file
|
|
3
|
-
|
|
4
|
-
ALTER TABLE _storage
|
|
5
|
-
ADD COLUMN uploaded_by UUID REFERENCES _accounts(id) ON DELETE SET NULL;
|
|
6
|
-
|
|
7
|
-
-- Create an index for better query performance when filtering by uploader
|
|
1
|
+
-- Migration: 012 - Add uploaded_by column to _storage table
|
|
2
|
+
-- This migration adds a foreign key relationship to track which account uploaded each file
|
|
3
|
+
|
|
4
|
+
ALTER TABLE _storage
|
|
5
|
+
ADD COLUMN uploaded_by UUID REFERENCES _accounts(id) ON DELETE SET NULL;
|
|
6
|
+
|
|
7
|
+
-- Create an index for better query performance when filtering by uploader
|
|
8
8
|
CREATE INDEX IF NOT EXISTS idx_storage_uploaded_by ON _storage(uploaded_by);
|