insforge 0.3.2 → 1.2.10
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/.cursor/rules/cursor-rules.mdc +94 -0
- package/.dockerignore +3 -0
- package/.env.example +33 -4
- package/.github/ISSUE_TEMPLATE/bug_report.yml +13 -60
- package/.github/ISSUE_TEMPLATE/config.yml +2 -2
- package/.github/ISSUE_TEMPLATE/feature_request.yml +10 -63
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- package/.github/workflows/build-image.yml +2 -1
- package/.github/workflows/e2e.yml +63 -0
- package/CHANGELOG.md +41 -0
- package/CLAUDE_PLUGIN.md +104 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +1 -1
- package/Dockerfile +4 -1
- package/README.md +66 -18
- 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 +115 -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 +57 -0
- package/auth/src/pages/SignUpPage.tsx +57 -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 +9 -9
- 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} +20 -24
- package/backend/src/api/routes/auth/index.routes.ts +570 -0
- package/backend/src/api/routes/auth/oauth.routes.ts +448 -0
- package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +107 -65
- package/backend/src/api/routes/database/index.routes.ts +13 -0
- package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +22 -8
- package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +20 -23
- package/backend/src/api/routes/docs/index.routes.ts +76 -0
- package/backend/src/api/routes/functions/index.routes.ts +188 -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} +21 -31
- package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
- package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +34 -53
- package/backend/src/api/routes/usage/index.routes.ts +89 -0
- package/backend/src/infra/config/app.config.ts +51 -0
- package/backend/src/{core/database/manager.ts → infra/database/database.manager.ts} +76 -85
- 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/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
- package/backend/src/infra/security/token.manager.ts +125 -0
- package/backend/src/{core/socket/socket.ts → infra/socket/socket.manager.ts} +15 -15
- package/backend/src/providers/ai/openrouter.provider.ts +377 -0
- package/backend/src/providers/email/base.provider.ts +41 -0
- package/backend/src/providers/email/cloud.provider.ts +187 -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/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 +7 -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 +70 -74
- 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 +1136 -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 +811 -0
- package/backend/src/services/email/email.service.ts +75 -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/{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 +66 -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/{core/socket/types.ts → types/socket.ts} +5 -6
- package/backend/src/utils/environment.ts +9 -3
- package/backend/src/utils/logger.ts +20 -2
- package/backend/src/utils/seed.ts +150 -57
- package/backend/src/utils/sql-parser.ts +1 -1
- package/backend/src/utils/utils.ts +114 -0
- package/backend/src/utils/validations.ts +40 -4
- 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 +1 -1
- package/backend/tests/local/test-e2e.sh +1 -1
- package/backend/tests/local/test-functions.sh +123 -0
- package/backend/tests/local/test-logs.sh +132 -0
- package/backend/tests/local/test-public-bucket.sh +3 -3
- package/backend/tests/local/test-secrets.sh +14 -12
- package/backend/tests/local/test-traditional-rest.sh +2 -2
- package/backend/tests/manual/test-rawsql-modes.sh +244 -0
- package/backend/tests/test-config.sh +37 -1
- 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 +1 -1
- 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 +60 -4
- package/docker-compose.yml +65 -4
- package/docker-init/db/db-init.sql +6 -34
- package/docker-init/logs/vector.yml +236 -0
- package/docs/README.md +44 -0
- package/docs/changelog.mdx +67 -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/functions/architecture.mdx +105 -0
- package/docs/core-concepts/functions/sdk.mdx +184 -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/docs.json +210 -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/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 +55 -374
- package/docs/introduction.mdx +45 -0
- package/docs/logo/dark.svg +22 -0
- package/docs/logo/light.svg +20 -0
- package/docs/partnership.mdx +647 -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/frontend/package.json +10 -4
- package/frontend/src/App.tsx +13 -82
- package/frontend/src/assets/icons/connected.svg +3 -0
- package/frontend/src/assets/icons/loader.svg +9 -0
- package/frontend/src/assets/logos/apple.svg +4 -0
- package/frontend/src/assets/logos/discord.svg +1 -1
- package/frontend/src/assets/logos/facebook.svg +3 -0
- 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/spotify.svg +17 -0
- package/frontend/src/assets/logos/tiktok.svg +6 -0
- 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 +133 -92
- 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/page/AIPage.tsx +67 -79
- 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 +53 -30
- package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +44 -14
- package/frontend/src/features/auth/components/index.ts +5 -0
- package/frontend/src/features/auth/helpers.tsx +200 -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/page/AuthMethodsPage.tsx +275 -0
- package/frontend/src/features/auth/page/ConfigurationPage.tsx +395 -0
- package/frontend/src/features/auth/page/UsersPage.tsx +285 -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/page/DashboardPage.tsx +187 -169
- 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/TableEmptyState.tsx +6 -5
- package/frontend/src/features/database/components/TableForm.tsx +28 -15
- 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/useFullMetadata.ts +18 -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 +131 -0
- package/frontend/src/features/database/index.ts +6 -1
- package/frontend/src/features/database/page/FunctionsPage.tsx +211 -0
- package/frontend/src/features/database/page/IndexesPage.tsx +240 -0
- package/frontend/src/features/database/page/PoliciesPage.tsx +248 -0
- package/frontend/src/features/database/page/SQLEditorPage.tsx +382 -0
- package/frontend/src/features/database/page/{DatabasePage.tsx → TablesPage.tsx} +186 -185
- package/frontend/src/features/database/page/TemplatesPage.tsx +39 -0
- package/frontend/src/features/database/page/TriggersPage.tsx +242 -0
- package/frontend/src/features/database/services/advance.service.ts +66 -0
- package/frontend/src/features/database/services/{database.service.ts → record.service.ts} +67 -64
- package/frontend/src/features/database/services/table.service.ts +64 -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/page/FunctionsPage.tsx +160 -17
- package/frontend/src/features/functions/{components/SecretsContent.tsx → page/SecretsPage.tsx} +8 -12
- 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/page/CloudLoginPage.tsx +79 -54
- package/frontend/src/features/login/page/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 +181 -0
- package/frontend/src/features/logs/index.ts +8 -2
- package/frontend/src/features/logs/page/AuditsPage.tsx +91 -38
- package/frontend/src/features/logs/page/LogsPage.tsx +152 -0
- package/frontend/src/features/logs/page/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/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/StoragePage.tsx +41 -115
- 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/page/VisualizerPage.tsx +33 -29
- 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 +5 -6
- 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 +84 -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 +183 -0
- package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
- package/frontend/src/lib/utils/utils.ts +19 -1
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/vite.config.ts +5 -3
- package/functions/server.ts +28 -3
- 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 +31 -4
- package/openapi/auth.yaml +827 -146
- package/package.json +16 -7
- package/shared-schemas/package.json +1 -1
- package/shared-schemas/src/ai-api.schema.ts +34 -58
- package/shared-schemas/src/ai.schema.ts +5 -0
- package/shared-schemas/src/auth-api.schema.ts +154 -8
- package/shared-schemas/src/auth.schema.ts +42 -6
- package/shared-schemas/src/cloud-events.schema.ts +57 -0
- package/shared-schemas/src/database-api.schema.ts +3 -3
- package/shared-schemas/src/database.schema.ts +1 -1
- package/shared-schemas/src/index.ts +1 -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 +9 -4
- package/test-gemini.sh +35 -0
- package/test-usage-admin.sh +57 -0
- package/test-usage.sh +50 -0
- 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 -781
- 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/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/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/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/login/components/AuthErrorBoundary.tsx +0 -87
- package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
- 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/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/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +0 -0
- /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
import { DatabaseTemplate } from './index';
|
|
2
|
+
|
|
3
|
+
export const ecommercePlatformTemplate: DatabaseTemplate = {
|
|
4
|
+
id: 'ecommerce-platform',
|
|
5
|
+
title: 'E-commerce',
|
|
6
|
+
description:
|
|
7
|
+
'An online store with product listings, carts, checkout, and owner product management',
|
|
8
|
+
tableCount: 5,
|
|
9
|
+
visualizerSchema: [
|
|
10
|
+
{
|
|
11
|
+
tableName: 'products',
|
|
12
|
+
columns: [
|
|
13
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
14
|
+
{
|
|
15
|
+
columnName: 'name',
|
|
16
|
+
type: 'varchar',
|
|
17
|
+
isPrimaryKey: false,
|
|
18
|
+
isNullable: false,
|
|
19
|
+
isUnique: false,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
columnName: 'description',
|
|
23
|
+
type: 'text',
|
|
24
|
+
isPrimaryKey: false,
|
|
25
|
+
isNullable: true,
|
|
26
|
+
isUnique: false,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
columnName: 'price',
|
|
30
|
+
type: 'decimal',
|
|
31
|
+
isPrimaryKey: false,
|
|
32
|
+
isNullable: false,
|
|
33
|
+
isUnique: false,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
columnName: 'sku',
|
|
37
|
+
type: 'varchar',
|
|
38
|
+
isPrimaryKey: false,
|
|
39
|
+
isNullable: false,
|
|
40
|
+
isUnique: true,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
columnName: 'stock_quantity',
|
|
44
|
+
type: 'integer',
|
|
45
|
+
isPrimaryKey: false,
|
|
46
|
+
isNullable: true,
|
|
47
|
+
isUnique: false,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
columnName: 'image_url',
|
|
51
|
+
type: 'varchar',
|
|
52
|
+
isPrimaryKey: false,
|
|
53
|
+
isNullable: true,
|
|
54
|
+
isUnique: false,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
columnName: 'category',
|
|
58
|
+
type: 'varchar',
|
|
59
|
+
isPrimaryKey: false,
|
|
60
|
+
isNullable: true,
|
|
61
|
+
isUnique: false,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
columnName: 'is_active',
|
|
65
|
+
type: 'boolean',
|
|
66
|
+
isPrimaryKey: false,
|
|
67
|
+
isNullable: true,
|
|
68
|
+
isUnique: false,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
columnName: 'created_at',
|
|
72
|
+
type: 'timestamp',
|
|
73
|
+
isPrimaryKey: false,
|
|
74
|
+
isNullable: true,
|
|
75
|
+
isUnique: false,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
columnName: 'updated_at',
|
|
79
|
+
type: 'timestamp',
|
|
80
|
+
isPrimaryKey: false,
|
|
81
|
+
isNullable: true,
|
|
82
|
+
isUnique: false,
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
tableName: 'customers',
|
|
88
|
+
columns: [
|
|
89
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
90
|
+
{
|
|
91
|
+
columnName: 'user_id',
|
|
92
|
+
type: 'uuid',
|
|
93
|
+
isPrimaryKey: false,
|
|
94
|
+
isNullable: false,
|
|
95
|
+
isUnique: true,
|
|
96
|
+
foreignKey: {
|
|
97
|
+
referenceTable: 'users',
|
|
98
|
+
referenceColumn: 'id',
|
|
99
|
+
onDelete: 'CASCADE',
|
|
100
|
+
onUpdate: 'CASCADE',
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
columnName: 'first_name',
|
|
105
|
+
type: 'varchar',
|
|
106
|
+
isPrimaryKey: false,
|
|
107
|
+
isNullable: false,
|
|
108
|
+
isUnique: false,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
columnName: 'last_name',
|
|
112
|
+
type: 'varchar',
|
|
113
|
+
isPrimaryKey: false,
|
|
114
|
+
isNullable: false,
|
|
115
|
+
isUnique: false,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
columnName: 'phone',
|
|
119
|
+
type: 'varchar',
|
|
120
|
+
isPrimaryKey: false,
|
|
121
|
+
isNullable: true,
|
|
122
|
+
isUnique: false,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
columnName: 'address',
|
|
126
|
+
type: 'text',
|
|
127
|
+
isPrimaryKey: false,
|
|
128
|
+
isNullable: true,
|
|
129
|
+
isUnique: false,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
columnName: 'city',
|
|
133
|
+
type: 'varchar',
|
|
134
|
+
isPrimaryKey: false,
|
|
135
|
+
isNullable: true,
|
|
136
|
+
isUnique: false,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
columnName: 'country',
|
|
140
|
+
type: 'varchar',
|
|
141
|
+
isPrimaryKey: false,
|
|
142
|
+
isNullable: true,
|
|
143
|
+
isUnique: false,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
columnName: 'postal_code',
|
|
147
|
+
type: 'varchar',
|
|
148
|
+
isPrimaryKey: false,
|
|
149
|
+
isNullable: true,
|
|
150
|
+
isUnique: false,
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
columnName: 'created_at',
|
|
154
|
+
type: 'timestamp',
|
|
155
|
+
isPrimaryKey: false,
|
|
156
|
+
isNullable: true,
|
|
157
|
+
isUnique: false,
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
tableName: 'orders',
|
|
163
|
+
columns: [
|
|
164
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
165
|
+
{
|
|
166
|
+
columnName: 'customer_id',
|
|
167
|
+
type: 'uuid',
|
|
168
|
+
isPrimaryKey: false,
|
|
169
|
+
isNullable: true,
|
|
170
|
+
isUnique: false,
|
|
171
|
+
foreignKey: {
|
|
172
|
+
referenceTable: 'customers',
|
|
173
|
+
referenceColumn: 'id',
|
|
174
|
+
onDelete: 'CASCADE',
|
|
175
|
+
onUpdate: 'CASCADE',
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
columnName: 'status',
|
|
180
|
+
type: 'varchar',
|
|
181
|
+
isPrimaryKey: false,
|
|
182
|
+
isNullable: true,
|
|
183
|
+
isUnique: false,
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
columnName: 'total_amount',
|
|
187
|
+
type: 'decimal',
|
|
188
|
+
isPrimaryKey: false,
|
|
189
|
+
isNullable: false,
|
|
190
|
+
isUnique: false,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
columnName: 'shipping_address',
|
|
194
|
+
type: 'text',
|
|
195
|
+
isPrimaryKey: false,
|
|
196
|
+
isNullable: true,
|
|
197
|
+
isUnique: false,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
columnName: 'created_at',
|
|
201
|
+
type: 'timestamp',
|
|
202
|
+
isPrimaryKey: false,
|
|
203
|
+
isNullable: true,
|
|
204
|
+
isUnique: false,
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
columnName: 'updated_at',
|
|
208
|
+
type: 'timestamp',
|
|
209
|
+
isPrimaryKey: false,
|
|
210
|
+
isNullable: true,
|
|
211
|
+
isUnique: false,
|
|
212
|
+
},
|
|
213
|
+
],
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
tableName: 'order_items',
|
|
217
|
+
columns: [
|
|
218
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
219
|
+
{
|
|
220
|
+
columnName: 'order_id',
|
|
221
|
+
type: 'uuid',
|
|
222
|
+
isPrimaryKey: false,
|
|
223
|
+
isNullable: true,
|
|
224
|
+
isUnique: false,
|
|
225
|
+
foreignKey: {
|
|
226
|
+
referenceTable: 'orders',
|
|
227
|
+
referenceColumn: 'id',
|
|
228
|
+
onDelete: 'CASCADE',
|
|
229
|
+
onUpdate: 'CASCADE',
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
columnName: 'product_id',
|
|
234
|
+
type: 'uuid',
|
|
235
|
+
isPrimaryKey: false,
|
|
236
|
+
isNullable: true,
|
|
237
|
+
isUnique: false,
|
|
238
|
+
foreignKey: {
|
|
239
|
+
referenceTable: 'products',
|
|
240
|
+
referenceColumn: 'id',
|
|
241
|
+
onDelete: 'RESTRICT',
|
|
242
|
+
onUpdate: 'CASCADE',
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
columnName: 'quantity',
|
|
247
|
+
type: 'integer',
|
|
248
|
+
isPrimaryKey: false,
|
|
249
|
+
isNullable: false,
|
|
250
|
+
isUnique: false,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
columnName: 'unit_price',
|
|
254
|
+
type: 'decimal',
|
|
255
|
+
isPrimaryKey: false,
|
|
256
|
+
isNullable: false,
|
|
257
|
+
isUnique: false,
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
columnName: 'created_at',
|
|
261
|
+
type: 'timestamp',
|
|
262
|
+
isPrimaryKey: false,
|
|
263
|
+
isNullable: true,
|
|
264
|
+
isUnique: false,
|
|
265
|
+
},
|
|
266
|
+
],
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
tableName: 'reviews',
|
|
270
|
+
columns: [
|
|
271
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
272
|
+
{
|
|
273
|
+
columnName: 'product_id',
|
|
274
|
+
type: 'uuid',
|
|
275
|
+
isPrimaryKey: false,
|
|
276
|
+
isNullable: true,
|
|
277
|
+
isUnique: false,
|
|
278
|
+
foreignKey: {
|
|
279
|
+
referenceTable: 'products',
|
|
280
|
+
referenceColumn: 'id',
|
|
281
|
+
onDelete: 'CASCADE',
|
|
282
|
+
onUpdate: 'CASCADE',
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
columnName: 'customer_id',
|
|
287
|
+
type: 'uuid',
|
|
288
|
+
isPrimaryKey: false,
|
|
289
|
+
isNullable: true,
|
|
290
|
+
isUnique: false,
|
|
291
|
+
foreignKey: {
|
|
292
|
+
referenceTable: 'customers',
|
|
293
|
+
referenceColumn: 'id',
|
|
294
|
+
onDelete: 'CASCADE',
|
|
295
|
+
onUpdate: 'CASCADE',
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
columnName: 'rating',
|
|
300
|
+
type: 'integer',
|
|
301
|
+
isPrimaryKey: false,
|
|
302
|
+
isNullable: true,
|
|
303
|
+
isUnique: false,
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
columnName: 'comment',
|
|
307
|
+
type: 'text',
|
|
308
|
+
isPrimaryKey: false,
|
|
309
|
+
isNullable: true,
|
|
310
|
+
isUnique: false,
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
columnName: 'created_at',
|
|
314
|
+
type: 'timestamp',
|
|
315
|
+
isPrimaryKey: false,
|
|
316
|
+
isNullable: true,
|
|
317
|
+
isUnique: false,
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
},
|
|
321
|
+
],
|
|
322
|
+
sql: `-- E-commerce Database Schema
|
|
323
|
+
-- A complete e-commerce platform with products, customers, orders, and reviews
|
|
324
|
+
|
|
325
|
+
-- Products table
|
|
326
|
+
CREATE TABLE products (
|
|
327
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
328
|
+
name VARCHAR(255) NOT NULL,
|
|
329
|
+
description TEXT,
|
|
330
|
+
price DECIMAL(10, 2) NOT NULL CHECK (price >= 0),
|
|
331
|
+
sku VARCHAR(100) UNIQUE NOT NULL,
|
|
332
|
+
stock_quantity INTEGER DEFAULT 0 CHECK (stock_quantity >= 0),
|
|
333
|
+
image_url VARCHAR(500),
|
|
334
|
+
category VARCHAR(100),
|
|
335
|
+
is_active BOOLEAN DEFAULT TRUE,
|
|
336
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
337
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
338
|
+
);
|
|
339
|
+
|
|
340
|
+
-- Customers table (extends users with customer-specific data)
|
|
341
|
+
CREATE TABLE customers (
|
|
342
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
343
|
+
user_id UUID UNIQUE NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
344
|
+
first_name VARCHAR(100) NOT NULL,
|
|
345
|
+
last_name VARCHAR(100) NOT NULL,
|
|
346
|
+
phone VARCHAR(50),
|
|
347
|
+
address TEXT,
|
|
348
|
+
city VARCHAR(100),
|
|
349
|
+
country VARCHAR(100),
|
|
350
|
+
postal_code VARCHAR(20),
|
|
351
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
-- Orders table
|
|
355
|
+
CREATE TABLE orders (
|
|
356
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
357
|
+
customer_id UUID REFERENCES customers(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
358
|
+
status VARCHAR(50) DEFAULT 'pending' CHECK (status IN ('pending', 'processing', 'shipped', 'delivered', 'cancelled')),
|
|
359
|
+
total_amount DECIMAL(10, 2) NOT NULL CHECK (total_amount >= 0),
|
|
360
|
+
shipping_address TEXT,
|
|
361
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
362
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
-- Order items table
|
|
366
|
+
CREATE TABLE order_items (
|
|
367
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
368
|
+
order_id UUID REFERENCES orders(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
369
|
+
product_id UUID REFERENCES products(id) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|
370
|
+
quantity INTEGER NOT NULL CHECK (quantity > 0),
|
|
371
|
+
unit_price DECIMAL(10, 2) NOT NULL CHECK (unit_price >= 0),
|
|
372
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
373
|
+
);
|
|
374
|
+
|
|
375
|
+
-- Reviews table
|
|
376
|
+
CREATE TABLE reviews (
|
|
377
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
378
|
+
product_id UUID REFERENCES products(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
379
|
+
customer_id UUID REFERENCES customers(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
380
|
+
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
|
|
381
|
+
comment TEXT,
|
|
382
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
383
|
+
UNIQUE(product_id, customer_id)
|
|
384
|
+
);
|
|
385
|
+
|
|
386
|
+
-- Create indexes for better performance
|
|
387
|
+
CREATE INDEX idx_products_category ON products(category);
|
|
388
|
+
CREATE INDEX idx_products_sku ON products(sku);
|
|
389
|
+
CREATE INDEX idx_products_active ON products(is_active);
|
|
390
|
+
CREATE INDEX idx_customers_user ON customers(user_id);
|
|
391
|
+
CREATE INDEX idx_orders_customer ON orders(customer_id);
|
|
392
|
+
CREATE INDEX idx_orders_status ON orders(status);
|
|
393
|
+
CREATE INDEX idx_orders_created ON orders(created_at DESC);
|
|
394
|
+
CREATE INDEX idx_order_items_order ON order_items(order_id);
|
|
395
|
+
CREATE INDEX idx_order_items_product ON order_items(product_id);
|
|
396
|
+
CREATE INDEX idx_reviews_product ON reviews(product_id);
|
|
397
|
+
CREATE INDEX idx_reviews_customer ON reviews(customer_id);
|
|
398
|
+
CREATE INDEX idx_reviews_rating ON reviews(rating);
|
|
399
|
+
|
|
400
|
+
-- =======================
|
|
401
|
+
-- ROW LEVEL SECURITY (RLS)
|
|
402
|
+
-- =======================
|
|
403
|
+
|
|
404
|
+
-- Enable RLS on all tables
|
|
405
|
+
ALTER TABLE products ENABLE ROW LEVEL SECURITY;
|
|
406
|
+
ALTER TABLE customers ENABLE ROW LEVEL SECURITY;
|
|
407
|
+
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
|
|
408
|
+
ALTER TABLE order_items ENABLE ROW LEVEL SECURITY;
|
|
409
|
+
ALTER TABLE reviews ENABLE ROW LEVEL SECURITY;
|
|
410
|
+
|
|
411
|
+
-- Policies for products (public read, authenticated write)
|
|
412
|
+
CREATE POLICY "Anyone can view active products"
|
|
413
|
+
ON products FOR SELECT
|
|
414
|
+
USING (is_active = TRUE OR auth.role() = 'admin');
|
|
415
|
+
|
|
416
|
+
CREATE POLICY "Authenticated users can create products"
|
|
417
|
+
ON products FOR INSERT
|
|
418
|
+
TO authenticated
|
|
419
|
+
WITH CHECK (true);
|
|
420
|
+
|
|
421
|
+
CREATE POLICY "Authenticated users can update products"
|
|
422
|
+
ON products FOR UPDATE
|
|
423
|
+
TO authenticated
|
|
424
|
+
USING (true)
|
|
425
|
+
WITH CHECK (true);
|
|
426
|
+
|
|
427
|
+
CREATE POLICY "Authenticated users can delete products"
|
|
428
|
+
ON products FOR DELETE
|
|
429
|
+
TO authenticated
|
|
430
|
+
USING (true);
|
|
431
|
+
|
|
432
|
+
-- Policies for customers (users can only see their own data)
|
|
433
|
+
CREATE POLICY "Users can view their own customer data"
|
|
434
|
+
ON customers FOR SELECT
|
|
435
|
+
TO authenticated
|
|
436
|
+
USING (user_id = auth.uid());
|
|
437
|
+
|
|
438
|
+
CREATE POLICY "Users can create their own customer data"
|
|
439
|
+
ON customers FOR INSERT
|
|
440
|
+
TO authenticated
|
|
441
|
+
WITH CHECK (user_id = auth.uid());
|
|
442
|
+
|
|
443
|
+
CREATE POLICY "Users can update their own customer data"
|
|
444
|
+
ON customers FOR UPDATE
|
|
445
|
+
TO authenticated
|
|
446
|
+
USING (user_id = auth.uid())
|
|
447
|
+
WITH CHECK (user_id = auth.uid());
|
|
448
|
+
|
|
449
|
+
-- Policies for orders (customers can only see their own orders)
|
|
450
|
+
CREATE POLICY "Customers can view their own orders"
|
|
451
|
+
ON orders FOR SELECT
|
|
452
|
+
TO authenticated
|
|
453
|
+
USING (
|
|
454
|
+
customer_id IN (
|
|
455
|
+
SELECT id FROM customers WHERE user_id = auth.uid()
|
|
456
|
+
)
|
|
457
|
+
);
|
|
458
|
+
|
|
459
|
+
CREATE POLICY "Customers can create their own orders"
|
|
460
|
+
ON orders FOR INSERT
|
|
461
|
+
TO authenticated
|
|
462
|
+
WITH CHECK (
|
|
463
|
+
customer_id IN (
|
|
464
|
+
SELECT id FROM customers WHERE user_id = auth.uid()
|
|
465
|
+
)
|
|
466
|
+
);
|
|
467
|
+
|
|
468
|
+
CREATE POLICY "Customers can update their own orders"
|
|
469
|
+
ON orders FOR UPDATE
|
|
470
|
+
TO authenticated
|
|
471
|
+
USING (
|
|
472
|
+
customer_id IN (
|
|
473
|
+
SELECT id FROM customers WHERE user_id = auth.uid()
|
|
474
|
+
)
|
|
475
|
+
);
|
|
476
|
+
|
|
477
|
+
-- Policies for order_items
|
|
478
|
+
CREATE POLICY "Customers can view their order items"
|
|
479
|
+
ON order_items FOR SELECT
|
|
480
|
+
TO authenticated
|
|
481
|
+
USING (
|
|
482
|
+
order_id IN (
|
|
483
|
+
SELECT o.id FROM orders o
|
|
484
|
+
JOIN customers c ON o.customer_id = c.id
|
|
485
|
+
WHERE c.user_id = auth.uid()
|
|
486
|
+
)
|
|
487
|
+
);
|
|
488
|
+
|
|
489
|
+
CREATE POLICY "Customers can create order items for their orders"
|
|
490
|
+
ON order_items FOR INSERT
|
|
491
|
+
TO authenticated
|
|
492
|
+
WITH CHECK (
|
|
493
|
+
order_id IN (
|
|
494
|
+
SELECT o.id FROM orders o
|
|
495
|
+
JOIN customers c ON o.customer_id = c.id
|
|
496
|
+
WHERE c.user_id = auth.uid()
|
|
497
|
+
)
|
|
498
|
+
);
|
|
499
|
+
|
|
500
|
+
-- Policies for reviews
|
|
501
|
+
CREATE POLICY "Anyone can view reviews"
|
|
502
|
+
ON reviews FOR SELECT
|
|
503
|
+
USING (true);
|
|
504
|
+
|
|
505
|
+
CREATE POLICY "Customers can create their own reviews"
|
|
506
|
+
ON reviews FOR INSERT
|
|
507
|
+
TO authenticated
|
|
508
|
+
WITH CHECK (
|
|
509
|
+
customer_id IN (
|
|
510
|
+
SELECT id FROM customers WHERE user_id = auth.uid()
|
|
511
|
+
)
|
|
512
|
+
);
|
|
513
|
+
|
|
514
|
+
CREATE POLICY "Customers can update their own reviews"
|
|
515
|
+
ON reviews FOR UPDATE
|
|
516
|
+
TO authenticated
|
|
517
|
+
USING (
|
|
518
|
+
customer_id IN (
|
|
519
|
+
SELECT id FROM customers WHERE user_id = auth.uid()
|
|
520
|
+
)
|
|
521
|
+
);
|
|
522
|
+
|
|
523
|
+
CREATE POLICY "Customers can delete their own reviews"
|
|
524
|
+
ON reviews FOR DELETE
|
|
525
|
+
TO authenticated
|
|
526
|
+
USING (
|
|
527
|
+
customer_id IN (
|
|
528
|
+
SELECT id FROM customers WHERE user_id = auth.uid()
|
|
529
|
+
)
|
|
530
|
+
);
|
|
531
|
+
|
|
532
|
+
-- =======================
|
|
533
|
+
-- SEED DATA
|
|
534
|
+
-- =======================
|
|
535
|
+
|
|
536
|
+
-- Insert sample products
|
|
537
|
+
INSERT INTO products (name, description, price, sku, stock_quantity, category, image_url) VALUES
|
|
538
|
+
('Wireless Bluetooth Headphones', 'Premium noise-cancelling wireless headphones with 30-hour battery life', 149.99, 'AUDIO-WH-001', 50, 'Electronics', 'https://images.unsplash.com/photo-1505740420928-5e560c06d30e'),
|
|
539
|
+
('Smart Fitness Watch', 'Track your fitness goals with GPS, heart rate monitor, and sleep tracking', 299.99, 'WATCH-SF-001', 35, 'Electronics', 'https://images.unsplash.com/photo-1523275335684-37898b6baf30'),
|
|
540
|
+
('Ergonomic Office Chair', 'Comfortable mesh office chair with lumbar support and adjustable armrests', 399.99, 'FURN-CH-001', 20, 'Furniture', 'https://images.unsplash.com/photo-1580480055273-228ff5388ef8'),
|
|
541
|
+
('Stainless Steel Water Bottle', 'Insulated 32oz water bottle keeps drinks cold for 24 hours', 29.99, 'HOME-WB-001', 100, 'Home & Kitchen', 'https://images.unsplash.com/photo-1602143407151-7111542de6e8'),
|
|
542
|
+
('Yoga Mat with Carrying Strap', 'Premium non-slip yoga mat, eco-friendly and easy to clean', 49.99, 'SPORT-YM-001', 75, 'Sports', 'https://images.unsplash.com/photo-1601925260368-ae2f83cf8b7f'),
|
|
543
|
+
('LED Desk Lamp', 'Adjustable brightness desk lamp with USB charging port', 45.99, 'HOME-DL-001', 60, 'Home & Kitchen', 'https://images.unsplash.com/photo-1513506003901-1e6a229e2d15'),
|
|
544
|
+
('Portable Power Bank 20000mAh', 'Fast-charging portable battery pack with dual USB ports', 39.99, 'ELEC-PB-001', 80, 'Electronics', 'https://images.unsplash.com/photo-1609091839311-d5365f9ff1c5'),
|
|
545
|
+
('Running Shoes', 'Lightweight running shoes with responsive cushioning', 119.99, 'SHOE-RS-001', 45, 'Sports', 'https://images.unsplash.com/photo-1542291026-7eec264c27ff'),
|
|
546
|
+
('Laptop Backpack', 'Water-resistant backpack with padded laptop compartment up to 15.6"', 79.99, 'BAG-LB-001', 55, 'Accessories', 'https://images.unsplash.com/photo-1553062407-98eeb64c6a62'),
|
|
547
|
+
('Organic Green Tea (100 bags)', 'Premium organic green tea bags, rich in antioxidants', 19.99, 'FOOD-GT-001', 120, 'Food & Beverage', 'https://images.unsplash.com/photo-1564890369478-c89ca6d9cde9'),
|
|
548
|
+
('Wireless Gaming Mouse', 'High-precision gaming mouse with customizable RGB lighting', 69.99, 'ELEC-GM-001', 40, 'Electronics', 'https://images.unsplash.com/photo-1527814050087-3793815479db'),
|
|
549
|
+
('Plant-Based Protein Powder', 'Chocolate flavored vegan protein powder, 2lb container', 44.99, 'FOOD-PP-001', 65, 'Food & Beverage', 'https://images.unsplash.com/photo-1579722821273-0f6c7d44362f'),
|
|
550
|
+
('Ceramic Coffee Mug Set (4 pack)', 'Handcrafted ceramic mugs, microwave and dishwasher safe', 34.99, 'HOME-CM-001', 90, 'Home & Kitchen', 'https://images.unsplash.com/photo-1514228742587-6b1558fcca3d'),
|
|
551
|
+
('Resistance Bands Set', '5-piece resistance band set with different resistance levels', 24.99, 'SPORT-RB-001', 110, 'Sports', 'https://images.unsplash.com/photo-1598289431512-b97b0917affc'),
|
|
552
|
+
('Bamboo Cutting Board', 'Large bamboo cutting board with juice groove', 32.99, 'HOME-CB-001', 70, 'Home & Kitchen', 'https://images.unsplash.com/photo-1594018426677-e62f2752292f');`,
|
|
553
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { GetTableSchemaResponse } from '@insforge/shared-schemas';
|
|
2
|
+
import { crmSystemTemplate } from './crm-system';
|
|
3
|
+
import { aiChatbotTemplate } from './ai-chatbot';
|
|
4
|
+
import { ecommercePlatformTemplate } from './ecommerce-platform';
|
|
5
|
+
import { redditCloneTemplate } from './reddit-clone';
|
|
6
|
+
import { instagramCloneTemplate } from './instagram-clone';
|
|
7
|
+
import { notionCloneTemplate } from './notion-clone';
|
|
8
|
+
|
|
9
|
+
export interface DatabaseTemplate {
|
|
10
|
+
id: string;
|
|
11
|
+
title: string;
|
|
12
|
+
description: string;
|
|
13
|
+
tableCount: number;
|
|
14
|
+
sql: string;
|
|
15
|
+
visualizerSchema: GetTableSchemaResponse[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
crmSystemTemplate,
|
|
20
|
+
aiChatbotTemplate,
|
|
21
|
+
ecommercePlatformTemplate,
|
|
22
|
+
redditCloneTemplate,
|
|
23
|
+
instagramCloneTemplate,
|
|
24
|
+
notionCloneTemplate,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const DATABASE_TEMPLATES = [
|
|
28
|
+
crmSystemTemplate,
|
|
29
|
+
aiChatbotTemplate,
|
|
30
|
+
ecommercePlatformTemplate,
|
|
31
|
+
redditCloneTemplate,
|
|
32
|
+
instagramCloneTemplate,
|
|
33
|
+
notionCloneTemplate,
|
|
34
|
+
];
|