insforge 0.3.3 → 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 -0
- package/.dockerignore +60 -57
- package/.env.example +84 -49
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -83
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -79
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +66 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -0
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +44 -3
- package/CLAUDE_PLUGIN.md +104 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -27
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -134
- package/assets/Dark.svg +23 -23
- package/assets/mcpInstallv2.png +0 -0
- package/assets/sampleResponse.png +0 -0
- package/auth/index.html +13 -0
- package/auth/package.json +28 -0
- package/auth/public/favicon.ico +0 -0
- package/auth/src/App.tsx +33 -0
- package/auth/src/components/ErrorCard.tsx +37 -0
- package/auth/src/components/Layout.tsx +13 -0
- package/auth/src/index.css +19 -0
- package/auth/src/lib/broadcastService.ts +117 -0
- package/auth/src/lib/utils.ts +11 -0
- package/auth/src/main.tsx +22 -0
- package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
- package/auth/src/pages/ResetPasswordPage.tsx +11 -0
- package/auth/src/pages/SignInPage.tsx +60 -0
- package/auth/src/pages/SignUpPage.tsx +60 -0
- package/auth/src/pages/VerifyEmailPage.tsx +20 -0
- package/auth/src/vite-env.d.ts +10 -0
- package/auth/tsconfig.json +32 -0
- package/auth/tsconfig.node.json +11 -0
- package/auth/vite.config.ts +25 -0
- package/backend/package.json +78 -75
- package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
- package/backend/src/api/middlewares/rate-limiters.ts +127 -0
- package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +22 -26
- package/backend/src/api/routes/auth/index.routes.ts +667 -0
- package/backend/src/api/routes/auth/oauth.routes.ts +473 -0
- package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +128 -65
- package/backend/src/api/routes/database/index.routes.ts +90 -0
- package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +26 -12
- package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +6 -23
- package/backend/src/api/routes/docs/index.routes.ts +75 -0
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +194 -0
- package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
- package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +33 -31
- 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/{secrets.ts → secrets/index.routes.ts} +27 -22
- package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +48 -61
- package/backend/src/api/routes/usage/index.routes.ts +91 -0
- package/backend/src/infra/config/app.config.ts +51 -0
- package/backend/src/infra/database/database.manager.ts +182 -0
- package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +141 -141
- package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +40 -40
- package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +29 -29
- package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +55 -55
- package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +23 -23
- package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +24 -24
- package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +1 -1
- package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +76 -76
- package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +23 -23
- package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +93 -93
- package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +15 -15
- package/backend/{migrations → 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 -0
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
- 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/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
- package/backend/src/infra/security/token.manager.ts +219 -0
- package/backend/src/infra/socket/socket.manager.ts +522 -0
- package/backend/src/providers/ai/openrouter.provider.ts +380 -0
- package/backend/src/providers/email/base.provider.ts +38 -0
- package/backend/src/providers/email/cloud.provider.ts +271 -0
- package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
- package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
- package/backend/src/providers/logs/local.provider.ts +185 -0
- package/backend/src/providers/oauth/apple.provider.ts +266 -0
- package/backend/src/providers/oauth/base.provider.ts +29 -0
- package/backend/src/providers/oauth/discord.provider.ts +195 -0
- package/backend/src/providers/oauth/facebook.provider.ts +194 -0
- package/backend/src/providers/oauth/github.provider.ts +208 -0
- package/backend/src/providers/oauth/google.provider.ts +249 -0
- package/backend/src/providers/oauth/index.ts +8 -0
- package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
- package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
- package/backend/src/providers/oauth/x.provider.ts +202 -0
- package/backend/src/providers/storage/base.provider.ts +29 -0
- package/backend/src/providers/storage/local.provider.ts +103 -0
- package/backend/src/providers/storage/s3.provider.ts +313 -0
- package/backend/src/server.ts +317 -288
- package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
- package/backend/src/services/ai/ai-model.service.ts +60 -0
- package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
- package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
- package/backend/src/services/ai/helpers.ts +64 -0
- package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
- package/backend/src/services/ai/index.ts +13 -0
- package/backend/src/services/auth/auth-config.service.ts +250 -0
- package/backend/src/services/auth/auth-otp.service.ts +424 -0
- package/backend/src/services/auth/auth.service.ts +1150 -0
- package/backend/src/services/auth/index.ts +4 -0
- package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
- package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
- package/backend/src/services/database/database-table.service.ts +802 -0
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/email/email.service.ts +73 -0
- package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
- package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
- package/backend/src/services/logs/log.service.ts +73 -0
- 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/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
- package/backend/src/services/storage/storage.service.ts +617 -0
- package/backend/src/services/usage/usage.service.ts +149 -0
- package/backend/src/types/auth.ts +77 -2
- package/backend/src/types/email.ts +8 -0
- package/backend/src/types/error-constants.ts +4 -0
- package/backend/src/types/logs.ts +0 -29
- package/backend/src/types/realtime.ts +18 -0
- package/backend/src/{core/socket/types.ts → types/socket.ts} +11 -36
- package/backend/src/utils/cookies.ts +35 -0
- package/backend/src/utils/environment.ts +9 -3
- package/backend/src/utils/logger.ts +20 -2
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +301 -205
- package/backend/src/utils/sql-parser.ts +91 -1
- package/backend/src/utils/utils.ts +114 -0
- package/backend/src/utils/validations.ts +40 -4
- 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 -0
- package/backend/tests/local/test-ai-usage.sh +80 -0
- 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 -0
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -0
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-secrets.sh +249 -247
- 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 -0
- 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 -302
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- package/backend/tests/unit/cloud-token.test.ts +48 -0
- package/backend/tests/unit/constant.test.ts +8 -0
- package/backend/tests/unit/email.test.ts +372 -0
- package/backend/tests/unit/environment.test.ts +59 -0
- package/backend/tests/unit/helpers.test.ts +63 -0
- package/backend/tests/unit/logger.test.ts +22 -0
- package/backend/tests/unit/rate-limit.test.ts +154 -0
- package/backend/tests/unit/response.test.ts +58 -0
- package/backend/tests/unit/sql-parser.test.ts +74 -0
- package/backend/tests/unit/uuid.test.ts +21 -0
- package/backend/tests/unit/validations.test.ts +80 -0
- package/backend/tsconfig.json +22 -22
- package/backend/vitest.config.ts +11 -0
- package/claude-plugin/.claude-plugin/plugin.json +24 -0
- package/claude-plugin/README.md +133 -0
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
- package/docker-compose.prod.yml +204 -144
- package/docker-compose.yml +232 -167
- package/docker-init/db/db-init.sql +97 -125
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -0
- package/docs/README.md +44 -0
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +119 -0
- package/docs/core-concepts/ai/architecture.mdx +373 -0
- package/docs/core-concepts/ai/sdk.mdx +213 -0
- package/docs/core-concepts/authentication/architecture.mdx +278 -0
- package/docs/core-concepts/authentication/sdk.mdx +414 -0
- package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
- package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
- package/docs/core-concepts/database/architecture.mdx +256 -0
- package/docs/core-concepts/database/sdk.mdx +382 -0
- 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 -0
- package/docs/core-concepts/functions/sdk.mdx +184 -0
- 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 -0
- package/docs/core-concepts/storage/sdk.mdx +253 -0
- package/docs/deployment/README.md +94 -0
- package/docs/deployment/deploy-to-aws-ec2.md +565 -0
- package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
- package/docs/deployment/deploy-to-render.md +441 -0
- 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 -0
- package/docs/examples/framework-guides/nextjs.mdx +131 -0
- package/docs/examples/framework-guides/nuxt.mdx +165 -0
- package/docs/examples/framework-guides/react.mdx +165 -0
- package/docs/examples/framework-guides/svelte.mdx +153 -0
- package/docs/examples/framework-guides/vue.mdx +159 -0
- package/docs/examples/overview.mdx +67 -0
- package/docs/favicon.svg +19 -0
- 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/changelog/nov-2025/auth-components.webp +0 -0
- package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
- package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
- package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
- package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
- package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
- package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
- package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
- package/docs/images/checks-passed.png +0 -0
- package/docs/images/dashboard-connect-expanded.png +0 -0
- package/docs/images/dashboard-connect.png +0 -0
- package/docs/images/hero-dark.png +0 -0
- package/docs/images/hero-light.png +0 -0
- package/docs/images/icons/ai.svg +4 -0
- package/docs/images/icons/auth.svg +1 -0
- package/docs/images/icons/database.svg +1 -0
- package/docs/images/icons/function.svg +1 -0
- package/docs/images/icons/storage.svg +1 -0
- package/docs/images/logos/nextjs.svg +4 -0
- package/docs/images/logos/nuxt.svg +4 -0
- package/docs/images/logos/react.svg +5 -0
- package/docs/images/logos/svelte.svg +4 -0
- package/docs/images/logos/vue.svg +5 -0
- package/docs/images/mcp-install.png +0 -0
- package/docs/images/onboarding-mcp.png +0 -0
- package/docs/insforge-instructions-sdk.md +89 -407
- package/docs/introduction.mdx +45 -0
- package/docs/logo/dark.svg +22 -0
- package/docs/logo/light.svg +20 -0
- package/docs/partnership.mdx +652 -0
- package/docs/quickstart.mdx +83 -0
- package/docs/showcase/2048-arena.png +0 -0
- package/docs/showcase/framegen-cloud.png +0 -0
- package/docs/showcase/line-connect-race.png +0 -0
- package/docs/showcase/moment-vibe.png +0 -0
- package/docs/showcase/national-flags.png +0 -0
- package/docs/showcase/pokemon-vibe.png +0 -0
- package/docs/showcase/pure-browse-buy.png +0 -0
- package/docs/showcase.mdx +52 -0
- package/docs/snippets/sdk-installation.mdx +22 -0
- package/docs/snippets/service-icons.mdx +27 -0
- package/eslint.config.js +10 -3
- 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 -63
- package/frontend/src/App.tsx +13 -82
- 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 -0
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -0
- 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 +4 -0
- 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 -0
- 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 +2 -0
- package/frontend/src/assets/logos/linkedin.svg +3 -0
- package/frontend/src/assets/logos/microsoft.svg +1 -0
- 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 +17 -0
- package/frontend/src/assets/logos/tiktok.svg +6 -0
- 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 -0
- package/frontend/src/components/Checkbox.tsx +27 -29
- package/frontend/src/components/CodeBlock.tsx +55 -2
- package/frontend/src/components/CodeEditor.tsx +92 -0
- package/frontend/src/components/ConfirmDialog.tsx +1 -1
- package/frontend/src/components/ConnectCTA.tsx +38 -0
- package/frontend/src/components/CopyButton.tsx +52 -15
- package/frontend/src/components/ErrorState.tsx +1 -2
- package/frontend/src/components/FeatureSidebar.tsx +6 -6
- package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
- package/frontend/src/components/JsonHighlight.tsx +21 -9
- package/frontend/src/components/ProjectInfoModal.tsx +128 -0
- package/frontend/src/components/PromptDialog.tsx +1 -4
- package/frontend/src/components/SearchInput.tsx +1 -2
- package/frontend/src/components/Stepper.tsx +53 -0
- package/frontend/src/components/ThemeToggle.tsx +3 -3
- package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
- package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
- package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
- package/frontend/src/components/datagrid/index.ts +23 -0
- package/frontend/src/components/index.ts +23 -30
- package/frontend/src/components/layout/AppHeader.tsx +131 -91
- package/frontend/src/components/layout/AppSidebar.tsx +80 -170
- package/frontend/src/components/layout/Layout.tsx +12 -23
- package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
- package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
- package/frontend/src/components/layout/index.ts +5 -0
- package/frontend/src/components/radix/Tooltip.tsx +24 -13
- package/frontend/src/components/radix/index.ts +22 -0
- package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
- package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
- package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
- package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
- package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
- package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
- package/frontend/src/features/ai/components/index.ts +6 -0
- package/frontend/src/features/ai/helpers.ts +57 -71
- package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
- package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
- package/frontend/src/features/ai/pages/AIPage.tsx +166 -0
- package/frontend/src/features/ai/services/ai.service.ts +5 -5
- package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +54 -30
- package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +50 -14
- package/frontend/src/features/auth/components/index.ts +5 -0
- package/frontend/src/features/auth/helpers.tsx +208 -0
- package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
- package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
- package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
- package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
- package/frontend/src/features/auth/index.ts +3 -2
- package/frontend/src/features/auth/pages/AuthMethodsPage.tsx +275 -0
- package/frontend/src/features/auth/pages/ConfigurationPage.tsx +395 -0
- package/frontend/src/features/auth/pages/UsersPage.tsx +257 -0
- package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
- package/frontend/src/features/auth/services/config.service.ts +19 -0
- package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
- package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
- package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
- package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
- package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
- package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
- package/frontend/src/features/dashboard/components/index.ts +4 -0
- package/frontend/src/features/dashboard/pages/DashboardPage.tsx +212 -0
- package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
- package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
- package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
- package/frontend/src/features/dashboard/prompts/index.ts +31 -0
- package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
- package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
- package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
- package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
- package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
- package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
- package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
- package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
- package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
- package/frontend/src/features/database/components/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
- package/frontend/src/features/database/components/TableForm.tsx +28 -19
- package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
- package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
- package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
- package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
- package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
- package/frontend/src/features/database/components/index.ts +19 -0
- package/frontend/src/features/database/constants.ts +28 -2
- package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
- package/frontend/src/features/database/helpers.ts +2 -2
- package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
- package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
- package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
- package/frontend/src/features/database/hooks/useRecords.ts +139 -0
- package/frontend/src/features/database/hooks/useTables.ts +135 -0
- package/frontend/src/features/database/index.ts +7 -1
- package/frontend/src/features/database/pages/FunctionsPage.tsx +203 -0
- package/frontend/src/features/database/pages/IndexesPage.tsx +228 -0
- package/frontend/src/features/database/pages/PoliciesPage.tsx +237 -0
- package/frontend/src/features/database/pages/SQLEditorPage.tsx +382 -0
- package/frontend/src/features/database/{page/DatabasePage.tsx → pages/TablesPage.tsx} +168 -209
- package/frontend/src/features/database/pages/TemplatesPage.tsx +39 -0
- package/frontend/src/features/database/pages/TriggersPage.tsx +230 -0
- package/frontend/src/features/database/services/advance.service.ts +40 -0
- package/frontend/src/features/database/services/database.service.ts +33 -194
- package/frontend/src/features/database/services/record.service.ts +219 -0
- package/frontend/src/features/database/services/table.service.ts +58 -0
- package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
- package/frontend/src/features/database/templates/crm-system.ts +528 -0
- package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
- package/frontend/src/features/database/templates/index.ts +34 -0
- package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
- package/frontend/src/features/database/templates/notion-clone.ts +483 -0
- package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
- package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
- package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
- package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
- package/frontend/src/features/functions/components/index.ts +5 -0
- package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
- package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
- package/frontend/src/features/functions/pages/FunctionsPage.tsx +148 -0
- package/frontend/src/features/functions/{components/SecretsContent.tsx → pages/SecretsPage.tsx} +19 -21
- package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
- package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
- package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
- package/frontend/src/features/login/pages/CloudLoginPage.tsx +118 -0
- package/frontend/src/features/login/{page → pages}/LoginPage.tsx +16 -23
- package/frontend/src/features/login/services/partnership.service.ts +65 -0
- package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
- package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
- package/frontend/src/features/logs/components/index.ts +2 -0
- package/frontend/src/features/logs/helpers.ts +24 -0
- package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
- package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
- package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +128 -0
- package/frontend/src/features/logs/index.ts +8 -2
- package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +91 -38
- package/frontend/src/features/logs/pages/LogsPage.tsx +152 -0
- package/frontend/src/features/logs/pages/MCPLogsPage.tsx +84 -0
- package/frontend/src/features/logs/services/audit.service.ts +63 -0
- package/frontend/src/features/logs/services/log.service.ts +15 -110
- package/frontend/src/features/logs/services/usage.service.ts +31 -0
- package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
- package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
- package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
- package/frontend/src/features/onboard/components/index.ts +4 -0
- package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
- package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
- package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
- package/frontend/src/features/onboard/index.ts +13 -3
- 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/components/BucketEmptyState.tsx +9 -6
- package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
- package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
- package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
- package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
- package/frontend/src/features/storage/components/index.ts +12 -0
- package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
- package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +41 -143
- package/frontend/src/features/storage/services/storage.service.ts +22 -1
- package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
- package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
- package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
- package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
- package/frontend/src/features/visualizer/pages/VisualizerPage.tsx +97 -0
- package/frontend/src/index.css +1 -0
- package/frontend/src/lib/analytics/posthog.tsx +27 -0
- package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
- package/frontend/src/lib/contexts/SocketContext.tsx +123 -80
- package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
- package/frontend/src/lib/hooks/useToast.tsx +6 -2
- package/frontend/src/lib/routing/AppRoutes.tsx +99 -0
- package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
- package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
- package/frontend/src/lib/utils/menuItems.ts +207 -0
- package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
- package/frontend/src/lib/utils/utils.ts +32 -1
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/frontend/vite.config.ts +5 -3
- package/functions/deno.json +24 -24
- package/functions/server.ts +315 -290
- package/functions/worker-template.js +15 -4
- package/i18n/README.ar.md +130 -0
- package/i18n/README.de.md +130 -0
- package/i18n/README.es.md +154 -0
- package/i18n/README.fr.md +134 -0
- package/i18n/README.hi.md +129 -0
- package/i18n/README.ja.md +174 -0
- package/i18n/README.ko.md +137 -0
- package/i18n/README.pt-BR.md +131 -0
- package/i18n/README.ru.md +129 -0
- package/i18n/README.zh-CN.md +133 -0
- package/openapi/ai.yaml +715 -688
- package/openapi/auth.yaml +1244 -563
- 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 -88
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai-api.schema.ts +34 -58
- package/shared-schemas/src/ai.schema.ts +63 -54
- package/shared-schemas/src/auth-api.schema.ts +352 -193
- package/shared-schemas/src/auth.schema.ts +43 -7
- package/shared-schemas/src/cloud-events.schema.ts +57 -0
- package/shared-schemas/src/database-api.schema.ts +35 -4
- package/shared-schemas/src/database.schema.ts +40 -1
- 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 +5 -0
- package/shared-schemas/src/logs-api.schema.ts +7 -1
- package/shared-schemas/src/logs.schema.ts +26 -0
- package/shared-schemas/src/metadata.schema.ts +18 -4
- 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 -0
- package/zeabur/template.yml +1032 -0
- package/.github/workflows/deploy-aws.yml +0 -130
- package/backend/src/api/routes/agent.ts +0 -29
- package/backend/src/api/routes/auth.oauth.ts +0 -482
- package/backend/src/api/routes/auth.ts +0 -386
- package/backend/src/api/routes/docs.ts +0 -66
- package/backend/src/api/routes/functions.ts +0 -183
- package/backend/src/api/routes/openapi.ts +0 -82
- package/backend/src/api/routes/usage.ts +0 -96
- package/backend/src/core/ai/client.ts +0 -242
- package/backend/src/core/ai/model.ts +0 -117
- package/backend/src/core/auth/auth.ts +0 -780
- package/backend/src/core/database/manager.ts +0 -178
- package/backend/src/core/database/table.ts +0 -772
- package/backend/src/core/documentation/agent.ts +0 -689
- package/backend/src/core/documentation/openapi.ts +0 -856
- package/backend/src/core/logs/analytics.ts +0 -76
- package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
- package/backend/src/core/socket/socket.ts +0 -388
- package/backend/src/core/storage/storage.ts +0 -923
- package/backend/src/utils/cloud-token.ts +0 -39
- package/backend/src/utils/helpers.ts +0 -49
- package/backend/src/utils/uuid.ts +0 -9
- package/backend/tests/manual/test-better-auth.sh +0 -303
- package/docker-init/db/logs.sql +0 -9
- package/frontend/README.md +0 -112
- package/frontend/src/components/datagrid/index.tsx +0 -20
- package/frontend/src/components/layout/CloudLayout.tsx +0 -95
- package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
- package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
- package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
- package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
- package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
- package/frontend/src/features/ai/page/AIPage.tsx +0 -178
- package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
- package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
- package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
- package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
- package/frontend/src/features/dashboard/page/DashboardPage.tsx +0 -194
- package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
- package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
- package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
- package/frontend/src/features/functions/page/FunctionsPage.tsx +0 -28
- package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
- package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
- package/frontend/src/features/login/page/CloudLoginPage.tsx +0 -93
- package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
- package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
- package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
- package/frontend/src/features/metadata/index.ts +0 -0
- package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
- package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
- package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
- package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
- package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
- package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
- package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
- package/frontend/src/features/onboard/types.ts +0 -8
- package/frontend/src/features/visualizer/page/VisualizerPage.tsx +0 -127
- package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
- package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
- /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
- /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
- /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
|
@@ -1,297 +1,297 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Test script for database advance functionality
|
|
4
|
-
# Tests rawSQL, export, and import operations
|
|
5
|
-
|
|
6
|
-
# Configuration
|
|
7
|
-
BASE_URL="http://localhost:7130/api/database/advance"
|
|
8
|
-
TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDEiLCJlbWFpbCI6ImFkbWluQGV4YW1wbGUuY29tIiwicm9sZSI6InByb2plY3RfYWRtaW4iLCJpYXQiOjE3NTY0MDM2NTUsImV4cCI6MTc1NzAwODQ1NX0.UhLvS5f4vdzsR0bZLmHvQ-MX6WPoPieTZ4H7sxjRYGM"
|
|
9
|
-
|
|
10
|
-
# Colors for output
|
|
11
|
-
RED='\033[0;31m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
YELLOW='\033[1;33m'
|
|
14
|
-
BLUE='\033[0;34m'
|
|
15
|
-
NC='\033[0m' # No Color
|
|
16
|
-
|
|
17
|
-
echo "========================================="
|
|
18
|
-
echo "Database Advance Operations Test Script"
|
|
19
|
-
echo "========================================="
|
|
20
|
-
echo "Base URL: $BASE_URL"
|
|
21
|
-
echo "Testing rawSQL, export, and import operations..."
|
|
22
|
-
echo "========================================="
|
|
23
|
-
echo ""
|
|
24
|
-
|
|
25
|
-
# Function to test rawSQL endpoint
|
|
26
|
-
test_rawsql() {
|
|
27
|
-
local test_name="$1"
|
|
28
|
-
local request_body="$2"
|
|
29
|
-
local description="$3"
|
|
30
|
-
|
|
31
|
-
echo -e "${BLUE}Test: $test_name${NC}"
|
|
32
|
-
echo -e "${YELLOW}Description: $description${NC}"
|
|
33
|
-
echo "Request body: $request_body"
|
|
34
|
-
echo ""
|
|
35
|
-
|
|
36
|
-
# Make the API request
|
|
37
|
-
RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/rawsql" \
|
|
38
|
-
-H "Content-Type: application/json" \
|
|
39
|
-
-H "Authorization: Bearer $TOKEN" \
|
|
40
|
-
-d "$request_body" 2>&1)
|
|
41
|
-
|
|
42
|
-
# Extract HTTP code and response body
|
|
43
|
-
HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
|
|
44
|
-
RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
|
|
45
|
-
|
|
46
|
-
echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
|
|
47
|
-
|
|
48
|
-
if [ "$HTTP_CODE" = "200" ]; then
|
|
49
|
-
echo -e "${GREEN}✓ Request successful${NC}"
|
|
50
|
-
echo ""
|
|
51
|
-
echo -e "${BLUE}Response:${NC}"
|
|
52
|
-
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
|
|
53
|
-
else
|
|
54
|
-
echo -e "${RED}✗ Request failed${NC}"
|
|
55
|
-
echo ""
|
|
56
|
-
echo -e "${RED}Response:${NC}"
|
|
57
|
-
echo "$RESPONSE_BODY"
|
|
58
|
-
fi
|
|
59
|
-
|
|
60
|
-
echo ""
|
|
61
|
-
echo "----------------------------------------"
|
|
62
|
-
echo ""
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
# Function to make API request and show results
|
|
66
|
-
test_export() {
|
|
67
|
-
local test_name="$1"
|
|
68
|
-
local request_body="$2"
|
|
69
|
-
local description="$3"
|
|
70
|
-
|
|
71
|
-
echo -e "${BLUE}Test: $test_name${NC}"
|
|
72
|
-
echo -e "${YELLOW}Description: $description${NC}"
|
|
73
|
-
echo "Request body: $request_body"
|
|
74
|
-
echo ""
|
|
75
|
-
|
|
76
|
-
# Make the API request
|
|
77
|
-
RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/export" \
|
|
78
|
-
-H "Content-Type: application/json" \
|
|
79
|
-
-H "Authorization: Bearer $TOKEN" \
|
|
80
|
-
-d "$request_body" 2>&1)
|
|
81
|
-
|
|
82
|
-
# Extract HTTP code and response body
|
|
83
|
-
HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
|
|
84
|
-
RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
|
|
85
|
-
|
|
86
|
-
echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
|
|
87
|
-
|
|
88
|
-
if [ "$HTTP_CODE" = "200" ]; then
|
|
89
|
-
echo -e "${GREEN}✓ Request successful${NC}"
|
|
90
|
-
echo ""
|
|
91
|
-
echo -e "${BLUE}Response:${NC}"
|
|
92
|
-
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
|
|
93
|
-
else
|
|
94
|
-
echo -e "${RED}✗ Request failed${NC}"
|
|
95
|
-
echo ""
|
|
96
|
-
echo -e "${RED}Response:${NC}"
|
|
97
|
-
echo "$RESPONSE_BODY"
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
echo ""
|
|
101
|
-
echo "----------------------------------------"
|
|
102
|
-
echo ""
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
# Function to test import endpoint with file upload
|
|
106
|
-
test_import() {
|
|
107
|
-
local test_name="$1"
|
|
108
|
-
local file_path="$2"
|
|
109
|
-
local truncate_option="$3"
|
|
110
|
-
local description="$4"
|
|
111
|
-
|
|
112
|
-
echo -e "${BLUE}Test: $test_name${NC}"
|
|
113
|
-
echo -e "${YELLOW}Description: $description${NC}"
|
|
114
|
-
echo "File: $file_path"
|
|
115
|
-
echo "Truncate: $truncate_option"
|
|
116
|
-
echo ""
|
|
117
|
-
|
|
118
|
-
# Check if file exists
|
|
119
|
-
if [ ! -f "$file_path" ]; then
|
|
120
|
-
echo -e "${RED}✗ File not found: $file_path${NC}"
|
|
121
|
-
echo ""
|
|
122
|
-
echo "----------------------------------------"
|
|
123
|
-
echo ""
|
|
124
|
-
return 1
|
|
125
|
-
fi
|
|
126
|
-
|
|
127
|
-
# Make the API request with file upload
|
|
128
|
-
RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/import" \
|
|
129
|
-
-H "Authorization: Bearer $TOKEN" \
|
|
130
|
-
-F "file=@$file_path" \
|
|
131
|
-
-F "truncate=$truncate_option" 2>&1)
|
|
132
|
-
|
|
133
|
-
# Extract HTTP code and response body
|
|
134
|
-
HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
|
|
135
|
-
RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
|
|
136
|
-
|
|
137
|
-
echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
|
|
138
|
-
|
|
139
|
-
if [ "$HTTP_CODE" = "200" ]; then
|
|
140
|
-
echo -e "${GREEN}✓ Request successful${NC}"
|
|
141
|
-
echo ""
|
|
142
|
-
echo -e "${BLUE}Response:${NC}"
|
|
143
|
-
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
|
|
144
|
-
else
|
|
145
|
-
echo -e "${RED}✗ Request failed${NC}"
|
|
146
|
-
echo ""
|
|
147
|
-
echo -e "${RED}Response:${NC}"
|
|
148
|
-
echo "$RESPONSE_BODY"
|
|
149
|
-
fi
|
|
150
|
-
|
|
151
|
-
echo ""
|
|
152
|
-
echo "----------------------------------------"
|
|
153
|
-
echo ""
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
# ===========================================
|
|
157
|
-
# RAW SQL TESTS
|
|
158
|
-
# ===========================================
|
|
159
|
-
|
|
160
|
-
echo -e "${GREEN}=== RAW SQL TESTS ===${NC}"
|
|
161
|
-
echo ""
|
|
162
|
-
|
|
163
|
-
# Test 1: Check if posts table exists
|
|
164
|
-
test_rawsql \
|
|
165
|
-
"Check Posts Table Existence" \
|
|
166
|
-
'{"query": "SELECT tablename FROM pg_tables WHERE schemaname = '\''public'\'' AND tablename = '\''posts'\'';"}' \
|
|
167
|
-
"Verify that the posts table exists before creating index"
|
|
168
|
-
|
|
169
|
-
# Test 2: Check existing indexes on posts table
|
|
170
|
-
test_rawsql \
|
|
171
|
-
"Check Existing Indexes on Posts" \
|
|
172
|
-
'{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'';"}' \
|
|
173
|
-
"List all existing indexes on the posts table"
|
|
174
|
-
|
|
175
|
-
# Test 3: Create index on posts.title column
|
|
176
|
-
test_rawsql \
|
|
177
|
-
"Create Title Index on Posts" \
|
|
178
|
-
'{"query": "CREATE INDEX IF NOT EXISTS idx_posts_title ON posts(title);"}' \
|
|
179
|
-
"Create an index on the title column of the posts table for better query performance"
|
|
180
|
-
|
|
181
|
-
# Test 4: Verify the index was created
|
|
182
|
-
test_rawsql \
|
|
183
|
-
"Verify Title Index Creation" \
|
|
184
|
-
'{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'' AND indexname = '\''idx_posts_title'\'';"}' \
|
|
185
|
-
"Confirm that the title index was successfully created"
|
|
186
|
-
|
|
187
|
-
# Test 5: Test a simple SELECT query
|
|
188
|
-
test_rawsql \
|
|
189
|
-
"Simple Select Query" \
|
|
190
|
-
'{"query": "SELECT COUNT(*) as total_posts FROM posts;"}' \
|
|
191
|
-
"Count total number of posts in the table"
|
|
192
|
-
|
|
193
|
-
echo -e "${GREEN}=== EXPORT TESTS ===${NC}"
|
|
194
|
-
echo ""
|
|
195
|
-
|
|
196
|
-
# Test 6: Export users table in SQL format with data
|
|
197
|
-
test_export \
|
|
198
|
-
"Users Table - SQL with Data" \
|
|
199
|
-
'{"tables": ["users"], "format": "sql", "includeData": true}' \
|
|
200
|
-
"Export users table as SQL with both schema and data"
|
|
201
|
-
|
|
202
|
-
# Test 7: Export users table in SQL format without data (schema only)
|
|
203
|
-
test_export \
|
|
204
|
-
"Users Table - SQL Schema Only" \
|
|
205
|
-
'{"tables": ["users"], "format": "sql", "includeData": false}' \
|
|
206
|
-
"Export users table as SQL with schema only, no data"
|
|
207
|
-
|
|
208
|
-
# Test 8: Export users table in JSON format with data
|
|
209
|
-
test_export \
|
|
210
|
-
"Users Table - JSON with Data" \
|
|
211
|
-
'{"tables": ["users"], "format": "json", "includeData": true}' \
|
|
212
|
-
"Export users table as JSON with both schema and data"
|
|
213
|
-
|
|
214
|
-
# Test 9: Export users table in JSON format without data (schema only)
|
|
215
|
-
test_export \
|
|
216
|
-
"Users Table - JSON Schema Only" \
|
|
217
|
-
'{"tables": ["users"], "format": "json", "includeData": false}' \
|
|
218
|
-
"Export users table as JSON with schema only, no data"
|
|
219
|
-
|
|
220
|
-
# Test 10: Export all tables in SQL format (default behavior)
|
|
221
|
-
test_export \
|
|
222
|
-
"All Tables - SQL Format" \
|
|
223
|
-
'{"format": "sql"}' \
|
|
224
|
-
"Export all tables as SQL with default settings"
|
|
225
|
-
|
|
226
|
-
# Test 11: Test with invalid table name
|
|
227
|
-
test_export \
|
|
228
|
-
"Invalid Table Name" \
|
|
229
|
-
'{"tables": ["nonexistent_table"], "format": "sql"}' \
|
|
230
|
-
"Test error handling with non-existent table"
|
|
231
|
-
|
|
232
|
-
# Test 12: Test with invalid format
|
|
233
|
-
test_export \
|
|
234
|
-
"Invalid Format" \
|
|
235
|
-
'{"tables": ["users"], "format": "xml"}' \
|
|
236
|
-
"Test validation with invalid format"
|
|
237
|
-
|
|
238
|
-
# Test 12.5: Export posts table in SQL format with data
|
|
239
|
-
test_export \
|
|
240
|
-
"All Tables - SQL with Data" \
|
|
241
|
-
'{"format": "sql", "includeData": false}' \
|
|
242
|
-
"Export all tables as SQL with both schema and data"
|
|
243
|
-
|
|
244
|
-
echo -e "${GREEN}=== IMPORT TESTS ===${NC}"
|
|
245
|
-
echo ""
|
|
246
|
-
|
|
247
|
-
# Define the path to the SQL file
|
|
248
|
-
SQL_FILE_PATH="$(dirname "$0")/test-users.sql"
|
|
249
|
-
|
|
250
|
-
# Test 13: Import users.sql without truncate
|
|
251
|
-
test_import \
|
|
252
|
-
"Import Users SQL - No Truncate" \
|
|
253
|
-
"$SQL_FILE_PATH" \
|
|
254
|
-
"false" \
|
|
255
|
-
"Import users table structure from SQL file without truncating existing data"
|
|
256
|
-
|
|
257
|
-
# Test 14: Import users.sql with truncate
|
|
258
|
-
test_import \
|
|
259
|
-
"Import Users SQL - With Truncate" \
|
|
260
|
-
"$SQL_FILE_PATH" \
|
|
261
|
-
"true" \
|
|
262
|
-
"Import users table structure from SQL file with truncating existing data"
|
|
263
|
-
|
|
264
|
-
# Test 15: Test with non-existent file
|
|
265
|
-
test_import \
|
|
266
|
-
"Import Non-existent File" \
|
|
267
|
-
"$(dirname "$0")/nonexistent.sql" \
|
|
268
|
-
"false" \
|
|
269
|
-
"Test error handling with non-existent SQL file"
|
|
270
|
-
|
|
271
|
-
echo "========================================="
|
|
272
|
-
echo "Database Advance Tests Complete"
|
|
273
|
-
echo "========================================="
|
|
274
|
-
echo ""
|
|
275
|
-
echo -e "${GREEN}All tests have been executed.${NC}"
|
|
276
|
-
echo "Check the responses above to verify all functionality."
|
|
277
|
-
echo ""
|
|
278
|
-
echo "Key things to verify:"
|
|
279
|
-
echo ""
|
|
280
|
-
echo -e "${BLUE}Raw SQL Tests:${NC}"
|
|
281
|
-
echo "- Posts table existence check"
|
|
282
|
-
echo "- Index creation and verification"
|
|
283
|
-
echo "- SQL execution with proper responses"
|
|
284
|
-
echo ""
|
|
285
|
-
echo -e "${BLUE}Export Tests:${NC}"
|
|
286
|
-
echo "- SQL exports should contain CREATE TABLE statements"
|
|
287
|
-
echo "- When includeData=true, INSERT statements should be present"
|
|
288
|
-
echo "- When includeData=false, only schema should be exported"
|
|
289
|
-
echo "- JSON exports should have 'schema' and 'rows' properties"
|
|
290
|
-
echo "- Invalid requests should return appropriate error messages"
|
|
291
|
-
echo ""
|
|
292
|
-
echo -e "${BLUE}Import Tests:${NC}"
|
|
293
|
-
echo "- File uploads should be processed correctly"
|
|
294
|
-
echo "- SQL files should be executed and tables created"
|
|
295
|
-
echo "- Truncate option should control data preservation"
|
|
296
|
-
echo "- Error handling should work for missing files"
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Test script for database advance functionality
|
|
4
|
+
# Tests rawSQL, export, and import operations
|
|
5
|
+
|
|
6
|
+
# Configuration
|
|
7
|
+
BASE_URL="http://localhost:7130/api/database/advance"
|
|
8
|
+
TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDEiLCJlbWFpbCI6ImFkbWluQGV4YW1wbGUuY29tIiwicm9sZSI6InByb2plY3RfYWRtaW4iLCJpYXQiOjE3NTY0MDM2NTUsImV4cCI6MTc1NzAwODQ1NX0.UhLvS5f4vdzsR0bZLmHvQ-MX6WPoPieTZ4H7sxjRYGM"
|
|
9
|
+
|
|
10
|
+
# Colors for output
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
YELLOW='\033[1;33m'
|
|
14
|
+
BLUE='\033[0;34m'
|
|
15
|
+
NC='\033[0m' # No Color
|
|
16
|
+
|
|
17
|
+
echo "========================================="
|
|
18
|
+
echo "Database Advance Operations Test Script"
|
|
19
|
+
echo "========================================="
|
|
20
|
+
echo "Base URL: $BASE_URL"
|
|
21
|
+
echo "Testing rawSQL, export, and import operations..."
|
|
22
|
+
echo "========================================="
|
|
23
|
+
echo ""
|
|
24
|
+
|
|
25
|
+
# Function to test rawSQL endpoint
|
|
26
|
+
test_rawsql() {
|
|
27
|
+
local test_name="$1"
|
|
28
|
+
local request_body="$2"
|
|
29
|
+
local description="$3"
|
|
30
|
+
|
|
31
|
+
echo -e "${BLUE}Test: $test_name${NC}"
|
|
32
|
+
echo -e "${YELLOW}Description: $description${NC}"
|
|
33
|
+
echo "Request body: $request_body"
|
|
34
|
+
echo ""
|
|
35
|
+
|
|
36
|
+
# Make the API request
|
|
37
|
+
RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/rawsql" \
|
|
38
|
+
-H "Content-Type: application/json" \
|
|
39
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
40
|
+
-d "$request_body" 2>&1)
|
|
41
|
+
|
|
42
|
+
# Extract HTTP code and response body
|
|
43
|
+
HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
|
|
44
|
+
RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
|
|
45
|
+
|
|
46
|
+
echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
|
|
47
|
+
|
|
48
|
+
if [ "$HTTP_CODE" = "200" ]; then
|
|
49
|
+
echo -e "${GREEN}✓ Request successful${NC}"
|
|
50
|
+
echo ""
|
|
51
|
+
echo -e "${BLUE}Response:${NC}"
|
|
52
|
+
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
|
|
53
|
+
else
|
|
54
|
+
echo -e "${RED}✗ Request failed${NC}"
|
|
55
|
+
echo ""
|
|
56
|
+
echo -e "${RED}Response:${NC}"
|
|
57
|
+
echo "$RESPONSE_BODY"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
echo ""
|
|
61
|
+
echo "----------------------------------------"
|
|
62
|
+
echo ""
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Function to make API request and show results
|
|
66
|
+
test_export() {
|
|
67
|
+
local test_name="$1"
|
|
68
|
+
local request_body="$2"
|
|
69
|
+
local description="$3"
|
|
70
|
+
|
|
71
|
+
echo -e "${BLUE}Test: $test_name${NC}"
|
|
72
|
+
echo -e "${YELLOW}Description: $description${NC}"
|
|
73
|
+
echo "Request body: $request_body"
|
|
74
|
+
echo ""
|
|
75
|
+
|
|
76
|
+
# Make the API request
|
|
77
|
+
RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/export" \
|
|
78
|
+
-H "Content-Type: application/json" \
|
|
79
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
80
|
+
-d "$request_body" 2>&1)
|
|
81
|
+
|
|
82
|
+
# Extract HTTP code and response body
|
|
83
|
+
HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
|
|
84
|
+
RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
|
|
85
|
+
|
|
86
|
+
echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
|
|
87
|
+
|
|
88
|
+
if [ "$HTTP_CODE" = "200" ]; then
|
|
89
|
+
echo -e "${GREEN}✓ Request successful${NC}"
|
|
90
|
+
echo ""
|
|
91
|
+
echo -e "${BLUE}Response:${NC}"
|
|
92
|
+
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
|
|
93
|
+
else
|
|
94
|
+
echo -e "${RED}✗ Request failed${NC}"
|
|
95
|
+
echo ""
|
|
96
|
+
echo -e "${RED}Response:${NC}"
|
|
97
|
+
echo "$RESPONSE_BODY"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
echo ""
|
|
101
|
+
echo "----------------------------------------"
|
|
102
|
+
echo ""
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# Function to test import endpoint with file upload
|
|
106
|
+
test_import() {
|
|
107
|
+
local test_name="$1"
|
|
108
|
+
local file_path="$2"
|
|
109
|
+
local truncate_option="$3"
|
|
110
|
+
local description="$4"
|
|
111
|
+
|
|
112
|
+
echo -e "${BLUE}Test: $test_name${NC}"
|
|
113
|
+
echo -e "${YELLOW}Description: $description${NC}"
|
|
114
|
+
echo "File: $file_path"
|
|
115
|
+
echo "Truncate: $truncate_option"
|
|
116
|
+
echo ""
|
|
117
|
+
|
|
118
|
+
# Check if file exists
|
|
119
|
+
if [ ! -f "$file_path" ]; then
|
|
120
|
+
echo -e "${RED}✗ File not found: $file_path${NC}"
|
|
121
|
+
echo ""
|
|
122
|
+
echo "----------------------------------------"
|
|
123
|
+
echo ""
|
|
124
|
+
return 1
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
# Make the API request with file upload
|
|
128
|
+
RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/import" \
|
|
129
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
130
|
+
-F "file=@$file_path" \
|
|
131
|
+
-F "truncate=$truncate_option" 2>&1)
|
|
132
|
+
|
|
133
|
+
# Extract HTTP code and response body
|
|
134
|
+
HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
|
|
135
|
+
RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
|
|
136
|
+
|
|
137
|
+
echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
|
|
138
|
+
|
|
139
|
+
if [ "$HTTP_CODE" = "200" ]; then
|
|
140
|
+
echo -e "${GREEN}✓ Request successful${NC}"
|
|
141
|
+
echo ""
|
|
142
|
+
echo -e "${BLUE}Response:${NC}"
|
|
143
|
+
echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
|
|
144
|
+
else
|
|
145
|
+
echo -e "${RED}✗ Request failed${NC}"
|
|
146
|
+
echo ""
|
|
147
|
+
echo -e "${RED}Response:${NC}"
|
|
148
|
+
echo "$RESPONSE_BODY"
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
echo ""
|
|
152
|
+
echo "----------------------------------------"
|
|
153
|
+
echo ""
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# ===========================================
|
|
157
|
+
# RAW SQL TESTS
|
|
158
|
+
# ===========================================
|
|
159
|
+
|
|
160
|
+
echo -e "${GREEN}=== RAW SQL TESTS ===${NC}"
|
|
161
|
+
echo ""
|
|
162
|
+
|
|
163
|
+
# Test 1: Check if posts table exists
|
|
164
|
+
test_rawsql \
|
|
165
|
+
"Check Posts Table Existence" \
|
|
166
|
+
'{"query": "SELECT tablename FROM pg_tables WHERE schemaname = '\''public'\'' AND tablename = '\''posts'\'';"}' \
|
|
167
|
+
"Verify that the posts table exists before creating index"
|
|
168
|
+
|
|
169
|
+
# Test 2: Check existing indexes on posts table
|
|
170
|
+
test_rawsql \
|
|
171
|
+
"Check Existing Indexes on Posts" \
|
|
172
|
+
'{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'';"}' \
|
|
173
|
+
"List all existing indexes on the posts table"
|
|
174
|
+
|
|
175
|
+
# Test 3: Create index on posts.title column
|
|
176
|
+
test_rawsql \
|
|
177
|
+
"Create Title Index on Posts" \
|
|
178
|
+
'{"query": "CREATE INDEX IF NOT EXISTS idx_posts_title ON posts(title);"}' \
|
|
179
|
+
"Create an index on the title column of the posts table for better query performance"
|
|
180
|
+
|
|
181
|
+
# Test 4: Verify the index was created
|
|
182
|
+
test_rawsql \
|
|
183
|
+
"Verify Title Index Creation" \
|
|
184
|
+
'{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'' AND indexname = '\''idx_posts_title'\'';"}' \
|
|
185
|
+
"Confirm that the title index was successfully created"
|
|
186
|
+
|
|
187
|
+
# Test 5: Test a simple SELECT query
|
|
188
|
+
test_rawsql \
|
|
189
|
+
"Simple Select Query" \
|
|
190
|
+
'{"query": "SELECT COUNT(*) as total_posts FROM posts;"}' \
|
|
191
|
+
"Count total number of posts in the table"
|
|
192
|
+
|
|
193
|
+
echo -e "${GREEN}=== EXPORT TESTS ===${NC}"
|
|
194
|
+
echo ""
|
|
195
|
+
|
|
196
|
+
# Test 6: Export users table in SQL format with data
|
|
197
|
+
test_export \
|
|
198
|
+
"Users Table - SQL with Data" \
|
|
199
|
+
'{"tables": ["users"], "format": "sql", "includeData": true}' \
|
|
200
|
+
"Export users table as SQL with both schema and data"
|
|
201
|
+
|
|
202
|
+
# Test 7: Export users table in SQL format without data (schema only)
|
|
203
|
+
test_export \
|
|
204
|
+
"Users Table - SQL Schema Only" \
|
|
205
|
+
'{"tables": ["users"], "format": "sql", "includeData": false}' \
|
|
206
|
+
"Export users table as SQL with schema only, no data"
|
|
207
|
+
|
|
208
|
+
# Test 8: Export users table in JSON format with data
|
|
209
|
+
test_export \
|
|
210
|
+
"Users Table - JSON with Data" \
|
|
211
|
+
'{"tables": ["users"], "format": "json", "includeData": true}' \
|
|
212
|
+
"Export users table as JSON with both schema and data"
|
|
213
|
+
|
|
214
|
+
# Test 9: Export users table in JSON format without data (schema only)
|
|
215
|
+
test_export \
|
|
216
|
+
"Users Table - JSON Schema Only" \
|
|
217
|
+
'{"tables": ["users"], "format": "json", "includeData": false}' \
|
|
218
|
+
"Export users table as JSON with schema only, no data"
|
|
219
|
+
|
|
220
|
+
# Test 10: Export all tables in SQL format (default behavior)
|
|
221
|
+
test_export \
|
|
222
|
+
"All Tables - SQL Format" \
|
|
223
|
+
'{"format": "sql"}' \
|
|
224
|
+
"Export all tables as SQL with default settings"
|
|
225
|
+
|
|
226
|
+
# Test 11: Test with invalid table name
|
|
227
|
+
test_export \
|
|
228
|
+
"Invalid Table Name" \
|
|
229
|
+
'{"tables": ["nonexistent_table"], "format": "sql"}' \
|
|
230
|
+
"Test error handling with non-existent table"
|
|
231
|
+
|
|
232
|
+
# Test 12: Test with invalid format
|
|
233
|
+
test_export \
|
|
234
|
+
"Invalid Format" \
|
|
235
|
+
'{"tables": ["users"], "format": "xml"}' \
|
|
236
|
+
"Test validation with invalid format"
|
|
237
|
+
|
|
238
|
+
# Test 12.5: Export posts table in SQL format with data
|
|
239
|
+
test_export \
|
|
240
|
+
"All Tables - SQL with Data" \
|
|
241
|
+
'{"format": "sql", "includeData": false}' \
|
|
242
|
+
"Export all tables as SQL with both schema and data"
|
|
243
|
+
|
|
244
|
+
echo -e "${GREEN}=== IMPORT TESTS ===${NC}"
|
|
245
|
+
echo ""
|
|
246
|
+
|
|
247
|
+
# Define the path to the SQL file
|
|
248
|
+
SQL_FILE_PATH="$(dirname "$0")/test-users.sql"
|
|
249
|
+
|
|
250
|
+
# Test 13: Import users.sql without truncate
|
|
251
|
+
test_import \
|
|
252
|
+
"Import Users SQL - No Truncate" \
|
|
253
|
+
"$SQL_FILE_PATH" \
|
|
254
|
+
"false" \
|
|
255
|
+
"Import users table structure from SQL file without truncating existing data"
|
|
256
|
+
|
|
257
|
+
# Test 14: Import users.sql with truncate
|
|
258
|
+
test_import \
|
|
259
|
+
"Import Users SQL - With Truncate" \
|
|
260
|
+
"$SQL_FILE_PATH" \
|
|
261
|
+
"true" \
|
|
262
|
+
"Import users table structure from SQL file with truncating existing data"
|
|
263
|
+
|
|
264
|
+
# Test 15: Test with non-existent file
|
|
265
|
+
test_import \
|
|
266
|
+
"Import Non-existent File" \
|
|
267
|
+
"$(dirname "$0")/nonexistent.sql" \
|
|
268
|
+
"false" \
|
|
269
|
+
"Test error handling with non-existent SQL file"
|
|
270
|
+
|
|
271
|
+
echo "========================================="
|
|
272
|
+
echo "Database Advance Tests Complete"
|
|
273
|
+
echo "========================================="
|
|
274
|
+
echo ""
|
|
275
|
+
echo -e "${GREEN}All tests have been executed.${NC}"
|
|
276
|
+
echo "Check the responses above to verify all functionality."
|
|
277
|
+
echo ""
|
|
278
|
+
echo "Key things to verify:"
|
|
279
|
+
echo ""
|
|
280
|
+
echo -e "${BLUE}Raw SQL Tests:${NC}"
|
|
281
|
+
echo "- Posts table existence check"
|
|
282
|
+
echo "- Index creation and verification"
|
|
283
|
+
echo "- SQL execution with proper responses"
|
|
284
|
+
echo ""
|
|
285
|
+
echo -e "${BLUE}Export Tests:${NC}"
|
|
286
|
+
echo "- SQL exports should contain CREATE TABLE statements"
|
|
287
|
+
echo "- When includeData=true, INSERT statements should be present"
|
|
288
|
+
echo "- When includeData=false, only schema should be exported"
|
|
289
|
+
echo "- JSON exports should have 'schema' and 'rows' properties"
|
|
290
|
+
echo "- Invalid requests should return appropriate error messages"
|
|
291
|
+
echo ""
|
|
292
|
+
echo -e "${BLUE}Import Tests:${NC}"
|
|
293
|
+
echo "- File uploads should be processed correctly"
|
|
294
|
+
echo "- SQL files should be executed and tables created"
|
|
295
|
+
echo "- Truncate option should control data preservation"
|
|
296
|
+
echo "- Error handling should work for missing files"
|
|
297
297
|
echo "- Response should include import statistics"
|