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,528 @@
|
|
|
1
|
+
import { DatabaseTemplate } from './index';
|
|
2
|
+
|
|
3
|
+
export const crmSystemTemplate: DatabaseTemplate = {
|
|
4
|
+
id: 'crm-system',
|
|
5
|
+
title: 'CRM',
|
|
6
|
+
description: 'A simple CRM for managing contacts, companies, deals, tasks, and follow ups',
|
|
7
|
+
tableCount: 4,
|
|
8
|
+
visualizerSchema: [
|
|
9
|
+
{
|
|
10
|
+
tableName: 'companies',
|
|
11
|
+
columns: [
|
|
12
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
13
|
+
{
|
|
14
|
+
columnName: 'name',
|
|
15
|
+
type: 'varchar',
|
|
16
|
+
isPrimaryKey: false,
|
|
17
|
+
isNullable: false,
|
|
18
|
+
isUnique: false,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
columnName: 'industry',
|
|
22
|
+
type: 'varchar',
|
|
23
|
+
isPrimaryKey: false,
|
|
24
|
+
isNullable: true,
|
|
25
|
+
isUnique: false,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
columnName: 'website',
|
|
29
|
+
type: 'varchar',
|
|
30
|
+
isPrimaryKey: false,
|
|
31
|
+
isNullable: true,
|
|
32
|
+
isUnique: false,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
columnName: 'phone',
|
|
36
|
+
type: 'varchar',
|
|
37
|
+
isPrimaryKey: false,
|
|
38
|
+
isNullable: true,
|
|
39
|
+
isUnique: false,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
columnName: 'email',
|
|
43
|
+
type: 'varchar',
|
|
44
|
+
isPrimaryKey: false,
|
|
45
|
+
isNullable: true,
|
|
46
|
+
isUnique: false,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
columnName: 'address',
|
|
50
|
+
type: 'text',
|
|
51
|
+
isPrimaryKey: false,
|
|
52
|
+
isNullable: true,
|
|
53
|
+
isUnique: false,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
columnName: 'created_at',
|
|
57
|
+
type: 'timestamp',
|
|
58
|
+
isPrimaryKey: false,
|
|
59
|
+
isNullable: true,
|
|
60
|
+
isUnique: false,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
columnName: 'updated_at',
|
|
64
|
+
type: 'timestamp',
|
|
65
|
+
isPrimaryKey: false,
|
|
66
|
+
isNullable: true,
|
|
67
|
+
isUnique: false,
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
tableName: 'contacts',
|
|
73
|
+
columns: [
|
|
74
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
75
|
+
{
|
|
76
|
+
columnName: 'company_id',
|
|
77
|
+
type: 'uuid',
|
|
78
|
+
isPrimaryKey: false,
|
|
79
|
+
isNullable: true,
|
|
80
|
+
isUnique: false,
|
|
81
|
+
foreignKey: {
|
|
82
|
+
referenceTable: 'companies',
|
|
83
|
+
referenceColumn: 'id',
|
|
84
|
+
onDelete: 'SET NULL',
|
|
85
|
+
onUpdate: 'CASCADE',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
columnName: 'first_name',
|
|
90
|
+
type: 'varchar',
|
|
91
|
+
isPrimaryKey: false,
|
|
92
|
+
isNullable: false,
|
|
93
|
+
isUnique: false,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
columnName: 'last_name',
|
|
97
|
+
type: 'varchar',
|
|
98
|
+
isPrimaryKey: false,
|
|
99
|
+
isNullable: false,
|
|
100
|
+
isUnique: false,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
columnName: 'email',
|
|
104
|
+
type: 'varchar',
|
|
105
|
+
isPrimaryKey: false,
|
|
106
|
+
isNullable: false,
|
|
107
|
+
isUnique: true,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
columnName: 'phone',
|
|
111
|
+
type: 'varchar',
|
|
112
|
+
isPrimaryKey: false,
|
|
113
|
+
isNullable: true,
|
|
114
|
+
isUnique: false,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
columnName: 'position',
|
|
118
|
+
type: 'varchar',
|
|
119
|
+
isPrimaryKey: false,
|
|
120
|
+
isNullable: true,
|
|
121
|
+
isUnique: false,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
columnName: 'created_at',
|
|
125
|
+
type: 'timestamp',
|
|
126
|
+
isPrimaryKey: false,
|
|
127
|
+
isNullable: true,
|
|
128
|
+
isUnique: false,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
columnName: 'updated_at',
|
|
132
|
+
type: 'timestamp',
|
|
133
|
+
isPrimaryKey: false,
|
|
134
|
+
isNullable: true,
|
|
135
|
+
isUnique: false,
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
tableName: 'deals',
|
|
141
|
+
columns: [
|
|
142
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
143
|
+
{
|
|
144
|
+
columnName: 'company_id',
|
|
145
|
+
type: 'uuid',
|
|
146
|
+
isPrimaryKey: false,
|
|
147
|
+
isNullable: true,
|
|
148
|
+
isUnique: false,
|
|
149
|
+
foreignKey: {
|
|
150
|
+
referenceTable: 'companies',
|
|
151
|
+
referenceColumn: 'id',
|
|
152
|
+
onDelete: 'CASCADE',
|
|
153
|
+
onUpdate: 'CASCADE',
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
columnName: 'contact_id',
|
|
158
|
+
type: 'uuid',
|
|
159
|
+
isPrimaryKey: false,
|
|
160
|
+
isNullable: true,
|
|
161
|
+
isUnique: false,
|
|
162
|
+
foreignKey: {
|
|
163
|
+
referenceTable: 'contacts',
|
|
164
|
+
referenceColumn: 'id',
|
|
165
|
+
onDelete: 'SET NULL',
|
|
166
|
+
onUpdate: 'CASCADE',
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
columnName: 'title',
|
|
171
|
+
type: 'varchar',
|
|
172
|
+
isPrimaryKey: false,
|
|
173
|
+
isNullable: false,
|
|
174
|
+
isUnique: false,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
columnName: 'amount',
|
|
178
|
+
type: 'decimal',
|
|
179
|
+
isPrimaryKey: false,
|
|
180
|
+
isNullable: true,
|
|
181
|
+
isUnique: false,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
columnName: 'status',
|
|
185
|
+
type: 'varchar',
|
|
186
|
+
isPrimaryKey: false,
|
|
187
|
+
isNullable: true,
|
|
188
|
+
isUnique: false,
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
columnName: 'close_date',
|
|
192
|
+
type: 'date',
|
|
193
|
+
isPrimaryKey: false,
|
|
194
|
+
isNullable: true,
|
|
195
|
+
isUnique: false,
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
columnName: 'created_at',
|
|
199
|
+
type: 'timestamp',
|
|
200
|
+
isPrimaryKey: false,
|
|
201
|
+
isNullable: true,
|
|
202
|
+
isUnique: false,
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
columnName: 'updated_at',
|
|
206
|
+
type: 'timestamp',
|
|
207
|
+
isPrimaryKey: false,
|
|
208
|
+
isNullable: true,
|
|
209
|
+
isUnique: false,
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
tableName: 'activities',
|
|
215
|
+
columns: [
|
|
216
|
+
{ columnName: 'id', type: 'uuid', isPrimaryKey: true, isNullable: false, isUnique: true },
|
|
217
|
+
{
|
|
218
|
+
columnName: 'contact_id',
|
|
219
|
+
type: 'uuid',
|
|
220
|
+
isPrimaryKey: false,
|
|
221
|
+
isNullable: true,
|
|
222
|
+
isUnique: false,
|
|
223
|
+
foreignKey: {
|
|
224
|
+
referenceTable: 'contacts',
|
|
225
|
+
referenceColumn: 'id',
|
|
226
|
+
onDelete: 'CASCADE',
|
|
227
|
+
onUpdate: 'CASCADE',
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
columnName: 'deal_id',
|
|
232
|
+
type: 'uuid',
|
|
233
|
+
isPrimaryKey: false,
|
|
234
|
+
isNullable: true,
|
|
235
|
+
isUnique: false,
|
|
236
|
+
foreignKey: {
|
|
237
|
+
referenceTable: 'deals',
|
|
238
|
+
referenceColumn: 'id',
|
|
239
|
+
onDelete: 'CASCADE',
|
|
240
|
+
onUpdate: 'CASCADE',
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
columnName: 'type',
|
|
245
|
+
type: 'varchar',
|
|
246
|
+
isPrimaryKey: false,
|
|
247
|
+
isNullable: false,
|
|
248
|
+
isUnique: false,
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
columnName: 'subject',
|
|
252
|
+
type: 'varchar',
|
|
253
|
+
isPrimaryKey: false,
|
|
254
|
+
isNullable: false,
|
|
255
|
+
isUnique: false,
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
columnName: 'description',
|
|
259
|
+
type: 'text',
|
|
260
|
+
isPrimaryKey: false,
|
|
261
|
+
isNullable: true,
|
|
262
|
+
isUnique: false,
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
columnName: 'scheduled_at',
|
|
266
|
+
type: 'timestamp',
|
|
267
|
+
isPrimaryKey: false,
|
|
268
|
+
isNullable: true,
|
|
269
|
+
isUnique: false,
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
columnName: 'completed_at',
|
|
273
|
+
type: 'timestamp',
|
|
274
|
+
isPrimaryKey: false,
|
|
275
|
+
isNullable: true,
|
|
276
|
+
isUnique: false,
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
columnName: 'created_at',
|
|
280
|
+
type: 'timestamp',
|
|
281
|
+
isPrimaryKey: false,
|
|
282
|
+
isNullable: true,
|
|
283
|
+
isUnique: false,
|
|
284
|
+
},
|
|
285
|
+
],
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
sql: `-- CRM System Database Schema
|
|
289
|
+
-- A comprehensive CRM system with companies, contacts, deals, and activities
|
|
290
|
+
|
|
291
|
+
-- Companies table
|
|
292
|
+
CREATE TABLE companies (
|
|
293
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
294
|
+
name VARCHAR(255) NOT NULL,
|
|
295
|
+
industry VARCHAR(100),
|
|
296
|
+
website VARCHAR(255),
|
|
297
|
+
phone VARCHAR(50),
|
|
298
|
+
email VARCHAR(255),
|
|
299
|
+
address TEXT,
|
|
300
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
301
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
-- Contacts table
|
|
305
|
+
CREATE TABLE contacts (
|
|
306
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
307
|
+
company_id UUID REFERENCES companies(id) ON UPDATE CASCADE ON DELETE SET NULL,
|
|
308
|
+
first_name VARCHAR(100) NOT NULL,
|
|
309
|
+
last_name VARCHAR(100) NOT NULL,
|
|
310
|
+
email VARCHAR(255) UNIQUE NOT NULL,
|
|
311
|
+
phone VARCHAR(50),
|
|
312
|
+
position VARCHAR(100),
|
|
313
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
314
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
-- Deals table
|
|
318
|
+
CREATE TABLE deals (
|
|
319
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
320
|
+
company_id UUID REFERENCES companies(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
321
|
+
contact_id UUID REFERENCES contacts(id) ON UPDATE CASCADE ON DELETE SET NULL,
|
|
322
|
+
title VARCHAR(255) NOT NULL,
|
|
323
|
+
amount DECIMAL(15, 2),
|
|
324
|
+
status VARCHAR(50) DEFAULT 'open' CHECK (status IN ('open', 'won', 'lost')),
|
|
325
|
+
close_date DATE,
|
|
326
|
+
created_at TIMESTAMP DEFAULT NOW(),
|
|
327
|
+
updated_at TIMESTAMP DEFAULT NOW()
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
-- Activities table
|
|
331
|
+
CREATE TABLE activities (
|
|
332
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
333
|
+
contact_id UUID REFERENCES contacts(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
334
|
+
deal_id UUID REFERENCES deals(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
335
|
+
type VARCHAR(50) NOT NULL CHECK (type IN ('call', 'email', 'meeting', 'note')),
|
|
336
|
+
subject VARCHAR(255) NOT NULL,
|
|
337
|
+
description TEXT,
|
|
338
|
+
scheduled_at TIMESTAMP,
|
|
339
|
+
completed_at TIMESTAMP,
|
|
340
|
+
created_at TIMESTAMP DEFAULT NOW()
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
-- Create indexes for better performance
|
|
344
|
+
CREATE INDEX idx_contacts_company ON contacts(company_id);
|
|
345
|
+
CREATE INDEX idx_contacts_email ON contacts(email);
|
|
346
|
+
CREATE INDEX idx_deals_company ON deals(company_id);
|
|
347
|
+
CREATE INDEX idx_deals_contact ON deals(contact_id);
|
|
348
|
+
CREATE INDEX idx_deals_status ON deals(status);
|
|
349
|
+
CREATE INDEX idx_deals_close_date ON deals(close_date);
|
|
350
|
+
CREATE INDEX idx_activities_contact ON activities(contact_id);
|
|
351
|
+
CREATE INDEX idx_activities_deal ON activities(deal_id);
|
|
352
|
+
CREATE INDEX idx_activities_type ON activities(type);
|
|
353
|
+
CREATE INDEX idx_activities_scheduled ON activities(scheduled_at);
|
|
354
|
+
|
|
355
|
+
-- =======================
|
|
356
|
+
-- ROW LEVEL SECURITY (RLS)
|
|
357
|
+
-- =======================
|
|
358
|
+
|
|
359
|
+
-- Enable RLS on all tables
|
|
360
|
+
ALTER TABLE companies ENABLE ROW LEVEL SECURITY;
|
|
361
|
+
ALTER TABLE contacts ENABLE ROW LEVEL SECURITY;
|
|
362
|
+
ALTER TABLE deals ENABLE ROW LEVEL SECURITY;
|
|
363
|
+
ALTER TABLE activities ENABLE ROW LEVEL SECURITY;
|
|
364
|
+
|
|
365
|
+
-- Policies for companies (allow all operations for authenticated users)
|
|
366
|
+
CREATE POLICY "Allow authenticated users to view companies"
|
|
367
|
+
ON companies FOR SELECT
|
|
368
|
+
TO authenticated
|
|
369
|
+
USING (true);
|
|
370
|
+
|
|
371
|
+
CREATE POLICY "Allow authenticated users to create companies"
|
|
372
|
+
ON companies FOR INSERT
|
|
373
|
+
TO authenticated
|
|
374
|
+
WITH CHECK (true);
|
|
375
|
+
|
|
376
|
+
CREATE POLICY "Allow authenticated users to update companies"
|
|
377
|
+
ON companies FOR UPDATE
|
|
378
|
+
TO authenticated
|
|
379
|
+
USING (true)
|
|
380
|
+
WITH CHECK (true);
|
|
381
|
+
|
|
382
|
+
CREATE POLICY "Allow authenticated users to delete companies"
|
|
383
|
+
ON companies FOR DELETE
|
|
384
|
+
TO authenticated
|
|
385
|
+
USING (true);
|
|
386
|
+
|
|
387
|
+
-- Policies for contacts
|
|
388
|
+
CREATE POLICY "Allow authenticated users to view contacts"
|
|
389
|
+
ON contacts FOR SELECT
|
|
390
|
+
TO authenticated
|
|
391
|
+
USING (true);
|
|
392
|
+
|
|
393
|
+
CREATE POLICY "Allow authenticated users to create contacts"
|
|
394
|
+
ON contacts FOR INSERT
|
|
395
|
+
TO authenticated
|
|
396
|
+
WITH CHECK (true);
|
|
397
|
+
|
|
398
|
+
CREATE POLICY "Allow authenticated users to update contacts"
|
|
399
|
+
ON contacts FOR UPDATE
|
|
400
|
+
TO authenticated
|
|
401
|
+
USING (true)
|
|
402
|
+
WITH CHECK (true);
|
|
403
|
+
|
|
404
|
+
CREATE POLICY "Allow authenticated users to delete contacts"
|
|
405
|
+
ON contacts FOR DELETE
|
|
406
|
+
TO authenticated
|
|
407
|
+
USING (true);
|
|
408
|
+
|
|
409
|
+
-- Policies for deals
|
|
410
|
+
CREATE POLICY "Allow authenticated users to view deals"
|
|
411
|
+
ON deals FOR SELECT
|
|
412
|
+
TO authenticated
|
|
413
|
+
USING (true);
|
|
414
|
+
|
|
415
|
+
CREATE POLICY "Allow authenticated users to create deals"
|
|
416
|
+
ON deals FOR INSERT
|
|
417
|
+
TO authenticated
|
|
418
|
+
WITH CHECK (true);
|
|
419
|
+
|
|
420
|
+
CREATE POLICY "Allow authenticated users to update deals"
|
|
421
|
+
ON deals FOR UPDATE
|
|
422
|
+
TO authenticated
|
|
423
|
+
USING (true)
|
|
424
|
+
WITH CHECK (true);
|
|
425
|
+
|
|
426
|
+
CREATE POLICY "Allow authenticated users to delete deals"
|
|
427
|
+
ON deals FOR DELETE
|
|
428
|
+
TO authenticated
|
|
429
|
+
USING (true);
|
|
430
|
+
|
|
431
|
+
-- Policies for activities
|
|
432
|
+
CREATE POLICY "Allow authenticated users to view activities"
|
|
433
|
+
ON activities FOR SELECT
|
|
434
|
+
TO authenticated
|
|
435
|
+
USING (true);
|
|
436
|
+
|
|
437
|
+
CREATE POLICY "Allow authenticated users to create activities"
|
|
438
|
+
ON activities FOR INSERT
|
|
439
|
+
TO authenticated
|
|
440
|
+
WITH CHECK (true);
|
|
441
|
+
|
|
442
|
+
CREATE POLICY "Allow authenticated users to update activities"
|
|
443
|
+
ON activities FOR UPDATE
|
|
444
|
+
TO authenticated
|
|
445
|
+
USING (true)
|
|
446
|
+
WITH CHECK (true);
|
|
447
|
+
|
|
448
|
+
CREATE POLICY "Allow authenticated users to delete activities"
|
|
449
|
+
ON activities FOR DELETE
|
|
450
|
+
TO authenticated
|
|
451
|
+
USING (true);
|
|
452
|
+
|
|
453
|
+
-- =======================
|
|
454
|
+
-- SEED DATA
|
|
455
|
+
-- =======================
|
|
456
|
+
|
|
457
|
+
-- Insert sample companies
|
|
458
|
+
INSERT INTO companies (name, industry, website, phone, email, address) VALUES
|
|
459
|
+
('Acme Corporation', 'Technology', 'https://acme-corp.example', '+1-555-0100', 'info@acme-corp.example', '123 Tech Street, San Francisco, CA 94105'),
|
|
460
|
+
('TechStart Inc', 'Software', 'https://techstart.example', '+1-555-0101', 'contact@techstart.example', '456 Innovation Ave, Austin, TX 78701'),
|
|
461
|
+
('Global Solutions Ltd', 'Consulting', 'https://globalsolutions.example', '+1-555-0102', 'hello@globalsolutions.example', '789 Business Blvd, New York, NY 10001'),
|
|
462
|
+
('Innovation Labs', 'Research', 'https://innovationlabs.example', '+1-555-0103', 'info@innovationlabs.example', '321 Science Park, Boston, MA 02101'),
|
|
463
|
+
('Enterprise Systems Co', 'Enterprise Software', 'https://enterprisesys.example', '+1-555-0104', 'sales@enterprisesys.example', '654 Commerce Dr, Seattle, WA 98101');
|
|
464
|
+
|
|
465
|
+
-- Insert sample contacts
|
|
466
|
+
INSERT INTO contacts (company_id, first_name, last_name, email, phone, position) VALUES
|
|
467
|
+
((SELECT id FROM companies WHERE name = 'Acme Corporation'), 'John', 'Smith', 'john.smith@acme-corp.example', '+1-555-0200', 'CEO'),
|
|
468
|
+
((SELECT id FROM companies WHERE name = 'Acme Corporation'), 'Sarah', 'Johnson', 'sarah.johnson@acme-corp.example', '+1-555-0201', 'CTO'),
|
|
469
|
+
((SELECT id FROM companies WHERE name = 'TechStart Inc'), 'Michael', 'Williams', 'michael.williams@techstart.example', '+1-555-0202', 'Founder'),
|
|
470
|
+
((SELECT id FROM companies WHERE name = 'TechStart Inc'), 'Emily', 'Brown', 'emily.brown@techstart.example', '+1-555-0203', 'VP of Sales'),
|
|
471
|
+
((SELECT id FROM companies WHERE name = 'Global Solutions Ltd'), 'David', 'Davis', 'david.davis@globalsolutions.example', '+1-555-0204', 'Managing Partner'),
|
|
472
|
+
((SELECT id FROM companies WHERE name = 'Innovation Labs'), 'Jennifer', 'Miller', 'jennifer.miller@innovationlabs.example', '+1-555-0205', 'Director of Research'),
|
|
473
|
+
((SELECT id FROM companies WHERE name = 'Innovation Labs'), 'Robert', 'Wilson', 'robert.wilson@innovationlabs.example', '+1-555-0206', 'Senior Scientist'),
|
|
474
|
+
((SELECT id FROM companies WHERE name = 'Enterprise Systems Co'), 'Lisa', 'Anderson', 'lisa.anderson@enterprisesys.example', '+1-555-0207', 'VP of Sales'),
|
|
475
|
+
((SELECT id FROM companies WHERE name = 'Enterprise Systems Co'), 'James', 'Taylor', 'james.taylor@enterprisesys.example', '+1-555-0208', 'Account Manager');
|
|
476
|
+
|
|
477
|
+
-- Insert sample deals
|
|
478
|
+
INSERT INTO deals (company_id, contact_id, title, amount, status, close_date) VALUES
|
|
479
|
+
((SELECT id FROM companies WHERE name = 'Acme Corporation'), (SELECT id FROM contacts WHERE email = 'john.smith@acme-corp.example'), 'Enterprise License Agreement', 150000.00, 'won', '2025-10-15'),
|
|
480
|
+
((SELECT id FROM companies WHERE name = 'TechStart Inc'), (SELECT id FROM contacts WHERE email = 'emily.brown@techstart.example'), 'Cloud Infrastructure Setup', 75000.00, 'open', '2025-12-01'),
|
|
481
|
+
((SELECT id FROM companies WHERE name = 'Global Solutions Ltd'), (SELECT id FROM contacts WHERE email = 'david.davis@globalsolutions.example'), 'Consulting Services Package', 120000.00, 'open', '2025-11-20'),
|
|
482
|
+
((SELECT id FROM companies WHERE name = 'Innovation Labs'), (SELECT id FROM contacts WHERE email = 'jennifer.miller@innovationlabs.example'), 'Research Partnership', 200000.00, 'won', '2025-09-30'),
|
|
483
|
+
((SELECT id FROM companies WHERE name = 'Enterprise Systems Co'), (SELECT id FROM contacts WHERE email = 'lisa.anderson@enterprisesys.example'), 'Software Integration Project', 95000.00, 'open', '2025-12-15'),
|
|
484
|
+
((SELECT id FROM companies WHERE name = 'Acme Corporation'), (SELECT id FROM contacts WHERE email = 'sarah.johnson@acme-corp.example'), 'Technical Support Contract', 45000.00, 'lost', '2025-10-01'),
|
|
485
|
+
((SELECT id FROM companies WHERE name = 'TechStart Inc'), (SELECT id FROM contacts WHERE email = 'michael.williams@techstart.example'), 'Custom Development', 180000.00, 'won', '2025-10-20');
|
|
486
|
+
|
|
487
|
+
-- Insert sample activities
|
|
488
|
+
INSERT INTO activities (contact_id, deal_id, type, subject, description, scheduled_at, completed_at) VALUES
|
|
489
|
+
((SELECT id FROM contacts WHERE email = 'john.smith@acme-corp.example'),
|
|
490
|
+
(SELECT id FROM deals WHERE title = 'Enterprise License Agreement'),
|
|
491
|
+
'meeting', 'Initial Discovery Call', 'Discussed requirements and project scope', '2025-09-15 10:00:00', '2025-09-15 11:00:00'),
|
|
492
|
+
|
|
493
|
+
((SELECT id FROM contacts WHERE email = 'emily.brown@techstart.example'),
|
|
494
|
+
(SELECT id FROM deals WHERE title = 'Cloud Infrastructure Setup'),
|
|
495
|
+
'email', 'Proposal Follow-up', 'Sent detailed proposal and pricing', '2025-10-20 14:30:00', '2025-10-20 14:30:00'),
|
|
496
|
+
|
|
497
|
+
((SELECT id FROM contacts WHERE email = 'david.davis@globalsolutions.example'),
|
|
498
|
+
(SELECT id FROM deals WHERE title = 'Consulting Services Package'),
|
|
499
|
+
'call', 'Budget Discussion', 'Reviewed budget constraints and timeline', '2025-10-25 15:00:00', '2025-10-25 15:45:00'),
|
|
500
|
+
|
|
501
|
+
((SELECT id FROM contacts WHERE email = 'jennifer.miller@innovationlabs.example'),
|
|
502
|
+
(SELECT id FROM deals WHERE title = 'Research Partnership'),
|
|
503
|
+
'meeting', 'Contract Signing', 'Finalized partnership agreement', '2025-09-28 13:00:00', '2025-09-28 14:30:00'),
|
|
504
|
+
|
|
505
|
+
((SELECT id FROM contacts WHERE email = 'lisa.anderson@enterprisesys.example'),
|
|
506
|
+
(SELECT id FROM deals WHERE title = 'Software Integration Project'),
|
|
507
|
+
'meeting', 'Technical Requirements Meeting', 'Gathering technical specifications', '2025-11-12 10:00:00', NULL),
|
|
508
|
+
|
|
509
|
+
((SELECT id FROM contacts WHERE email = 'sarah.johnson@acme-corp.example'),
|
|
510
|
+
NULL,
|
|
511
|
+
'call', 'Quarterly Check-in', 'Regular relationship building call', '2025-11-05 11:00:00', NULL),
|
|
512
|
+
|
|
513
|
+
((SELECT id FROM contacts WHERE email = 'michael.williams@techstart.example'),
|
|
514
|
+
(SELECT id FROM deals WHERE title = 'Custom Development'),
|
|
515
|
+
'email', 'Project Kickoff Details', 'Sent project timeline and milestones', '2025-10-22 09:00:00', '2025-10-22 09:00:00'),
|
|
516
|
+
|
|
517
|
+
((SELECT id FROM contacts WHERE email = 'robert.wilson@innovationlabs.example'),
|
|
518
|
+
NULL,
|
|
519
|
+
'note', 'Conference Networking', 'Met at Tech Conference 2025, interested in AI solutions', '2025-10-18 16:00:00', '2025-10-18 16:00:00'),
|
|
520
|
+
|
|
521
|
+
((SELECT id FROM contacts WHERE email = 'james.taylor@enterprisesys.example'),
|
|
522
|
+
(SELECT id FROM deals WHERE title = 'Software Integration Project'),
|
|
523
|
+
'meeting', 'Demo Presentation', 'Product demonstration scheduled', '2025-11-18 14:00:00', NULL),
|
|
524
|
+
|
|
525
|
+
((SELECT id FROM contacts WHERE email = 'emily.brown@techstart.example'),
|
|
526
|
+
(SELECT id FROM deals WHERE title = 'Cloud Infrastructure Setup'),
|
|
527
|
+
'call', 'Security Requirements Review', 'Discuss compliance and security needs', '2025-11-08 10:30:00', NULL);`,
|
|
528
|
+
};
|