From e6cb6454db375c66d4466071289706449f76028f Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 2 Mar 2025 00:26:59 -0600 Subject: [PATCH] Revert "Merge branch 'canary' into kucherenko/canary" This reverts commit 819822f30b53f94246f1800b24a7cb6adff10169, reversing changes made to bda9b05134eac5da13d3ac22c3316e3a2727c6cb. --- .circleci/config.yml | 119 + .github/sponsors/openalternative.png | Bin 4170 -> 0 bytes .github/sponsors/synexa.png | Bin 42254 -> 0 bytes .github/workflows/create-pr.yml | 83 - .github/workflows/deploy.yml | 9 +- .github/workflows/dokploy.yml | 161 - .github/workflows/monitoring.yml | 118 - .gitignore | 3 - Dockerfile | 2 +- Dockerfile.cloud | 2 +- Dockerfile.monitoring | 41 - Dockerfile.schedule | 2 +- Dockerfile.server | 2 +- README.md | 5 - apps/api/src/index.ts | 2 +- apps/api/src/utils.ts | 2 +- .../__test__/compose/config/config.test.ts | 2 +- .../compose/network/network-root.test.ts | 23 + .../compose/secrets/secret-root.test.ts | 2 +- .../__test__/compose/volume/volume.test.ts | 6 +- apps/dokploy/__test__/drop/drop.test.test.ts | 2 +- .../server/update-server-config.test.ts | 49 +- apps/dokploy/__test__/traefik/traefik.test.ts | 2 +- apps/dokploy/components/auth/login-2fa.tsx | 132 + .../cluster/modify-swarm-settings.tsx | 2 +- .../cluster/show-cluster-settings.tsx | 1 + .../advanced/general/add-command.tsx | 1 + .../application/advanced/ports/show-port.tsx | 1 + .../advanced/redirects/show-redirects.tsx | 1 + .../advanced/security/show-security.tsx | 1 + .../application/advanced/show-resources.tsx | 65 +- .../advanced/traefik/show-traefik-config.tsx | 1 + .../advanced/volumes/show-volumes.tsx | 28 +- .../advanced/volumes/update-volume.tsx | 4 +- .../application/deployments/refresh-token.tsx | 1 + .../deployments/show-deployment.tsx | 25 +- .../deployments/show-deployments.tsx | 14 +- .../application/domains/show-domains.tsx | 97 +- .../environment/show-enviroment.tsx | 2 +- .../application/environment/show.tsx | 2 +- .../generic/save-bitbucket-provider.tsx | 10 +- .../general/generic/save-github-provider.tsx | 9 +- .../general/generic/save-gitlab-provider.tsx | 9 +- .../application/general/generic/show.tsx | 2 +- .../dashboard/application/general/show.tsx | 4 +- .../show-preview-builds.tsx | 12 +- .../show-preview-deployments.tsx | 1 + .../show-preview-settings.tsx | 2 +- .../application/update-application.tsx | 2 +- .../compose/advanced/add-command.tsx | 1 + ...{delete-service.tsx => delete-compose.tsx} | 108 +- .../deployments/refresh-token-compose.tsx | 1 + .../deployments/show-deployment-compose.tsx | 18 +- .../deployments/show-deployments-compose.tsx | 13 +- .../compose/domains/show-domains.tsx | 110 +- .../compose/general/compose-file-editor.tsx | 9 +- .../save-bitbucket-provider-compose.tsx | 10 +- .../generic/save-github-provider-compose.tsx | 9 +- .../generic/save-gitlab-provider-compose.tsx | 9 +- .../compose/general/generic/show.tsx | 2 +- .../compose/general/isolated-deployment.tsx | 191 - .../compose/general/randomize-compose.tsx | 243 +- .../general/show-converted-compose.tsx | 2 +- .../compose/general/show-utilities.tsx | 46 - .../dashboard/compose/general/show.tsx | 1 + .../dashboard/compose/logs/show.tsx | 2 +- .../monitoring/show.tsx} | 33 +- .../database/backups/show-backups.tsx | 3 +- .../database/backups/update-backup.tsx | 2 +- .../docker/logs/since-logs-filter.tsx | 1 + .../dashboard/docker/logs/terminal-line.tsx | 22 +- .../components/dashboard/docker/logs/utils.ts | 12 +- .../dashboard/docker/show/colums.tsx | 1 + .../dashboard/docker/show/show-containers.tsx | 28 +- .../file-system/show-traefik-system.tsx | 3 +- .../show-external-mariadb-credentials.tsx | 2 +- .../mariadb/general/show-general-mariadb.tsx | 2 +- .../show-internal-mariadb-credentials.tsx | 1 + .../dashboard/mariadb/update-mariadb.tsx | 2 +- .../show-external-mongo-credentials.tsx | 2 +- .../mongo/general/show-general-mongo.tsx | 2 +- .../show-internal-mongo-credentials.tsx | 1 + .../docker-block-chart.tsx | 10 +- .../container => docker}/docker-cpu-chart.tsx | 8 +- .../docker-disk-chart.tsx | 2 +- .../docker-memory-chart.tsx | 14 +- .../docker-network-chart.tsx | 15 +- .../dashboard/monitoring/docker/show.tsx | 314 + .../show-free-compose-monitoring.tsx | 130 - .../show-free-container-monitoring.tsx | 310 - .../paid/container/container-block-chart.tsx | 181 - .../paid/container/container-cpu-chart.tsx | 128 - .../paid/container/container-memory-chart.tsx | 149 - .../container/container-network-chart.tsx | 186 - .../show-paid-container-monitoring.tsx | 258 - .../monitoring/paid/servers/cpu-chart.tsx | 115 - .../monitoring/paid/servers/disk-chart.tsx | 120 - .../monitoring/paid/servers/memory-chart.tsx | 128 - .../monitoring/paid/servers/network-chart.tsx | 145 - .../paid/servers/show-paid-monitoring.tsx | 275 - .../dashboard/monitoring/web-server/show.tsx | 10 + .../show-external-mysql-credentials.tsx | 2 +- .../mysql/general/show-general-mysql.tsx | 2 +- .../show-internal-mysql-credentials.tsx | 1 + .../dashboard/mysql/update-mysql.tsx | 2 +- .../organization/handle-organization.tsx | 182 - .../postgres/advanced/show-custom-command.tsx | 4 +- .../show-external-postgres-credentials.tsx | 2 +- .../general/show-general-postgres.tsx | 2 +- .../show-internal-postgres-credentials.tsx | 1 + .../dashboard/postgres/update-postgres.tsx | 2 +- .../dashboard/project/add-application.tsx | 13 +- .../dashboard/project/add-compose.tsx | 10 +- .../dashboard/project/add-database.tsx | 14 +- .../dashboard/project/add-template.tsx | 24 +- .../dashboard/projects/handle-project.tsx | 14 +- .../projects/project-environment.tsx | 3 +- .../components/dashboard/projects/show.tsx | 134 +- .../show-external-redis-credentials.tsx | 4 +- .../redis/general/show-general-redis.tsx | 3 +- .../show-internal-redis-credentials.tsx | 1 + .../dashboard/redis/update-redis.tsx | 2 +- .../components/dashboard/requests/columns.tsx | 3 +- .../dashboard/requests/requests-table.tsx | 4 +- .../dashboard/requests/show-requests.tsx | 1 + .../components/dashboard/search-command.tsx | 14 +- .../dashboard/settings/api/add-api-key.tsx | 468 -- .../dashboard/settings/api/show-api-keys.tsx | 142 - .../settings/billing/show-billing.tsx | 20 +- .../settings/billing/show-welcome-dokploy.tsx | 9 +- .../settings/certificates/add-certificate.tsx | 11 +- .../certificates/show-certificates.tsx | 2 +- .../settings/cluster/nodes/show-nodes.tsx | 4 +- .../cluster/registry/handle-registry.tsx | 2 +- .../git/bitbucket/add-bitbucket-provider.tsx | 12 +- .../git/bitbucket/edit-bitbucket-provider.tsx | 2 +- .../git/github/add-github-provider.tsx | 10 +- .../git/gitlab/add-gitlab-provider.tsx | 2 +- .../git/gitlab/edit-gitlab-provider.tsx | 2 +- .../settings/git/show-git-providers.tsx | 2 +- .../notifications/handle-notifications.tsx | 60 +- .../notifications/show-notifications.tsx | 4 +- .../settings/profile/disable-2fa.tsx | 132 +- .../dashboard/settings/profile/enable-2fa.tsx | 362 +- .../settings/profile/generate-token.tsx | 77 + .../settings/profile/profile-form.tsx | 23 +- .../settings/profile/remove-self-account.tsx | 138 + .../servers/actions/show-dokploy-actions.tsx | 1 + .../servers/actions/show-storage-actions.tsx | 3 +- .../servers/actions/show-traefik-actions.tsx | 14 +- .../servers/actions/toggle-docker-cleanup.tsx | 6 +- .../settings/servers/edit-script.tsx | 2 +- .../settings/servers/gpu-support.tsx | 5 +- .../settings/servers/handle-servers.tsx | 2 +- .../settings/servers/security-audit.tsx | 11 +- .../settings/servers/setup-monitoring.tsx | 634 --- .../settings/servers/setup-server.tsx | 24 +- .../servers/show-docker-containers-modal.tsx | 8 +- .../servers/show-monitoring-modal.tsx | 31 - .../settings/servers/show-servers.tsx | 11 - .../servers/show-swarm-overview-modal.tsx | 9 +- .../settings/servers/validate-server.tsx | 2 +- .../servers/welcome-stripe/create-server.tsx | 6 +- .../servers/welcome-stripe/create-ssh-key.tsx | 1 - .../servers/welcome-stripe/verify.tsx | 9 + .../settings/ssh-keys/handle-ssh-keys.tsx | 59 +- .../settings/users/add-permissions.tsx | 6 +- .../{add-invitation.tsx => add-user.tsx} | 93 +- .../settings/users/show-invitations.tsx | 208 - .../dashboard/settings/users/show-users.tsx | 195 +- .../dashboard/settings/web-domain.tsx | 14 +- .../dashboard/settings/web-server.tsx | 11 +- .../web-server/local-server-config.tsx | 1 + .../web-server/manage-traefik-ports.tsx | 2 +- .../settings/web-server/show-modal-logs.tsx | 1 + .../settings/web-server/terminal.tsx | 6 +- .../settings/web-server/update-server-ip.tsx | 13 +- .../settings/web-server/update-server.tsx | 2 + .../dashboard/swarm/applications/columns.tsx | 3 +- .../swarm/applications/data-table.tsx | 2 +- .../swarm/applications/show-applications.tsx | 1 + .../dashboard/swarm/details/details-card.tsx | 2 +- .../swarm/details/show-node-config.tsx | 2 +- .../dashboard/swarm/monitoring-card.tsx | 2 +- .../components/icons/data-tools-icons.tsx | 1 + .../components/layouts/dashboard-layout.tsx | 6 +- .../components/layouts/onboarding-layout.tsx | 25 +- .../components/layouts/project-layout.tsx | 6 +- apps/dokploy/components/layouts/side.tsx | 1109 ++-- .../components/layouts/update-server.tsx | 2 +- apps/dokploy/components/layouts/user-nav.tsx | 69 +- .../components/shared/breadcrumb-sidebar.tsx | 6 +- .../components/shared/dialog-action.tsx | 1 + .../dokploy/components/shared/drawer-logs.tsx | 11 +- apps/dokploy/components/shared/logo.tsx | 15 +- apps/dokploy/components/ui/chart.tsx | 2 +- apps/dokploy/components/ui/file-tree.tsx | 2 +- apps/dokploy/components/ui/modeToggle.tsx | 1 + apps/dokploy/components/ui/sidebar.tsx | 4 +- .../drizzle/0057_tricky_living_tribunal.sql | 3 - .../drizzle/0058_brown_sharon_carter.sql | 1 - .../drizzle/0059_striped_bill_hollister.sql | 1 - .../drizzle/0060_disable-aggressive-cache.sql | 3 - apps/dokploy/drizzle/0061_many_molten_man.sql | 4 - .../drizzle/0062_slippery_white_tiger.sql | 2 - .../drizzle/0063_panoramic_dreadnoughts.sql | 2 - .../drizzle/0064_previous_agent_brand.sql | 1 - apps/dokploy/drizzle/0065_daily_zaladane.sql | 1 - apps/dokploy/drizzle/0066_yielding_echo.sql | 688 --- .../drizzle/0067_condemned_sugar_man.sql | 1 - apps/dokploy/drizzle/meta/0000_snapshot.json | 108 +- apps/dokploy/drizzle/meta/0001_snapshot.json | 108 +- apps/dokploy/drizzle/meta/0002_snapshot.json | 108 +- apps/dokploy/drizzle/meta/0003_snapshot.json | 108 +- apps/dokploy/drizzle/meta/0004_snapshot.json | 108 +- apps/dokploy/drizzle/meta/0005_snapshot.json | 113 +- apps/dokploy/drizzle/meta/0006_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0007_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0008_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0009_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0010_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0011_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0012_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0013_snapshot.json | 337 +- apps/dokploy/drizzle/meta/0014_snapshot.json | 360 +- apps/dokploy/drizzle/meta/0015_snapshot.json | 360 +- apps/dokploy/drizzle/meta/0016_snapshot.json | 360 +- apps/dokploy/drizzle/meta/0017_snapshot.json | 360 +- apps/dokploy/drizzle/meta/0018_snapshot.json | 360 +- apps/dokploy/drizzle/meta/0019_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0020_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0021_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0022_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0023_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0024_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0025_snapshot.json | 409 +- apps/dokploy/drizzle/meta/0026_snapshot.json | 426 +- apps/dokploy/drizzle/meta/0027_snapshot.json | 426 +- apps/dokploy/drizzle/meta/0028_snapshot.json | 426 +- apps/dokploy/drizzle/meta/0029_snapshot.json | 426 +- apps/dokploy/drizzle/meta/0030_snapshot.json | 426 +- apps/dokploy/drizzle/meta/0031_snapshot.json | 432 +- apps/dokploy/drizzle/meta/0032_snapshot.json | 432 +- apps/dokploy/drizzle/meta/0033_snapshot.json | 512 +- apps/dokploy/drizzle/meta/0034_snapshot.json | 512 +- apps/dokploy/drizzle/meta/0035_snapshot.json | 512 +- apps/dokploy/drizzle/meta/0036_snapshot.json | 512 +- apps/dokploy/drizzle/meta/0037_snapshot.json | 577 +- apps/dokploy/drizzle/meta/0038_snapshot.json | 577 +- apps/dokploy/drizzle/meta/0039_snapshot.json | 589 +- apps/dokploy/drizzle/meta/0040_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0041_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0042_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0043_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0044_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0045_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0046_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0047_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0048_snapshot.json | 601 +- apps/dokploy/drizzle/meta/0049_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0050_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0051_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0052_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0053_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0054_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0055_snapshot.json | 634 +-- apps/dokploy/drizzle/meta/0056_snapshot.json | 645 +-- apps/dokploy/drizzle/meta/0057_snapshot.json | 737 ++- apps/dokploy/drizzle/meta/0058_snapshot.json | 4450 --------------- apps/dokploy/drizzle/meta/0059_snapshot.json | 4450 --------------- apps/dokploy/drizzle/meta/0060_snapshot.json | 4450 --------------- apps/dokploy/drizzle/meta/0061_snapshot.json | 4478 --------------- apps/dokploy/drizzle/meta/0062_snapshot.json | 4478 --------------- apps/dokploy/drizzle/meta/0063_snapshot.json | 4478 --------------- apps/dokploy/drizzle/meta/0064_snapshot.json | 4485 --------------- apps/dokploy/drizzle/meta/0065_snapshot.json | 4485 --------------- apps/dokploy/drizzle/meta/0066_snapshot.json | 5037 ---------------- apps/dokploy/drizzle/meta/0067_snapshot.json | 5042 ----------------- apps/dokploy/drizzle/meta/_journal.json | 74 +- apps/dokploy/hooks/useLocalStorage.tsx | 33 - apps/dokploy/lib/auth-client.ts | 9 - apps/dokploy/lib/languages.ts | 2 - apps/dokploy/lib/utils.ts | 15 - apps/dokploy/migrate.ts | 149 - apps/dokploy/package.json | 26 +- apps/dokploy/pages/_error.tsx | 2 +- .../accept-invitation/[accept-invitation].tsx | 30 - apps/dokploy/pages/api/[...trpc].ts | 10 +- apps/dokploy/pages/api/auth/[...all].ts | 7 - apps/dokploy/pages/api/deploy/github.ts | 148 +- apps/dokploy/pages/api/health.ts | 2 +- .../pages/api/providers/github/setup.ts | 25 +- apps/dokploy/pages/api/stripe/webhook.ts | 116 +- apps/dokploy/pages/confirm-email.tsx | 96 + apps/dokploy/pages/dashboard/docker.tsx | 22 +- apps/dokploy/pages/dashboard/monitoring.tsx | 85 +- .../pages/dashboard/project/[projectId].tsx | 345 +- .../services/application/[applicationId].tsx | 136 +- .../services/compose/[composeId].tsx | 128 +- .../services/mariadb/[mariadbId].tsx | 129 +- .../[projectId]/services/mongo/[mongoId].tsx | 126 +- .../[projectId]/services/mysql/[mysqlId].tsx | 127 +- .../services/postgres/[postgresId].tsx | 126 +- .../[projectId]/services/redis/[redisId].tsx | 125 +- apps/dokploy/pages/dashboard/projects.tsx | 11 +- apps/dokploy/pages/dashboard/requests.tsx | 6 +- .../pages/dashboard/settings/billing.tsx | 15 +- .../pages/dashboard/settings/certificates.tsx | 12 +- .../pages/dashboard/settings/cluster.tsx | 12 +- .../pages/dashboard/settings/destinations.tsx | 12 +- .../dashboard/settings/git-providers.tsx | 22 +- .../pages/dashboard/settings/index.tsx | 219 - .../dashboard/settings/notifications.tsx | 12 +- .../pages/dashboard/settings/profile.tsx | 34 +- .../pages/dashboard/settings/registry.tsx | 12 +- .../pages/dashboard/settings/server.tsx | 56 +- .../pages/dashboard/settings/servers.tsx | 12 +- .../pages/dashboard/settings/ssh-keys.tsx | 21 +- .../pages/dashboard/settings/users.tsx | 15 +- apps/dokploy/pages/dashboard/swarm.tsx | 26 +- apps/dokploy/pages/dashboard/traefik.tsx | 22 +- apps/dokploy/pages/index.tsx | 425 +- apps/dokploy/pages/invitation.tsx | 336 +- apps/dokploy/pages/register.tsx | 73 +- apps/dokploy/pages/reset-password.tsx | 85 +- apps/dokploy/pages/send-reset-password.tsx | 52 +- apps/dokploy/pages/swagger.tsx | 50 +- apps/dokploy/public/locales/ml/common.json | 1 - apps/dokploy/public/locales/ml/settings.json | 58 - apps/dokploy/public/locales/ru/settings.json | 24 +- apps/dokploy/public/locales/uk/common.json | 1 - apps/dokploy/public/locales/uk/settings.json | 58 - apps/dokploy/public/templates/alist.svg | 10 - apps/dokploy/public/templates/answer.png | Bin 3775 -> 0 bytes apps/dokploy/public/templates/appwrite.svg | 9 - apps/dokploy/public/templates/convex.svg | 5 - apps/dokploy/public/templates/erpnext.svg | 5 - .../dokploy/public/templates/evolutionapi.png | Bin 17605 -> 0 bytes apps/dokploy/public/templates/formbricks.png | Bin 74620 -> 0 bytes apps/dokploy/public/templates/frappe-hr.svg | 5 - apps/dokploy/public/templates/glance.png | Bin 7946 -> 0 bytes apps/dokploy/public/templates/homarr.png | Bin 3408 -> 0 bytes apps/dokploy/public/templates/linkwarden.png | Bin 80831 -> 0 bytes apps/dokploy/public/templates/mailpit.svg | 6 - apps/dokploy/public/templates/maybe.svg | 17 - apps/dokploy/public/templates/outline.png | Bin 2158 -> 0 bytes apps/dokploy/public/templates/pocket-id.svg | 1 - apps/dokploy/public/templates/registry.png | Bin 28962 -> 0 bytes apps/dokploy/public/templates/shlink.svg | 8 - apps/dokploy/public/templates/spacedrive.png | Bin 326880 -> 0 bytes apps/dokploy/public/templates/superset.svg | 9 - apps/dokploy/public/templates/trilium.png | Bin 24381 -> 0 bytes apps/dokploy/public/templates/twenty.svg | 16 +- apps/dokploy/public/templates/wikijs.svg | 119 - apps/dokploy/reset-password.ts | 13 +- apps/dokploy/server/api/root.ts | 3 +- apps/dokploy/server/api/routers/admin.ts | 136 +- .../dokploy/server/api/routers/application.ts | 111 +- apps/dokploy/server/api/routers/auth.ts | 835 +-- apps/dokploy/server/api/routers/backup.ts | 33 +- apps/dokploy/server/api/routers/bitbucket.ts | 41 +- .../dokploy/server/api/routers/certificate.ts | 9 +- apps/dokploy/server/api/routers/cluster.ts | 4 +- apps/dokploy/server/api/routers/compose.ts | 112 +- apps/dokploy/server/api/routers/deployment.ts | 8 +- .../dokploy/server/api/routers/destination.ts | 17 +- apps/dokploy/server/api/routers/domain.ts | 43 +- .../server/api/routers/git-provider.ts | 18 +- apps/dokploy/server/api/routers/github.ts | 42 +- apps/dokploy/server/api/routers/gitlab.ts | 45 +- apps/dokploy/server/api/routers/mariadb.ts | 64 +- apps/dokploy/server/api/routers/mongo.ts | 65 +- apps/dokploy/server/api/routers/mysql.ts | 65 +- .../server/api/routers/notification.ts | 138 +- .../server/api/routers/organization.ts | 148 - apps/dokploy/server/api/routers/port.ts | 8 +- apps/dokploy/server/api/routers/postgres.ts | 94 +- .../server/api/routers/preview-deployment.ts | 14 +- apps/dokploy/server/api/routers/project.ts | 82 +- apps/dokploy/server/api/routers/redirects.ts | 16 +- apps/dokploy/server/api/routers/redis.ts | 60 +- apps/dokploy/server/api/routers/registry.ts | 18 +- apps/dokploy/server/api/routers/security.ts | 16 +- apps/dokploy/server/api/routers/server.ts | 165 +- apps/dokploy/server/api/routers/settings.ts | 101 +- apps/dokploy/server/api/routers/ssh-key.ts | 15 +- apps/dokploy/server/api/routers/stripe.ts | 74 +- apps/dokploy/server/api/routers/user.ts | 338 +- apps/dokploy/server/api/trpc.ts | 51 +- apps/dokploy/server/db/seed.ts | 8 +- apps/dokploy/server/utils/backup.ts | 22 - apps/dokploy/server/utils/docker.ts | 2 +- .../server/wss/docker-container-logs.ts | 4 +- .../server/wss/docker-container-terminal.ts | 14 +- apps/dokploy/server/wss/docker-stats.ts | 19 +- apps/dokploy/server/wss/drawer-logs.ts | 9 +- apps/dokploy/server/wss/listen-deployment.ts | 6 +- apps/dokploy/server/wss/terminal.ts | 18 +- apps/dokploy/styles/globals.css | 7 - .../templates/activepieces/docker-compose.yml | 9 +- .../templates/alist/docker-compose.yml | 14 - apps/dokploy/templates/alist/index.ts | 22 - .../templates/answer/docker-compose.yml | 30 - apps/dokploy/templates/answer/index.ts | 33 - apps/dokploy/templates/appsmith/index.ts | 2 +- .../templates/appwrite/docker-compose.yml | 887 --- apps/dokploy/templates/appwrite/index.ts | 153 - .../templates/aptabase/docker-compose.yml | 6 +- apps/dokploy/templates/blender/index.ts | 2 +- .../templates/budibase/docker-compose.yml | 21 +- .../templates/calcom/docker-compose.yml | 3 +- .../templates/chatwoot/docker-compose.yml | 6 +- .../templates/checkmate/docker-compose.yml | 11 +- apps/dokploy/templates/cloudflared/index.ts | 2 +- .../templates/coder/docker-compose.yml | 6 +- .../templates/convex/docker-compose.yml | 37 - apps/dokploy/templates/convex/index.ts | 38 - .../templates/directus/docker-compose.yml | 6 +- .../discord-tickets/docker-compose.yml | 6 +- .../templates/discourse/docker-compose.yml | 12 +- .../templates/docmost/docker-compose.yml | 9 +- .../templates/documenso/docker-compose.yml | 3 +- .../templates/drawio/docker-compose.yml | 9 +- apps/dokploy/templates/drawio/index.ts | 2 +- .../templates/erpnext/docker-compose.yml | 354 -- apps/dokploy/templates/erpnext/index.ts | 39 - .../templates/evolutionapi/docker-compose.yml | 58 - apps/dokploy/templates/evolutionapi/index.ts | 59 - .../templates/excalidraw/docker-compose.yml | 3 +- apps/dokploy/templates/excalidraw/index.ts | 1 + .../templates/formbricks/docker-compose.yml | 37 - apps/dokploy/templates/formbricks/index.ts | 38 - .../templates/frappe-hr/docker-compose.yml | 354 -- apps/dokploy/templates/frappe-hr/index.ts | 39 - .../templates/ghost/docker-compose.yml | 3 +- apps/dokploy/templates/ghost/index.ts | 1 + .../templates/gitea/docker-compose.yml | 6 +- .../templates/glance/docker-compose.yml | 11 - apps/dokploy/templates/glance/index.ts | 108 - .../templates/glitchtip/docker-compose.yml | 12 +- .../dokploy/templates/glpi/docker-compose.yml | 6 +- .../templates/hi-events/docker-compose.yml | 3 +- .../templates/homarr/docker-compose.yml | 11 - apps/dokploy/templates/homarr/index.ts | 27 - .../dokploy/templates/huly/docker-compose.yml | 36 +- .../templates/immich/docker-compose.yml | 12 +- apps/dokploy/templates/immich/index.ts | 2 +- .../templates/infisical/docker-compose.yml | 12 +- .../templates/invoiceshelf/docker-compose.yml | 6 +- .../templates/kimai/docker-compose.yml | 6 +- .../templates/langflow/docker-compose.yml | 6 +- .../templates/linkwarden/docker-compose.yml | 40 - apps/dokploy/templates/linkwarden/index.ts | 33 - .../templates/listmonk/docker-compose.yml | 14 +- apps/dokploy/templates/listmonk/index.ts | 7 +- .../templates/logto/docker-compose.yml | 6 +- .../templates/mailpit/docker-compose.yml | 25 - apps/dokploy/templates/mailpit/index.ts | 31 - .../templates/maybe/docker-compose.yml | 36 - apps/dokploy/templates/maybe/index.ts | 43 - .../templates/metabase/docker-compose.yml | 3 +- .../nextcloud-aio/docker-compose.yml | 6 +- .../templates/nocodb/docker-compose.yml | 3 +- .../dokploy/templates/odoo/docker-compose.yml | 3 +- .../templates/open-webui/docker-compose.yml | 3 +- .../templates/outline/docker-compose.yml | 57 - apps/dokploy/templates/outline/index.ts | 90 - .../templates/penpot/docker-compose.yml | 18 +- apps/dokploy/templates/penpot/index.ts | 2 + .../templates/peppermint/docker-compose.yml | 6 +- .../templates/photoprism/docker-compose.yml | 6 +- apps/dokploy/templates/photoprism/index.ts | 1 + .../templates/phpmyadmin/docker-compose.yml | 3 +- .../templates/plausible/docker-compose.yml | 9 +- .../templates/pocket-id/docker-compose.yml | 21 - apps/dokploy/templates/pocket-id/index.ts | 29 - .../templates/portainer/docker-compose.yml | 3 +- .../templates/postiz/docker-compose.yml | 9 +- .../templates/registry/docker-compose.yml | 19 - apps/dokploy/templates/registry/index.ts | 35 - .../templates/rocketchat/docker-compose.yml | 3 +- .../templates/roundcube/docker-compose.yml | 3 +- .../dokploy/templates/ryot/docker-compose.yml | 6 +- .../templates/shlink/docker-compose.yml | 29 - apps/dokploy/templates/shlink/index.ts | 35 - .../templates/slash/docker-compose.yml | 6 +- .../templates/spacedrive/docker-compose.yml | 9 - apps/dokploy/templates/spacedrive/index.ts | 28 - .../templates/supabase/docker-compose.yml | 36 +- .../templates/superset/docker-compose.yml | 87 - apps/dokploy/templates/superset/index.ts | 77 - .../templates/teable/docker-compose.yml | 8 +- apps/dokploy/templates/templates.ts | 344 +- apps/dokploy/templates/triggerdotdev/index.ts | 1 + .../templates/trilium/docker-compose.yml | 14 - apps/dokploy/templates/trilium/index.ts | 22 - .../templates/twenty/docker-compose.yml | 15 +- .../templates/typebot/docker-compose.yml | 3 +- .../templates/umami/docker-compose.yml | 5 +- .../templates/unifi/docker-compose.yml | 6 +- apps/dokploy/templates/unifi/index.ts | 2 +- .../templates/unsend/docker-compose.yml | 13 +- apps/dokploy/templates/unsend/index.ts | 1 + apps/dokploy/templates/utils/index.ts | 4 +- .../templates/wikijs/docker-compose.yml | 31 - apps/dokploy/templates/wikijs/index.ts | 35 - .../templates/windmill/docker-compose.yml | 18 +- .../templates/wordpress/docker-compose.yml | 2 + .../templates/yourls/docker-compose.yml | 6 +- .../templates/zipline/docker-compose.yml | 3 +- apps/monitoring/.gitignore | 1 - apps/monitoring/LICENSE.md | 0 apps/monitoring/README.md | 154 - apps/monitoring/config/metrics.go | 57 - apps/monitoring/containers/config.go | 61 - apps/monitoring/containers/monitor.go | 270 - apps/monitoring/containers/types.go | 48 - apps/monitoring/database/cleanup.go | 52 - apps/monitoring/database/containers.go | 160 - apps/monitoring/database/db.go | 47 - apps/monitoring/database/server.go | 115 - apps/monitoring/go.mod | 34 - apps/monitoring/go.sum | 61 - apps/monitoring/main.go | 164 - apps/monitoring/middleware/auth.go | 39 - apps/monitoring/monitoring/monitor.go | 261 - apps/schedules/package.json | 2 +- apps/schedules/tsconfig.json | 3 +- biome.json | 5 +- lefthook.yml | 4 +- packages/server/auth-schema.ts | 133 - packages/server/package.json | 9 +- packages/server/src/auth/auth.ts | 117 + packages/server/src/auth/token.ts | 99 + packages/server/src/db/schema/account.ts | 194 - packages/server/src/db/schema/admin.ts | 121 + packages/server/src/db/schema/application.ts | 1 + packages/server/src/db/schema/auth.ts | 130 + packages/server/src/db/schema/bitbucket.ts | 2 +- packages/server/src/db/schema/certificate.ts | 29 +- packages/server/src/db/schema/compose.ts | 1 - packages/server/src/db/schema/dbml.ts | 7 - packages/server/src/db/schema/deployment.ts | 3 +- packages/server/src/db/schema/destination.ts | 13 +- packages/server/src/db/schema/git-provider.ts | 16 +- packages/server/src/db/schema/index.ts | 3 +- packages/server/src/db/schema/notification.ts | 32 +- packages/server/src/db/schema/project.ts | 14 +- packages/server/src/db/schema/registry.ts | 14 +- packages/server/src/db/schema/schema.dbml | 872 --- packages/server/src/db/schema/server.ts | 105 +- packages/server/src/db/schema/session.ts | 19 +- packages/server/src/db/schema/source.ts | 27 + packages/server/src/db/schema/ssh-key.ts | 16 +- packages/server/src/db/schema/user.ts | 329 +- .../server/src/emails/emails/build-failed.tsx | 1 + .../src/emails/emails/build-success.tsx | 1 + .../src/emails/emails/database-backup.tsx | 1 + .../src/emails/emails/docker-cleanup.tsx | 2 + .../src/emails/emails/dokploy-restart.tsx | 1 + .../src/emails/emails/notion-magic-link.tsx | 1 + .../emails/emails/plaid-verify-identity.tsx | 1 + .../src/emails/emails/stripe-welcome.tsx | 1 + .../src/emails/emails/vercel-invite-user.tsx | 1 + packages/server/src/index.ts | 11 +- packages/server/src/lib/auth.ts | 304 - .../src/monitoring/{utils.ts => utilts.ts} | 118 +- packages/server/src/services/admin.ts | 168 +- packages/server/src/services/application.ts | 65 +- packages/server/src/services/auth.ts | 184 + packages/server/src/services/backup.ts | 19 +- packages/server/src/services/bitbucket.ts | 8 +- packages/server/src/services/certificate.ts | 4 +- packages/server/src/services/compose.ts | 40 +- packages/server/src/services/deployment.ts | 43 +- packages/server/src/services/destination.ts | 10 +- packages/server/src/services/docker.ts | 26 +- packages/server/src/services/domain.ts | 7 +- packages/server/src/services/github.ts | 6 +- packages/server/src/services/gitlab.ts | 6 +- packages/server/src/services/mariadb.ts | 2 +- packages/server/src/services/mongo.ts | 2 +- packages/server/src/services/mount.ts | 10 +- packages/server/src/services/notification.ts | 40 +- packages/server/src/services/postgres.ts | 2 +- .../server/src/services/preview-deployment.ts | 28 +- packages/server/src/services/project.ts | 4 +- packages/server/src/services/redirect.ts | 6 +- packages/server/src/services/redis.ts | 2 +- packages/server/src/services/registry.ts | 14 +- packages/server/src/services/security.ts | 8 +- packages/server/src/services/server.ts | 25 +- packages/server/src/services/settings.ts | 34 +- packages/server/src/services/user.ts | 244 +- packages/server/src/setup/monitoring-setup.ts | 148 - packages/server/src/setup/postgres-setup.ts | 12 +- packages/server/src/setup/redis-setup.ts | 11 +- packages/server/src/setup/server-audit.ts | 2 +- packages/server/src/setup/server-validate.ts | 2 +- packages/server/src/setup/setup.ts | 4 +- packages/server/src/setup/traefik-setup.ts | 22 +- packages/server/src/types/with.ts | 2 +- .../server/src/utils/access-log/handler.ts | 13 +- packages/server/src/utils/backups/index.ts | 8 +- packages/server/src/utils/backups/mariadb.ts | 4 +- packages/server/src/utils/backups/mongo.ts | 4 +- packages/server/src/utils/backups/mysql.ts | 5 +- packages/server/src/utils/backups/postgres.ts | 4 +- packages/server/src/utils/backups/utils.ts | 2 +- packages/server/src/utils/builders/compose.ts | 58 +- packages/server/src/utils/builders/index.ts | 2 +- .../server/src/utils/builders/nixpacks.ts | 2 +- .../server/src/utils/databases/mariadb.ts | 2 +- packages/server/src/utils/databases/mongo.ts | 2 +- packages/server/src/utils/databases/mysql.ts | 2 +- packages/server/src/utils/databases/redis.ts | 2 +- packages/server/src/utils/docker/collision.ts | 46 - .../utils/docker/collision/root-network.ts | 62 - packages/server/src/utils/docker/domain.ts | 47 +- packages/server/src/utils/docker/utils.ts | 41 +- packages/server/src/utils/gpu-setup.ts | 4 +- .../src/utils/notifications/build-error.ts | 6 +- .../src/utils/notifications/build-success.ts | 6 +- .../utils/notifications/database-backup.ts | 7 +- .../src/utils/notifications/docker-cleanup.ts | 4 +- .../utils/notifications/server-threshold.ts | 155 - .../server/src/utils/notifications/utils.ts | 1 - .../server/src/utils/process/execAsync.ts | 2 +- .../server/src/utils/providers/bitbucket.ts | 1 + packages/server/src/utils/providers/git.ts | 14 +- packages/server/src/utils/providers/gitlab.ts | 15 +- .../server/src/utils/traefik/application.ts | 8 +- packages/server/src/utils/traefik/domain.ts | 16 +- .../server/src/utils/traefik/middleware.ts | 2 +- .../server/src/utils/traefik/web-server.ts | 6 +- .../verification/send-verification-email.tsx | 51 - packages/server/tsconfig.server.json | 1 - pnpm-lock.yaml | 1301 ++--- pnpm-workspace.yaml | 1 - 639 files changed, 17202 insertions(+), 82902 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 .github/sponsors/openalternative.png delete mode 100644 .github/sponsors/synexa.png delete mode 100644 .github/workflows/create-pr.yml delete mode 100644 .github/workflows/dokploy.yml delete mode 100644 .github/workflows/monitoring.yml delete mode 100644 Dockerfile.monitoring create mode 100644 apps/dokploy/components/auth/login-2fa.tsx rename apps/dokploy/components/dashboard/compose/{delete-service.tsx => delete-compose.tsx} (61%) delete mode 100644 apps/dokploy/components/dashboard/compose/general/isolated-deployment.tsx delete mode 100644 apps/dokploy/components/dashboard/compose/general/show-utilities.tsx rename apps/dokploy/components/dashboard/{monitoring/paid/container/show-paid-compose-monitoring.tsx => compose/monitoring/show.tsx} (80%) rename apps/dokploy/components/dashboard/monitoring/{free/container => docker}/docker-block-chart.tsx (88%) rename apps/dokploy/components/dashboard/monitoring/{free/container => docker}/docker-cpu-chart.tsx (88%) rename apps/dokploy/components/dashboard/monitoring/{free/container => docker}/docker-disk-chart.tsx (97%) rename apps/dokploy/components/dashboard/monitoring/{free/container => docker}/docker-memory-chart.tsx (80%) rename apps/dokploy/components/dashboard/monitoring/{free/container => docker}/docker-network-chart.tsx (84%) create mode 100644 apps/dokploy/components/dashboard/monitoring/docker/show.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/free/container/show-free-compose-monitoring.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/free/container/show-free-container-monitoring.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/container/container-block-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/container/container-cpu-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/container/container-memory-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/container/container-network-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/servers/cpu-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/servers/disk-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/servers/memory-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/servers/network-chart.tsx delete mode 100644 apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx create mode 100644 apps/dokploy/components/dashboard/monitoring/web-server/show.tsx delete mode 100644 apps/dokploy/components/dashboard/organization/handle-organization.tsx delete mode 100644 apps/dokploy/components/dashboard/settings/api/add-api-key.tsx delete mode 100644 apps/dokploy/components/dashboard/settings/api/show-api-keys.tsx create mode 100644 apps/dokploy/components/dashboard/settings/profile/generate-token.tsx create mode 100644 apps/dokploy/components/dashboard/settings/profile/remove-self-account.tsx delete mode 100644 apps/dokploy/components/dashboard/settings/servers/setup-monitoring.tsx delete mode 100644 apps/dokploy/components/dashboard/settings/servers/show-monitoring-modal.tsx rename apps/dokploy/components/dashboard/settings/users/{add-invitation.tsx => add-user.tsx} (52%) delete mode 100644 apps/dokploy/components/dashboard/settings/users/show-invitations.tsx delete mode 100644 apps/dokploy/drizzle/0057_tricky_living_tribunal.sql delete mode 100644 apps/dokploy/drizzle/0058_brown_sharon_carter.sql delete mode 100644 apps/dokploy/drizzle/0059_striped_bill_hollister.sql delete mode 100644 apps/dokploy/drizzle/0060_disable-aggressive-cache.sql delete mode 100644 apps/dokploy/drizzle/0061_many_molten_man.sql delete mode 100644 apps/dokploy/drizzle/0062_slippery_white_tiger.sql delete mode 100644 apps/dokploy/drizzle/0063_panoramic_dreadnoughts.sql delete mode 100644 apps/dokploy/drizzle/0064_previous_agent_brand.sql delete mode 100644 apps/dokploy/drizzle/0065_daily_zaladane.sql delete mode 100644 apps/dokploy/drizzle/0066_yielding_echo.sql delete mode 100644 apps/dokploy/drizzle/0067_condemned_sugar_man.sql delete mode 100644 apps/dokploy/drizzle/meta/0058_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0059_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0060_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0061_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0062_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0063_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0064_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0065_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0066_snapshot.json delete mode 100644 apps/dokploy/drizzle/meta/0067_snapshot.json delete mode 100644 apps/dokploy/hooks/useLocalStorage.tsx delete mode 100644 apps/dokploy/lib/auth-client.ts delete mode 100644 apps/dokploy/migrate.ts delete mode 100644 apps/dokploy/pages/accept-invitation/[accept-invitation].tsx delete mode 100644 apps/dokploy/pages/api/auth/[...all].ts create mode 100644 apps/dokploy/pages/confirm-email.tsx delete mode 100644 apps/dokploy/pages/dashboard/settings/index.tsx delete mode 100644 apps/dokploy/public/locales/ml/common.json delete mode 100644 apps/dokploy/public/locales/ml/settings.json delete mode 100644 apps/dokploy/public/locales/uk/common.json delete mode 100644 apps/dokploy/public/locales/uk/settings.json delete mode 100644 apps/dokploy/public/templates/alist.svg delete mode 100644 apps/dokploy/public/templates/answer.png delete mode 100644 apps/dokploy/public/templates/appwrite.svg delete mode 100644 apps/dokploy/public/templates/convex.svg delete mode 100644 apps/dokploy/public/templates/erpnext.svg delete mode 100644 apps/dokploy/public/templates/evolutionapi.png delete mode 100644 apps/dokploy/public/templates/formbricks.png delete mode 100644 apps/dokploy/public/templates/frappe-hr.svg delete mode 100644 apps/dokploy/public/templates/glance.png delete mode 100644 apps/dokploy/public/templates/homarr.png delete mode 100644 apps/dokploy/public/templates/linkwarden.png delete mode 100644 apps/dokploy/public/templates/mailpit.svg delete mode 100644 apps/dokploy/public/templates/maybe.svg delete mode 100644 apps/dokploy/public/templates/outline.png delete mode 100644 apps/dokploy/public/templates/pocket-id.svg delete mode 100644 apps/dokploy/public/templates/registry.png delete mode 100644 apps/dokploy/public/templates/shlink.svg delete mode 100644 apps/dokploy/public/templates/spacedrive.png delete mode 100644 apps/dokploy/public/templates/superset.svg delete mode 100644 apps/dokploy/public/templates/trilium.png delete mode 100644 apps/dokploy/public/templates/wikijs.svg delete mode 100644 apps/dokploy/server/api/routers/organization.ts delete mode 100644 apps/dokploy/templates/alist/docker-compose.yml delete mode 100644 apps/dokploy/templates/alist/index.ts delete mode 100644 apps/dokploy/templates/answer/docker-compose.yml delete mode 100644 apps/dokploy/templates/answer/index.ts delete mode 100644 apps/dokploy/templates/appwrite/docker-compose.yml delete mode 100644 apps/dokploy/templates/appwrite/index.ts delete mode 100644 apps/dokploy/templates/convex/docker-compose.yml delete mode 100644 apps/dokploy/templates/convex/index.ts delete mode 100644 apps/dokploy/templates/erpnext/docker-compose.yml delete mode 100644 apps/dokploy/templates/erpnext/index.ts delete mode 100644 apps/dokploy/templates/evolutionapi/docker-compose.yml delete mode 100644 apps/dokploy/templates/evolutionapi/index.ts delete mode 100644 apps/dokploy/templates/formbricks/docker-compose.yml delete mode 100644 apps/dokploy/templates/formbricks/index.ts delete mode 100644 apps/dokploy/templates/frappe-hr/docker-compose.yml delete mode 100644 apps/dokploy/templates/frappe-hr/index.ts delete mode 100644 apps/dokploy/templates/glance/docker-compose.yml delete mode 100644 apps/dokploy/templates/glance/index.ts delete mode 100644 apps/dokploy/templates/homarr/docker-compose.yml delete mode 100644 apps/dokploy/templates/homarr/index.ts delete mode 100644 apps/dokploy/templates/linkwarden/docker-compose.yml delete mode 100644 apps/dokploy/templates/linkwarden/index.ts delete mode 100644 apps/dokploy/templates/mailpit/docker-compose.yml delete mode 100644 apps/dokploy/templates/mailpit/index.ts delete mode 100644 apps/dokploy/templates/maybe/docker-compose.yml delete mode 100644 apps/dokploy/templates/maybe/index.ts delete mode 100644 apps/dokploy/templates/outline/docker-compose.yml delete mode 100644 apps/dokploy/templates/outline/index.ts delete mode 100644 apps/dokploy/templates/pocket-id/docker-compose.yml delete mode 100644 apps/dokploy/templates/pocket-id/index.ts delete mode 100644 apps/dokploy/templates/registry/docker-compose.yml delete mode 100644 apps/dokploy/templates/registry/index.ts delete mode 100644 apps/dokploy/templates/shlink/docker-compose.yml delete mode 100644 apps/dokploy/templates/shlink/index.ts delete mode 100644 apps/dokploy/templates/spacedrive/docker-compose.yml delete mode 100644 apps/dokploy/templates/spacedrive/index.ts delete mode 100644 apps/dokploy/templates/superset/docker-compose.yml delete mode 100644 apps/dokploy/templates/superset/index.ts delete mode 100644 apps/dokploy/templates/trilium/docker-compose.yml delete mode 100644 apps/dokploy/templates/trilium/index.ts delete mode 100644 apps/dokploy/templates/wikijs/docker-compose.yml delete mode 100644 apps/dokploy/templates/wikijs/index.ts delete mode 100644 apps/monitoring/.gitignore delete mode 100644 apps/monitoring/LICENSE.md delete mode 100644 apps/monitoring/README.md delete mode 100644 apps/monitoring/config/metrics.go delete mode 100644 apps/monitoring/containers/config.go delete mode 100644 apps/monitoring/containers/monitor.go delete mode 100644 apps/monitoring/containers/types.go delete mode 100644 apps/monitoring/database/cleanup.go delete mode 100644 apps/monitoring/database/containers.go delete mode 100644 apps/monitoring/database/db.go delete mode 100644 apps/monitoring/database/server.go delete mode 100644 apps/monitoring/go.mod delete mode 100644 apps/monitoring/go.sum delete mode 100644 apps/monitoring/main.go delete mode 100644 apps/monitoring/middleware/auth.go delete mode 100644 apps/monitoring/monitoring/monitor.go delete mode 100644 packages/server/auth-schema.ts create mode 100644 packages/server/src/auth/auth.ts create mode 100644 packages/server/src/auth/token.ts delete mode 100644 packages/server/src/db/schema/account.ts create mode 100644 packages/server/src/db/schema/admin.ts create mode 100644 packages/server/src/db/schema/auth.ts delete mode 100644 packages/server/src/db/schema/dbml.ts delete mode 100644 packages/server/src/db/schema/schema.dbml create mode 100644 packages/server/src/db/schema/source.ts delete mode 100644 packages/server/src/lib/auth.ts rename packages/server/src/monitoring/{utils.ts => utilts.ts} (52%) create mode 100644 packages/server/src/services/auth.ts delete mode 100644 packages/server/src/setup/monitoring-setup.ts delete mode 100644 packages/server/src/utils/docker/collision.ts delete mode 100644 packages/server/src/utils/docker/collision/root-network.ts delete mode 100644 packages/server/src/utils/notifications/server-threshold.ts delete mode 100644 packages/server/src/verification/send-verification-email.tsx diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..ba405c22e --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,119 @@ +version: 2.1 + +jobs: + build-amd64: + machine: + image: ubuntu-2004:current + steps: + - checkout + - run: + name: Prepare .env file + command: | + cp apps/dokploy/.env.production.example .env.production + cp apps/dokploy/.env.production.example apps/dokploy/.env.production + + - run: + name: Build and push AMD64 image + command: | + docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN + if [ "${CIRCLE_BRANCH}" == "main" ]; then + TAG="latest" + elif [ "${CIRCLE_BRANCH}" == "canary" ]; then + TAG="canary" + else + TAG="feature" + fi + docker build --platform linux/amd64 -t dokploy/dokploy:${TAG}-amd64 . + docker push dokploy/dokploy:${TAG}-amd64 + + build-arm64: + machine: + image: ubuntu-2004:current + resource_class: arm.large + steps: + - checkout + - run: + name: Prepare .env file + command: | + cp apps/dokploy/.env.production.example .env.production + cp apps/dokploy/.env.production.example apps/dokploy/.env.production + - run: + name: Build and push ARM64 image + command: | + docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN + if [ "${CIRCLE_BRANCH}" == "main" ]; then + TAG="latest" + elif [ "${CIRCLE_BRANCH}" == "canary" ]; then + TAG="canary" + else + TAG="feature" + fi + docker build --platform linux/arm64 -t dokploy/dokploy:${TAG}-arm64 . + docker push dokploy/dokploy:${TAG}-arm64 + + combine-manifests: + docker: + - image: cimg/node:20.9.0 + steps: + - checkout + - setup_remote_docker + - run: + name: Create and push multi-arch manifest + command: | + docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_TOKEN + + if [ "${CIRCLE_BRANCH}" == "main" ]; then + VERSION=$(node -p "require('./apps/dokploy/package.json').version") + echo $VERSION + TAG="latest" + + docker manifest create dokploy/dokploy:${TAG} \ + dokploy/dokploy:${TAG}-amd64 \ + dokploy/dokploy:${TAG}-arm64 + docker manifest push dokploy/dokploy:${TAG} + + docker manifest create dokploy/dokploy:${VERSION} \ + dokploy/dokploy:${TAG}-amd64 \ + dokploy/dokploy:${TAG}-arm64 + docker manifest push dokploy/dokploy:${VERSION} + elif [ "${CIRCLE_BRANCH}" == "canary" ]; then + TAG="canary" + docker manifest create dokploy/dokploy:${TAG} \ + dokploy/dokploy:${TAG}-amd64 \ + dokploy/dokploy:${TAG}-arm64 + docker manifest push dokploy/dokploy:${TAG} + else + TAG="feature" + docker manifest create dokploy/dokploy:${TAG} \ + dokploy/dokploy:${TAG}-amd64 \ + dokploy/dokploy:${TAG}-arm64 + docker manifest push dokploy/dokploy:${TAG} + fi + +workflows: + build-all: + jobs: + - build-amd64: + filters: + branches: + only: + - main + - canary + - feat/add-sidebar + - build-arm64: + filters: + branches: + only: + - main + - canary + - feat/add-sidebar + - combine-manifests: + requires: + - build-amd64 + - build-arm64 + filters: + branches: + only: + - main + - canary + - feat/add-sidebar diff --git a/.github/sponsors/openalternative.png b/.github/sponsors/openalternative.png deleted file mode 100644 index e7b899ec3aac3bcb40011a54d709a801038d0463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4170 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 diff --git a/.github/sponsors/synexa.png b/.github/sponsors/synexa.png deleted file mode 100644 index 737ccd57629252cf86562ba3b5cee74128a889be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42254 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 $GITHUB_ENV - - - name: Get latest GitHub tag - id: latest_tag - run: | - LATEST_TAG=$(git ls-remote --tags origin | awk -F'/' '{print $3}' | sort -V | tail -n1) - echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV - echo $LATEST_TAG - - name: Compare versions - id: compare_versions - run: | - if [ "${{ env.VERSION }}" != "${{ env.LATEST_TAG }}" ]; then - VERSION_CHANGED="true" - else - VERSION_CHANGED="false" - fi - echo "VERSION_CHANGED=$VERSION_CHANGED" >> $GITHUB_ENV - echo "Comparing versions:" - echo "Current version: ${{ env.VERSION }}" - echo "Latest tag: ${{ env.LATEST_TAG }}" - echo "Version changed: $VERSION_CHANGED" - - name: Check if a PR already exists - id: check_pr - run: | - PR_EXISTS=$(gh pr list --state open --base main --head canary --json number --jq '. | length') - echo "PR_EXISTS=$PR_EXISTS" >> $GITHUB_ENV - env: - GH_TOKEN: ${{ secrets.GH_PAT }} - - - name: Create Pull Request - if: env.VERSION_CHANGED == 'true' && env.PR_EXISTS == '0' - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - - git fetch origin main - git checkout canary - git push origin canary - - gh pr create \ - --title "🚀 Release ${{ env.VERSION }}" \ - --body ' - This PR promotes changes from `canary` to `main` for version ${{ env.VERSION }}. - - ### 🔍 Changes Include: - - Version bump to ${{ env.VERSION }} - - All changes from canary branch - - ### ✅ Pre-merge Checklist: - - [ ] All tests passing - - [ ] Documentation updated - - [ ] Docker images built and tested - - > 🤖 This PR was automatically generated by [GitHub Actions](https://github.com/actions)' \ - --base main \ - --head canary \ - --label "release" --label "automated pr" || true \ - --reviewer siumauricio \ - --assignee siumauricio - env: - GH_TOKEN: ${{ github.token }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index bb7721468..892e8ea14 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,7 +2,7 @@ name: Build Docker images on: push: - branches: ["canary", "main", "feat/monitoring"] + branches: ["canary", "main"] jobs: build-and-push-cloud-image: @@ -17,7 +17,7 @@ jobs: with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Build and push Docker image uses: docker/build-push-action@v4 with: @@ -53,7 +53,8 @@ jobs: push: true tags: | siumauricio/schedule:${{ github.ref_name == 'main' && 'latest' || 'canary' }} - platforms: linux/amd64 + platforms: linux/amd64 + build-and-push-server-image: runs-on: ubuntu-latest @@ -76,4 +77,4 @@ jobs: push: true tags: | siumauricio/server:${{ github.ref_name == 'main' && 'latest' || 'canary' }} - platforms: linux/amd64 + platforms: linux/amd64 \ No newline at end of file diff --git a/.github/workflows/dokploy.yml b/.github/workflows/dokploy.yml deleted file mode 100644 index adcb1bb54..000000000 --- a/.github/workflows/dokploy.yml +++ /dev/null @@ -1,161 +0,0 @@ -name: Dokploy Docker Build - -on: - push: - branches: [main, canary, "feat/better-auth-2"] - -env: - IMAGE_NAME: dokploy/dokploy - -jobs: - docker-amd: - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Set tag and version - id: meta - run: | - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - TAG="latest" - VERSION=$(node -p "require('./apps/dokploy/package.json').version") - elif [ "${{ github.ref }}" = "refs/heads/canary" ]; then - TAG="canary" - else - TAG="feature" - fi - echo "tags=${IMAGE_NAME}:${TAG}-amd64" >> $GITHUB_OUTPUT - - - name: Prepare env file - run: | - cp apps/dokploy/.env.production.example .env.production - cp apps/dokploy/.env.production.example apps/dokploy/.env.production - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - platforms: linux/amd64 - push: true - tags: ${{ steps.meta.outputs.tags }} - docker-arm: - runs-on: ubuntu-24.04-arm - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Set tag and version - id: meta - run: | - VERSION=$(node -p "require('./apps/dokploy/package.json').version") - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - TAG="latest" - VERSION=$(node -p "require('./apps/dokploy/package.json').version") - elif [ "${{ github.ref }}" = "refs/heads/canary" ]; then - TAG="canary" - else - TAG="feature" - fi - echo "tags=${IMAGE_NAME}:${TAG}-arm64" >> $GITHUB_OUTPUT - - - name: Prepare env file - run: | - cp apps/dokploy/.env.production.example .env.production - cp apps/dokploy/.env.production.example apps/dokploy/.env.production - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - platforms: linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} - - combine-manifests: - needs: [docker-amd, docker-arm] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Create and push manifests - run: | - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - VERSION=$(node -p "require('./apps/dokploy/package.json').version") - TAG="latest" - - docker buildx imagetools create -t ${IMAGE_NAME}:${TAG} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - - docker buildx imagetools create -t ${IMAGE_NAME}:${VERSION} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - - elif [ "${{ github.ref }}" = "refs/heads/canary" ]; then - TAG="canary" - docker buildx imagetools create -t ${IMAGE_NAME}:${TAG} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - - else - TAG="feature" - docker buildx imagetools create -t ${IMAGE_NAME}:${TAG} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - fi - - generate-release: - needs: [combine-manifests] - if: github.ref == 'refs/heads/main' - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Get version - id: get_version - run: | - VERSION=$(node -p "require('./apps/dokploy/package.json').version") - echo "version=$VERSION" >> $GITHUB_OUTPUT - - - name: Create Release - uses: softprops/action-gh-release@v2 - with: - tag_name: ${{ steps.get_version.outputs.version }} - name: ${{ steps.get_version.outputs.version }} - generate_release_notes: true - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/monitoring.yml b/.github/workflows/monitoring.yml deleted file mode 100644 index 378b019d4..000000000 --- a/.github/workflows/monitoring.yml +++ /dev/null @@ -1,118 +0,0 @@ -name: Dokploy Monitoring Build - -on: - push: - branches: [main, canary] - -env: - IMAGE_NAME: dokploy/monitoring - -jobs: - docker-amd: - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Set tag - id: meta - run: | - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - TAG="latest" - elif [ "${{ github.ref }}" = "refs/heads/canary" ]; then - TAG="canary" - else - TAG="feature" - fi - echo "tags=${IMAGE_NAME}:${TAG}-amd64" >> $GITHUB_OUTPUT - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - file: ./Dockerfile.monitoring - platforms: linux/amd64 - push: true - tags: ${{ steps.meta.outputs.tags }} - docker-arm: - runs-on: ubuntu-24.04-arm - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Set - id: meta - run: | - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - TAG="latest" - elif [ "${{ github.ref }}" = "refs/heads/canary" ]; then - TAG="canary" - else - TAG="feature" - fi - echo "tags=${IMAGE_NAME}:${TAG}-arm64" >> $GITHUB_OUTPUT - - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: . - file: ./Dockerfile.monitoring - platforms: linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} - - combine-manifests: - needs: [docker-amd, docker-arm] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Create and push manifests - run: | - if [ "${{ github.ref }}" = "refs/heads/main" ]; then - TAG="latest" - - docker buildx imagetools create -t ${IMAGE_NAME}:${TAG} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - - elif [ "${{ github.ref }}" = "refs/heads/canary" ]; then - TAG="canary" - docker buildx imagetools create -t ${IMAGE_NAME}:${TAG} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - - else - TAG="feature" - docker buildx imagetools create -t ${IMAGE_NAME}:${TAG} \ - ${IMAGE_NAME}:${TAG}-amd64 \ - ${IMAGE_NAME}:${TAG}-arm64 - fi diff --git a/.gitignore b/.gitignore index 5e6e4eb3c..b96c9e37a 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,3 @@ yarn-error.log* # Misc .DS_Store *.pem - - -.db \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 48bbb877e..986ceb595 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20.9-slim AS base +FROM node:20-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable diff --git a/Dockerfile.cloud b/Dockerfile.cloud index c1b667963..2cc050021 100644 --- a/Dockerfile.cloud +++ b/Dockerfile.cloud @@ -1,4 +1,4 @@ -FROM node:20.9-slim AS base +FROM node:20-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable diff --git a/Dockerfile.monitoring b/Dockerfile.monitoring deleted file mode 100644 index 814625dbf..000000000 --- a/Dockerfile.monitoring +++ /dev/null @@ -1,41 +0,0 @@ -# Build stage -FROM golang:1.21-alpine3.19 AS builder - -# Instalar dependencias necesarias -RUN apk add --no-cache gcc musl-dev sqlite-dev - -# Establecer el directorio de trabajo -WORKDIR /app - -# Copiar todo el código fuente primero -COPY . . - -# Movernos al directorio de la aplicación golang -WORKDIR /app/apps/monitoring - -# Descargar dependencias -RUN go mod download - -# Compilar la aplicación -RUN CGO_ENABLED=1 GOOS=linux go build -o main main.go - -# Etapa final -FROM alpine:3.19 - -# Instalar SQLite y otras dependencias necesarias -RUN apk add --no-cache sqlite-libs docker-cli - -WORKDIR /app - -# Copiar el binario compilado y el archivo monitor.go -COPY --from=builder /app/apps/monitoring/main ./main -COPY --from=builder /app/apps/monitoring/main.go ./monitor.go - -# COPY --from=builder /app/apps/golang/.env ./.env - -# Exponer el puerto -ENV PORT=3001 -EXPOSE 3001 - -# Ejecutar la aplicación -CMD ["./main"] \ No newline at end of file diff --git a/Dockerfile.schedule b/Dockerfile.schedule index eba08f7ba..d04af70f2 100644 --- a/Dockerfile.schedule +++ b/Dockerfile.schedule @@ -1,4 +1,4 @@ -FROM node:20.9-slim AS base +FROM node:20-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable diff --git a/Dockerfile.server b/Dockerfile.server index 8fef51422..98f74966f 100644 --- a/Dockerfile.server +++ b/Dockerfile.server @@ -1,4 +1,4 @@ -FROM node:20.9-slim AS base +FROM node:20-slim AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable diff --git a/README.md b/README.md index 9246cf556..ca48852c3 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,6 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com). Lightnode - - ### Premium Supporters 🥇 @@ -95,11 +93,8 @@ For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com). Cloudblast.io Startupfame Itsdb-center -Openalternative -Synexa - ### Community Backers 🤝
diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index 0db565995..4b405e9c7 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -28,7 +28,7 @@ app.use(async (c, next) => { app.post("/deploy", zValidator("json", deployJobSchema), (c) => { const data = c.req.valid("json"); - queue.add(data, { groupName: data.serverId }); + const res = queue.add(data, { groupName: data.serverId }); return c.json( { message: "Deployment Added", diff --git a/apps/api/src/utils.ts b/apps/api/src/utils.ts index 3f3c9698b..d919f29e9 100644 --- a/apps/api/src/utils.ts +++ b/apps/api/src/utils.ts @@ -64,7 +64,7 @@ export const deploy = async (job: DeployJob) => { } } } - } catch (_) { + } catch (error) { if (job.applicationType === "application") { await updateApplicationStatus(job.applicationId, "error"); } else if (job.applicationType === "compose") { diff --git a/apps/dokploy/__test__/compose/config/config.test.ts b/apps/dokploy/__test__/compose/config/config.test.ts index aed3350f5..3f98525a2 100644 --- a/apps/dokploy/__test__/compose/config/config.test.ts +++ b/apps/dokploy/__test__/compose/config/config.test.ts @@ -1,5 +1,5 @@ import { generateRandomHash } from "@dokploy/server"; -import { addSuffixToAllConfigs } from "@dokploy/server"; +import { addSuffixToAllConfigs, addSuffixToConfigsRoot } from "@dokploy/server"; import type { ComposeSpecification } from "@dokploy/server"; import { load } from "js-yaml"; import { expect, test } from "vitest"; diff --git a/apps/dokploy/__test__/compose/network/network-root.test.ts b/apps/dokploy/__test__/compose/network/network-root.test.ts index 980502fff..7e06a9f0b 100644 --- a/apps/dokploy/__test__/compose/network/network-root.test.ts +++ b/apps/dokploy/__test__/compose/network/network-root.test.ts @@ -293,6 +293,29 @@ networks: dokploy-network: `; +const expectedComposeFile7 = ` +version: "3.8" + +services: + web: + image: nginx:latest + networks: + - dokploy-network + +networks: + dokploy-network: + driver: bridge + driver_opts: + com.docker.network.driver.mtu: 1200 + + backend: + driver: bridge + attachable: true + + external_network: + external: true + name: dokploy-network +`; test("It shoudn't add suffix to dokploy-network", () => { const composeData = load(composeFile7) as ComposeSpecification; diff --git a/apps/dokploy/__test__/compose/secrets/secret-root.test.ts b/apps/dokploy/__test__/compose/secrets/secret-root.test.ts index 1b1898c59..2bd91b58a 100644 --- a/apps/dokploy/__test__/compose/secrets/secret-root.test.ts +++ b/apps/dokploy/__test__/compose/secrets/secret-root.test.ts @@ -1,7 +1,7 @@ import { generateRandomHash } from "@dokploy/server"; import { addSuffixToSecretsRoot } from "@dokploy/server"; import type { ComposeSpecification } from "@dokploy/server"; -import { load } from "js-yaml"; +import { dump, load } from "js-yaml"; import { expect, test } from "vitest"; test("Generate random hash with 8 characters", () => { diff --git a/apps/dokploy/__test__/compose/volume/volume.test.ts b/apps/dokploy/__test__/compose/volume/volume.test.ts index 6c4344762..d4623aeb1 100644 --- a/apps/dokploy/__test__/compose/volume/volume.test.ts +++ b/apps/dokploy/__test__/compose/volume/volume.test.ts @@ -1,4 +1,8 @@ -import { addSuffixToAllVolumes } from "@dokploy/server"; +import { generateRandomHash } from "@dokploy/server"; +import { + addSuffixToAllVolumes, + addSuffixToVolumesInServices, +} from "@dokploy/server"; import type { ComposeSpecification } from "@dokploy/server"; import { load } from "js-yaml"; import { expect, test } from "vitest"; diff --git a/apps/dokploy/__test__/drop/drop.test.test.ts b/apps/dokploy/__test__/drop/drop.test.test.ts index 4e6f20d3f..c4b2ba8d8 100644 --- a/apps/dokploy/__test__/drop/drop.test.test.ts +++ b/apps/dokploy/__test__/drop/drop.test.test.ts @@ -45,7 +45,7 @@ const baseApp: ApplicationNested = { previewWildcard: "", project: { env: "", - organizationId: "", + adminId: "", name: "", description: "", createdAt: "", diff --git a/apps/dokploy/__test__/traefik/server/update-server-config.test.ts b/apps/dokploy/__test__/traefik/server/update-server-config.test.ts index c72d72542..c966748a7 100644 --- a/apps/dokploy/__test__/traefik/server/update-server-config.test.ts +++ b/apps/dokploy/__test__/traefik/server/update-server-config.test.ts @@ -5,7 +5,7 @@ vi.mock("node:fs", () => ({ default: fs, })); -import type { FileConfig, User } from "@dokploy/server"; +import type { Admin, FileConfig } from "@dokploy/server"; import { createDefaultServerTraefikConfig, loadOrCreateConfig, @@ -13,34 +13,10 @@ import { } from "@dokploy/server"; import { beforeEach, expect, test, vi } from "vitest"; -const baseAdmin: User = { - enablePaidFeatures: false, - metricsConfig: { - containers: { - refreshRate: 20, - services: { - include: [], - exclude: [], - }, - }, - server: { - type: "Dokploy", - cronJob: "", - port: 4500, - refreshRate: 20, - retentionDays: 2, - token: "", - thresholds: { - cpu: 0, - memory: 0, - }, - urlCallback: "", - }, - }, - cleanupCacheApplications: false, - cleanupCacheOnCompose: false, - cleanupCacheOnPreviews: false, - createdAt: new Date(), +const baseAdmin: Admin = { + createdAt: "", + authId: "", + adminId: "string", serverIp: null, certificateType: "none", host: null, @@ -51,19 +27,6 @@ const baseAdmin: User = { serversQuantity: 0, stripeCustomerId: "", stripeSubscriptionId: "", - banExpires: new Date(), - banned: true, - banReason: "", - email: "", - expirationDate: "", - id: "", - isRegistered: false, - name: "", - createdAt2: new Date().toISOString(), - emailVerified: false, - image: "", - updatedAt: new Date(), - twoFactorEnabled: false, }; beforeEach(() => { @@ -114,6 +77,8 @@ test("Should not touch config without host", () => { }); test("Should remove websecure if https rollback to http", () => { + const originalConfig: FileConfig = loadOrCreateConfig("dokploy"); + updateServerTraefik( { ...baseAdmin, certificateType: "letsencrypt" }, "example.com", diff --git a/apps/dokploy/__test__/traefik/traefik.test.ts b/apps/dokploy/__test__/traefik/traefik.test.ts index 955103dec..d05dda81d 100644 --- a/apps/dokploy/__test__/traefik/traefik.test.ts +++ b/apps/dokploy/__test__/traefik/traefik.test.ts @@ -26,7 +26,7 @@ const baseApp: ApplicationNested = { previewWildcard: "", project: { env: "", - organizationId: "", + adminId: "", name: "", description: "", createdAt: "", diff --git a/apps/dokploy/components/auth/login-2fa.tsx b/apps/dokploy/components/auth/login-2fa.tsx new file mode 100644 index 000000000..6a11268e0 --- /dev/null +++ b/apps/dokploy/components/auth/login-2fa.tsx @@ -0,0 +1,132 @@ +import { Button } from "@/components/ui/button"; +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; + +import { CardTitle } from "@/components/ui/card"; +import { + InputOTP, + InputOTPGroup, + InputOTPSeparator, + InputOTPSlot, +} from "@/components/ui/input-otp"; +import { api } from "@/utils/api"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { REGEXP_ONLY_DIGITS } from "input-otp"; +import { AlertTriangle } from "lucide-react"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; +import { useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { z } from "zod"; + +const Login2FASchema = z.object({ + pin: z.string().min(6, { + message: "Pin is required", + }), +}); + +type Login2FA = z.infer; + +interface Props { + authId: string; +} + +export const Login2FA = ({ authId }: Props) => { + const { push } = useRouter(); + + const { mutateAsync, isLoading, isError, error } = + api.auth.verifyLogin2FA.useMutation(); + + const form = useForm({ + defaultValues: { + pin: "", + }, + resolver: zodResolver(Login2FASchema), + }); + + useEffect(() => { + form.reset({ + pin: "", + }); + }, [form, form.reset, form.formState.isSubmitSuccessful]); + + const onSubmit = async (data: Login2FA) => { + await mutateAsync({ + pin: data.pin, + id: authId, + }) + .then(() => { + toast.success("Signin successfully", { + duration: 2000, + }); + + push("/dashboard/projects"); + }) + .catch(() => { + toast.error("Signin failed", { + duration: 2000, + }); + }); + }; + return ( +
+ + {isError && ( +
+ + + {error?.message} + +
+ )} + 2FA Login + + ( + + Pin + +
+ + + + + + + + + + +
+
+ + Please enter the 6 digits code provided by your authenticator + app. + + +
+ )} + /> + + + + ); +}; diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx index 95a559f66..9b71a042a 100644 --- a/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx @@ -130,7 +130,7 @@ const createStringToJSONSchema = (schema: z.ZodTypeAny) => { } try { return JSON.parse(str); - } catch (_e) { + } catch (e) { ctx.addIssue({ code: "custom", message: "Invalid JSON format" }); return z.NEVER; } diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx index 1eadf8bab..cf7314cf6 100644 --- a/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx @@ -29,6 +29,7 @@ import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { Server } from "lucide-react"; import Link from "next/link"; +import React from "react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; diff --git a/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx b/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx index 50e36ad76..4cd839a11 100644 --- a/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/general/add-command.tsx @@ -17,6 +17,7 @@ import { import { Input } from "@/components/ui/input"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; +import React from "react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; diff --git a/apps/dokploy/components/dashboard/application/advanced/ports/show-port.tsx b/apps/dokploy/components/dashboard/application/advanced/ports/show-port.tsx index 4cd29a36d..a2c6ddcf1 100644 --- a/apps/dokploy/components/dashboard/application/advanced/ports/show-port.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/ports/show-port.tsx @@ -10,6 +10,7 @@ import { } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Rss, Trash2 } from "lucide-react"; +import React from "react"; import { toast } from "sonner"; import { HandlePorts } from "./handle-ports"; interface Props { diff --git a/apps/dokploy/components/dashboard/application/advanced/redirects/show-redirects.tsx b/apps/dokploy/components/dashboard/application/advanced/redirects/show-redirects.tsx index 5c2c5943c..4ee597917 100644 --- a/apps/dokploy/components/dashboard/application/advanced/redirects/show-redirects.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/redirects/show-redirects.tsx @@ -9,6 +9,7 @@ import { } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Split, Trash2 } from "lucide-react"; +import React from "react"; import { toast } from "sonner"; import { HandleRedirect } from "./handle-redirect"; diff --git a/apps/dokploy/components/dashboard/application/advanced/security/show-security.tsx b/apps/dokploy/components/dashboard/application/advanced/security/show-security.tsx index 92439f511..33022c097 100644 --- a/apps/dokploy/components/dashboard/application/advanced/security/show-security.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/security/show-security.tsx @@ -9,6 +9,7 @@ import { } from "@/components/ui/card"; import { api } from "@/utils/api"; import { LockKeyhole, Trash2 } from "lucide-react"; +import React from "react"; import { toast } from "sonner"; import { HandleSecurity } from "./handle-security"; diff --git a/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx b/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx index 3d26716fc..bcf0ccbd6 100644 --- a/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx +++ b/apps/dokploy/components/dashboard/application/advanced/show-resources.tsx @@ -25,7 +25,7 @@ import { import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { InfoIcon } from "lucide-react"; -import { useEffect } from "react"; +import React, { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; @@ -144,6 +144,38 @@ export const ShowResources = ({ id, type }: Props) => { className="grid w-full gap-8 " >
+ ( + +
+ Memory Reservation + + + + + + +

+ Memory soft limit in bytes. Example: 256MB = + 268435456 bytes +

+
+
+
+
+ + + + +
+ )} + /> + { ); }} /> - ( - -
- Memory Reservation - - - - - - -

- Memory soft limit in bytes. Example: 256MB = - 268435456 bytes -

-
-
-
-
- - - - -
- )} - /> {
Volumes - If you want to persist data in this service use the following config - to setup the volumes + If you want to persist data in this postgres database use the + following config to setup the volumes
@@ -99,7 +100,7 @@ export const ShowVolumes = ({ id, type }: Props) => { {mount.type === "file" && (
Content - + {mount.content}
@@ -112,21 +113,12 @@ export const ShowVolumes = ({ id, type }: Props) => {
)} - {mount.type === "file" ? ( -
- File Path - - {mount.filePath} - -
- ) : ( -
- Mount Path - - {mount.mountPath} - -
- )} +
+ Mount Path + + {mount.mountPath} + +
{ const [isOpen, setIsOpen] = useState(false); - const _utils = api.useUtils(); + const utils = api.useUtils(); const { data } = api.mounts.one.useQuery( { mountId, diff --git a/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx b/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx index b80450f9f..c268e6d51 100644 --- a/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/refresh-token.tsx @@ -11,6 +11,7 @@ import { } from "@/components/ui/alert-dialog"; import { api } from "@/utils/api"; import { RefreshCcw } from "lucide-react"; +import React from "react"; import { toast } from "sonner"; interface Props { diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx index e6fdb38be..39b09d0ca 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployment.tsx @@ -17,15 +17,8 @@ interface Props { open: boolean; onClose: () => void; serverId?: string; - errorMessage?: string; } -export const ShowDeployment = ({ - logPath, - open, - onClose, - serverId, - errorMessage, -}: Props) => { +export const ShowDeployment = ({ logPath, open, onClose, serverId }: Props) => { const [data, setData] = useState(""); const [showExtraLogs, setShowExtraLogs] = useState(false); const [filteredLogs, setFilteredLogs] = useState([]); @@ -106,8 +99,6 @@ export const ShowDeployment = ({ } }, [filteredLogs, autoScroll]); - const optionalErrors = parseLogs(errorMessage || ""); - return ( )) ) : ( - <> - {optionalErrors.length > 0 ? ( - optionalErrors.map((log: LogLine, index: number) => ( - - )) - ) : ( -
- -
- )} - +
+ +
)}
diff --git a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx index d33936f5d..a767350f9 100644 --- a/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/deployments/show-deployments.tsx @@ -8,7 +8,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { type RouterOutputs, api } from "@/utils/api"; +import { api } from "@/utils/api"; import { RocketIcon } from "lucide-react"; import React, { useEffect, useState } from "react"; import { CancelQueues } from "./cancel-queues"; @@ -18,11 +18,8 @@ import { ShowDeployment } from "./show-deployment"; interface Props { applicationId: string; } - export const ShowDeployments = ({ applicationId }: Props) => { - const [activeLog, setActiveLog] = useState< - RouterOutputs["deployment"]["all"][number] | null - >(null); + const [activeLog, setActiveLog] = useState(null); const { data } = api.application.one.useQuery({ applicationId }); const { data: deployments } = api.deployment.all.useQuery( { applicationId }, @@ -103,7 +100,7 @@ export const ShowDeployments = ({ applicationId }: Props) => { - - { - await deleteDomain({ - domainId: item.domainId, + + + + +
+ + + + { + await deleteDomain({ + domainId: item.domainId, + }) + .then((data) => { + refetch(); + toast.success("Domain deleted successfully"); }) - .then(() => { - refetch(); - toast.success("Domain deleted successfully"); - }) - .catch(() => { - toast.error("Error deleting domain"); - }); - }} + .catch(() => { + toast.error("Error deleting domain"); + }); + }} + > + - -
+ + +
); diff --git a/apps/dokploy/components/dashboard/application/environment/show-enviroment.tsx b/apps/dokploy/components/dashboard/application/environment/show-enviroment.tsx index ba20db315..b65a18161 100644 --- a/apps/dokploy/components/dashboard/application/environment/show-enviroment.tsx +++ b/apps/dokploy/components/dashboard/application/environment/show-enviroment.tsx @@ -18,7 +18,7 @@ import { Toggle } from "@/components/ui/toggle"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { EyeIcon, EyeOffIcon } from "lucide-react"; -import { type CSSProperties, useEffect, useState } from "react"; +import React, { type CSSProperties, useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; diff --git a/apps/dokploy/components/dashboard/application/environment/show.tsx b/apps/dokploy/components/dashboard/application/environment/show.tsx index d97c39e2f..7200f2a71 100644 --- a/apps/dokploy/components/dashboard/application/environment/show.tsx +++ b/apps/dokploy/components/dashboard/application/environment/show.tsx @@ -1,5 +1,5 @@ import { Button } from "@/components/ui/button"; -import { Card } from "@/components/ui/card"; +import { Card, CardContent } from "@/components/ui/card"; import { Form } from "@/components/ui/form"; import { Secrets } from "@/components/ui/secrets"; import { api } from "@/utils/api"; diff --git a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx index 9af040b79..a487452b6 100644 --- a/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx +++ b/apps/dokploy/components/dashboard/application/general/generic/save-bitbucket-provider.tsx @@ -84,6 +84,7 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { data: repositories, isLoading: isLoadingRepositories, error, + isError, } = api.bitbucket.getBitbucketRepositories.useQuery( { bitbucketId, @@ -234,7 +235,7 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { {repositories?.map((repo) => ( { form.setValue("repository", { @@ -244,12 +245,7 @@ export const SaveBitbucketProvider = ({ applicationId }: Props) => { form.setValue("branch", ""); }} > - - {repo.name} - - {repo.owner.username} - - + {repo.name} { {repositories?.map((repo) => ( { form.setValue("repository", { @@ -236,12 +236,7 @@ export const SaveGithubProvider = ({ applicationId }: Props) => { form.setValue("branch", ""); }} > - - {repo.name} - - {repo.owner.login} - - + {repo.name} { {repositories?.map((repo) => { return ( { form.setValue("repository", { @@ -260,12 +260,7 @@ export const SaveGitlabProvider = ({ applicationId }: Props) => { form.setValue("branch", ""); }} > - - {repo.name} - - {repo.owner.username} - - + {repo.name} { const { mutateAsync: stop, isLoading: isStopping } = api.application.stop.useMutation(); - const { mutateAsync: deploy } = api.application.deploy.useMutation(); + const { mutateAsync: deploy, isLoading: isDeploying } = + api.application.deploy.useMutation(); const { mutateAsync: reload, isLoading: isReloading } = api.application.reload.useMutation(); diff --git a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-builds.tsx b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-builds.tsx index 90800f757..527d76cce 100644 --- a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-builds.tsx +++ b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-builds.tsx @@ -5,6 +5,7 @@ import { Dialog, DialogContent, DialogDescription, + DialogFooter, DialogHeader, DialogTitle, DialogTrigger, @@ -25,9 +26,7 @@ export const ShowPreviewBuilds = ({ serverId, trigger, }: Props) => { - const [activeLog, setActiveLog] = useState< - RouterOutputs["deployment"]["all"][number] | null - >(null); + const [activeLog, setActiveLog] = useState(null); const [isOpen, setIsOpen] = useState(false); return ( @@ -78,7 +77,7 @@ export const ShowPreviewBuilds = ({ ); diff --git a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-deployments.tsx b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-deployments.tsx index ec3680f10..371276bdd 100644 --- a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-deployments.tsx +++ b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-deployments.tsx @@ -22,6 +22,7 @@ import { RocketIcon, Trash2, } from "lucide-react"; +import React from "react"; import { toast } from "sonner"; import { ShowModalLogs } from "../../settings/web-server/show-modal-logs"; import { AddPreviewDomain } from "./add-preview-domain"; diff --git a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx index 9d53f31d8..fec61ca60 100644 --- a/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx +++ b/apps/dokploy/components/dashboard/application/preview-deployments/show-preview-settings.tsx @@ -279,7 +279,7 @@ export const ShowPreviewSettings = ({ applicationId }: Props) => { ( + render={({ field }) => ( ; interface Props { - id: string; - type: ServiceType | "application"; + composeId: string; } -export const DeleteService = ({ id, type }: Props) => { +export const DeleteCompose = ({ composeId }: Props) => { const [isOpen, setIsOpen] = useState(false); - - const queryMap = { - postgres: () => - api.postgres.one.useQuery({ postgresId: id }, { enabled: !!id }), - redis: () => api.redis.one.useQuery({ redisId: id }, { enabled: !!id }), - mysql: () => api.mysql.one.useQuery({ mysqlId: id }, { enabled: !!id }), - mariadb: () => - api.mariadb.one.useQuery({ mariadbId: id }, { enabled: !!id }), - application: () => - api.application.one.useQuery({ applicationId: id }, { enabled: !!id }), - mongo: () => api.mongo.one.useQuery({ mongoId: id }, { enabled: !!id }), - compose: () => - api.compose.one.useQuery({ composeId: id }, { enabled: !!id }), - }; - const { data } = queryMap[type] - ? queryMap[type]() - : api.mongo.one.useQuery({ mongoId: id }, { enabled: !!id }); - - const mutationMap = { - postgres: () => api.postgres.remove.useMutation(), - redis: () => api.redis.remove.useMutation(), - mysql: () => api.mysql.remove.useMutation(), - mariadb: () => api.mariadb.remove.useMutation(), - application: () => api.application.delete.useMutation(), - mongo: () => api.mongo.remove.useMutation(), - compose: () => api.compose.delete.useMutation(), - }; - const { mutateAsync, isLoading } = mutationMap[type] - ? mutationMap[type]() - : api.mongo.remove.useMutation(); + const { mutateAsync, isLoading } = api.compose.delete.useMutation(); + const { data } = api.compose.one.useQuery( + { composeId }, + { enabled: !!composeId }, + ); const { push } = useRouter(); const form = useForm({ defaultValues: { @@ -89,23 +62,14 @@ export const DeleteService = ({ id, type }: Props) => { const expectedName = `${data?.name}/${data?.appName}`; if (formData.projectName === expectedName) { const { deleteVolumes } = formData; - await mutateAsync({ - mongoId: id || "", - postgresId: id || "", - redisId: id || "", - mysqlId: id || "", - mariadbId: id || "", - applicationId: id || "", - composeId: id || "", - deleteVolumes, - }) + await mutateAsync({ composeId, deleteVolumes }) .then((result) => { push(`/dashboard/project/${result?.projectId}`); - toast.success("deleted successfully"); + toast.success("Compose deleted successfully"); setIsOpen(false); }) .catch(() => { - toast.error("Error deleting the service"); + toast.error("Error deleting the compose"); }); } else { form.setError("projectName", { @@ -131,8 +95,8 @@ export const DeleteService = ({ id, type }: Props) => { Are you absolutely sure? This action cannot be undone. This will permanently delete the - service. If you are sure please enter the service name to delete - this service. + compose. If you are sure please enter the compose name to delete + this compose.
@@ -155,7 +119,9 @@ export const DeleteService = ({ id, type }: Props) => { variant="outline" onClick={() => { if (data?.name && data?.appName) { - copy(`${data.name}/${data.appName}`); + navigator.clipboard.writeText( + `${data.name}/${data.appName}`, + ); toast.success("Copied to clipboard. Be careful!"); } }} @@ -176,29 +142,27 @@ export const DeleteService = ({ id, type }: Props) => { )} /> - {type === "compose" && ( - ( - -
- - - + ( + +
+ + + - - Delete volumes associated with this compose - -
- -
- )} - /> - )} + + Delete volumes associated with this compose + +
+ +
+ )} + />
diff --git a/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx b/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx index b062b0994..95fafaab1 100644 --- a/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/deployments/refresh-token-compose.tsx @@ -11,6 +11,7 @@ import { } from "@/components/ui/alert-dialog"; import { api } from "@/utils/api"; import { RefreshCcw } from "lucide-react"; +import React from "react"; import { toast } from "sonner"; interface Props { diff --git a/apps/dokploy/components/dashboard/compose/deployments/show-deployment-compose.tsx b/apps/dokploy/components/dashboard/compose/deployments/show-deployment-compose.tsx index 7c191a14c..45869ed2b 100644 --- a/apps/dokploy/components/dashboard/compose/deployments/show-deployment-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/deployments/show-deployment-compose.tsx @@ -17,14 +17,12 @@ interface Props { serverId?: string; open: boolean; onClose: () => void; - errorMessage?: string; } export const ShowDeploymentCompose = ({ logPath, open, onClose, serverId, - errorMessage, }: Props) => { const [data, setData] = useState(""); const [filteredLogs, setFilteredLogs] = useState([]); @@ -107,8 +105,6 @@ export const ShowDeploymentCompose = ({ } }, [filteredLogs, autoScroll]); - const optionalErrors = parseLogs(errorMessage || ""); - return ( )) ) : ( - <> - {optionalErrors.length > 0 ? ( - optionalErrors.map((log: LogLine, index: number) => ( - - )) - ) : ( -
- -
- )} - +
+ +
)} diff --git a/apps/dokploy/components/dashboard/compose/deployments/show-deployments-compose.tsx b/apps/dokploy/components/dashboard/compose/deployments/show-deployments-compose.tsx index fce4f33f9..54c0ad2e2 100644 --- a/apps/dokploy/components/dashboard/compose/deployments/show-deployments-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/deployments/show-deployments-compose.tsx @@ -8,7 +8,7 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { type RouterOutputs, api } from "@/utils/api"; +import { api } from "@/utils/api"; import { RocketIcon } from "lucide-react"; import React, { useEffect, useState } from "react"; import { CancelQueuesCompose } from "./cancel-queues-compose"; @@ -19,9 +19,7 @@ interface Props { composeId: string; } export const ShowDeploymentsCompose = ({ composeId }: Props) => { - const [activeLog, setActiveLog] = useState< - RouterOutputs["deployment"]["all"][number] | null - >(null); + const [activeLog, setActiveLog] = useState(null); const { data } = api.compose.one.useQuery({ composeId }); const { data: deployments } = api.deployment.allByCompose.useQuery( { composeId }, @@ -102,7 +100,7 @@ export const ShowDeploymentsCompose = ({ composeId }: Props) => { + + + + +
+ - {item.host} - - -
- -
-
- {item.path} - {item.port} - {item.https ? "HTTPS" : "HTTP"} -
- -
- - - - { - await deleteDomain({ - domainId: item.domainId, + + + { + await deleteDomain({ + domainId: item.domainId, + }) + .then((data) => { + refetch(); + toast.success("Domain deleted successfully"); }) - .then((_data) => { - refetch(); - toast.success("Domain deleted successfully"); - }) - .catch(() => { - toast.error("Error deleting domain"); - }); - }} + .catch(() => { + toast.error("Error deleting domain"); + }); + }} + > + - -
+ + +
); diff --git a/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx b/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx index 725895821..b368aafce 100644 --- a/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx +++ b/apps/dokploy/components/dashboard/compose/general/compose-file-editor.tsx @@ -14,7 +14,7 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; import { validateAndFormatYAML } from "../../application/advanced/traefik/update-traefik-config"; -import { ShowUtilities } from "./show-utilities"; +import { RandomizeCompose } from "./randomize-compose"; interface Props { composeId: string; @@ -35,7 +35,8 @@ export const ComposeFileEditor = ({ composeId }: Props) => { { enabled: !!composeId }, ); - const { mutateAsync, isLoading } = api.compose.update.useMutation(); + const { mutateAsync, isLoading, error, isError } = + api.compose.update.useMutation(); const form = useForm({ defaultValues: { @@ -75,7 +76,7 @@ export const ComposeFileEditor = ({ composeId }: Props) => { composeId, }); }) - .catch((_e) => { + .catch((e) => { toast.error("Error updating the Compose config"); }); }; @@ -124,7 +125,7 @@ services:
- +
-
- -
- -
-							
-						
-
- - - - ); -}; diff --git a/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx b/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx index 4cc877fde..59233acf8 100644 --- a/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/randomize-compose.tsx @@ -1,10 +1,14 @@ import { AlertBlock } from "@/components/shared/alert-block"; import { CodeEditor } from "@/components/shared/code-editor"; import { Button } from "@/components/ui/button"; +import { CardTitle } from "@/components/ui/card"; import { + Dialog, + DialogContent, DialogDescription, DialogHeader, DialogTitle, + DialogTrigger, } from "@/components/ui/dialog"; import { Form, @@ -16,10 +20,15 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; +import { + InputOTP, + InputOTPGroup, + InputOTPSlot, +} from "@/components/ui/input-otp"; import { Switch } from "@/components/ui/switch"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { AlertTriangle } from "lucide-react"; +import { AlertTriangle, Dices } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -39,7 +48,7 @@ type Schema = z.infer; export const RandomizeCompose = ({ composeId }: Props) => { const utils = api.useUtils(); const [compose, setCompose] = useState(""); - const [_isOpen, _setIsOpen] = useState(false); + const [isOpen, setIsOpen] = useState(false); const { mutateAsync, error, isError } = api.compose.randomizeCompose.useMutation(); @@ -61,7 +70,6 @@ export const RandomizeCompose = ({ composeId }: Props) => { const suffix = form.watch("suffix"); useEffect(() => { - randomizeCompose(); if (data) { form.reset({ suffix: data?.suffix || "", @@ -76,7 +84,7 @@ export const RandomizeCompose = ({ composeId }: Props) => { suffix: formData?.suffix || "", randomize: formData?.randomize || false, }) - .then(async (_data) => { + .then(async (data) => { randomizeCompose(); refetch(); toast.success("Compose updated"); @@ -102,117 +110,126 @@ export const RandomizeCompose = ({ composeId }: Props) => { }; return ( -
- - Randomize Compose (Experimental) - - Use this in case you want to deploy the same compose file and you have - conflicts with some property like volumes, networks, etc. - - -
- - This will randomize the compose file and will add a suffix to the - property to avoid conflicts - -
    -
  • volumes
  • -
  • networks
  • -
  • services
  • -
  • configs
  • -
  • secrets
  • -
- - When you activate this option, we will include a env `COMPOSE_PREFIX` - variable to the compose file so you can use it in your compose file. - -
- {isError && {error?.message}} -
- - {isError && ( -
- - - {error?.message} - -
- )} + + randomizeCompose()}> + + + + + Randomize Compose (Experimental) + + Use this in case you want to deploy the same compose file and you + have conflicts with some property like volumes, networks, etc. + + +
+ + This will randomize the compose file and will add a suffix to the + property to avoid conflicts + +
    +
  • volumes
  • +
  • networks
  • +
  • services
  • +
  • configs
  • +
  • secrets
  • +
+ + When you activate this option, we will include a env + `COMPOSE_PREFIX` variable to the compose file so you can use it in + your compose file. + +
+ {isError && {error?.message}} + + + {isError && ( +
+ + + {error?.message} + +
+ )} -
-
- ( - - Suffix - - - - - - )} - /> - ( - -
- Apply Randomize - - Apply randomize to the compose file. - -
- - - -
- )} - /> -
+
+
+ ( + + Suffix + + + + + + )} + /> + ( + +
+ Apply Randomize + + Apply randomize to the compose file. + +
+ + + +
+ )} + /> +
-
- - +
+ + +
-
-
-						
-					
- - -
+
+							
+						
+ + +
+
); }; diff --git a/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx b/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx index 49606645c..8a2186d9e 100644 --- a/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx +++ b/apps/dokploy/components/dashboard/compose/general/show-converted-compose.tsx @@ -40,7 +40,7 @@ export const ShowConvertedCompose = ({ composeId }: Props) => { .then(() => { refetch(); }) - .catch((_err) => {}); + .catch((err) => {}); } }, [isOpen]); diff --git a/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx b/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx deleted file mode 100644 index 214102ce9..000000000 --- a/apps/dokploy/components/dashboard/compose/general/show-utilities.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { useState } from "react"; -import { IsolatedDeployment } from "./isolated-deployment"; -import { RandomizeCompose } from "./randomize-compose"; - -interface Props { - composeId: string; -} - -export const ShowUtilities = ({ composeId }: Props) => { - const [isOpen, setIsOpen] = useState(false); - return ( - - - - - - - Utilities - Modify the application data - - - - Isolated Deployment - Randomize Compose - - - - - - - - - - - ); -}; diff --git a/apps/dokploy/components/dashboard/compose/general/show.tsx b/apps/dokploy/components/dashboard/compose/general/show.tsx index 71752525c..d002b409c 100644 --- a/apps/dokploy/components/dashboard/compose/general/show.tsx +++ b/apps/dokploy/components/dashboard/compose/general/show.tsx @@ -7,6 +7,7 @@ import { CardTitle, } from "@/components/ui/card"; import { api } from "@/utils/api"; +import React from "react"; import { ComposeActions } from "./actions"; import { ShowProviderFormCompose } from "./generic/show"; interface Props { diff --git a/apps/dokploy/components/dashboard/compose/logs/show.tsx b/apps/dokploy/components/dashboard/compose/logs/show.tsx index 571190549..4530e0ddd 100644 --- a/apps/dokploy/components/dashboard/compose/logs/show.tsx +++ b/apps/dokploy/components/dashboard/compose/logs/show.tsx @@ -18,7 +18,7 @@ import { SelectValue, } from "@/components/ui/select"; import { api } from "@/utils/api"; -import { Loader2 } from "lucide-react"; +import { Loader, Loader2 } from "lucide-react"; import dynamic from "next/dynamic"; import { useEffect, useState } from "react"; export const DockerLogs = dynamic( diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-compose-monitoring.tsx b/apps/dokploy/components/dashboard/compose/monitoring/show.tsx similarity index 80% rename from apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-compose-monitoring.tsx rename to apps/dokploy/components/dashboard/compose/monitoring/show.tsx index 4ca461c21..898af8ec6 100644 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-compose-monitoring.tsx +++ b/apps/dokploy/components/dashboard/compose/monitoring/show.tsx @@ -1,5 +1,3 @@ -import { badgeStateColor } from "@/components/dashboard/application/logs/show"; -import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, @@ -22,22 +20,18 @@ import { api } from "@/utils/api"; import { Loader2 } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "sonner"; -import { ContainerPaidMonitoring } from "./show-paid-container-monitoring"; +import { DockerMonitoring } from "../../monitoring/docker/show"; interface Props { appName: string; serverId?: string; appType: "stack" | "docker-compose"; - baseUrl: string; - token: string; } -export const ComposePaidMonitoring = ({ +export const ShowMonitoringCompose = ({ appName, appType = "stack", serverId, - baseUrl, - token, }: Props) => { const { data, isLoading } = api.docker.getContainersByAppNameMatch.useQuery( { @@ -50,9 +44,9 @@ export const ComposePaidMonitoring = ({ }, ); - const [containerAppName, setContainerAppName] = useState( - "", - ); + const [containerAppName, setContainerAppName] = useState< + string | undefined + >(); const [containerId, setContainerId] = useState(); @@ -68,7 +62,7 @@ export const ComposePaidMonitoring = ({ return (
- + Monitoring Watch the usage of your compose @@ -104,9 +98,7 @@ export const ComposePaidMonitoring = ({ value={container.name} > {container.name} ({container.containerId}){" "} - - {container.state} - + {container.state} ))} Containers ({data?.length}) @@ -126,13 +118,10 @@ export const ComposePaidMonitoring = ({ Restart
-
- -
+
diff --git a/apps/dokploy/components/dashboard/database/backups/show-backups.tsx b/apps/dokploy/components/dashboard/database/backups/show-backups.tsx index 6619ceae7..9e493529c 100644 --- a/apps/dokploy/components/dashboard/database/backups/show-backups.tsx +++ b/apps/dokploy/components/dashboard/database/backups/show-backups.tsx @@ -16,6 +16,7 @@ import { import { api } from "@/utils/api"; import { DatabaseBackup, Play, Trash2 } from "lucide-react"; import Link from "next/link"; +import React from "react"; import { toast } from "sonner"; import type { ServiceType } from "../../application/advanced/show-resources"; import { AddBackup } from "./add-backup"; @@ -74,7 +75,7 @@ export const ShowBackups = ({ id, type }: Props) => { {data?.length === 0 ? (
- + To create a backup it is required to set at least 1 provider. Please, go to{" "} - `${match}`, + /]*)>([^<]*)<\/span>/g, + (match, attrs, content) => { + const searchRegex = new RegExp(`(${escapeRegExp(term)})`, "gi"); + if (!content.match(searchRegex)) return match; + + const segments = content.split(searchRegex); + const wrappedSegments = segments + .map((segment: string) => + segment.toLowerCase() === term.toLowerCase() + ? `${segment}` + : segment, + ) + .join(""); + + return `${wrappedSegments}`; + }, ); return ( diff --git a/apps/dokploy/components/dashboard/docker/logs/utils.ts b/apps/dokploy/components/dashboard/docker/logs/utils.ts index 5e97edfe2..cf0b30bbd 100644 --- a/apps/dokploy/components/dashboard/docker/logs/utils.ts +++ b/apps/dokploy/components/dashboard/docker/logs/utils.ts @@ -43,7 +43,7 @@ const LOG_STYLES: Record = { export function parseLogs(logString: string): LogLine[] { // Regex to match the log line format - // Example of return : + // Exemple of return : // 1 2024-12-10T10:00:00.000Z The server is running on port 8080 // Should return : // { timestamp: new Date("2024-12-10T10:00:00.000Z"), @@ -63,10 +63,18 @@ export function parseLogs(logString: string): LogLine[] { if (!message?.trim()) return null; + // Delete other timestamps and keep only the one from --timestamps + const cleanedMessage = message + ?.replace( + /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z|\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} UTC/g, + "", + ) + .trim(); + return { rawTimestamp: timestamp ?? null, timestamp: timestamp ? new Date(timestamp.replace(" UTC", "Z")) : null, - message: message.trim(), + message: cleanedMessage, }; }) .filter((log) => log !== null); diff --git a/apps/dokploy/components/dashboard/docker/show/colums.tsx b/apps/dokploy/components/dashboard/docker/show/colums.tsx index 1cf0200f2..3feae176a 100644 --- a/apps/dokploy/components/dashboard/docker/show/colums.tsx +++ b/apps/dokploy/components/dashboard/docker/show/colums.tsx @@ -1,5 +1,6 @@ import type { ColumnDef } from "@tanstack/react-table"; import { ArrowUpDown, MoreHorizontal } from "lucide-react"; +import * as React from "react"; import { Button } from "@/components/ui/button"; import { diff --git a/apps/dokploy/components/dashboard/docker/show/show-containers.tsx b/apps/dokploy/components/dashboard/docker/show/show-containers.tsx index 024b00618..c66c9b9ba 100644 --- a/apps/dokploy/components/dashboard/docker/show/show-containers.tsx +++ b/apps/dokploy/components/dashboard/docker/show/show-containers.tsx @@ -1,3 +1,18 @@ +import { + type ColumnFiltersState, + type SortingState, + type VisibilityState, + flexRender, + getCoreRowModel, + getFilteredRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { ChevronDown, Container } from "lucide-react"; +import * as React from "react"; + +import { AlertBlock } from "@/components/shared/alert-block"; import { Button } from "@/components/ui/button"; import { Card, @@ -22,19 +37,6 @@ import { TableRow, } from "@/components/ui/table"; import { type RouterOutputs, api } from "@/utils/api"; -import { - type ColumnFiltersState, - type SortingState, - type VisibilityState, - flexRender, - getCoreRowModel, - getFilteredRowModel, - getPaginationRowModel, - getSortedRowModel, - useReactTable, -} from "@tanstack/react-table"; -import { ChevronDown, Container } from "lucide-react"; -import * as React from "react"; import { columns } from "./colums"; export type Container = NonNullable< RouterOutputs["docker"]["getContainers"] diff --git a/apps/dokploy/components/dashboard/file-system/show-traefik-system.tsx b/apps/dokploy/components/dashboard/file-system/show-traefik-system.tsx index c9272f293..ed2ed1974 100644 --- a/apps/dokploy/components/dashboard/file-system/show-traefik-system.tsx +++ b/apps/dokploy/components/dashboard/file-system/show-traefik-system.tsx @@ -7,8 +7,9 @@ import { CardTitle, } from "@/components/ui/card"; import { Tree } from "@/components/ui/file-tree"; +import { cn } from "@/lib/utils"; import { api } from "@/utils/api"; -import { FileIcon, Folder, Loader2, Workflow } from "lucide-react"; +import { FileIcon, Folder, Link, Loader2, Workflow } from "lucide-react"; import React from "react"; import { ShowTraefikFile } from "./show-traefik-file"; diff --git a/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx b/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx index 4a5c43a26..f20449178 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/show-external-mariadb-credentials.tsx @@ -19,7 +19,7 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; diff --git a/apps/dokploy/components/dashboard/mariadb/general/show-general-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/general/show-general-mariadb.tsx index ad6b1164b..98773685f 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/show-general-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/show-general-mariadb.tsx @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Ban, CheckCircle2, RefreshCcw, Terminal } from "lucide-react"; -import { useState } from "react"; +import React, { useState } from "react"; import { toast } from "sonner"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; diff --git a/apps/dokploy/components/dashboard/mariadb/general/show-internal-mariadb-credentials.tsx b/apps/dokploy/components/dashboard/mariadb/general/show-internal-mariadb-credentials.tsx index 170269269..b409ac4d8 100644 --- a/apps/dokploy/components/dashboard/mariadb/general/show-internal-mariadb-credentials.tsx +++ b/apps/dokploy/components/dashboard/mariadb/general/show-internal-mariadb-credentials.tsx @@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; +import React from "react"; interface Props { mariadbId: string; diff --git a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx index 48d944898..4c9be0903 100644 --- a/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx +++ b/apps/dokploy/components/dashboard/mariadb/update-mariadb.tsx @@ -21,7 +21,7 @@ import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { PenBoxIcon } from "lucide-react"; +import { AlertTriangle, PenBoxIcon, SquarePen } from "lucide-react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; diff --git a/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx b/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx index 9fe6e7137..6dd2e9198 100644 --- a/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/show-external-mongo-credentials.tsx @@ -19,7 +19,7 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; diff --git a/apps/dokploy/components/dashboard/mongo/general/show-general-mongo.tsx b/apps/dokploy/components/dashboard/mongo/general/show-general-mongo.tsx index a20d46378..df01e36d4 100644 --- a/apps/dokploy/components/dashboard/mongo/general/show-general-mongo.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/show-general-mongo.tsx @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Ban, CheckCircle2, RefreshCcw, Terminal } from "lucide-react"; -import { useState } from "react"; +import React, { useState } from "react"; import { toast } from "sonner"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; diff --git a/apps/dokploy/components/dashboard/mongo/general/show-internal-mongo-credentials.tsx b/apps/dokploy/components/dashboard/mongo/general/show-internal-mongo-credentials.tsx index e66ea8c36..6636688d9 100644 --- a/apps/dokploy/components/dashboard/mongo/general/show-internal-mongo-credentials.tsx +++ b/apps/dokploy/components/dashboard/mongo/general/show-internal-mongo-credentials.tsx @@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; +import React from "react"; interface Props { mongoId: string; diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/docker-block-chart.tsx b/apps/dokploy/components/dashboard/monitoring/docker/docker-block-chart.tsx similarity index 88% rename from apps/dokploy/components/dashboard/monitoring/free/container/docker-block-chart.tsx rename to apps/dokploy/components/dashboard/monitoring/docker/docker-block-chart.tsx index 718ddafa4..57a3cbe22 100644 --- a/apps/dokploy/components/dashboard/monitoring/free/container/docker-block-chart.tsx +++ b/apps/dokploy/components/dashboard/monitoring/docker/docker-block-chart.tsx @@ -8,7 +8,7 @@ import { Tooltip, YAxis, } from "recharts"; -import type { DockerStatsJSON } from "./show-free-container-monitoring"; +import type { DockerStatsJSON } from "./show"; interface Props { acummulativeData: DockerStatsJSON["block"]; @@ -90,11 +90,9 @@ const CustomTooltip = ({ active, payload }: CustomTooltipProps) => { if (active && payload && payload.length && payload[0]) { return (
- {payload[0].payload.time && ( -

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

- )} -

{`Read ${payload[0].payload.readMb} `}

-

{`Write: ${payload[0].payload.writeMb} `}

+

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

+

{`Read ${payload[0].payload.readMb.toFixed(2)} MB`}

+

{`Write: ${payload[0].payload.writeMb.toFixed(3)} MB`}

); } diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/docker-cpu-chart.tsx b/apps/dokploy/components/dashboard/monitoring/docker/docker-cpu-chart.tsx similarity index 88% rename from apps/dokploy/components/dashboard/monitoring/free/container/docker-cpu-chart.tsx rename to apps/dokploy/components/dashboard/monitoring/docker/docker-cpu-chart.tsx index c24a63638..41f20f8f1 100644 --- a/apps/dokploy/components/dashboard/monitoring/free/container/docker-cpu-chart.tsx +++ b/apps/dokploy/components/dashboard/monitoring/docker/docker-cpu-chart.tsx @@ -8,7 +8,7 @@ import { Tooltip, YAxis, } from "recharts"; -import type { DockerStatsJSON } from "./show-free-container-monitoring"; +import type { DockerStatsJSON } from "./show"; interface Props { acummulativeData: DockerStatsJSON["cpu"]; @@ -19,7 +19,7 @@ export const DockerCpuChart = ({ acummulativeData }: Props) => { return { name: `Point ${index + 1}`, time: item.time, - usage: item.value.toString().split("%")[0], + usage: item.value.toFixed(2), }; }); return ( @@ -75,9 +75,7 @@ const CustomTooltip = ({ active, payload }: CustomTooltipProps) => { if (active && payload && payload.length && payload[0]) { return (
- {payload[0].payload.time && ( -

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

- )} +

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

{`CPU Usage: ${payload[0].payload.usage}%`}

); diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/docker-disk-chart.tsx b/apps/dokploy/components/dashboard/monitoring/docker/docker-disk-chart.tsx similarity index 97% rename from apps/dokploy/components/dashboard/monitoring/free/container/docker-disk-chart.tsx rename to apps/dokploy/components/dashboard/monitoring/docker/docker-disk-chart.tsx index 5fe62154c..a97fcfedd 100644 --- a/apps/dokploy/components/dashboard/monitoring/free/container/docker-disk-chart.tsx +++ b/apps/dokploy/components/dashboard/monitoring/docker/docker-disk-chart.tsx @@ -8,7 +8,7 @@ import { Tooltip, YAxis, } from "recharts"; -import type { DockerStatsJSON } from "./show-free-container-monitoring"; +import type { DockerStatsJSON } from "./show"; interface Props { acummulativeData: DockerStatsJSON["disk"]; diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/docker-memory-chart.tsx b/apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx similarity index 80% rename from apps/dokploy/components/dashboard/monitoring/free/container/docker-memory-chart.tsx rename to apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx index 82a1ff3d5..36f1edb81 100644 --- a/apps/dokploy/components/dashboard/monitoring/free/container/docker-memory-chart.tsx +++ b/apps/dokploy/components/dashboard/monitoring/docker/docker-memory-chart.tsx @@ -8,8 +8,8 @@ import { Tooltip, YAxis, } from "recharts"; -import type { DockerStatsJSON } from "./show-free-container-monitoring"; -import { convertMemoryToBytes } from "./show-free-container-monitoring"; +import type { DockerStatsJSON } from "./show"; + interface Props { acummulativeData: DockerStatsJSON["memory"]; memoryLimitGB: number; @@ -23,8 +23,7 @@ export const DockerMemoryChart = ({ return { time: item.time, name: `Point ${index + 1}`, - // @ts-ignore - usage: (convertMemoryToBytes(item.value.used) / 1024 ** 3).toFixed(2), + usage: (item.value.used / 1024 ** 3).toFixed(2), }; }); return ( @@ -76,13 +75,10 @@ interface CustomTooltipProps { } const CustomTooltip = ({ active, payload }: CustomTooltipProps) => { - if (active && payload && payload.length && payload[0] && payload[0].payload) { + if (active && payload && payload.length && payload[0]) { return (
- {payload[0].payload.time && ( -

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

- )} - +

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

{`Memory usage: ${payload[0].payload.usage} GB`}

); diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/docker-network-chart.tsx b/apps/dokploy/components/dashboard/monitoring/docker/docker-network-chart.tsx similarity index 84% rename from apps/dokploy/components/dashboard/monitoring/free/container/docker-network-chart.tsx rename to apps/dokploy/components/dashboard/monitoring/docker/docker-network-chart.tsx index cd6b7dfde..b522603d8 100644 --- a/apps/dokploy/components/dashboard/monitoring/free/container/docker-network-chart.tsx +++ b/apps/dokploy/components/dashboard/monitoring/docker/docker-network-chart.tsx @@ -8,7 +8,8 @@ import { Tooltip, YAxis, } from "recharts"; -import type { DockerStatsJSON } from "./show-free-container-monitoring"; +import type { DockerStatsJSON } from "./show"; +1; interface Props { acummulativeData: DockerStatsJSON["network"]; } @@ -18,8 +19,8 @@ export const DockerNetworkChart = ({ acummulativeData }: Props) => { return { time: item.time, name: `Point ${index + 1}`, - inMB: item.value.inputMb, - outMB: item.value.outputMb, + inMB: item.value.inputMb.toFixed(2), + outMB: item.value.outputMb.toFixed(2), }; }); return ( @@ -85,11 +86,9 @@ const CustomTooltip = ({ active, payload }: CustomTooltipProps) => { if (active && payload && payload.length && payload[0]) { return (
- {payload[0].payload.time && ( -

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

- )} -

{`In Usage: ${payload[0].payload.inMB} `}

-

{`Out Usage: ${payload[0].payload.outMB} `}

+

{`Date: ${format(new Date(payload[0].payload.time), "PPpp")}`}

+

{`In MB Usage: ${payload[0].payload.inMB} MB`}

+

{`Out MB Usage: ${payload[0].payload.outMB} MB`}

); } diff --git a/apps/dokploy/components/dashboard/monitoring/docker/show.tsx b/apps/dokploy/components/dashboard/monitoring/docker/show.tsx new file mode 100644 index 000000000..2e5eecef0 --- /dev/null +++ b/apps/dokploy/components/dashboard/monitoring/docker/show.tsx @@ -0,0 +1,314 @@ +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Progress } from "@/components/ui/progress"; +import { api } from "@/utils/api"; +import React, { useEffect, useState } from "react"; +import { DockerBlockChart } from "./docker-block-chart"; +import { DockerCpuChart } from "./docker-cpu-chart"; +import { DockerDiskChart } from "./docker-disk-chart"; +import { DockerMemoryChart } from "./docker-memory-chart"; +import { DockerNetworkChart } from "./docker-network-chart"; + +const defaultData = { + cpu: { + value: 0, + time: "", + }, + memory: { + value: { + used: 0, + free: 0, + usedPercentage: 0, + total: 0, + }, + time: "", + }, + block: { + value: { + readMb: 0, + writeMb: 0, + }, + time: "", + }, + network: { + value: { + inputMb: 0, + outputMb: 0, + }, + time: "", + }, + disk: { + value: { diskTotal: 0, diskUsage: 0, diskUsedPercentage: 0, diskFree: 0 }, + time: "", + }, +}; + +interface Props { + appName: string; + appType?: "application" | "stack" | "docker-compose"; +} +export interface DockerStats { + cpu: { + value: number; + time: string; + }; + memory: { + value: { + used: number; + free: number; + usedPercentage: number; + total: number; + }; + time: string; + }; + block: { + value: { + readMb: number; + writeMb: number; + }; + time: string; + }; + network: { + value: { + inputMb: number; + outputMb: number; + }; + time: string; + }; + disk: { + value: { + diskTotal: number; + diskUsage: number; + diskUsedPercentage: number; + diskFree: number; + }; + + time: string; + }; +} + +export type DockerStatsJSON = { + cpu: DockerStats["cpu"][]; + memory: DockerStats["memory"][]; + block: DockerStats["block"][]; + network: DockerStats["network"][]; + disk: DockerStats["disk"][]; +}; + +export const DockerMonitoring = ({ + appName, + appType = "application", +}: Props) => { + const { data } = api.application.readAppMonitoring.useQuery( + { appName }, + { + refetchOnWindowFocus: false, + }, + ); + const [acummulativeData, setAcummulativeData] = useState({ + cpu: [], + memory: [], + block: [], + network: [], + disk: [], + }); + const [currentData, setCurrentData] = useState(defaultData); + + useEffect(() => { + setCurrentData(defaultData); + + setAcummulativeData({ + cpu: [], + memory: [], + block: [], + network: [], + disk: [], + }); + }, [appName]); + + useEffect(() => { + if (!data) return; + + setCurrentData({ + cpu: data.cpu[data.cpu.length - 1] ?? currentData.cpu, + memory: data.memory[data.memory.length - 1] ?? currentData.memory, + block: data.block[data.block.length - 1] ?? currentData.block, + network: data.network[data.network.length - 1] ?? currentData.network, + disk: data.disk[data.disk.length - 1] ?? currentData.disk, + }); + setAcummulativeData({ + block: data?.block || [], + cpu: data?.cpu || [], + disk: data?.disk || [], + memory: data?.memory || [], + network: data?.network || [], + }); + }, [data]); + + useEffect(() => { + const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; + const wsUrl = `${protocol}//${window.location.host}/listen-docker-stats-monitoring?appName=${appName}&appType=${appType}`; + const ws = new WebSocket(wsUrl); + + ws.onmessage = (e) => { + const value = JSON.parse(e.data); + if (!value) return; + + const data = { + cpu: value.data.cpu ?? currentData.cpu, + memory: value.data.memory ?? currentData.memory, + block: value.data.block ?? currentData.block, + disk: value.data.disk ?? currentData.disk, + network: value.data.network ?? currentData.network, + }; + + setCurrentData(data); + + setAcummulativeData((prevData) => ({ + cpu: [...prevData.cpu, data.cpu], + memory: [...prevData.memory, data.memory], + block: [...prevData.block, data.block], + network: [...prevData.network, data.network], + disk: [...prevData.disk, data.disk], + })); + }; + + ws.onclose = (e) => { + console.log(e.reason); + }; + + return () => ws.close(); + }, [appName]); + + return ( +
+ +
+
+
+

+ Monitoring +

+

+ Watch the usage of your server in the current app +

+
+
+ +
+ + + CPU Usage + + +
+ + Used: {currentData.cpu.value.toFixed(2)}% + + + +
+
+
+ + + + + Memory Usage + + + +
+ + {`Used: ${(currentData.memory.value.used / 1024 ** 3).toFixed(2)} GB / Limit: ${(currentData.memory.value.total / 1024 ** 3).toFixed(2)} GB`} + + + +
+
+
+ + {appName === "dokploy" && ( + + + + Disk Space + + + +
+ + {`Used: ${currentData.disk.value.diskUsage} GB / Limit: ${currentData.disk.value.diskTotal} GB`} + + + +
+
+
+ )} + + + + Block I/O + + +
+ + {`Read: ${currentData.block.value.readMb.toFixed( + 2, + )} MB / Write: ${currentData.block.value.writeMb.toFixed( + 3, + )} MB`} + + +
+
+
+ + + + + Network I/O + + + +
+ + {`In MB: ${currentData.network.value.inputMb.toFixed( + 2, + )} MB / Out MB: ${currentData.network.value.outputMb.toFixed( + 2, + )} MB`} + + +
+
+
+
+
+
+
+ ); +}; diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/show-free-compose-monitoring.tsx b/apps/dokploy/components/dashboard/monitoring/free/container/show-free-compose-monitoring.tsx deleted file mode 100644 index 84510154c..000000000 --- a/apps/dokploy/components/dashboard/monitoring/free/container/show-free-compose-monitoring.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import { badgeStateColor } from "@/components/dashboard/application/logs/show"; -import { Badge } from "@/components/ui/badge"; -import { Button } from "@/components/ui/button"; -import { - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { Label } from "@/components/ui/label"; -import { - Select, - SelectContent, - SelectGroup, - SelectItem, - SelectLabel, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { api } from "@/utils/api"; -import { Loader2 } from "lucide-react"; -import { useEffect, useState } from "react"; -import { toast } from "sonner"; -import { ContainerFreeMonitoring } from "./show-free-container-monitoring"; - -interface Props { - appName: string; - serverId?: string; - appType: "stack" | "docker-compose"; -} - -export const ComposeFreeMonitoring = ({ - appName, - appType = "stack", - serverId, -}: Props) => { - const { data, isLoading } = api.docker.getContainersByAppNameMatch.useQuery( - { - appName: appName, - appType, - serverId, - }, - { - enabled: !!appName, - }, - ); - - const [containerAppName, setContainerAppName] = useState< - string | undefined - >(); - - const [containerId, setContainerId] = useState(); - - const { mutateAsync: restart, isLoading: isRestarting } = - api.docker.restartContainer.useMutation(); - - useEffect(() => { - if (data && data?.length > 0) { - setContainerAppName(data[0]?.name); - setContainerId(data[0]?.containerId); - } - }, [data]); - - return ( - <> - - Monitoring - Watch the usage of your compose - - - -
- - -
- -
- - ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/free/container/show-free-container-monitoring.tsx b/apps/dokploy/components/dashboard/monitoring/free/container/show-free-container-monitoring.tsx deleted file mode 100644 index 278e09360..000000000 --- a/apps/dokploy/components/dashboard/monitoring/free/container/show-free-container-monitoring.tsx +++ /dev/null @@ -1,310 +0,0 @@ -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Progress } from "@/components/ui/progress"; -import { api } from "@/utils/api"; -import { useEffect, useState } from "react"; -import { DockerBlockChart } from "./docker-block-chart"; -import { DockerCpuChart } from "./docker-cpu-chart"; -import { DockerDiskChart } from "./docker-disk-chart"; -import { DockerMemoryChart } from "./docker-memory-chart"; -import { DockerNetworkChart } from "./docker-network-chart"; - -const defaultData = { - cpu: { - value: 0, - time: "", - }, - memory: { - value: { - used: 0, - total: 0, - }, - time: "", - }, - block: { - value: { - readMb: 0, - writeMb: 0, - }, - time: "", - }, - network: { - value: { - inputMb: 0, - outputMb: 0, - }, - time: "", - }, - disk: { - value: { diskTotal: 0, diskUsage: 0, diskUsedPercentage: 0, diskFree: 0 }, - time: "", - }, -}; - -interface Props { - appName: string; - appType?: "application" | "stack" | "docker-compose"; -} -export interface DockerStats { - cpu: { - value: number; - time: string; - }; - memory: { - value: { - used: number; - total: number; - }; - time: string; - }; - block: { - value: { - readMb: number; - writeMb: number; - }; - time: string; - }; - network: { - value: { - inputMb: number; - outputMb: number; - }; - time: string; - }; - disk: { - value: { - diskTotal: number; - diskUsage: number; - diskUsedPercentage: number; - diskFree: number; - }; - - time: string; - }; -} - -export type DockerStatsJSON = { - cpu: DockerStats["cpu"][]; - memory: DockerStats["memory"][]; - block: DockerStats["block"][]; - network: DockerStats["network"][]; - disk: DockerStats["disk"][]; -}; - -export const convertMemoryToBytes = ( - memoryString: string | undefined, -): number => { - if (!memoryString || typeof memoryString !== "string") { - return 0; - } - - const value = Number.parseFloat(memoryString) || 0; - const unit = memoryString.replace(/[0-9.]/g, "").trim(); - - switch (unit) { - case "KiB": - return value * 1024; - case "MiB": - return value * 1024 * 1024; - case "GiB": - return value * 1024 * 1024 * 1024; - case "TiB": - return value * 1024 * 1024 * 1024 * 1024; - default: - return value; - } -}; - -export const ContainerFreeMonitoring = ({ - appName, - appType = "application", -}: Props) => { - const { data } = api.application.readAppMonitoring.useQuery( - { appName }, - { - refetchOnWindowFocus: false, - }, - ); - const [acummulativeData, setAcummulativeData] = useState({ - cpu: [], - memory: [], - block: [], - network: [], - disk: [], - }); - const [currentData, setCurrentData] = useState(defaultData); - - useEffect(() => { - setCurrentData(defaultData); - - setAcummulativeData({ - cpu: [], - memory: [], - block: [], - network: [], - disk: [], - }); - }, [appName]); - - useEffect(() => { - if (!data) return; - - setCurrentData({ - cpu: data.cpu[data.cpu.length - 1] ?? currentData.cpu, - memory: data.memory[data.memory.length - 1] ?? currentData.memory, - block: data.block[data.block.length - 1] ?? currentData.block, - network: data.network[data.network.length - 1] ?? currentData.network, - disk: data.disk[data.disk.length - 1] ?? currentData.disk, - }); - setAcummulativeData({ - block: data?.block || [], - cpu: data?.cpu || [], - disk: data?.disk || [], - memory: data?.memory || [], - network: data?.network || [], - }); - }, [data]); - - useEffect(() => { - const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; - const wsUrl = `${protocol}//${window.location.host}/listen-docker-stats-monitoring?appName=${appName}&appType=${appType}`; - const ws = new WebSocket(wsUrl); - - ws.onmessage = (e) => { - const value = JSON.parse(e.data); - if (!value) return; - - const data = { - cpu: value.data.cpu ?? currentData.cpu, - memory: value.data.memory ?? currentData.memory, - block: value.data.block ?? currentData.block, - disk: value.data.disk ?? currentData.disk, - network: value.data.network ?? currentData.network, - }; - - setCurrentData(data); - - setAcummulativeData((prevData) => ({ - cpu: [...prevData.cpu, data.cpu], - memory: [...prevData.memory, data.memory], - block: [...prevData.block, data.block], - network: [...prevData.network, data.network], - disk: [...prevData.disk, data.disk], - })); - }; - - ws.onclose = (e) => { - console.log(e.reason); - }; - - return () => ws.close(); - }, [appName]); - - return ( -
-
-
-

Monitoring

-

- Watch the usage of your server in the current app -

-
-
- -
- - - CPU Usage - - -
- - Used: {currentData.cpu.value}% - - - -
-
-
- - - Memory Usage - - -
- - {`Used: ${currentData.memory.value.used} / Limit: ${currentData.memory.value.total} `} - - - -
-
-
- {appName === "dokploy" && ( - - - Disk Space - - -
- - {`Used: ${currentData.disk.value.diskUsage} GB / Limit: ${currentData.disk.value.diskTotal} GB`} - - - -
-
-
- )} - - - - Block I/O - - -
- - {`Read: ${currentData.block.value.readMb} / Write: ${currentData.block.value.writeMb} `} - - -
-
-
- - - Network I/O - - -
- - {`In MB: ${currentData.network.value.inputMb} / Out MB: ${currentData.network.value.outputMb} `} - - -
-
-
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/container-block-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/container/container-block-chart.tsx deleted file mode 100644 index 12af6b91d..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/container-block-chart.tsx +++ /dev/null @@ -1,181 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface ContainerMetric { - timestamp: string; - BlockIO: { - read: number; - write: number; - readUnit: string; - writeUnit: string; - }; -} - -interface Props { - data: ContainerMetric[]; -} - -const chartConfig = { - read: { - label: "Read", - color: "hsl(217, 91%, 60%)", // Azul brillante - }, - write: { - label: "Write", - color: "hsl(142, 71%, 45%)", // Verde brillante - }, -} satisfies ChartConfig; - -export const ContainerBlockChart = ({ data }: Props) => { - const formattedData = data.map((metric) => ({ - timestamp: metric.timestamp, - read: metric.BlockIO.read, - write: metric.BlockIO.write, - readUnit: metric.BlockIO.readUnit, - writeUnit: metric.BlockIO.writeUnit, - })); - - const latestData = formattedData[formattedData.length - 1] || { - timestamp: "", - read: 0, - write: 0, - readUnit: "B", - writeUnit: "B", - }; - - return ( - - - Block I/O - - Read: {latestData.read} - {latestData.readUnit} / Write: {latestData.write} - {latestData.writeUnit} - - - - - - - - - - - - - - - - - formatTimestamp(value)} - /> - - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - Read - - - {data.read} - {data.readUnit} - -
-
- - Write - - - {data.write} - {data.writeUnit} - -
-
-
- ); - } - return null; - }} - /> - - - } - verticalAlign="bottom" - align="center" - /> -
-
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/container-cpu-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/container/container-cpu-chart.tsx deleted file mode 100644 index 445e03e12..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/container-cpu-chart.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface ContainerMetric { - timestamp: string; - CPU: number; -} - -interface Props { - data: ContainerMetric[]; -} - -const chartConfig = { - cpu: { - label: "CPU", - color: "hsl(var(--chart-1))", - }, -} satisfies ChartConfig; - -export const ContainerCPUChart = ({ data }: Props) => { - const formattedData = data.map((metric) => ({ - timestamp: metric.timestamp, - cpu: metric.CPU, - })); - - const latestData = formattedData[formattedData.length - 1] || { - timestamp: "", - cpu: 0, - }; - - return ( - - - CPU - CPU Usage: {latestData.cpu}% - - - - - - - - - - - - formatTimestamp(value)} - /> - `${value}%`} domain={[0, 100]} /> - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - CPU - - {data.cpu}% -
-
-
- ); - } - return null; - }} - /> - - } - verticalAlign="bottom" - align="center" - /> -
-
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/container-memory-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/container/container-memory-chart.tsx deleted file mode 100644 index 4da864285..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/container-memory-chart.tsx +++ /dev/null @@ -1,149 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface ContainerMetric { - timestamp: string; - Memory: { - percentage: number; - used: number; - total: number; - usedUnit: string; - totalUnit: string; - }; -} - -interface Props { - data: ContainerMetric[]; -} - -const chartConfig = { - memory: { - label: "Memory", - color: "hsl(var(--chart-2))", - }, -} satisfies ChartConfig; - -const formatMemoryValue = (value: number) => { - return value.toLocaleString("en-US", { - minimumFractionDigits: 1, - maximumFractionDigits: 2, - }); -}; - -export const ContainerMemoryChart = ({ data }: Props) => { - const formattedData = data.map((metric) => ({ - timestamp: metric.timestamp, - memory: metric.Memory.percentage, - usage: `${formatMemoryValue(metric.Memory.used)}${metric.Memory.usedUnit} / ${formatMemoryValue(metric.Memory.total)}${metric.Memory.totalUnit}`, - })); - - const latestData = formattedData[formattedData.length - 1] || { - timestamp: "", - memory: 0, - usage: "0 / 0 B", - }; - - return ( - - - Memory - Memory Usage: {latestData.usage} - - - - - - - - - - - - formatTimestamp(value)} - /> - `${value}%`} domain={[0, 100]} /> - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - Memory - - {data.memory}% -
-
- - Usage - - {data.usage} -
-
-
- ); - } - return null; - }} - /> - - } - verticalAlign="bottom" - align="center" - /> -
-
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/container-network-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/container/container-network-chart.tsx deleted file mode 100644 index d51e89687..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/container-network-chart.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface ContainerMetric { - timestamp: string; - Network: { - input: number; - output: number; - inputUnit: string; - outputUnit: string; - }; -} - -interface Props { - data: ContainerMetric[]; -} - -interface FormattedMetric { - timestamp: string; - input: number; - output: number; - inputUnit: string; - outputUnit: string; -} - -const chartConfig = { - input: { - label: "Input", - color: "hsl(var(--chart-3))", - }, - output: { - label: "Output", - color: "hsl(var(--chart-4))", - }, -} satisfies ChartConfig; - -export const ContainerNetworkChart = ({ data }: Props) => { - const formattedData: FormattedMetric[] = data.map((metric) => ({ - timestamp: metric.timestamp, - input: metric.Network.input, - output: metric.Network.output, - inputUnit: metric.Network.inputUnit, - outputUnit: metric.Network.outputUnit, - })); - - const latestData = formattedData[formattedData.length - 1] || { - input: 0, - output: 0, - inputUnit: "B", - outputUnit: "B", - }; - - return ( - - - Network I/O - - Input: {latestData.input} - {latestData.inputUnit} / Output: {latestData.output} - {latestData.outputUnit} - - - - - - - - - - - - - - - - - formatTimestamp(value)} - /> - - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - Input - - - {data.input} - {data.inputUnit} - -
-
- - Output - - - {data.output} - {data.outputUnit} - -
-
-
- ); - } - return null; - }} - /> - - - } - verticalAlign="bottom" - align="center" - /> -
-
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx b/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx deleted file mode 100644 index 3b189c2ac..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/container/show-paid-container-monitoring.tsx +++ /dev/null @@ -1,258 +0,0 @@ -import { Card } from "@/components/ui/card"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { api } from "@/utils/api"; -import { Cpu, HardDrive, Loader2, MemoryStick, Network } from "lucide-react"; -import { useEffect, useState } from "react"; -import { ContainerBlockChart } from "./container-block-chart"; -import { ContainerCPUChart } from "./container-cpu-chart"; -import { ContainerMemoryChart } from "./container-memory-chart"; -import { ContainerNetworkChart } from "./container-network-chart"; - -const REFRESH_INTERVALS = { - "5000": "5 Seconds", - "10000": "10 Seconds", - "20000": "20 Seconds", - "30000": "30 Seconds", -} as const; - -const DATA_POINTS_OPTIONS = { - "50": "50 points", - "200": "200 points", - "500": "500 points", - "800": "800 points", - "1200": "1200 points", - "1600": "1600 points", - "2000": "2000 points", - all: "All points", -} as const; - -interface ContainerMetric { - timestamp: string; - CPU: number; - Memory: { - percentage: number; - used: number; - total: number; - unit: string; - usedUnit: string; - totalUnit: string; - }; - Network: { - input: number; - output: number; - inputUnit: string; - outputUnit: string; - }; - BlockIO: { - read: number; - write: number; - readUnit: string; - writeUnit: string; - }; - Container: string; - ID: string; - Name: string; -} - -interface Props { - appName: string; - baseUrl: string; - token: string; -} - -export const ContainerPaidMonitoring = ({ appName, baseUrl, token }: Props) => { - const [historicalData, setHistoricalData] = useState([]); - const [metrics, setMetrics] = useState( - {} as ContainerMetric, - ); - const [dataPoints, setDataPoints] = - useState("50"); - const [refreshInterval, setRefreshInterval] = useState("5000"); - - const { - data, - isLoading, - error: queryError, - } = api.user.getContainerMetrics.useQuery( - { - url: baseUrl, - token, - dataPoints, - appName, - }, - { - refetchInterval: - dataPoints === "all" ? undefined : Number.parseInt(refreshInterval), - enabled: !!appName, - }, - ); - - useEffect(() => { - if (!data) return; - - // @ts-ignore - setHistoricalData(data); - // @ts-ignore - setMetrics(data[data.length - 1]); - }, [data]); - - if (isLoading) { - return ( -
- -
- ); - } - - if (queryError) { - return ( -
-
-

- Error fetching metrics for{" "} - {appName} -

-

- {queryError instanceof Error - ? queryError.message - : "Failed to fetch metrics, Please check your monitoring Instance is Configured correctly."} -

-

URL: {baseUrl}

-
-
- ); - } - - return ( - <> -
-

- Container Monitoring -

-
-
- Data points: - -
- -
- - Refresh interval: - - -
-
-
- - {/* Stats Cards */} -
- -
- -

CPU Usage

-
-

{metrics.CPU}%

-
- - -
- -

Memory Usage

-
-

- {metrics?.Memory?.percentage}% -

-

- {metrics?.Memory?.used} {metrics?.Memory?.unit} /{" "} - {metrics?.Memory?.total} {metrics?.Memory?.unit} -

-
- - -
- -

Network I/O

-
-

- {metrics?.Network?.input} {metrics?.Network?.inputUnit} /{" "} - {metrics?.Network?.output} {metrics?.Network?.outputUnit} -

-
- - -
- -

Block I/O

-
-

- {metrics?.BlockIO?.read} {metrics?.BlockIO?.readUnit} /{" "} - {metrics?.BlockIO?.write} {metrics?.BlockIO?.writeUnit} -

-
-
- - {/* Container Information */} - -

Container Information

-
-
-

- Container ID -

-

{metrics.ID}

-
-
-

Name

-

{metrics.Name}

-
-
-
- - {/* Charts Grid */} -
- - - - -
- - ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/paid/servers/cpu-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/servers/cpu-chart.tsx deleted file mode 100644 index 8c9602ee2..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/servers/cpu-chart.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface CPUChartProps { - data: any[]; -} - -const chartConfig = { - cpu: { - label: "CPU", - color: "hsl(var(--chart-1))", - }, -} satisfies ChartConfig; - -export function CPUChart({ data }: CPUChartProps) { - const latestData = data[data.length - 1] || {}; - - return ( - - - CPU - CPU Usage: {latestData.cpu}% - - - - - - - - - - - - formatTimestamp(value)} - /> - `${value}%`} domain={[0, 100]} /> - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - CPU - - {data.cpu}% -
-
-
- ); - } - return null; - }} - /> - - } - verticalAlign="bottom" - align="center" - /> -
-
-
-
- ); -} diff --git a/apps/dokploy/components/dashboard/monitoring/paid/servers/disk-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/servers/disk-chart.tsx deleted file mode 100644 index 3a81526cc..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/servers/disk-chart.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { HardDrive } from "lucide-react"; -import { - Label, - PolarGrid, - PolarRadiusAxis, - RadialBar, - RadialBarChart, -} from "recharts"; - -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { type ChartConfig, ChartContainer } from "@/components/ui/chart"; - -interface RadialChartProps { - data: any; -} - -export function DiskChart({ data }: RadialChartProps) { - const diskUsed = Number.parseFloat(data.diskUsed || 0); - const totalDiskGB = Number.parseFloat(data.totalDisk || 0); - const usedDiskGB = (totalDiskGB * diskUsed) / 100; - - const chartData = [ - { - disk: 25, - fill: "hsl(var(--chart-2))", - }, - ]; - - const chartConfig = { - disk: { - label: "Disk", - color: "hsl(var(--chart-2))", - }, - } satisfies ChartConfig; - - const endAngle = (diskUsed * 360) / 100; - - return ( - - - Disk - Storage Space - - - - - - - - - - - - -
- {usedDiskGB.toFixed(1)} GB used -
-
- Of {totalDiskGB.toFixed(1)} GB total -
-
-
- ); -} diff --git a/apps/dokploy/components/dashboard/monitoring/paid/servers/memory-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/servers/memory-chart.tsx deleted file mode 100644 index f4079c46d..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/servers/memory-chart.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface MemoryChartProps { - data: any[]; -} - -const chartConfig = { - Memory: { - label: "Memory", - color: "hsl(var(--chart-2))", - }, -} satisfies ChartConfig; - -export function MemoryChart({ data }: MemoryChartProps) { - const latestData = data[data.length - 1] || {}; - - return ( - - - Memory - - Memory Usage: {latestData.memUsedGB} GB of {latestData.memTotal} GB ( - {latestData.memUsed}%) - - - - - - - - - - - - - formatTimestamp(value)} - /> - `${value}%`} - domain={[0, 100]} - /> - `${value.toFixed(1)} GB`} - domain={[ - 0, - Math.ceil(Number.parseFloat(latestData.memTotal || "0")), - ]} - /> - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - Memory - - - {data.memUsed}% ({data.memUsedGB} GB) - -
-
-
- ); - } - return null; - }} - /> - -
-
-
-
- ); -} diff --git a/apps/dokploy/components/dashboard/monitoring/paid/servers/network-chart.tsx b/apps/dokploy/components/dashboard/monitoring/paid/servers/network-chart.tsx deleted file mode 100644 index b84af0952..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/servers/network-chart.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - type ChartConfig, - ChartContainer, - ChartLegend, - ChartLegendContent, - ChartTooltip, -} from "@/components/ui/chart"; -import { formatTimestamp } from "@/lib/utils"; -import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts"; - -interface NetworkChartProps { - data: any[]; -} - -const chartConfig = { - networkIn: { - label: "Network In", - color: "hsl(var(--chart-3))", - }, - networkOut: { - label: "Network Out", - color: "hsl(var(--chart-4))", - }, -} satisfies ChartConfig; - -export function NetworkChart({ data }: NetworkChartProps) { - const latestData = data[data.length - 1] || {}; - - return ( - - - Network - - Network Traffic: ↑ {latestData.networkOut} KB/s ↓{" "} - {latestData.networkIn} KB/s - - - - - - - - - - - - - - - - - formatTimestamp(value)} - /> - `${value} KB/s`} /> - { - if (active && payload && payload.length) { - const data = payload?.[0]?.payload; - return ( -
-
-
- - Time - - - {formatTimestamp(label)} - -
-
- - Network - - - ↑ {data.networkOut} KB/s -
↓ {data.networkIn} KB/s -
-
-
-
- ); - } - return null; - }} - /> - - - } - verticalAlign="bottom" - align="center" - /> -
-
-
-
- ); -} diff --git a/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx b/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx deleted file mode 100644 index e92ce03fc..000000000 --- a/apps/dokploy/components/dashboard/monitoring/paid/servers/show-paid-monitoring.tsx +++ /dev/null @@ -1,275 +0,0 @@ -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { api } from "@/utils/api"; -import { Clock, Cpu, HardDrive, Loader2, MemoryStick } from "lucide-react"; -import { useEffect, useState } from "react"; -import { CPUChart } from "./cpu-chart"; -import { DiskChart } from "./disk-chart"; -import { MemoryChart } from "./memory-chart"; -import { NetworkChart } from "./network-chart"; - -const REFRESH_INTERVALS = { - "5000": "5 Seconds", - "10000": "10 Seconds", - "20000": "20 Seconds", - "30000": "30 Seconds", -} as const; - -const DATA_POINTS_OPTIONS = { - "50": "50 points", - "200": "200 points", - "500": "500 points", - "800": "800 points", - "1200": "1200 points", - "1600": "1600 points", - "2000": "2000 points", - all: "All points", -} as const; - -interface SystemMetrics { - cpu: string; - cpuModel: string; - cpuCores: number; - cpuPhysicalCores: number; - cpuSpeed: number; - os: string; - distro: string; - kernel: string; - arch: string; - memUsed: string; - memUsedGB: string; - memTotal: string; - uptime: number; - diskUsed: string; - totalDisk: string; - networkIn: string; - networkOut: string; - timestamp: string; -} - -interface Props { - BASE_URL?: string; - token?: string; -} - -export const ShowPaidMonitoring = ({ - BASE_URL = process.env.NEXT_PUBLIC_METRICS_URL || - "http://localhost:3001/metrics", - token = process.env.NEXT_PUBLIC_METRICS_TOKEN || "my-token", -}: Props) => { - const [historicalData, setHistoricalData] = useState([]); - const [metrics, setMetrics] = useState({} as SystemMetrics); - const [dataPoints, setDataPoints] = - useState("50"); - const [refreshInterval, setRefreshInterval] = useState("5000"); - - const { - data, - isLoading, - error: queryError, - } = api.server.getServerMetrics.useQuery( - { - url: BASE_URL, - token, - dataPoints, - }, - { - refetchInterval: - dataPoints === "all" ? undefined : Number.parseInt(refreshInterval), - enabled: true, - }, - ); - - useEffect(() => { - if (!data) return; - - const formattedData = data.map((metric: SystemMetrics) => ({ - timestamp: metric.timestamp, - cpu: Number.parseFloat(metric.cpu), - cpuModel: metric.cpuModel, - cpuCores: metric.cpuCores, - cpuPhysicalCores: metric.cpuPhysicalCores, - cpuSpeed: metric.cpuSpeed, - os: metric.os, - distro: metric.distro, - kernel: metric.kernel, - arch: metric.arch, - memUsed: Number.parseFloat(metric.memUsed), - memUsedGB: Number.parseFloat(metric.memUsedGB), - memTotal: Number.parseFloat(metric.memTotal), - networkIn: Number.parseFloat(metric.networkIn), - networkOut: Number.parseFloat(metric.networkOut), - diskUsed: Number.parseFloat(metric.diskUsed), - totalDisk: Number.parseFloat(metric.totalDisk), - uptime: metric.uptime, - })); - - // @ts-ignore - setHistoricalData(formattedData); - // @ts-ignore - setMetrics(formattedData[formattedData.length - 1] || {}); - }, [data]); - - const formatUptime = (seconds: number): string => { - const days = Math.floor(seconds / (24 * 60 * 60)); - const hours = Math.floor((seconds % (24 * 60 * 60)) / (60 * 60)); - const minutes = Math.floor((seconds % (60 * 60)) / 60); - - return `${days}d ${hours}h ${minutes}m`; - }; - - if (isLoading) { - return ( -
- -
- ); - } - - if (queryError) { - return ( -
-
-

- Error fetching metrics{" "} -

-

- {queryError instanceof Error - ? queryError.message - : "Failed to fetch metrics, Please check your monitoring Instance is Configured correctly."} -

-

URL: {BASE_URL}

-
-
- ); - } - - return ( -
-
-

System Monitoring

-
-
- Data points: - -
- -
- - Refresh interval: - - -
-
-
- - {/* Stats Cards */} -
-
-
- -

Uptime

-
-

- {formatUptime(metrics.uptime || 0)} -

-
- -
-
- -

CPU Usage

-
-

{metrics.cpu}%

-
- -
-
- -

Memory Usage

-
-

- {metrics.memUsedGB} GB / {metrics.memTotal} GB -

-
- -
-
- -

Disk Usage

-
-

{metrics.diskUsed}%

-
-
- - {/* System Information */} -
-

System Information

-
-
-

CPU

-

{metrics.cpuModel}

-

- {metrics.cpuPhysicalCores} Physical Cores ({metrics.cpuCores}{" "} - Threads) @ {metrics.cpuSpeed}GHz -

-
-
-

- Operating System -

-

{metrics.distro}

-

- Kernel: {metrics.kernel} ({metrics.arch}) -

-
-
-
- - {/* Charts Grid */} -
- - - - -
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/monitoring/web-server/show.tsx b/apps/dokploy/components/dashboard/monitoring/web-server/show.tsx new file mode 100644 index 000000000..d6f15057e --- /dev/null +++ b/apps/dokploy/components/dashboard/monitoring/web-server/show.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import { DockerMonitoring } from "../docker/show"; + +export const ShowMonitoring = () => { + return ( +
+ +
+ ); +}; diff --git a/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx b/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx index 7a0527b17..dc1ca3a7d 100644 --- a/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/show-external-mysql-credentials.tsx @@ -19,7 +19,7 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; diff --git a/apps/dokploy/components/dashboard/mysql/general/show-general-mysql.tsx b/apps/dokploy/components/dashboard/mysql/general/show-general-mysql.tsx index 13f46caee..56a191ceb 100644 --- a/apps/dokploy/components/dashboard/mysql/general/show-general-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/show-general-mysql.tsx @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Ban, CheckCircle2, RefreshCcw, Terminal } from "lucide-react"; -import { useState } from "react"; +import React, { useState } from "react"; import { toast } from "sonner"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; diff --git a/apps/dokploy/components/dashboard/mysql/general/show-internal-mysql-credentials.tsx b/apps/dokploy/components/dashboard/mysql/general/show-internal-mysql-credentials.tsx index 3f1872371..2c09efb84 100644 --- a/apps/dokploy/components/dashboard/mysql/general/show-internal-mysql-credentials.tsx +++ b/apps/dokploy/components/dashboard/mysql/general/show-internal-mysql-credentials.tsx @@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; +import React from "react"; interface Props { mysqlId: string; diff --git a/apps/dokploy/components/dashboard/mysql/update-mysql.tsx b/apps/dokploy/components/dashboard/mysql/update-mysql.tsx index efe1eb11d..645575cdc 100644 --- a/apps/dokploy/components/dashboard/mysql/update-mysql.tsx +++ b/apps/dokploy/components/dashboard/mysql/update-mysql.tsx @@ -21,7 +21,7 @@ import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { PenBoxIcon } from "lucide-react"; +import { AlertTriangle, PenBoxIcon, SquarePen } from "lucide-react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; diff --git a/apps/dokploy/components/dashboard/organization/handle-organization.tsx b/apps/dokploy/components/dashboard/organization/handle-organization.tsx deleted file mode 100644 index 014c37df1..000000000 --- a/apps/dokploy/components/dashboard/organization/handle-organization.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, - DialogTrigger, -} from "@/components/ui/dialog"; -import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form"; -import { Input } from "@/components/ui/input"; -import { api } from "@/utils/api"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { PenBoxIcon, Plus } from "lucide-react"; -import { useEffect, useState } from "react"; -import { useForm } from "react-hook-form"; -import { toast } from "sonner"; -import { z } from "zod"; - -const organizationSchema = z.object({ - name: z.string().min(1, { - message: "Organization name is required", - }), - logo: z.string().optional(), -}); - -type OrganizationFormValues = z.infer; - -interface Props { - organizationId?: string; - children?: React.ReactNode; -} - -export function AddOrganization({ organizationId }: Props) { - const [open, setOpen] = useState(false); - const utils = api.useUtils(); - const { data: organization } = api.organization.one.useQuery( - { - organizationId: organizationId ?? "", - }, - { - enabled: !!organizationId, - }, - ); - const { mutateAsync, isLoading } = organizationId - ? api.organization.update.useMutation() - : api.organization.create.useMutation(); - - const form = useForm({ - resolver: zodResolver(organizationSchema), - defaultValues: { - name: "", - logo: "", - }, - }); - - useEffect(() => { - if (organization) { - form.reset({ - name: organization.name, - logo: organization.logo || "", - }); - } - }, [organization, form]); - - const onSubmit = async (values: OrganizationFormValues) => { - await mutateAsync({ - name: values.name, - logo: values.logo, - organizationId: organizationId ?? "", - }) - .then(() => { - form.reset(); - toast.success( - `Organization ${organizationId ? "updated" : "created"} successfully`, - ); - utils.organization.all.invalidate(); - setOpen(false); - }) - .catch((error) => { - console.error(error); - toast.error( - `Failed to ${organizationId ? "update" : "create"} organization`, - ); - }); - }; - - return ( - - - {organizationId ? ( - e.preventDefault()} - > - - - ) : ( - e.preventDefault()} - > -
- -
-
- Add organization -
-
- )} -
- - - - {organizationId ? "Update organization" : "Add organization"} - - - {organizationId - ? "Update the organization name and logo" - : "Create a new organization to manage your projects."} - - -
- - ( - - Name - - - - - - )} - /> - ( - - Logo URL - - - - - - )} - /> - - - - - -
-
- ); -} diff --git a/apps/dokploy/components/dashboard/postgres/advanced/show-custom-command.tsx b/apps/dokploy/components/dashboard/postgres/advanced/show-custom-command.tsx index 40e84844f..6e912db95 100644 --- a/apps/dokploy/components/dashboard/postgres/advanced/show-custom-command.tsx +++ b/apps/dokploy/components/dashboard/postgres/advanced/show-custom-command.tsx @@ -11,7 +11,7 @@ import { import { Input } from "@/components/ui/input"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useEffect } from "react"; +import React, { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; @@ -53,7 +53,7 @@ export const ShowCustomCommand = ({ id, type }: Props) => { mongo: () => api.mongo.update.useMutation(), }; - const { mutateAsync } = mutationMap[type] + const { mutateAsync, isLoading } = mutationMap[type] ? mutationMap[type]() : api.mongo.update.useMutation(); diff --git a/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx b/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx index dbd57d0bf..e8fff7dca 100644 --- a/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/show-external-postgres-credentials.tsx @@ -19,7 +19,7 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { useEffect, useState } from "react"; +import React, { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; diff --git a/apps/dokploy/components/dashboard/postgres/general/show-general-postgres.tsx b/apps/dokploy/components/dashboard/postgres/general/show-general-postgres.tsx index 89d275236..43c3f4322 100644 --- a/apps/dokploy/components/dashboard/postgres/general/show-general-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/show-general-postgres.tsx @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Ban, CheckCircle2, RefreshCcw, Terminal } from "lucide-react"; -import { useState } from "react"; +import React, { useState } from "react"; import { toast } from "sonner"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; diff --git a/apps/dokploy/components/dashboard/postgres/general/show-internal-postgres-credentials.tsx b/apps/dokploy/components/dashboard/postgres/general/show-internal-postgres-credentials.tsx index 545150f87..e01226101 100644 --- a/apps/dokploy/components/dashboard/postgres/general/show-internal-postgres-credentials.tsx +++ b/apps/dokploy/components/dashboard/postgres/general/show-internal-postgres-credentials.tsx @@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; +import React from "react"; interface Props { postgresId: string; diff --git a/apps/dokploy/components/dashboard/postgres/update-postgres.tsx b/apps/dokploy/components/dashboard/postgres/update-postgres.tsx index 7be6908f1..54ad5bce0 100644 --- a/apps/dokploy/components/dashboard/postgres/update-postgres.tsx +++ b/apps/dokploy/components/dashboard/postgres/update-postgres.tsx @@ -21,7 +21,7 @@ import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { PenBoxIcon } from "lucide-react"; +import { AlertTriangle, PenBoxIcon, SquarePen } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; diff --git a/apps/dokploy/components/dashboard/project/add-application.tsx b/apps/dokploy/components/dashboard/project/add-application.tsx index 16c56917d..2c30df8dc 100644 --- a/apps/dokploy/components/dashboard/project/add-application.tsx +++ b/apps/dokploy/components/dashboard/project/add-application.tsx @@ -70,7 +70,7 @@ interface Props { export const AddApplication = ({ projectId, projectName }: Props) => { const utils = api.useUtils(); - const { data: isCloud } = api.settings.isCloud.useQuery(); + const [visible, setVisible] = useState(false); const slug = slugify(projectName); const { data: servers } = api.server.withSSHKey.useQuery(); @@ -103,7 +103,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { projectId, }); }) - .catch((_e) => { + .catch((e) => { toast.error("Error creating the service"); }); }; @@ -166,7 +166,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { - Select a Server {!isCloud ? "(Optional)" : ""} + Select a Server (Optional) @@ -197,12 +197,7 @@ export const AddApplication = ({ projectId, projectName }: Props) => { key={server.serverId} value={server.serverId} > - - {server.name} - - {server.ipAddress} - - + {server.name} ))} Servers ({servers?.length}) diff --git a/apps/dokploy/components/dashboard/project/add-compose.tsx b/apps/dokploy/components/dashboard/project/add-compose.tsx index ea8690a83..dc753e947 100644 --- a/apps/dokploy/components/dashboard/project/add-compose.tsx +++ b/apps/dokploy/components/dashboard/project/add-compose.tsx @@ -73,7 +73,6 @@ export const AddCompose = ({ projectId, projectName }: Props) => { const utils = api.useUtils(); const [visible, setVisible] = useState(false); const slug = slugify(projectName); - const { data: isCloud } = api.settings.isCloud.useQuery(); const { data: servers } = api.server.withSSHKey.useQuery(); const { mutateAsync, isLoading, error, isError } = api.compose.create.useMutation(); @@ -174,7 +173,7 @@ export const AddCompose = ({ projectId, projectName }: Props) => { - Select a Server {!isCloud ? "(Optional)" : ""} + Select a Server (Optional) @@ -205,12 +204,7 @@ export const AddCompose = ({ projectId, projectName }: Props) => { key={server.serverId} value={server.serverId} > - - {server.name} - - {server.ipAddress} - - + {server.name} ))} Servers ({servers?.length}) diff --git a/apps/dokploy/components/dashboard/project/add-database.tsx b/apps/dokploy/components/dashboard/project/add-database.tsx index b14e2cfa0..fc86d2538 100644 --- a/apps/dokploy/components/dashboard/project/add-database.tsx +++ b/apps/dokploy/components/dashboard/project/add-database.tsx @@ -18,6 +18,7 @@ import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; import { Form, FormControl, + FormDescription, FormField, FormItem, FormLabel, @@ -48,6 +49,7 @@ import { z } from "zod"; type DbType = typeof mySchema._type.type; +// TODO: Change to a real docker images const dockerImageDefaultPlaceholder: Record = { mongo: "mongo:6", mariadb: "mariadb:11", @@ -87,7 +89,7 @@ const mySchema = z.discriminatedUnion("type", [ z .object({ type: z.literal("postgres"), - databaseName: z.string().default("postgres"), + databaseName: z.string().min(1, "Database name required"), databaseUser: z.string().default("postgres"), }) .merge(baseDatabaseSchema), @@ -108,7 +110,7 @@ const mySchema = z.discriminatedUnion("type", [ type: z.literal("mysql"), databaseRootPassword: z.string().default(""), databaseUser: z.string().default("mysql"), - databaseName: z.string().default("mysql"), + databaseName: z.string().min(1, "Database name required"), }) .merge(baseDatabaseSchema), z @@ -117,7 +119,7 @@ const mySchema = z.discriminatedUnion("type", [ dockerImage: z.string().default("mariadb:4"), databaseRootPassword: z.string().default(""), databaseUser: z.string().default("mariadb"), - databaseName: z.string().default("mariadb"), + databaseName: z.string().min(1, "Database name required"), }) .merge(baseDatabaseSchema), ]); @@ -204,7 +206,7 @@ export const AddDatabase = ({ projectId, projectName }: Props) => { promise = postgresMutation.mutateAsync({ ...commonParams, databasePassword: data.databasePassword, - databaseName: data.databaseName || "postgres", + databaseName: data.databaseName, databaseUser: data.databaseUser || databasesUserDefaultPlaceholder[data.type], @@ -231,7 +233,7 @@ export const AddDatabase = ({ projectId, projectName }: Props) => { ...commonParams, databasePassword: data.databasePassword, databaseRootPassword: data.databaseRootPassword, - databaseName: data.databaseName || "mariadb", + databaseName: data.databaseName, databaseUser: data.databaseUser || databasesUserDefaultPlaceholder[data.type], serverId: data.serverId, @@ -240,7 +242,7 @@ export const AddDatabase = ({ projectId, projectName }: Props) => { promise = mysqlMutation.mutateAsync({ ...commonParams, databasePassword: data.databasePassword, - databaseName: data.databaseName || "mysql", + databaseName: data.databaseName, databaseUser: data.databaseUser || databasesUserDefaultPlaceholder[data.type], databaseRootPassword: data.databaseRootPassword, diff --git a/apps/dokploy/components/dashboard/project/add-template.tsx b/apps/dokploy/components/dashboard/project/add-template.tsx index 5363e6f36..90d173640 100644 --- a/apps/dokploy/components/dashboard/project/add-template.tsx +++ b/apps/dokploy/components/dashboard/project/add-template.tsx @@ -57,6 +57,7 @@ import { BookText, CheckIcon, ChevronsUpDown, + Code, Github, Globe, HelpCircle, @@ -79,7 +80,6 @@ export const AddTemplate = ({ projectId }: Props) => { const [viewMode, setViewMode] = useState<"detailed" | "icon">("detailed"); const [selectedTags, setSelectedTags] = useState([]); const { data } = api.compose.templates.useQuery(); - const { data: isCloud } = api.settings.isCloud.useQuery(); const { data: servers } = api.server.withSSHKey.useQuery(); const { data: tags, isLoading: isLoadingTags } = api.compose.getTags.useQuery(); @@ -226,11 +226,7 @@ export const AddTemplate = ({ projectId }: Props) => {
- {isError && ( - - {error?.message} - - )} + {isError && {error?.message}} {templates.length === 0 ? (
@@ -308,7 +304,7 @@ export const AddTemplate = ({ projectId }: Props) => { {/* Create Button */}
{ @@ -406,12 +401,7 @@ export const AddTemplate = ({ projectId }: Props) => { key={server.serverId} value={server.serverId} > - - {server.name} - - {server.ipAddress} - - + {server.name} ))} @@ -434,14 +424,14 @@ export const AddTemplate = ({ projectId }: Props) => { }); toast.promise(promise, { loading: "Setting up...", - success: (_data) => { + success: (data) => { utils.project.one.invalidate({ projectId, }); setOpen(false); return `${template.name} template created successfully`; }, - error: (_err) => { + error: (err) => { return `An error ocurred deploying ${template.name} template`; }, }); diff --git a/apps/dokploy/components/dashboard/projects/handle-project.tsx b/apps/dokploy/components/dashboard/projects/handle-project.tsx index f5d62dfc6..cf38c57c9 100644 --- a/apps/dokploy/components/dashboard/projects/handle-project.tsx +++ b/apps/dokploy/components/dashboard/projects/handle-project.tsx @@ -97,18 +97,6 @@ export const HandleProject = ({ projectId }: Props) => { ); }); }; - // useEffect(() => { - // const getUsers = async () => { - // const users = await authClient.admin.listUsers({ - // query: { - // limit: 100, - // }, - // }); - // console.log(users); - // }; - - // getUsers(); - // }); return ( @@ -130,7 +118,7 @@ export const HandleProject = ({ projectId }: Props) => { - {projectId ? "Update" : "Add a"} project + Add a project The home of something big! {isError && {error?.message}} diff --git a/apps/dokploy/components/dashboard/projects/project-environment.tsx b/apps/dokploy/components/dashboard/projects/project-environment.tsx index e43d1af87..493813dc3 100644 --- a/apps/dokploy/components/dashboard/projects/project-environment.tsx +++ b/apps/dokploy/components/dashboard/projects/project-environment.tsx @@ -99,7 +99,8 @@ export const ProjectEnvironment = ({ projectId, children }: Props) => { Project Environment Update the env Environment variables that are accessible to all - services of this project. + services of this project. Use this syntax to reference project-level + variables in your service environments: {isError && {error?.message}} diff --git a/apps/dokploy/components/dashboard/projects/show.tsx b/apps/dokploy/components/dashboard/projects/show.tsx index 188ee60d9..16f842ed2 100644 --- a/apps/dokploy/components/dashboard/projects/show.tsx +++ b/apps/dokploy/components/dashboard/projects/show.tsx @@ -1,6 +1,5 @@ import { BreadcrumbSidebar } from "@/components/shared/breadcrumb-sidebar"; import { DateTooltip } from "@/components/shared/date-tooltip"; -import { StatusTooltip } from "@/components/shared/status-tooltip"; import { AlertDialog, AlertDialogAction, @@ -24,10 +23,8 @@ import { import { DropdownMenu, DropdownMenuContent, - DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, - DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; @@ -51,7 +48,15 @@ import { ProjectEnvironment } from "./project-environment"; export const ShowProjects = () => { const utils = api.useUtils(); const { data, isLoading } = api.project.all.useQuery(); - const { data: auth } = api.user.get.useQuery(); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); const { mutateAsync } = api.project.remove.useMutation(); const [searchQuery, setSearchQuery] = useState(""); @@ -72,8 +77,8 @@ export const ShowProjects = () => {
-
- +
+ Projects @@ -82,12 +87,9 @@ export const ShowProjects = () => { Create and manage your projects - - {(auth?.role === "owner" || auth?.canCreateProjects) && ( -
- -
- )} +
+ +
@@ -144,97 +146,14 @@ export const ShowProjects = () => { href={`/dashboard/project/${project.projectId}`} > - {project.applications.length > 0 || - project.compose.length > 0 ? ( - - - - - e.stopPropagation()} - > - {project.applications.length > 0 && ( - - - Applications - - {project.applications.map((app) => ( -
- - - - {app.name} - - - - {app.domains.map((domain) => ( - - - {domain.host} - - - - ))} - -
- ))} -
- )} - {project.compose.length > 0 && ( - - - Compose - - {project.compose.map((comp) => ( -
- - - - {comp.name} - - - - {comp.domains.map((domain) => ( - - - {domain.host} - - - - ))} - -
- ))} -
- )} -
-
- ) : null} + + @@ -260,10 +179,7 @@ export const ShowProjects = () => { - e.stopPropagation()} - > + Actions @@ -285,8 +201,8 @@ export const ShowProjects = () => {
e.stopPropagation()} > - {(auth?.role === "owner" || - auth?.canDeleteProjects) && ( + {(auth?.rol === "admin" || + user?.canDeleteProjects) && ( { useEffect(() => { const buildConnectionUrl = () => { - const _hostname = window.location.hostname; + const hostname = window.location.hostname; const port = form.watch("externalPort") || data?.externalPort; return `redis://default:${data?.databasePassword}@${getIp}:${port}`; diff --git a/apps/dokploy/components/dashboard/redis/general/show-general-redis.tsx b/apps/dokploy/components/dashboard/redis/general/show-general-redis.tsx index e309ef49a..8e265b9dd 100644 --- a/apps/dokploy/components/dashboard/redis/general/show-general-redis.tsx +++ b/apps/dokploy/components/dashboard/redis/general/show-general-redis.tsx @@ -4,7 +4,7 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { api } from "@/utils/api"; import { Ban, CheckCircle2, RefreshCcw, Terminal } from "lucide-react"; -import { useState } from "react"; +import React, { useState } from "react"; import { toast } from "sonner"; import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { DockerTerminalModal } from "../../settings/web-server/docker-terminal-modal"; @@ -168,7 +168,6 @@ export const ShowGeneralRedis = ({ redisId }: Props) => { setIsDrawerOpen(false); setFilteredLogs([]); setIsDeploying(false); - refetch(); }} filteredLogs={filteredLogs} /> diff --git a/apps/dokploy/components/dashboard/redis/general/show-internal-redis-credentials.tsx b/apps/dokploy/components/dashboard/redis/general/show-internal-redis-credentials.tsx index 47ad0df0b..092006748 100644 --- a/apps/dokploy/components/dashboard/redis/general/show-internal-redis-credentials.tsx +++ b/apps/dokploy/components/dashboard/redis/general/show-internal-redis-credentials.tsx @@ -3,6 +3,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { api } from "@/utils/api"; +import React from "react"; interface Props { redisId: string; diff --git a/apps/dokploy/components/dashboard/redis/update-redis.tsx b/apps/dokploy/components/dashboard/redis/update-redis.tsx index 193aec3b3..c3557bee8 100644 --- a/apps/dokploy/components/dashboard/redis/update-redis.tsx +++ b/apps/dokploy/components/dashboard/redis/update-redis.tsx @@ -21,7 +21,7 @@ import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { PenBoxIcon } from "lucide-react"; +import { AlertTriangle, PenBoxIcon, SquarePen } from "lucide-react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; diff --git a/apps/dokploy/components/dashboard/requests/columns.tsx b/apps/dokploy/components/dashboard/requests/columns.tsx index 2c0391f80..529d64a48 100644 --- a/apps/dokploy/components/dashboard/requests/columns.tsx +++ b/apps/dokploy/components/dashboard/requests/columns.tsx @@ -3,6 +3,7 @@ import { Button } from "@/components/ui/button"; import type { ColumnDef } from "@tanstack/react-table"; import { format } from "date-fns"; import { ArrowUpDown } from "lucide-react"; +import * as React from "react"; import type { LogEntry } from "./show-requests"; export const getStatusColor = (status: number) => { @@ -24,7 +25,7 @@ export const getStatusColor = (status: number) => { export const columns: ColumnDef[] = [ { accessorKey: "level", - header: () => { + header: ({ column }) => { return ; }, cell: ({ row }) => { diff --git a/apps/dokploy/components/dashboard/requests/requests-table.tsx b/apps/dokploy/components/dashboard/requests/requests-table.tsx index 4926ce4e3..cd2949c34 100644 --- a/apps/dokploy/components/dashboard/requests/requests-table.tsx +++ b/apps/dokploy/components/dashboard/requests/requests-table.tsx @@ -92,7 +92,7 @@ export const RequestsTable = () => { pageSize: 10, }); - const { data: statsLogs } = api.settings.readStatsLogs.useQuery( + const { data: statsLogs, isLoading } = api.settings.readStatsLogs.useQuery( { sort: sorting[0], page: pagination, @@ -300,7 +300,7 @@ export const RequestsTable = () => {
setSelectedRow(undefined)} + onOpenChange={(open) => setSelectedRow(undefined)} > diff --git a/apps/dokploy/components/dashboard/requests/show-requests.tsx b/apps/dokploy/components/dashboard/requests/show-requests.tsx index c3d92dd6d..05ba6e51f 100644 --- a/apps/dokploy/components/dashboard/requests/show-requests.tsx +++ b/apps/dokploy/components/dashboard/requests/show-requests.tsx @@ -11,6 +11,7 @@ import { import { type RouterOutputs, api } from "@/utils/api"; import { ArrowDownUp } from "lucide-react"; import Link from "next/link"; +import * as React from "react"; import { toast } from "sonner"; import { RequestDistributionChart } from "./request-distribution-chart"; import { RequestsTable } from "./requests-table"; diff --git a/apps/dokploy/components/dashboard/search-command.tsx b/apps/dokploy/components/dashboard/search-command.tsx index b36703036..4d3c75f98 100644 --- a/apps/dokploy/components/dashboard/search-command.tsx +++ b/apps/dokploy/components/dashboard/search-command.tsx @@ -7,7 +7,9 @@ import { PostgresqlIcon, RedisIcon, } from "@/components/icons/data-tools-icons"; +import { Badge } from "@/components/ui/badge"; import { + Command, CommandDialog, CommandEmpty, CommandGroup, @@ -16,26 +18,26 @@ import { CommandList, CommandSeparator, } from "@/components/ui/command"; -import { authClient } from "@/lib/auth-client"; import { type Services, extractServices, } from "@/pages/dashboard/project/[projectId]"; import { api } from "@/utils/api"; +import type { findProjectById } from "@dokploy/server/services/project"; import { BookIcon, CircuitBoard, GlobeIcon } from "lucide-react"; import { useRouter } from "next/router"; import React from "react"; import { StatusTooltip } from "../shared/status-tooltip"; +type Project = Awaited>; + export const SearchCommand = () => { const router = useRouter(); const [open, setOpen] = React.useState(false); const [search, setSearch] = React.useState(""); - const { data: session } = authClient.useSession(); - const { data } = api.project.all.useQuery(undefined, { - enabled: !!session, - }); - const { data: isCloud } = api.settings.isCloud.useQuery(); + + const { data } = api.project.all.useQuery(); + const { data: isCloud, isLoading } = api.settings.isCloud.useQuery(); React.useEffect(() => { const down = (e: KeyboardEvent) => { diff --git a/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx b/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx deleted file mode 100644 index a82a9b356..000000000 --- a/apps/dokploy/components/dashboard/settings/api/add-api-key.tsx +++ /dev/null @@ -1,468 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { api } from "@/utils/api"; -import { toast } from "sonner"; -import { - Dialog, - DialogContent, - DialogHeader, - DialogTitle, - DialogTrigger, - DialogDescription, -} from "@/components/ui/dialog"; -import { Input } from "@/components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { useState } from "react"; -import { useForm } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { z } from "zod"; -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, - FormDescription, -} from "@/components/ui/form"; -import { Switch } from "@/components/ui/switch"; - -const formSchema = z.object({ - name: z.string().min(1, "Name is required"), - prefix: z.string().optional(), - expiresIn: z.number().nullable(), - organizationId: z.string().min(1, "Organization is required"), - // Rate limiting fields - rateLimitEnabled: z.boolean().optional(), - rateLimitTimeWindow: z.number().nullable(), - rateLimitMax: z.number().nullable(), - // Request limiting fields - remaining: z.number().nullable().optional(), - refillAmount: z.number().nullable().optional(), - refillInterval: z.number().nullable().optional(), -}); - -type FormValues = z.infer; - -const EXPIRATION_OPTIONS = [ - { label: "Never", value: "0" }, - { label: "1 day", value: String(60 * 60 * 24) }, - { label: "7 days", value: String(60 * 60 * 24 * 7) }, - { label: "30 days", value: String(60 * 60 * 24 * 30) }, - { label: "90 days", value: String(60 * 60 * 24 * 90) }, - { label: "1 year", value: String(60 * 60 * 24 * 365) }, -]; - -const TIME_WINDOW_OPTIONS = [ - { label: "1 minute", value: String(60 * 1000) }, - { label: "5 minutes", value: String(5 * 60 * 1000) }, - { label: "15 minutes", value: String(15 * 60 * 1000) }, - { label: "30 minutes", value: String(30 * 60 * 1000) }, - { label: "1 hour", value: String(60 * 60 * 1000) }, - { label: "1 day", value: String(24 * 60 * 60 * 1000) }, -]; - -const REFILL_INTERVAL_OPTIONS = [ - { label: "1 hour", value: String(60 * 60 * 1000) }, - { label: "6 hours", value: String(6 * 60 * 60 * 1000) }, - { label: "12 hours", value: String(12 * 60 * 60 * 1000) }, - { label: "1 day", value: String(24 * 60 * 60 * 1000) }, - { label: "7 days", value: String(7 * 24 * 60 * 60 * 1000) }, - { label: "30 days", value: String(30 * 24 * 60 * 60 * 1000) }, -]; - -export const AddApiKey = () => { - const [open, setOpen] = useState(false); - const [showSuccessModal, setShowSuccessModal] = useState(false); - const [newApiKey, setNewApiKey] = useState(""); - const { refetch } = api.user.get.useQuery(); - const { data: organizations } = api.organization.all.useQuery(); - const createApiKey = api.user.createApiKey.useMutation({ - onSuccess: (data) => { - if (!data) return; - - setNewApiKey(data.key); - setOpen(false); - setShowSuccessModal(true); - form.reset(); - void refetch(); - }, - onError: () => { - toast.error("Failed to generate API key"); - }, - }); - - const form = useForm({ - resolver: zodResolver(formSchema), - defaultValues: { - name: "", - prefix: "", - expiresIn: null, - organizationId: "", - rateLimitEnabled: false, - rateLimitTimeWindow: null, - rateLimitMax: null, - remaining: null, - refillAmount: null, - refillInterval: null, - }, - }); - - const rateLimitEnabled = form.watch("rateLimitEnabled"); - - const onSubmit = async (values: FormValues) => { - createApiKey.mutate({ - name: values.name, - expiresIn: values.expiresIn || undefined, - prefix: values.prefix || undefined, - metadata: { - organizationId: values.organizationId, - }, - // Rate limiting - rateLimitEnabled: values.rateLimitEnabled, - rateLimitTimeWindow: values.rateLimitTimeWindow || undefined, - rateLimitMax: values.rateLimitMax || undefined, - // Request limiting - remaining: values.remaining || undefined, - refillAmount: values.refillAmount || undefined, - refillInterval: values.refillInterval || undefined, - }); - }; - - return ( - <> - - - - - - - Generate API Key - - Create a new API key for accessing the API. You can set an - expiration date and a custom prefix for better organization. - - -
- - ( - - Name - - - - - - )} - /> - ( - - Prefix - - - - - - )} - /> - ( - - Expiration - - - - )} - /> - ( - - Organization - - - - )} - /> - - {/* Rate Limiting Section */} -
-

Rate Limiting

- ( - -
- Enable Rate Limiting - - Limit the number of requests within a time window - -
- - - -
- )} - /> - - {rateLimitEnabled && ( - <> - ( - - Time Window - - - The duration in which requests are counted - - - - )} - /> - ( - - Maximum Requests - - - field.onChange( - e.target.value - ? Number.parseInt(e.target.value, 10) - : null, - ) - } - /> - - - Maximum number of requests allowed within the time - window - - - - )} - /> - - )} -
- - {/* Request Limiting Section */} -
-

Request Limiting

- ( - - Total Request Limit - - - field.onChange( - e.target.value - ? Number.parseInt(e.target.value, 10) - : null, - ) - } - /> - - - Total number of requests allowed (leave empty for - unlimited) - - - - )} - /> - - ( - - Refill Amount - - - field.onChange( - e.target.value - ? Number.parseInt(e.target.value, 10) - : null, - ) - } - /> - - - Number of requests to add on each refill - - - - )} - /> - - ( - - Refill Interval - - - How often to refill the request limit - - - - )} - /> -
- -
- - -
- - -
-
- - - - - API Key Generated Successfully - - Please copy your API key now. You won't be able to see it again! - - -
-
- {newApiKey} -
-
- - -
-
-
-
- - ); -}; diff --git a/apps/dokploy/components/dashboard/settings/api/show-api-keys.tsx b/apps/dokploy/components/dashboard/settings/api/show-api-keys.tsx deleted file mode 100644 index 6744f1dea..000000000 --- a/apps/dokploy/components/dashboard/settings/api/show-api-keys.tsx +++ /dev/null @@ -1,142 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { api } from "@/utils/api"; -import { ExternalLinkIcon, KeyIcon, Trash2, Clock, Tag } from "lucide-react"; -import Link from "next/link"; -import { toast } from "sonner"; -import { formatDistanceToNow } from "date-fns"; -import { DialogAction } from "@/components/shared/dialog-action"; -import { AddApiKey } from "./add-api-key"; -import { Badge } from "@/components/ui/badge"; - -export const ShowApiKeys = () => { - const { data, refetch } = api.user.get.useQuery(); - const { mutateAsync: deleteApiKey, isLoading: isLoadingDelete } = - api.user.deleteApiKey.useMutation(); - - return ( -
- -
- -
- - - API/CLI Keys - - - Generate and manage API keys to access the API/CLI - -
-
- - Swagger API: - - - View - - -
-
- -
- {data?.user.apiKeys && data.user.apiKeys.length > 0 ? ( - data.user.apiKeys.map((apiKey) => ( -
-
-
- {apiKey.name} -
- - - Created{" "} - {formatDistanceToNow(new Date(apiKey.createdAt))}{" "} - ago - - {apiKey.prefix && ( - - - {apiKey.prefix} - - )} - {apiKey.expiresAt && ( - - - Expires in{" "} - {formatDistanceToNow( - new Date(apiKey.expiresAt), - )}{" "} - - )} -
-
- { - try { - await deleteApiKey({ - apiKeyId: apiKey.id, - }); - await refetch(); - toast.success("API key deleted successfully"); - } catch (error) { - toast.error( - error instanceof Error - ? error.message - : "Error deleting API key", - ); - } - }} - > - - -
-
- )) - ) : ( -
- - - No API keys found - -
- )} -
- - {/* Generate new API key */} -
- -
-
-
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx b/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx index 2c20bb81d..9f3430de0 100644 --- a/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx +++ b/apps/dokploy/components/dashboard/settings/billing/show-billing.tsx @@ -23,7 +23,7 @@ import { PlusIcon, } from "lucide-react"; import Link from "next/link"; -import { useState } from "react"; +import React, { useState } from "react"; const stripePromise = loadStripe( process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY!, @@ -38,8 +38,8 @@ export const calculatePrice = (count: number, isAnnual = false) => { return count * 3.5; }; export const ShowBilling = () => { - const { data: servers } = api.server.count.useQuery(); - const { data: admin } = api.user.get.useQuery(); + const { data: servers } = api.server.all.useQuery(undefined); + const { data: admin } = api.admin.one.useQuery(); const { data, isLoading } = api.stripe.getProducts.useQuery(); const { mutateAsync: createCheckoutSession } = api.stripe.createCheckoutSession.useMutation(); @@ -70,8 +70,8 @@ export const ShowBilling = () => { return isAnnual ? interval === "year" : interval === "month"; }); - const maxServers = admin?.user.serversQuantity ?? 1; - const percentage = ((servers ?? 0) / maxServers) * 100; + const maxServers = admin?.serversQuantity ?? 1; + const percentage = ((servers?.length ?? 0) / maxServers) * 100; const safePercentage = Math.min(percentage, 100); return ( @@ -98,17 +98,17 @@ export const ShowBilling = () => { Annual - {admin?.user.stripeSubscriptionId && ( + {admin?.stripeSubscriptionId && (

Servers Plan

- You have {servers} server on your plan of{" "} - {admin?.user.serversQuantity} servers + You have {servers?.length} server on your plan of{" "} + {admin?.serversQuantity} servers

- {admin && admin.user.serversQuantity! <= (servers ?? 0) && ( + {admin && admin.serversQuantity! <= servers?.length! && (
@@ -279,7 +279,7 @@ export const ShowBilling = () => { "flex flex-row items-center gap-2 mt-4", )} > - {admin?.user.stripeCustomerId && ( + {admin?.stripeCustomerId && (
@@ -1035,7 +980,6 @@ export const HandleNotifications = ({ notificationId }: Props) => { await testTelegramConnection({ botToken: form.getValues("botToken"), chatId: form.getValues("chatId"), - messageThreadId: form.getValues("messageThreadId") || "", }); } else if (type === "discord") { await testDiscordConnection({ @@ -1060,7 +1004,7 @@ export const HandleNotifications = ({ notificationId }: Props) => { }); } toast.success("Connection Success"); - } catch (_err) { + } catch (err) { toast.error("Error testing the provider"); } }} diff --git a/apps/dokploy/components/dashboard/settings/notifications/show-notifications.tsx b/apps/dokploy/components/dashboard/settings/notifications/show-notifications.tsx index 782b92413..77fb8858d 100644 --- a/apps/dokploy/components/dashboard/settings/notifications/show-notifications.tsx +++ b/apps/dokploy/components/dashboard/settings/notifications/show-notifications.tsx @@ -47,7 +47,7 @@ export const ShowNotifications = () => { {data?.length === 0 ? (
- + To send notifications it is required to set at least 1 provider. @@ -56,7 +56,7 @@ export const ShowNotifications = () => { ) : (
- {data?.map((notification, _index) => ( + {data?.map((notification, index) => (
; export const Disable2FA = () => { const utils = api.useUtils(); - const [isOpen, setIsOpen] = useState(false); - const [isLoading, setIsLoading] = useState(false); - - const form = useForm({ - resolver: zodResolver(PasswordSchema), - defaultValues: { - password: "", - }, - }); - - const handleSubmit = async (formData: PasswordForm) => { - setIsLoading(true); - try { - const result = await authClient.twoFactor.disable({ - password: formData.password, - }); - - if (result.error) { - form.setError("password", { - message: result.error.message, - }); - toast.error(result.error.message); - return; - } - - toast.success("2FA disabled successfully"); - utils.user.get.invalidate(); - setIsOpen(false); - } catch (_error) { - form.setError("password", { - message: "Connection error. Please try again.", - }); - toast.error("Connection error. Please try again."); - } finally { - setIsLoading(false); - } - }; - + const { mutateAsync, isLoading } = api.auth.disable2FA.useMutation(); return ( - + - + Are you absolutely sure? - This action cannot be undone. This will permanently disable - Two-Factor Authentication for your account. + This action cannot be undone. This will permanently delete the 2FA - -
- + Cancel + { + await mutateAsync() + .then(() => { + utils.auth.get.invalidate(); + toast.success("2FA Disabled"); + }) + .catch(() => { + toast.error("Error disabling 2FA"); + }); + }} > - ( - - Password - - - - - Enter your password to disable 2FA - - - - )} - /> -
- - -
- - + Confirm +
+
); diff --git a/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx b/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx index f47c8d9c0..cf5910b8a 100644 --- a/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx +++ b/apps/dokploy/components/dashboard/settings/profile/enable-2fa.tsx @@ -3,6 +3,7 @@ import { Dialog, DialogContent, DialogDescription, + DialogFooter, DialogHeader, DialogTitle, DialogTrigger, @@ -16,309 +17,144 @@ import { FormLabel, FormMessage, } from "@/components/ui/form"; -import { Input } from "@/components/ui/input"; import { InputOTP, InputOTPGroup, InputOTPSlot, } from "@/components/ui/input-otp"; -import { authClient } from "@/lib/auth-client"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { Fingerprint, QrCode } from "lucide-react"; -import QRCode from "qrcode"; -import { useEffect, useState } from "react"; +import { AlertTriangle, Fingerprint } from "lucide-react"; +import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; -const PasswordSchema = z.object({ - password: z.string().min(8, { - message: "Password is required", - }), -}); - -const PinSchema = z.object({ +const Enable2FASchema = z.object({ pin: z.string().min(6, { message: "Pin is required", }), }); -type TwoFactorSetupData = { - qrCodeUrl: string; - secret: string; - totpURI: string; -}; - -type PasswordForm = z.infer; -type PinForm = z.infer; +type Enable2FA = z.infer; export const Enable2FA = () => { const utils = api.useUtils(); - const [data, setData] = useState(null); - const [backupCodes, setBackupCodes] = useState([]); - const [isDialogOpen, setIsDialogOpen] = useState(false); - const [step, setStep] = useState<"password" | "verify">("password"); - const [isPasswordLoading, setIsPasswordLoading] = useState(false); - const handlePasswordSubmit = async (formData: PasswordForm) => { - setIsPasswordLoading(true); - try { - const { data: enableData } = await authClient.twoFactor.enable({ - password: formData.password, - }); - - if (!enableData) { - throw new Error("No data received from server"); - } - - if (enableData.backupCodes) { - setBackupCodes(enableData.backupCodes); - } - - if (enableData.totpURI) { - const qrCodeUrl = await QRCode.toDataURL(enableData.totpURI); - - setData({ - qrCodeUrl, - secret: enableData.totpURI.split("secret=")[1]?.split("&")[0] || "", - totpURI: enableData.totpURI, - }); - - setStep("verify"); - toast.success("Scan the QR code with your authenticator app"); - } else { - throw new Error("No TOTP URI received from server"); - } - } catch (error) { - toast.error( - error instanceof Error ? error.message : "Error setting up 2FA", - ); - passwordForm.setError("password", { - message: "Error verifying password", - }); - } finally { - setIsPasswordLoading(false); - } - }; - - const handleVerifySubmit = async (formData: PinForm) => { - try { - const result = await authClient.twoFactor.verifyTotp({ - code: formData.pin, - }); - - if (result.error) { - if (result.error.code === "INVALID_TWO_FACTOR_AUTHENTICATION") { - pinForm.setError("pin", { - message: "Invalid code. Please try again.", - }); - toast.error("Invalid verification code"); - return; - } - - throw result.error; - } - - if (!result.data) { - throw new Error("No response received from server"); - } - - toast.success("2FA configured successfully"); - utils.user.get.invalidate(); - setIsDialogOpen(false); - } catch (error) { - if (error instanceof Error) { - const errorMessage = - error.message === "Failed to fetch" - ? "Connection error. Please check your internet connection." - : error.message; - - pinForm.setError("pin", { - message: errorMessage, - }); - toast.error(errorMessage); - } else { - pinForm.setError("pin", { - message: "Error verifying code", - }); - toast.error("Error verifying 2FA code"); - } - } - }; - - const passwordForm = useForm({ - resolver: zodResolver(PasswordSchema), - defaultValues: { - password: "", - }, + const { data } = api.auth.generate2FASecret.useQuery(undefined, { + refetchOnWindowFocus: false, }); - const pinForm = useForm({ - resolver: zodResolver(PinSchema), + const { mutateAsync, isLoading, error, isError } = + api.auth.verify2FASetup.useMutation(); + + const form = useForm({ defaultValues: { pin: "", }, + resolver: zodResolver(Enable2FASchema), }); useEffect(() => { - if (!isDialogOpen) { - setStep("password"); - setData(null); - setBackupCodes([]); - passwordForm.reset(); - pinForm.reset(); - } - }, [isDialogOpen, passwordForm, pinForm]); + form.reset({ + pin: "", + }); + }, [form, form.reset, form.formState.isSubmitSuccessful]); + const onSubmit = async (formData: Enable2FA) => { + await mutateAsync({ + pin: formData.pin, + secret: data?.secret || "", + }) + .then(async () => { + toast.success("2FA Verified"); + utils.auth.get.invalidate(); + }) + .catch(() => { + toast.error("Error verifying the 2FA"); + }); + }; return ( - + - + 2FA Setup - - {step === "password" - ? "Enter your password to begin 2FA setup" - : "Scan the QR code and verify with your authenticator app"} - + Add a 2FA to your account - - {step === "password" ? ( -
- - ( - - Password - - - - - Enter your password to enable 2FA - - - - )} - /> - - - - ) : ( -
- -
- {data?.qrCodeUrl ? ( - <> -
- - - Scan this QR code with your authenticator app - - 2FA QR Code -
- - Can't scan the QR code? - - - {data.secret} - -
-
- - {backupCodes && backupCodes.length > 0 && ( -
-

Backup Codes

-
- {backupCodes.map((code, index) => ( - - {code} - - ))} -
-

- Save these backup codes in a secure place. You can use - them to access your account if you lose access to your - authenticator device. -

-
- )} - - ) : ( -
- -
- )} -
- - ( - - Verification Code - - - - - - - - - - - - - - Enter the 6-digit code from your authenticator app - - - - )} - /> - - - - + {isError && ( +
+ + + {error?.message} + +
)} +
+ +
+ + {data?.qrCodeUrl ? "Scan the QR code to add 2FA" : ""} + + qrCode +
+ + {data?.secret ? `Secret: ${data?.secret}` : ""} + +
+
+ + ( + + Pin + + + + + + + + + + + + + + Please enter the 6 digits code provided by your + authenticator app. + + + + )} + /> + + + + + +
); diff --git a/apps/dokploy/components/dashboard/settings/profile/generate-token.tsx b/apps/dokploy/components/dashboard/settings/profile/generate-token.tsx new file mode 100644 index 000000000..66486c330 --- /dev/null +++ b/apps/dokploy/components/dashboard/settings/profile/generate-token.tsx @@ -0,0 +1,77 @@ +import { ToggleVisibilityInput } from "@/components/shared/toggle-visibility-input"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Label } from "@/components/ui/label"; +import { api } from "@/utils/api"; +import { ExternalLinkIcon } from "lucide-react"; +import Link from "next/link"; +import { toast } from "sonner"; + +export const GenerateToken = () => { + const { data, refetch } = api.auth.get.useQuery(); + + const { mutateAsync: generateToken, isLoading: isLoadingToken } = + api.auth.generateToken.useMutation(); + + return ( +
+ +
+ +
+ API/CLI + + Generate a token to access the API/CLI + +
+
+ + Swagger API: + + + View + + +
+
+ +
+
+
+ + +
+
+ +
+
+
+
+
+ ); +}; diff --git a/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx b/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx index 32179378a..9ae140c67 100644 --- a/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx +++ b/apps/dokploy/components/dashboard/settings/profile/profile-form.tsx @@ -54,14 +54,13 @@ const randomImages = [ ]; export const ProfileForm = () => { - const _utils = api.useUtils(); - const { data, refetch, isLoading } = api.user.get.useQuery(); + const { data, refetch, isLoading } = api.auth.get.useQuery(); const { mutateAsync, isLoading: isUpdating, isError, error, - } = api.user.update.useMutation(); + } = api.auth.update.useMutation(); const { t } = useTranslation("settings"); const [gravatarHash, setGravatarHash] = useState(null); @@ -74,9 +73,9 @@ export const ProfileForm = () => { const form = useForm({ defaultValues: { - email: data?.user?.email || "", + email: data?.email || "", password: "", - image: data?.user?.image || "", + image: data?.image || "", currentPassword: "", }, resolver: zodResolver(profileSchema), @@ -85,14 +84,14 @@ export const ProfileForm = () => { useEffect(() => { if (data) { form.reset({ - email: data?.user?.email || "", + email: data?.email || "", password: "", - image: data?.user?.image || "", + image: data?.image || "", currentPassword: "", }); - if (data.user.email) { - generateSHA256Hash(data.user.email).then((hash) => { + if (data.email) { + generateSHA256Hash(data.email).then((hash) => { setGravatarHash(hash); }); } @@ -103,9 +102,9 @@ export const ProfileForm = () => { const onSubmit = async (values: Profile) => { await mutateAsync({ email: values.email.toLowerCase(), - password: values.password || undefined, + password: values.password, image: values.image, - currentPassword: values.currentPassword || undefined, + currentPassword: values.currentPassword, }) .then(async () => { await refetch(); @@ -131,7 +130,7 @@ export const ProfileForm = () => { {t("settings.profile.description")}
- {!data?.user.twoFactorEnabled ? : } + {!data?.is2FAEnabled ? : } diff --git a/apps/dokploy/components/dashboard/settings/profile/remove-self-account.tsx b/apps/dokploy/components/dashboard/settings/profile/remove-self-account.tsx new file mode 100644 index 000000000..cff9db54f --- /dev/null +++ b/apps/dokploy/components/dashboard/settings/profile/remove-self-account.tsx @@ -0,0 +1,138 @@ +import { AlertBlock } from "@/components/shared/alert-block"; +import { DialogAction } from "@/components/shared/dialog-action"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { api } from "@/utils/api"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useTranslation } from "next-i18next"; +import { useRouter } from "next/router"; +import { useEffect } from "react"; +import { useForm } from "react-hook-form"; +import { toast } from "sonner"; +import { z } from "zod"; + +const profileSchema = z.object({ + password: z.string().min(1, { + message: "Password is required", + }), +}); + +type Profile = z.infer; + +export const RemoveSelfAccount = () => { + const { data } = api.auth.get.useQuery(); + const { mutateAsync, isLoading, error, isError } = + api.auth.removeSelfAccount.useMutation(); + const { t } = useTranslation("settings"); + const router = useRouter(); + + const form = useForm({ + defaultValues: { + password: "", + }, + resolver: zodResolver(profileSchema), + }); + + useEffect(() => { + if (data) { + form.reset({ + password: "", + }); + } + form.reset(); + }, [form, form.reset, data]); + + const onSubmit = async (values: Profile) => { + await mutateAsync({ + password: values.password, + }) + .then(async () => { + toast.success("Profile Deleted"); + router.push("/"); + }) + .catch(() => {}); + }; + + return ( +
+ +
+ +
+ Remove Self Account + + If you want to remove your account, you can do it here + +
+
+ + {isError && {error?.message}} + +
+ e.preventDefault()} + onKeyDown={(e) => { + if (e.key === "Enter") { + e.preventDefault(); + } + }} + className="grid gap-4" + > +
+ ( + + {t("settings.profile.password")} + + + + + + )} + /> +
+
+ +
+ form.handleSubmit(onSubmit)()} + > + + +
+
+
+
+
+ ); +}; diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx index f57dad3cd..3a1af2063 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-dokploy-actions.tsx @@ -1,4 +1,5 @@ import { Button } from "@/components/ui/button"; +import React from "react"; import { UpdateServerIp } from "@/components/dashboard/settings/web-server/update-server-ip"; import { diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx index 3492ba7c2..c45c0c8b5 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-storage-actions.tsx @@ -1,4 +1,5 @@ import { Button } from "@/components/ui/button"; +import React from "react"; import { DropdownMenu, @@ -26,7 +27,7 @@ export const ShowStorageActions = ({ serverId }: Props) => { isLoading: cleanDockerBuilderIsLoading, } = api.settings.cleanDockerBuilder.useMutation(); - const { mutateAsync: cleanMonitoring } = + const { mutateAsync: cleanMonitoring, isLoading: cleanMonitoringIsLoading } = api.settings.cleanMonitoring.useMutation(); const { mutateAsync: cleanUnusedImages, diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx index 0968931d7..17a6ae757 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/show-traefik-actions.tsx @@ -1,4 +1,14 @@ import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Label } from "@/components/ui/label"; +import { Switch } from "@/components/ui/switch"; +import React from "react"; import { DropdownMenu, @@ -10,8 +20,10 @@ import { DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { api } from "@/utils/api"; -import { useTranslation } from "next-i18next"; import { toast } from "sonner"; + +import { cn } from "@/lib/utils"; +import { useTranslation } from "next-i18next"; import { EditTraefikEnv } from "../../web-server/edit-traefik-env"; import { ManageTraefikPorts } from "../../web-server/manage-traefik-ports"; import { ShowModalLogs } from "../../web-server/show-modal-logs"; diff --git a/apps/dokploy/components/dashboard/settings/servers/actions/toggle-docker-cleanup.tsx b/apps/dokploy/components/dashboard/settings/servers/actions/toggle-docker-cleanup.tsx index 12e279423..78ad12363 100644 --- a/apps/dokploy/components/dashboard/settings/servers/actions/toggle-docker-cleanup.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/actions/toggle-docker-cleanup.tsx @@ -7,7 +7,7 @@ interface Props { serverId?: string; } export const ToggleDockerCleanup = ({ serverId }: Props) => { - const { data, refetch } = api.user.get.useQuery(undefined, { + const { data, refetch } = api.admin.one.useQuery(undefined, { enabled: !serverId, }); @@ -20,7 +20,7 @@ export const ToggleDockerCleanup = ({ serverId }: Props) => { }, ); - const enabled = data?.user.enableDockerCleanup || server?.enableDockerCleanup; + const enabled = data?.enableDockerCleanup || server?.enableDockerCleanup; const { mutateAsync } = api.settings.updateDockerCleanup.useMutation(); @@ -36,7 +36,7 @@ export const ToggleDockerCleanup = ({ serverId }: Props) => { await refetch(); } toast.success("Docker Cleanup updated"); - } catch (_error) { + } catch (error) { toast.error("Docker Cleanup Error"); } }; diff --git a/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx b/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx index 6225ee771..0a22220ed 100644 --- a/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/edit-script.tsx @@ -82,7 +82,7 @@ export const EditScript = ({ serverId }: Props) => { command: formData.command || "", serverId, }) - .then((_data) => { + .then((data) => { toast.success("Script modified successfully"); }) .catch(() => { diff --git a/apps/dokploy/components/dashboard/settings/servers/gpu-support.tsx b/apps/dokploy/components/dashboard/settings/servers/gpu-support.tsx index c24440a61..3cda7e806 100644 --- a/apps/dokploy/components/dashboard/settings/servers/gpu-support.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/gpu-support.tsx @@ -9,6 +9,7 @@ import { CardTitle, } from "@/components/ui/card"; import { api } from "@/utils/api"; +import { TRPCClientError } from "@trpc/client"; import { CheckCircle2, Cpu, Loader2, RefreshCw, XCircle } from "lucide-react"; import { useEffect, useState } from "react"; import { toast } from "sonner"; @@ -56,7 +57,7 @@ export function GPUSupport({ serverId }: GPUSupportProps) { try { await utils.settings.checkGPUStatus.invalidate({ serverId }); await refetch(); - } catch (_error) { + } catch (error) { toast.error("Failed to refresh GPU status"); } finally { setIsRefreshing(false); @@ -74,7 +75,7 @@ export function GPUSupport({ serverId }: GPUSupportProps) { try { await setupGPU.mutateAsync({ serverId }); - } catch (_error) { + } catch (error) { // Error handling is done in mutation's onError } }; diff --git a/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx b/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx index 979941458..be71d8367 100644 --- a/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/handle-servers.tsx @@ -118,7 +118,7 @@ export const HandleServers = ({ serverId }: Props) => { sshKeyId: data.sshKeyId || "", serverId: serverId || "", }) - .then(async (_data) => { + .then(async (data) => { await utils.server.all.invalidate(); refetchServer(); toast.success(serverId ? "Server Updated" : "Server Created"); diff --git a/apps/dokploy/components/dashboard/settings/servers/security-audit.tsx b/apps/dokploy/components/dashboard/settings/servers/security-audit.tsx index 8cce306a5..475f2b8ff 100644 --- a/apps/dokploy/components/dashboard/settings/servers/security-audit.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/security-audit.tsx @@ -25,7 +25,7 @@ export const SecurityAudit = ({ serverId }: Props) => { enabled: !!serverId, }, ); - const _utils = api.useUtils(); + const utils = api.useUtils(); return (
@@ -145,6 +145,15 @@ export const SecurityAudit = ({ serverId }: Props) => { : "Enabled (Password Authentication should be disabled)" } /> + ; - -export const SetupMonitoring = ({ serverId }: Props) => { - const { data } = serverId - ? api.server.one.useQuery( - { - serverId: serverId || "", - }, - { - enabled: !!serverId, - }, - ) - : api.user.getServerMetrics.useQuery(); - - const url = useUrl(); - - const { data: projects } = api.project.all.useQuery(); - - const extractServicesFromProjects = (projects: any[] | undefined) => { - if (!projects) return []; - - const allServices = projects.flatMap((project) => { - const services = extractServices(project); - return serverId - ? services - .filter((service) => service.serverId === serverId) - .map((service) => service.appName) - : services.map((service) => service.appName); - }); - - return [...new Set(allServices)]; - }; - - const services = extractServicesFromProjects(projects); - - const form = useForm({ - resolver: zodResolver(Schema), - defaultValues: { - metricsConfig: { - server: { - refreshRate: 20, - port: 4500, - token: "", - urlCallback: `${url}/api/trpc/notification.receiveNotification`, - retentionDays: 7, - thresholds: { - cpu: 0, - memory: 0, - }, - cronJob: "", - }, - containers: { - refreshRate: 20, - services: { - include: [], - exclude: [], - }, - }, - }, - }, - }); - - useEffect(() => { - if (data) { - form.reset({ - metricsConfig: { - server: { - refreshRate: data?.metricsConfig?.server?.refreshRate, - port: data?.metricsConfig?.server?.port, - token: data?.metricsConfig?.server?.token || generateToken(), - urlCallback: - data?.metricsConfig?.server?.urlCallback || - `${url}/api/trpc/notification.receiveNotification`, - retentionDays: data?.metricsConfig?.server?.retentionDays || 5, - thresholds: { - cpu: data?.metricsConfig?.server?.thresholds?.cpu, - memory: data?.metricsConfig?.server?.thresholds?.memory, - }, - cronJob: data?.metricsConfig?.server?.cronJob || "0 0 * * *", - }, - containers: { - refreshRate: data?.metricsConfig?.containers?.refreshRate, - services: { - include: data?.metricsConfig?.containers?.services?.include, - exclude: data?.metricsConfig?.containers?.services?.exclude, - }, - }, - }, - }); - } - }, [data, url]); - - const [search, setSearch] = useState(""); - const [searchExclude, setSearchExclude] = useState(""); - const [showToken, setShowToken] = useState(false); - - const availableServices = services?.filter( - (service) => - !form - .watch("metricsConfig.containers.services.include") - ?.some((s) => s === service) && - !form - .watch("metricsConfig.containers.services.exclude") - ?.includes(service) && - service.toLowerCase().includes(search.toLowerCase()), - ); - - const availableServicesToExclude = [ - ...(services?.filter( - (service) => - !form - .watch("metricsConfig.containers.services.exclude") - ?.includes(service) && - !form - .watch("metricsConfig.containers.services.include") - ?.some((s) => s === service) && - service.toLowerCase().includes(searchExclude.toLowerCase()), - ) ?? []), - ...(!form.watch("metricsConfig.containers.services.exclude")?.includes("*") - ? ["*"] - : []), - ]; - - const { mutateAsync } = serverId - ? api.server.setupMonitoring.useMutation() - : api.admin.setupMonitoring.useMutation(); - - const generateToken = () => { - const array = new Uint8Array(64); - crypto.getRandomValues(array); - return Array.from(array, (byte) => byte.toString(16).padStart(2, "0")).join( - "", - ); - }; - - const onSubmit = async (values: Schema) => { - await mutateAsync({ - serverId: serverId || "", - metricsConfig: values.metricsConfig, - }) - .then(() => { - toast.success("Server updated successfully"); - }) - .catch(() => { - toast.error("Error updating the server"); - }); - }; - - return ( - <> - - - - Monitoring - - - Monitor your servers and containers in realtime with notifications - when they reach their thresholds. - - - -
- - - Using a lower refresh rate will make your CPU and memory usage - higher, we recommend 30-60 seconds - -
- ( - - Server Refresh Rate - - - - - Please set the refresh rate for the server in seconds - - - - )} - /> - - ( - - Container Refresh Rate - - - - - Please set the refresh rate for the containers in seconds - - - - )} - /> - - ( - - Cron Job - - - - - Cron job for cleaning up metrics - - - - )} - /> - - ( - - Server Retention Days - - - - - Number of days to retain server metrics data - - - - )} - /> - ( - - Port - - - - - Please set the port for the metrics server - - - - )} - /> - ( - - Include Services - -
-
- - - - - - - - {availableServices?.length === 0 ? ( -
- No services available. -
- ) : ( - <> - - No service found. - - - {availableServices?.map((service) => ( - { - field.onChange([ - ...(field.value ?? []), - service, - ]); - setSearch(""); - }} - > - {service} - - ))} - - - )} -
-
-
-
-
- {field.value?.map((service) => ( - - {service} - - - ))} - - Services to monitor. - -
-
-
- -
- )} - /> - - ( - - Exclude Services - -
-
- - - - - - - - {availableServicesToExclude?.length === 0 ? ( -
- No services available. -
- ) : ( - <> - - No service found. - - - {availableServicesToExclude.map( - (service) => ( - { - field.onChange([ - ...(field.value ?? []), - service, - ]); - setSearchExclude(""); - }} - > - {service} - - ), - )} - - - )} -
-
-
-
-
- {field.value?.map((service, index) => ( - - {service} - - - ))} - - Services to exclude from monitoring - -
-
-
- - -
- )} - /> - - ( - - CPU Threshold (%) - - - - - Alert when CPU usage exceeds this percentage - - - - )} - /> - - ( - - Memory Threshold (%) - - - - - Alert when memory usage exceeds this percentage - - - - )} - /> - - ( - - Metrics Token - -
-
- - -
- -
-
- - Token for authenticating metrics requests - - -
- )} - /> - - ( - - Metrics Callback URL - - - - - URL where metrics will be sent - - - - )} - /> -
-
- -
-
- -
- - ); -}; diff --git a/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx b/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx index 751167a42..a96fac1fb 100644 --- a/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/setup-server.tsx @@ -19,7 +19,6 @@ import { } from "@/components/ui/dialog"; import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; -import { cn } from "@/lib/utils"; import { api } from "@/utils/api"; import copy from "copy-to-clipboard"; import { CopyIcon, ExternalLinkIcon, ServerIcon } from "lucide-react"; @@ -31,7 +30,6 @@ import { type LogLine, parseLogs } from "../../docker/logs/utils"; import { EditScript } from "./edit-script"; import { GPUSupport } from "./gpu-support"; import { SecurityAudit } from "./security-audit"; -import { SetupMonitoring } from "./setup-monitoring"; import { ValidateServer } from "./validate-server"; interface Props { @@ -50,7 +48,7 @@ export const SetupServer = ({ serverId }: Props) => { ); const [activeLog, setActiveLog] = useState(null); - const { data: isCloud } = api.settings.isCloud.useQuery(); + const [isDrawerOpen, setIsDrawerOpen] = useState(false); const [filteredLogs, setFilteredLogs] = useState([]); const [isDeploying, setIsDeploying] = useState(false); @@ -114,19 +112,11 @@ export const SetupServer = ({ serverId }: Props) => { - + SSH Keys Deployments Validate Security - {isCloud && ( - Monitoring - )} GPU Setup {
- -
-
- -
-
-
{ - const [isOpen, setIsOpen] = useState(false); - - return ( - - - e.preventDefault()} - > - Show Monitoring - - - -
- -
-
-
- ); -}; diff --git a/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx b/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx index 3f3ff4e94..f3b0526bc 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-servers.tsx @@ -38,7 +38,6 @@ import { ShowServerActions } from "./actions/show-server-actions"; import { HandleServers } from "./handle-servers"; import { SetupServer } from "./setup-server"; import { ShowDockerContainersModal } from "./show-docker-containers-modal"; -import { ShowMonitoringModal } from "./show-monitoring-modal"; import { ShowSwarmOverviewModal } from "./show-swarm-overview-modal"; import { ShowTraefikFileSystemModal } from "./show-traefik-file-system-modal"; import { WelcomeSuscription } from "./welcome-stripe/welcome-suscription"; @@ -315,16 +314,6 @@ export const ShowServers = () => { - {isCloud && ( - - )} - diff --git a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx index b86311840..a47005d07 100644 --- a/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/show-swarm-overview-modal.tsx @@ -1,5 +1,12 @@ -import { Dialog, DialogContent, DialogTrigger } from "@/components/ui/dialog"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; import { DropdownMenuItem } from "@/components/ui/dropdown-menu"; +import { ContainerIcon } from "lucide-react"; import { useState } from "react"; import SwarmMonitorCard from "../../swarm/monitoring-card"; diff --git a/apps/dokploy/components/dashboard/settings/servers/validate-server.tsx b/apps/dokploy/components/dashboard/settings/servers/validate-server.tsx index 0632b97c2..db4f17b76 100644 --- a/apps/dokploy/components/dashboard/settings/servers/validate-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/validate-server.tsx @@ -25,7 +25,7 @@ export const ValidateServer = ({ serverId }: Props) => { enabled: !!serverId, }, ); - const _utils = api.useUtils(); + const utils = api.useUtils(); return (
diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx index 24d01553b..a025ad379 100644 --- a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-server.tsx @@ -52,10 +52,10 @@ interface Props { export const CreateServer = ({ stepper }: Props) => { const { data: sshKeys } = api.sshKey.all.useQuery(); - const [isOpen, _setIsOpen] = useState(false); + const [isOpen, setIsOpen] = useState(false); const { data: canCreateMoreServers, refetch } = api.stripe.canCreateMoreServers.useQuery(); - const { mutateAsync } = api.server.create.useMutation(); + const { mutateAsync, error, isError } = api.server.create.useMutation(); const cloudSSHKey = sshKeys?.find( (sshKey) => sshKey.name === "dokploy-cloud-ssh-key", ); @@ -96,7 +96,7 @@ export const CreateServer = ({ stepper }: Props) => { username: data.username || "root", sshKeyId: data.sshKeyId || "", }) - .then(async (_data) => { + .then(async (data) => { toast.success("Server Created"); stepper.next(); }) diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx index b1a3f2d03..37f8e0176 100644 --- a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/create-ssh-key.tsx @@ -35,7 +35,6 @@ export const CreateSSHKey = () => { description: "Used on Dokploy Cloud", privateKey: keys.privateKey, publicKey: keys.publicKey, - organizationId: "", }); await refetch(); } catch (error) { diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/verify.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/verify.tsx index f7c2a987c..fe8c36c2c 100644 --- a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/verify.tsx +++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/verify.tsx @@ -37,6 +37,15 @@ export const Verify = () => { ); const [isRefreshing, setIsRefreshing] = useState(false); + const { data: server } = api.server.one.useQuery( + { + serverId, + }, + { + enabled: !!serverId, + }, + ); + return (
diff --git a/apps/dokploy/components/dashboard/settings/ssh-keys/handle-ssh-keys.tsx b/apps/dokploy/components/dashboard/settings/ssh-keys/handle-ssh-keys.tsx index d82a05b0d..04c471aaa 100644 --- a/apps/dokploy/components/dashboard/settings/ssh-keys/handle-ssh-keys.tsx +++ b/apps/dokploy/components/dashboard/settings/ssh-keys/handle-ssh-keys.tsx @@ -22,7 +22,7 @@ import { Textarea } from "@/components/ui/textarea"; import { sshKeyCreate, type sshKeyType } from "@/server/db/validations"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; -import { DownloadIcon, PenBoxIcon, PlusIcon } from "lucide-react"; +import { PenBoxIcon, PlusIcon } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -78,7 +78,6 @@ export const HandleSSHKeys = ({ sshKeyId }: Props) => { const onSubmit = async (data: SSHKey) => { await mutateAsync({ ...data, - organizationId: "", sshKeyId: sshKeyId || "", }) .then(async () => { @@ -112,26 +111,6 @@ export const HandleSSHKeys = ({ sshKeyId }: Props) => { toast.error("Error generating the SSH Key"); }); - const downloadKey = ( - content: string, - defaultFilename: string, - keyType: "private" | "public", - ) => { - const keyName = form.watch("name"); - const filename = keyName - ? `${keyName}${sshKeyId ? `_${sshKeyId}` : ""}_${keyType}_${defaultFilename}` - : `${keyType}_${defaultFilename}`; - const blob = new Blob([content], { type: "text/plain" }); - const url = window.URL.createObjectURL(blob); - const a = document.createElement("a"); - a.href = url; - a.download = filename; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); - window.URL.revokeObjectURL(url); - }; - return ( @@ -265,41 +244,7 @@ export const HandleSSHKeys = ({ sshKeyId }: Props) => { )} /> - -
- {form.watch("privateKey") && ( - - )} - {form.watch("publicKey") && ( - - )} -
+ diff --git a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx index 51d73b1f9..7c1f50375 100644 --- a/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx +++ b/apps/dokploy/components/dashboard/settings/users/add-permissions.tsx @@ -52,7 +52,7 @@ interface Props { export const AddUserPermissions = ({ userId }: Props) => { const { data: projects } = api.project.all.useQuery(); - const { data, refetch } = api.user.one.useQuery( + const { data, refetch } = api.user.byUserId.useQuery( { userId, }, @@ -62,7 +62,7 @@ export const AddUserPermissions = ({ userId }: Props) => { ); const { mutateAsync, isError, error, isLoading } = - api.user.assignPermissions.useMutation(); + api.admin.assignPermissions.useMutation(); const form = useForm({ defaultValues: { @@ -92,7 +92,7 @@ export const AddUserPermissions = ({ userId }: Props) => { const onSubmit = async (data: AddPermissions) => { await mutateAsync({ - id: userId, + userId, canCreateServices: data.canCreateServices, canCreateProjects: data.canCreateProjects, canDeleteServices: data.canDeleteServices, diff --git a/apps/dokploy/components/dashboard/settings/users/add-invitation.tsx b/apps/dokploy/components/dashboard/settings/users/add-user.tsx similarity index 52% rename from apps/dokploy/components/dashboard/settings/users/add-invitation.tsx rename to apps/dokploy/components/dashboard/settings/users/add-user.tsx index d05409fb7..8fb6de27c 100644 --- a/apps/dokploy/components/dashboard/settings/users/add-invitation.tsx +++ b/apps/dokploy/components/dashboard/settings/users/add-user.tsx @@ -19,14 +19,6 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select"; -import { authClient } from "@/lib/auth-client"; import { api } from "@/utils/api"; import { zodResolver } from "@hookform/resolvers/zod"; import { PlusIcon } from "lucide-react"; @@ -35,70 +27,62 @@ import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; -const addInvitation = z.object({ +const addUser = z.object({ email: z .string() .min(1, "Email is required") .email({ message: "Invalid email" }), - role: z.enum(["member", "admin"]), }); -type AddInvitation = z.infer; +type AddUser = z.infer; -export const AddInvitation = () => { +export const AddUser = () => { const [open, setOpen] = useState(false); const utils = api.useUtils(); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); - const { data: activeOrganization } = authClient.useActiveOrganization(); - const form = useForm({ + const { mutateAsync, isError, error, isLoading } = + api.admin.createUserInvitation.useMutation(); + + const form = useForm({ defaultValues: { email: "", - role: "member", }, - resolver: zodResolver(addInvitation), + resolver: zodResolver(addUser), }); useEffect(() => { form.reset(); }, [form, form.formState.isSubmitSuccessful, form.reset]); - const onSubmit = async (data: AddInvitation) => { - setIsLoading(true); - const result = await authClient.organization.inviteMember({ + const onSubmit = async (data: AddUser) => { + await mutateAsync({ email: data.email.toLowerCase(), - role: data.role, - organizationId: activeOrganization?.id, - }); - - if (result.error) { - setError(result.error.message || ""); - } else { - toast.success("Invitation created"); - setError(null); - setOpen(false); - } - - utils.organization.allInvitations.invalidate(); - setIsLoading(false); + }) + .then(async () => { + toast.success("Invitation created"); + await utils.user.all.invalidate(); + setOpen(false); + }) + .catch(() => { + toast.error("Error creating the invitation"); + }); }; return ( - Add Invitation + Add User Invite a new user - {error && {error}} + {isError && {error?.message}}
@@ -120,39 +104,10 @@ export const AddInvitation = () => { ); }} /> - - { - return ( - - Role - - - Select the role for the new user - - - - ); - }} - /> - -
- )} -
- ))} - {(user?.role === "owner" || isCloud) && ( - <> - - - - )} - - - + /> +
- {/* Notification Bell */} - - - - - - - Pending Invitations -
- {invitations && invitations.length > 0 ? ( - invitations.map((invitation) => ( -
- e.preventDefault()} - > -
- {invitation?.organization?.name} -
-
- Expires:{" "} - {new Date(invitation.expiresAt).toLocaleString()} -
-
- Role: {invitation.role} -
-
- { - const { error } = - await authClient.organization.acceptInvitation({ - invitationId: invitation.id, - }); - - if (error) { - toast.error( - error.message || "Error accepting invitation", - ); - } else { - toast.success("Invitation accepted successfully"); - await refetchInvitations(); - await refetch(); - } - }} - > - - -
- )) - ) : ( - - No pending invitations - - )} -
-
-
-
- - )} - +
+

Dokploy

+

+ {dokployVersion} +

+
+ ); } export default function Page({ children }: Props) { - const [defaultOpen, setDefaultOpen] = useState( - undefined, - ); - const [isLoaded, setIsLoaded] = useState(false); - - useEffect(() => { - const cookieValue = document.cookie - .split("; ") - .find((row) => row.startsWith(`${SIDEBAR_COOKIE_NAME}=`)) - ?.split("=")[1]; - - setDefaultOpen(cookieValue === undefined ? true : cookieValue === "true"); - setIsLoaded(true); - }, []); - const router = useRouter(); const pathname = usePathname(); - const _currentPath = router.pathname; - const { data: auth } = api.user.get.useQuery(); - - const includesProjects = pathname?.includes("/dashboard/project"); - const { data: isCloud } = api.settings.isCloud.useQuery(); - - const { - home: filteredHome, - settings: filteredSettings, - help, - } = createMenuForAuthUser({ auth, isCloud: !!isCloud }); - - const activeItem = findActiveNavItem( - [...filteredHome, ...filteredSettings], - pathname, + const currentPath = router.pathname; + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, ); - if (!isLoaded) { - return
; // Placeholder mientras se carga - } + const includesProjects = pathname?.includes("/dashboard/project"); + const { data: isCloud, isLoading } = api.settings.isCloud.useQuery(); + const isActiveRoute = (itemUrl: string) => { + const normalizedItemUrl = itemUrl?.replace("/projects", "/project"); + const normalizedPathname = pathname?.replace("/projects", "/project"); + + if (!normalizedPathname) return false; + + if (normalizedPathname === normalizedItemUrl) return true; + + if (normalizedPathname.startsWith(normalizedItemUrl)) { + const nextChar = normalizedPathname.charAt(normalizedItemUrl.length); + return nextChar === "/"; + } + + return false; + }; + + let filteredHome = isCloud + ? data.home.filter( + (item) => + ![ + "/dashboard/monitoring", + "/dashboard/traefik", + "/dashboard/docker", + "/dashboard/swarm", + "/dashboard/requests", + ].includes(item.url), + ) + : data.home; + + let filteredSettings = isCloud + ? data.settings.filter( + (item) => + ![ + "/dashboard/settings/server", + "/dashboard/settings/cluster", + ].includes(item.url), + ) + : data.settings.filter( + (item) => !["/dashboard/settings/billing"].includes(item.url), + ); + + filteredHome = filteredHome.map((item) => ({ + ...item, + isActive: isActiveRoute(item.url), + })); + + filteredSettings = filteredSettings.map((item) => ({ + ...item, + isActive: isActiveRoute(item.url), + })); + + const activeItem = + filteredHome.find((item) => item.isActive) || + filteredSettings.find((item) => item.isActive); + + const showProjectsButton = + currentPath === "/dashboard/projects" && + (auth?.rol === "admin" || user?.canCreateProjects); return ( { - setDefaultOpen(open); - - document.cookie = `${SIDEBAR_COOKIE_NAME}=${open}`; - }} style={ { "--sidebar-width": "19.5rem", @@ -810,196 +461,184 @@ export default function Page({ children }: Props) { > - {/* */} - - {/* */} + > + + Home - {filteredHome.map((item) => { - const isSingle = item.isSingle !== false; - const isActive = isSingle - ? isActiveRoute({ itemUrl: item.url, pathname }) - : item.items.some((item) => - isActiveRoute({ itemUrl: item.url, pathname }), - ); - - return ( - - - {isSingle ? ( - ( + + + {item.isSingle ? ( + + - - {item.icon && ( - + {item.title} - - - ) : ( - <> - - - {item.icon && } + /> + {item.title} + + + ) : ( + <> + + + {item.icon && } - {item.title} - {item.items?.length && ( - - )} - - - - - {item.items?.map((subItem) => ( - - {item.title} + {item.items?.length && ( + + )} + + + + + {item.items?.map((subItem) => ( + + + - - {subItem.icon && ( - - - - )} - {subItem.title} - - - - ))} - - - - )} - - - ); - })} + {subItem.icon && ( + + + + )} + {subItem.title} + + + + ))} + + + + )} + + + ))} Settings - {filteredSettings.map((item) => { - const isSingle = item.isSingle !== false; - const isActive = isSingle - ? isActiveRoute({ itemUrl: item.url, pathname }) - : item.items.some((item) => - isActiveRoute({ itemUrl: item.url, pathname }), - ); - - return ( - - - {isSingle ? ( - ( + + + {item.isSingle ? ( + + - - {item.icon && ( - + {item.title} - - - ) : ( - <> - - - {item.icon && } + /> + {item.title} + + + ) : ( + <> + + + {item.icon && } - {item.title} - {item.items?.length && ( - - )} - - - - - {item.items?.map((subItem) => ( - - {item.title} + {item.items?.length && ( + + )} + + + + + {item.items?.map((subItem) => ( + + + - - {subItem.icon && ( - - - - )} - {subItem.title} - - - - ))} - - - - )} - - - ); - })} + {subItem.icon && ( + + + + )} + {subItem.title} + + + + ))} + + + + )} + + + ))} Extra - {help.map((item: ExternalLink) => ( + {data.help.map((item: ExternalLink) => ( ))} - {!isCloud && auth?.role === "owner" && ( + {!isCloud && ( @@ -1044,7 +683,7 @@ export default function Page({ children }: Props) { - + - + {activeItem?.title} diff --git a/apps/dokploy/components/layouts/update-server.tsx b/apps/dokploy/components/layouts/update-server.tsx index 5d7978859..fa748f849 100644 --- a/apps/dokploy/components/layouts/update-server.tsx +++ b/apps/dokploy/components/layouts/update-server.tsx @@ -11,7 +11,7 @@ export const UpdateServerButton = () => { latestVersion: null, updateAvailable: false, }); - const _router = useRouter(); + const router = useRouter(); const { data: isCloud } = api.settings.isCloud.useQuery(); const { mutateAsync: getUpdateData } = api.settings.getUpdateData.useMutation(); diff --git a/apps/dokploy/components/layouts/user-nav.tsx b/apps/dokploy/components/layouts/user-nav.tsx index 4a9624de4..4fe6b76b0 100644 --- a/apps/dokploy/components/layouts/user-nav.tsx +++ b/apps/dokploy/components/layouts/user-nav.tsx @@ -15,24 +15,32 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; -import { authClient } from "@/lib/auth-client"; import { Languages } from "@/lib/languages"; import { api } from "@/utils/api"; import useLocale from "@/utils/hooks/use-locale"; import { ChevronsUpDown } from "lucide-react"; +import { useTranslation } from "next-i18next"; import { useRouter } from "next/router"; +import { useEffect, useRef, useState } from "react"; import { ModeToggle } from "../ui/modeToggle"; import { SidebarMenuButton } from "../ui/sidebar"; -const _AUTO_CHECK_UPDATES_INTERVAL_MINUTES = 7; +const AUTO_CHECK_UPDATES_INTERVAL_MINUTES = 7; export const UserNav = () => { const router = useRouter(); - const { data } = api.user.get.useQuery(); + const { data } = api.auth.get.useQuery(); const { data: isCloud } = api.settings.isCloud.useQuery(); - + const { data: user } = api.user.byAuthId.useQuery( + { + authId: data?.id || "", + }, + { + enabled: !!data?.id && data?.rol === "user", + }, + ); const { locale, setLocale } = useLocale(); - // const { mutateAsync } = api.auth.logout.useMutation(); + const { mutateAsync } = api.auth.logout.useMutation(); return ( @@ -42,15 +50,12 @@ export const UserNav = () => { className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground" > - + CN
Account - {data?.user?.email} + {data?.email}
@@ -65,7 +70,7 @@ export const UserNav = () => { My Account - {data?.user?.email} + {data?.email} @@ -90,7 +95,7 @@ export const UserNav = () => { > Monitoring - {(data?.role === "owner" || data?.canAccessToTraefikFiles) && ( + {(data?.rol === "admin" || user?.canAccessToTraefikFiles) && ( { @@ -100,7 +105,7 @@ export const UserNav = () => { Traefik )} - {(data?.role === "owner" || data?.canAccessToDocker) && ( + {(data?.rol === "admin" || user?.canAccessToDocker) && ( { @@ -113,16 +118,14 @@ export const UserNav = () => { )} - {data?.role === "owner" && ( - { - router.push("/dashboard/settings"); - }} - > - Settings - - )} + { + router.push("/dashboard/settings/server"); + }} + > + Settings + ) : ( <> @@ -134,7 +137,7 @@ export const UserNav = () => { > Profile - {data?.role === "owner" && ( + {data?.rol === "admin" && ( { @@ -144,21 +147,10 @@ export const UserNav = () => { Servers )} - - {data?.role === "owner" && ( - { - router.push("/dashboard/settings"); - }} - > - Settings - - )} )} - {isCloud && data?.role === "owner" && ( + {isCloud && data?.rol === "admin" && ( { @@ -173,12 +165,9 @@ export const UserNav = () => { { - await authClient.signOut().then(() => { + await mutateAsync().then(() => { router.push("/"); }); - // await mutateAsync().then(() => { - // router.push("/"); - // }); }} > Log out diff --git a/apps/dokploy/components/shared/breadcrumb-sidebar.tsx b/apps/dokploy/components/shared/breadcrumb-sidebar.tsx index 74e9fdf63..214ddf40b 100644 --- a/apps/dokploy/components/shared/breadcrumb-sidebar.tsx +++ b/apps/dokploy/components/shared/breadcrumb-sidebar.tsx @@ -26,9 +26,9 @@ export const BreadcrumbSidebar = ({ list }: Props) => { - {list.map((item, _index) => ( + {list.map((item, index) => ( - + {item.href ? ( {item.name} @@ -37,7 +37,7 @@ export const BreadcrumbSidebar = ({ list }: Props) => { )} - + ))} diff --git a/apps/dokploy/components/shared/dialog-action.tsx b/apps/dokploy/components/shared/dialog-action.tsx index 444440a2d..3724242d0 100644 --- a/apps/dokploy/components/shared/dialog-action.tsx +++ b/apps/dokploy/components/shared/dialog-action.tsx @@ -9,6 +9,7 @@ import { AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog"; +import { Button } from "../ui/button"; interface Props { title?: string | React.ReactNode; diff --git a/apps/dokploy/components/shared/drawer-logs.tsx b/apps/dokploy/components/shared/drawer-logs.tsx index d8d1affb7..f5a56cd6a 100644 --- a/apps/dokploy/components/shared/drawer-logs.tsx +++ b/apps/dokploy/components/shared/drawer-logs.tsx @@ -1,3 +1,6 @@ +import { DialogAction } from "@/components/shared/dialog-action"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Sheet, SheetContent, @@ -5,8 +8,10 @@ import { SheetHeader, SheetTitle, } from "@/components/ui/sheet"; -import { Loader2 } from "lucide-react"; -import { useEffect, useRef, useState } from "react"; +import { api } from "@/utils/api"; +import { Ban, CheckCircle2, Loader2, RefreshCcw, Terminal } from "lucide-react"; +import React, { useState, useEffect, useRef } from "react"; +import { toast } from "sonner"; import { TerminalLine } from "../dashboard/docker/logs/terminal-line"; import type { LogLine } from "../dashboard/docker/logs/utils"; @@ -43,7 +48,7 @@ export const DrawerLogs = ({ isOpen, onClose, filteredLogs }: Props) => { return ( { + onOpenChange={(open) => { onClose(); }} > diff --git a/apps/dokploy/components/shared/logo.tsx b/apps/dokploy/components/shared/logo.tsx index a1c3acb7e..5d192cfdc 100644 --- a/apps/dokploy/components/shared/logo.tsx +++ b/apps/dokploy/components/shared/logo.tsx @@ -1,21 +1,10 @@ -import { cn } from "@/lib/utils"; +import React from "react"; interface Props { className?: string; - logoUrl?: string; } -export const Logo = ({ className = "size-14", logoUrl }: Props) => { - if (logoUrl) { - return ( - Organization Logo - ); - } - +export const Logo = ({ className = "size-14" }: Props) => { return ( { const colorConfig = Object.entries(config).filter( - ([, config]) => config.theme || config.color, + ([_, config]) => config.theme || config.color, ); if (!colorConfig.length) { diff --git a/apps/dokploy/components/ui/file-tree.tsx b/apps/dokploy/components/ui/file-tree.tsx index 0f50d5089..9db3786e6 100644 --- a/apps/dokploy/components/ui/file-tree.tsx +++ b/apps/dokploy/components/ui/file-tree.tsx @@ -85,7 +85,7 @@ const Tree = React.forwardRef( return ids; }, [data, initialSlelectedItemId]); - const { ref: refRoot } = useResizeObserver(); + const { ref: refRoot, width, height } = useResizeObserver(); return (
diff --git a/apps/dokploy/components/ui/modeToggle.tsx b/apps/dokploy/components/ui/modeToggle.tsx index 9b6ba27b9..7965a3395 100644 --- a/apps/dokploy/components/ui/modeToggle.tsx +++ b/apps/dokploy/components/ui/modeToggle.tsx @@ -3,6 +3,7 @@ import { Button } from "@/components/ui/button"; import { Moon, Sun } from "lucide-react"; import { useTheme } from "next-themes"; +import * as React from "react"; export function ModeToggle() { const { theme, setTheme } = useTheme(); diff --git a/apps/dokploy/components/ui/sidebar.tsx b/apps/dokploy/components/ui/sidebar.tsx index 40f848739..a930da6d9 100644 --- a/apps/dokploy/components/ui/sidebar.tsx +++ b/apps/dokploy/components/ui/sidebar.tsx @@ -17,7 +17,7 @@ import { import { useIsMobile } from "@/hooks/use-mobile"; import { cn } from "@/lib/utils"; -export const SIDEBAR_COOKIE_NAME = "sidebar:state"; +const SIDEBAR_COOKIE_NAME = "sidebar:state"; const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; const SIDEBAR_WIDTH = "16rem"; const SIDEBAR_WIDTH_MOBILE = "18rem"; @@ -329,7 +329,7 @@ const SidebarInset = React.forwardRef<
statement-breakpoint -ALTER TABLE "admin" ADD COLUMN "cleanupCacheOnPreviews" boolean DEFAULT false NOT NULL;--> statement-breakpoint -ALTER TABLE "admin" ADD COLUMN "cleanupCacheOnCompose" boolean DEFAULT false NOT NULL; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0058_brown_sharon_carter.sql b/apps/dokploy/drizzle/0058_brown_sharon_carter.sql deleted file mode 100644 index 4cdc0c925..000000000 --- a/apps/dokploy/drizzle/0058_brown_sharon_carter.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "deployment" ADD COLUMN "errorMessage" text; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0059_striped_bill_hollister.sql b/apps/dokploy/drizzle/0059_striped_bill_hollister.sql deleted file mode 100644 index 6653859b4..000000000 --- a/apps/dokploy/drizzle/0059_striped_bill_hollister.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "admin" ALTER COLUMN "cleanupCacheApplications" SET DEFAULT false; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0060_disable-aggressive-cache.sql b/apps/dokploy/drizzle/0060_disable-aggressive-cache.sql deleted file mode 100644 index 33828cecf..000000000 --- a/apps/dokploy/drizzle/0060_disable-aggressive-cache.sql +++ /dev/null @@ -1,3 +0,0 @@ --- Custom SQL migration file, put you code below! - -UPDATE "admin" SET "cleanupCacheApplications" = false; diff --git a/apps/dokploy/drizzle/0061_many_molten_man.sql b/apps/dokploy/drizzle/0061_many_molten_man.sql deleted file mode 100644 index d0b9a48f7..000000000 --- a/apps/dokploy/drizzle/0061_many_molten_man.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE "admin" ADD COLUMN "enablePaidFeatures" boolean DEFAULT false NOT NULL;--> statement-breakpoint -ALTER TABLE "admin" ADD COLUMN "metricsConfig" jsonb DEFAULT '{"server":{"refreshRate":20,"port":4500,"token":"","retentionDays":2,"cronJob":"","urlCallback":"","thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":20,"services":{"include":[],"exclude":[]}}}'::jsonb NOT NULL;--> statement-breakpoint -ALTER TABLE "notification" ADD COLUMN "serverThreshold" boolean DEFAULT false NOT NULL;--> statement-breakpoint -ALTER TABLE "server" ADD COLUMN "metricsConfig" jsonb DEFAULT '{"server":{"refreshRate":20,"port":4500,"token":"","urlCallback":"","cronJob":"","retentionDays":2,"thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":20,"services":{"include":[],"exclude":[]}}}'::jsonb NOT NULL; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0062_slippery_white_tiger.sql b/apps/dokploy/drizzle/0062_slippery_white_tiger.sql deleted file mode 100644 index 742afe0c6..000000000 --- a/apps/dokploy/drizzle/0062_slippery_white_tiger.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE "admin" ALTER COLUMN "metricsConfig" SET DEFAULT '{"server":{"type":"Dokploy","refreshRate":20,"port":4500,"token":"","retentionDays":2,"cronJob":"","urlCallback":"","thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":20,"services":{"include":[],"exclude":[]}}}'::jsonb;--> statement-breakpoint -ALTER TABLE "server" ALTER COLUMN "metricsConfig" SET DEFAULT '{"server":{"type":"Remote","refreshRate":20,"port":4500,"token":"","urlCallback":"","cronJob":"","retentionDays":2,"thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":20,"services":{"include":[],"exclude":[]}}}'::jsonb; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0063_panoramic_dreadnoughts.sql b/apps/dokploy/drizzle/0063_panoramic_dreadnoughts.sql deleted file mode 100644 index 1b0b83969..000000000 --- a/apps/dokploy/drizzle/0063_panoramic_dreadnoughts.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE "admin" ALTER COLUMN "metricsConfig" SET DEFAULT '{"server":{"type":"Dokploy","refreshRate":60,"port":4500,"token":"","retentionDays":2,"cronJob":"","urlCallback":"","thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":60,"services":{"include":[],"exclude":[]}}}'::jsonb;--> statement-breakpoint -ALTER TABLE "server" ALTER COLUMN "metricsConfig" SET DEFAULT '{"server":{"type":"Remote","refreshRate":60,"port":4500,"token":"","urlCallback":"","cronJob":"","retentionDays":2,"thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":60,"services":{"include":[],"exclude":[]}}}'::jsonb; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0064_previous_agent_brand.sql b/apps/dokploy/drizzle/0064_previous_agent_brand.sql deleted file mode 100644 index 73ab10351..000000000 --- a/apps/dokploy/drizzle/0064_previous_agent_brand.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "compose" ADD COLUMN "deployable" boolean DEFAULT false NOT NULL; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0065_daily_zaladane.sql b/apps/dokploy/drizzle/0065_daily_zaladane.sql deleted file mode 100644 index dc5c0d146..000000000 --- a/apps/dokploy/drizzle/0065_daily_zaladane.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "compose" RENAME COLUMN "deployable" TO "isolatedDeployment"; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0066_yielding_echo.sql b/apps/dokploy/drizzle/0066_yielding_echo.sql deleted file mode 100644 index bb5c2511c..000000000 --- a/apps/dokploy/drizzle/0066_yielding_echo.sql +++ /dev/null @@ -1,688 +0,0 @@ -CREATE TABLE "user_temp" ( - "id" text PRIMARY KEY NOT NULL, - "name" text DEFAULT '' NOT NULL, - "isRegistered" boolean DEFAULT false NOT NULL, - "expirationDate" text NOT NULL, - "createdAt" text NOT NULL, - "two_factor_enabled" boolean DEFAULT false NOT NULL, - "email" text NOT NULL, - "email_verified" boolean NOT NULL, - "image" text, - "banned" boolean, - "ban_reason" text, - "ban_expires" timestamp, - "updated_at" timestamp NOT NULL, - "serverIp" text, - "certificateType" "certificateType" DEFAULT 'none' NOT NULL, - "host" text, - "letsEncryptEmail" text, - "sshPrivateKey" text, - "enableDockerCleanup" boolean DEFAULT false NOT NULL, - "enableLogRotation" boolean DEFAULT false NOT NULL, - "enablePaidFeatures" boolean DEFAULT false NOT NULL, - "metricsConfig" jsonb DEFAULT '{"server":{"type":"Dokploy","refreshRate":60,"port":4500,"token":"","retentionDays":2,"cronJob":"","urlCallback":"","thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":60,"services":{"include":[],"exclude":[]}}}'::jsonb NOT NULL, - "cleanupCacheApplications" boolean DEFAULT false NOT NULL, - "cleanupCacheOnPreviews" boolean DEFAULT false NOT NULL, - "cleanupCacheOnCompose" boolean DEFAULT false NOT NULL, - "stripeCustomerId" text, - "stripeSubscriptionId" text, - "serversQuantity" integer DEFAULT 0 NOT NULL, - CONSTRAINT "user_temp_email_unique" UNIQUE("email") -); ---> statement-breakpoint -CREATE TABLE "session_temp" ( - "id" text PRIMARY KEY NOT NULL, - "expires_at" timestamp NOT NULL, - "token" text NOT NULL, - "created_at" timestamp NOT NULL, - "updated_at" timestamp NOT NULL, - "ip_address" text, - "user_agent" text, - "user_id" text NOT NULL, - "impersonated_by" text, - "active_organization_id" text, - CONSTRAINT "session_temp_token_unique" UNIQUE("token") -); ---> statement-breakpoint -CREATE TABLE "account" ( - "id" text PRIMARY KEY NOT NULL, - "account_id" text NOT NULL, - "provider_id" text NOT NULL, - "user_id" text NOT NULL, - "access_token" text, - "refresh_token" text, - "id_token" text, - "access_token_expires_at" timestamp, - "refresh_token_expires_at" timestamp, - "scope" text, - "password" text, - "is2FAEnabled" boolean DEFAULT false NOT NULL, - "created_at" timestamp NOT NULL, - "updated_at" timestamp NOT NULL, - "resetPasswordToken" text, - "resetPasswordExpiresAt" text, - "confirmationToken" text, - "confirmationExpiresAt" text -); ---> statement-breakpoint -CREATE TABLE "invitation" ( - "id" text PRIMARY KEY NOT NULL, - "organization_id" text NOT NULL, - "email" text NOT NULL, - "role" text, - "status" text NOT NULL, - "expires_at" timestamp NOT NULL, - "inviter_id" text NOT NULL, - "team_id" text -); ---> statement-breakpoint -CREATE TABLE "member" ( - "id" text PRIMARY KEY NOT NULL, - "organization_id" text NOT NULL, - "user_id" text NOT NULL, - "role" text NOT NULL, - "created_at" timestamp NOT NULL, - "canCreateProjects" boolean DEFAULT false NOT NULL, - "canAccessToSSHKeys" boolean DEFAULT false NOT NULL, - "canCreateServices" boolean DEFAULT false NOT NULL, - "canDeleteProjects" boolean DEFAULT false NOT NULL, - "canDeleteServices" boolean DEFAULT false NOT NULL, - "canAccessToDocker" boolean DEFAULT false NOT NULL, - "canAccessToAPI" boolean DEFAULT false NOT NULL, - "canAccessToGitProviders" boolean DEFAULT false NOT NULL, - "canAccessToTraefikFiles" boolean DEFAULT false NOT NULL, - "accesedProjects" text[] DEFAULT ARRAY[]::text[] NOT NULL, - "accesedServices" text[] DEFAULT ARRAY[]::text[] NOT NULL, - "team_id" text -); ---> statement-breakpoint -CREATE TABLE "organization" ( - "id" text PRIMARY KEY NOT NULL, - "name" text NOT NULL, - "slug" text, - "logo" text, - "created_at" timestamp NOT NULL, - "metadata" text, - "owner_id" text NOT NULL, - CONSTRAINT "organization_slug_unique" UNIQUE("slug") -); ---> statement-breakpoint -CREATE TABLE "verification" ( - "id" text PRIMARY KEY NOT NULL, - "identifier" text NOT NULL, - "value" text NOT NULL, - "expires_at" timestamp NOT NULL, - "created_at" timestamp, - "updated_at" timestamp -); - -CREATE TABLE "two_factor" ( - "id" text PRIMARY KEY NOT NULL, - "secret" text NOT NULL, - "backup_codes" text NOT NULL, - "user_id" text NOT NULL -); - -CREATE TABLE "apikey" ( - "id" text PRIMARY KEY NOT NULL, - "name" text, - "start" text, - "prefix" text, - "key" text NOT NULL, - "user_id" text NOT NULL, - "refill_interval" integer, - "refill_amount" integer, - "last_refill_at" timestamp, - "enabled" boolean, - "rate_limit_enabled" boolean, - "rate_limit_time_window" integer, - "rate_limit_max" integer, - "request_count" integer, - "remaining" integer, - "last_request" timestamp, - "expires_at" timestamp, - "created_at" timestamp NOT NULL, - "updated_at" timestamp NOT NULL, - "permissions" text, - "metadata" text -); ---> statement-breakpoint -ALTER TABLE "certificate" ALTER COLUMN "adminId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "notification" ALTER COLUMN "adminId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "ssh-key" ALTER COLUMN "adminId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "git_provider" ALTER COLUMN "adminId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "session_temp" ADD CONSTRAINT "session_temp_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "invitation" ADD CONSTRAINT "invitation_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "invitation" ADD CONSTRAINT "invitation_inviter_id_user_temp_id_fk" FOREIGN KEY ("inviter_id") REFERENCES "public"."user_temp"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "member" ADD CONSTRAINT "member_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "member" ADD CONSTRAINT "member_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "organization" ADD CONSTRAINT "organization_owner_id_user_temp_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."user_temp"("id") ON DELETE no action ON UPDATE no action; -ALTER TABLE "two_factor" ADD CONSTRAINT "two_factor_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "apikey" ADD CONSTRAINT "apikey_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint - - --- Data Migration - --- Custom SQL migration file, put your code below! -- - -WITH inserted_users AS ( - -- Insertar usuarios desde admins - INSERT INTO user_temp ( - id, - email, - "email_verified", - "updated_at", - "serverIp", - image, - "certificateType", - host, - "letsEncryptEmail", - "sshPrivateKey", - "enableDockerCleanup", - "enableLogRotation", - "enablePaidFeatures", - "metricsConfig", - "cleanupCacheApplications", - "cleanupCacheOnPreviews", - "cleanupCacheOnCompose", - "stripeCustomerId", - "stripeSubscriptionId", - "serversQuantity", - "expirationDate", - "createdAt", - "isRegistered" - ) - SELECT - a."adminId", - auth.email, - true, - CURRENT_TIMESTAMP, - a."serverIp", - auth.image, - a."certificateType", - a.host, - a."letsEncryptEmail", - a."sshPrivateKey", - a."enableDockerCleanup", - a."enableLogRotation", - a."enablePaidFeatures", - a."metricsConfig", - a."cleanupCacheApplications", - a."cleanupCacheOnPreviews", - a."cleanupCacheOnCompose", - a."stripeCustomerId", - a."stripeSubscriptionId", - a."serversQuantity", - NOW() + INTERVAL '1 year', - NOW(), - true - FROM admin a - JOIN auth ON auth.id = a."authId" - RETURNING * -), -inserted_accounts AS ( - -- Insertar cuentas para los admins - INSERT INTO account ( - id, - "account_id", - "provider_id", - "user_id", - password, - "created_at", - "updated_at" - ) - SELECT - gen_random_uuid(), - gen_random_uuid(), - 'credential', - a."adminId", - auth.password, - NOW(), - NOW() - FROM admin a - JOIN auth ON auth.id = a."authId" - RETURNING * -), -inserted_orgs AS ( - -- Crear organizaciones para cada admin - INSERT INTO organization ( - id, - name, - slug, - "owner_id", - "created_at" - ) - SELECT - gen_random_uuid(), - 'My Organization', - -- Generamos un slug único usando una función de hash - encode(sha256((a."adminId" || CURRENT_TIMESTAMP)::bytea), 'hex'), - a."adminId", - NOW() - FROM admin a - RETURNING * -), -inserted_members AS ( - -- Insertar usuarios miembros - INSERT INTO user_temp ( - id, - email, - "email_verified", - "updated_at", - image, - "createdAt", - "expirationDate", - "isRegistered" - ) - SELECT - u."userId", - auth.email, - true, - CURRENT_TIMESTAMP, - auth.image, - NOW(), - NOW() + INTERVAL '1 year', - COALESCE(u."isRegistered", false) - FROM "user" u - JOIN admin a ON u."adminId" = a."adminId" - JOIN auth ON auth.id = u."authId" - RETURNING * -), -inserted_member_accounts AS ( - -- Insertar cuentas para los usuarios miembros - INSERT INTO account ( - id, - "account_id", - "provider_id", - "user_id", - password, - "created_at", - "updated_at" - ) - SELECT - gen_random_uuid(), - gen_random_uuid(), - 'credential', - u."userId", - auth.password, - NOW(), - NOW() - FROM "user" u - JOIN admin a ON u."adminId" = a."adminId" - JOIN auth ON auth.id = u."authId" - RETURNING * -), -inserted_admin_members AS ( - -- Insertar miembros en las organizaciones (admins como owners) - INSERT INTO member ( - id, - "organization_id", - "user_id", - role, - "created_at", - "canAccessToAPI", - "canAccessToDocker", - "canAccessToGitProviders", - "canAccessToSSHKeys", - "canAccessToTraefikFiles", - "canCreateProjects", - "canCreateServices", - "canDeleteProjects", - "canDeleteServices", - "accesedProjects", - "accesedServices" - ) - SELECT - gen_random_uuid(), - o.id, - a."adminId", - 'owner', - NOW(), - true, -- Los admins tienen todos los permisos por defecto - true, - true, - true, - true, - true, - true, - true, - true, - '{}', - '{}' - FROM admin a - JOIN inserted_orgs o ON o."owner_id" = a."adminId" - JOIN auth ON auth.id = a."authId" - RETURNING * -) --- Insertar miembros regulares en las organizaciones -INSERT INTO member ( - id, - "organization_id", - "user_id", - role, - "created_at", - "canAccessToAPI", - "canAccessToDocker", - "canAccessToGitProviders", - "canAccessToSSHKeys", - "canAccessToTraefikFiles", - "canCreateProjects", - "canCreateServices", - "canDeleteProjects", - "canDeleteServices", - "accesedProjects", - "accesedServices" -) -SELECT - gen_random_uuid(), - o.id, - u."userId", - 'member', - NOW(), - COALESCE(u."canAccessToAPI", false), - COALESCE(u."canAccessToDocker", false), - COALESCE(u."canAccessToGitProviders", false), - COALESCE(u."canAccessToSSHKeys", false), - COALESCE(u."canAccessToTraefikFiles", false), - COALESCE(u."canCreateProjects", false), - COALESCE(u."canCreateServices", false), - COALESCE(u."canDeleteProjects", false), - COALESCE(u."canDeleteServices", false), - COALESCE(u."accesedProjects", '{}'), - COALESCE(u."accesedServices", '{}') -FROM "user" u -JOIN admin a ON u."adminId" = a."adminId" -JOIN inserted_orgs o ON o."owner_id" = a."adminId" -JOIN auth ON auth.id = u."authId"; - --- Migrar tokens de auth a apikey -INSERT INTO apikey ( - id, - name, - key, - user_id, - enabled, - created_at, - updated_at -) -SELECT - gen_random_uuid(), - 'Legacy Token', - auth.token, -user_temp.id, - true, - NOW(), - NOW() -FROM auth -JOIN admin ON auth.id = admin."authId" -JOIN user_temp ON user_temp.id = admin."adminId" -WHERE auth.token IS NOT NULL AND auth.token != ''; - --- Migration tables foreign keys - -ALTER TABLE "project" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "destination" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "certificate" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "registry" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "notification" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "ssh-key" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "git_provider" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "server" RENAME COLUMN "adminId" TO "userId";--> statement-breakpoint -ALTER TABLE "project" DROP CONSTRAINT "project_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "destination" DROP CONSTRAINT "destination_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "certificate" DROP CONSTRAINT "certificate_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "registry" DROP CONSTRAINT "registry_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "notification" DROP CONSTRAINT "notification_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "ssh-key" DROP CONSTRAINT "ssh-key_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "git_provider" DROP CONSTRAINT "git_provider_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "server" DROP CONSTRAINT "server_adminId_admin_adminId_fk"; ---> statement-breakpoint -ALTER TABLE "project" ADD CONSTRAINT "project_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "destination" ADD CONSTRAINT "destination_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "certificate" ADD CONSTRAINT "certificate_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "registry" ADD CONSTRAINT "registry_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "notification" ADD CONSTRAINT "notification_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "ssh-key" ADD CONSTRAINT "ssh-key_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "git_provider" ADD CONSTRAINT "git_provider_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "server" ADD CONSTRAINT "server_userId_user_temp_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action; - - -ALTER TABLE "user_temp" ADD COLUMN "created_at" timestamp DEFAULT now(); - - --- Add properties - -ALTER TABLE "project" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "destination" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "certificate" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "registry" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "notification" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "ssh-key" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "git_provider" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "server" ADD COLUMN "organizationId" text;--> statement-breakpoint -ALTER TABLE "project" ADD CONSTRAINT "project_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "destination" ADD CONSTRAINT "destination_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "certificate" ADD CONSTRAINT "certificate_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "registry" ADD CONSTRAINT "registry_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "notification" ADD CONSTRAINT "notification_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "ssh-key" ADD CONSTRAINT "ssh-key_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "git_provider" ADD CONSTRAINT "git_provider_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "server" ADD CONSTRAINT "server_organizationId_organization_id_fk" FOREIGN KEY ("organizationId") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action; - - --- Update tables to use organizationId - --- Custom SQL migration file - --- Actualizar projects -UPDATE "project" p -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = p."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE p."organizationId" IS NULL; - --- Actualizar servers -UPDATE "server" s -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = s."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE s."organizationId" IS NULL; - --- Actualizar ssh-keys -UPDATE "ssh-key" k -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = k."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE k."organizationId" IS NULL; - --- Actualizar destinations -UPDATE "destination" d -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = d."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE d."organizationId" IS NULL; - --- Actualizar registry -UPDATE "registry" r -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = r."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE r."organizationId" IS NULL; - --- Actualizar notifications -UPDATE "notification" n -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = n."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE n."organizationId" IS NULL; - --- Actualizar certificates -UPDATE "certificate" c -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = c."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE c."organizationId" IS NULL; - --- Actualizar git_provider -UPDATE "git_provider" g -SET "organizationId" = ( - SELECT m."organization_id" - FROM "member" m - WHERE m."user_id" = g."userId" - AND m."role" = 'owner' - LIMIT 1 -) -WHERE g."organizationId" IS NULL; - --- Verificar que todos los recursos tengan una organización -DO $$ -BEGIN - IF EXISTS ( - SELECT 1 FROM "project" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "server" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "ssh-key" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "destination" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "registry" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "notification" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "certificate" WHERE "organizationId" IS NULL - UNION ALL - SELECT 1 FROM "git_provider" WHERE "organizationId" IS NULL - ) THEN - RAISE EXCEPTION 'Hay recursos sin organización asignada'; - END IF; -END $$; - --- Hacer organization_id NOT NULL en todas las tablas -ALTER TABLE "project" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "server" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "ssh-key" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "destination" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "registry" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "notification" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "certificate" ALTER COLUMN "organizationId" SET NOT NULL; -ALTER TABLE "git_provider" ALTER COLUMN "organizationId" SET NOT NULL; - --- Crear índices para mejorar el rendimiento de búsquedas por organización -CREATE INDEX IF NOT EXISTS "idx_project_organization" ON "project" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_server_organization" ON "server" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_sshkey_organization" ON "ssh-key" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_destination_organization" ON "destination" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_registry_organization" ON "registry" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_notification_organization" ON "notification" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_certificate_organization" ON "certificate" ("organizationId"); -CREATE INDEX IF NOT EXISTS "idx_git_provider_organization" ON "git_provider" ("organizationId"); - - - - - --- Botar tablas de migración -ALTER TABLE "project" DROP CONSTRAINT "project_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "destination" DROP CONSTRAINT "destination_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "certificate" DROP CONSTRAINT "certificate_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "registry" DROP CONSTRAINT "registry_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "notification" DROP CONSTRAINT "notification_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "ssh-key" DROP CONSTRAINT "ssh-key_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "git_provider" DROP CONSTRAINT "git_provider_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "server" DROP CONSTRAINT "server_userId_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "project" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "destination" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "certificate" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "registry" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "notification" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "ssh-key" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "git_provider" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "server" ALTER COLUMN "organizationId" SET NOT NULL;--> statement-breakpoint -ALTER TABLE "project" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "destination" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "certificate" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "registry" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "notification" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "ssh-key" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "git_provider" DROP COLUMN "userId";--> statement-breakpoint -ALTER TABLE "server" DROP COLUMN "userId"; - --- Drop tables -DROP TABLE "user" CASCADE;--> statement-breakpoint -DROP TABLE "admin" CASCADE;--> statement-breakpoint -DROP TABLE "auth" CASCADE;--> statement-breakpoint -DROP TABLE "session" CASCADE;--> statement-breakpoint -DROP TYPE "public"."Roles"; - - --- Drop tables -ALTER TABLE "account" DROP CONSTRAINT "account_user_id_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "invitation" DROP CONSTRAINT "invitation_organization_id_organization_id_fk"; ---> statement-breakpoint -ALTER TABLE "invitation" DROP CONSTRAINT "invitation_inviter_id_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "member" DROP CONSTRAINT "member_organization_id_organization_id_fk"; ---> statement-breakpoint -ALTER TABLE "member" DROP CONSTRAINT "member_user_id_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "organization" DROP CONSTRAINT "organization_owner_id_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "account" ADD CONSTRAINT "account_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "invitation" ADD CONSTRAINT "invitation_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "invitation" ADD CONSTRAINT "invitation_inviter_id_user_temp_id_fk" FOREIGN KEY ("inviter_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "member" ADD CONSTRAINT "member_organization_id_organization_id_fk" FOREIGN KEY ("organization_id") REFERENCES "public"."organization"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "member" ADD CONSTRAINT "member_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint -ALTER TABLE "organization" ADD CONSTRAINT "organization_owner_id_user_temp_id_fk" FOREIGN KEY ("owner_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action; - - --- Update references - -ALTER TABLE "session_temp" DROP CONSTRAINT "session_temp_user_id_user_temp_id_fk"; ---> statement-breakpoint -ALTER TABLE "session_temp" ADD CONSTRAINT "session_temp_user_id_user_temp_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user_temp"("id") ON DELETE cascade ON UPDATE no action; \ No newline at end of file diff --git a/apps/dokploy/drizzle/0067_condemned_sugar_man.sql b/apps/dokploy/drizzle/0067_condemned_sugar_man.sql deleted file mode 100644 index 9c74d7b7f..000000000 --- a/apps/dokploy/drizzle/0067_condemned_sugar_man.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "telegram" ADD COLUMN "messageThreadId" text; \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0000_snapshot.json b/apps/dokploy/drizzle/meta/0000_snapshot.json index c32e80df3..28f27722f 100644 --- a/apps/dokploy/drizzle/meta/0000_snapshot.json +++ b/apps/dokploy/drizzle/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "version": "7", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -252,10 +252,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -396,10 +393,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -528,10 +522,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -647,10 +638,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -704,10 +692,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -761,10 +746,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -846,10 +828,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -996,10 +975,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1134,10 +1110,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1284,10 +1257,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1429,10 +1399,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1504,10 +1471,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1568,10 +1532,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1739,10 +1700,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1796,10 +1754,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1841,10 +1796,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1911,10 +1863,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1977,10 +1926,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2034,10 +1980,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2166,10 +2109,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -2274,9 +2214,5 @@ "columns": {} }, "id": "c6215051-7cd1-412d-b8df-b50d58acacff", - "prevId": "00000000-0000-0000-0000-000000000000", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "prevId": "00000000-0000-0000-0000-000000000000" } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0001_snapshot.json b/apps/dokploy/drizzle/meta/0001_snapshot.json index e40461e8c..17cfe8ef3 100644 --- a/apps/dokploy/drizzle/meta/0001_snapshot.json +++ b/apps/dokploy/drizzle/meta/0001_snapshot.json @@ -1,5 +1,5 @@ { - "version": "7", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -252,10 +252,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -396,10 +393,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -528,10 +522,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -647,10 +638,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -710,10 +698,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -767,10 +752,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -852,10 +834,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1002,10 +981,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1140,10 +1116,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1290,10 +1263,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1435,10 +1405,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1510,10 +1477,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1574,10 +1538,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1745,10 +1706,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1802,10 +1760,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1847,10 +1802,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1917,10 +1869,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1983,10 +1932,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2040,10 +1986,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2172,10 +2115,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -2280,9 +2220,5 @@ "columns": {} }, "id": "3a4dfad7-ae33-4ae3-b60e-4f40f44f5652", - "prevId": "c6215051-7cd1-412d-b8df-b50d58acacff", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "prevId": "c6215051-7cd1-412d-b8df-b50d58acacff" } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0002_snapshot.json b/apps/dokploy/drizzle/meta/0002_snapshot.json index a3c00e23f..0f2f9870c 100644 --- a/apps/dokploy/drizzle/meta/0002_snapshot.json +++ b/apps/dokploy/drizzle/meta/0002_snapshot.json @@ -1,5 +1,5 @@ { - "version": "7", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -252,10 +252,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -396,10 +393,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -528,10 +522,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -647,10 +638,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -717,10 +705,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -774,10 +759,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -859,10 +841,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1009,10 +988,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1147,10 +1123,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1297,10 +1270,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1442,10 +1412,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1517,10 +1484,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1581,10 +1545,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1752,10 +1713,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1809,10 +1767,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1854,10 +1809,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1924,10 +1876,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1990,10 +1939,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2047,10 +1993,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2179,10 +2122,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -2287,9 +2227,5 @@ "columns": {} }, "id": "665483bd-5123-4c2b-beef-bfa9b91b9356", - "prevId": "3a4dfad7-ae33-4ae3-b60e-4f40f44f5652", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "prevId": "3a4dfad7-ae33-4ae3-b60e-4f40f44f5652" } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0003_snapshot.json b/apps/dokploy/drizzle/meta/0003_snapshot.json index f6c5ee002..de0fd49c6 100644 --- a/apps/dokploy/drizzle/meta/0003_snapshot.json +++ b/apps/dokploy/drizzle/meta/0003_snapshot.json @@ -1,5 +1,5 @@ { - "version": "7", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -252,10 +252,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -396,10 +393,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -535,10 +529,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -654,10 +645,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -724,10 +712,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -781,10 +766,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -866,10 +848,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1016,10 +995,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1154,10 +1130,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1304,10 +1277,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1449,10 +1419,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1524,10 +1491,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1588,10 +1552,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1759,10 +1720,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1816,10 +1774,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1861,10 +1816,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1931,10 +1883,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1997,10 +1946,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2054,10 +2000,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2186,10 +2129,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -2294,9 +2234,5 @@ "columns": {} }, "id": "5a1d3f2b-9c31-4125-9645-015170550b51", - "prevId": "665483bd-5123-4c2b-beef-bfa9b91b9356", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "prevId": "665483bd-5123-4c2b-beef-bfa9b91b9356" } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0004_snapshot.json b/apps/dokploy/drizzle/meta/0004_snapshot.json index f8d07def2..0e0cf4572 100644 --- a/apps/dokploy/drizzle/meta/0004_snapshot.json +++ b/apps/dokploy/drizzle/meta/0004_snapshot.json @@ -1,5 +1,5 @@ { - "version": "7", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -228,10 +228,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -372,10 +369,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -511,10 +505,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -630,10 +621,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -700,10 +688,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -757,10 +742,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -842,10 +824,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -992,10 +971,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1130,10 +1106,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1280,10 +1253,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1425,10 +1395,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1500,10 +1467,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1564,10 +1528,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1735,10 +1696,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1792,10 +1750,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1837,10 +1792,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1907,10 +1859,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1973,10 +1922,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2030,10 +1976,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2162,10 +2105,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -2270,9 +2210,5 @@ "columns": {} }, "id": "7bb4bbcf-791c-4888-919e-f74bc0528b5f", - "prevId": "5a1d3f2b-9c31-4125-9645-015170550b51", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "prevId": "5a1d3f2b-9c31-4125-9645-015170550b51" } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0005_snapshot.json b/apps/dokploy/drizzle/meta/0005_snapshot.json index 69c294fdf..30ac2bb33 100644 --- a/apps/dokploy/drizzle/meta/0005_snapshot.json +++ b/apps/dokploy/drizzle/meta/0005_snapshot.json @@ -1,5 +1,5 @@ { - "version": "7", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -228,10 +228,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -372,10 +369,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -511,10 +505,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -630,10 +621,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -700,10 +688,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -757,10 +742,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -842,10 +824,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -992,10 +971,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1130,10 +1106,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1280,10 +1253,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1425,10 +1395,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1500,10 +1467,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1564,10 +1528,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1735,10 +1696,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1792,10 +1750,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1837,10 +1792,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1907,10 +1859,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1973,10 +1922,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2030,10 +1976,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2162,10 +2105,7 @@ ], "nullsNotDistinct": false } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2238,10 +2178,7 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2354,9 +2291,5 @@ "columns": {} }, "id": "92c75e26-64ef-484f-a7d2-72a9422c119f", - "prevId": "7bb4bbcf-791c-4888-919e-f74bc0528b5f", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "prevId": "7bb4bbcf-791c-4888-919e-f74bc0528b5f" } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0006_snapshot.json b/apps/dokploy/drizzle/meta/0006_snapshot.json index 44b1d6857..37764831a 100644 --- a/apps/dokploy/drizzle/meta/0006_snapshot.json +++ b/apps/dokploy/drizzle/meta/0006_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "8ca71247-d512-427d-b115-47a7287ac431", + "prevId": "92c75e26-64ef-484f-a7d2-72a9422c119f", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -217,43 +219,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -375,30 +374,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -509,35 +505,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -642,22 +635,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -720,15 +710,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -770,22 +757,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -856,22 +840,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -999,30 +980,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1138,30 +1116,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1289,30 +1264,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1391,74 +1363,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1518,22 +1487,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1583,22 +1549,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1691,87 +1654,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1820,15 +1780,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1858,22 +1815,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1928,22 +1882,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1985,31 +1936,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2052,22 +2000,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2177,30 +2122,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2262,22 +2204,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2385,14 +2324,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "8ca71247-d512-427d-b115-47a7287ac431", - "prevId": "92c75e26-64ef-484f-a7d2-72a9422c119f", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0007_snapshot.json b/apps/dokploy/drizzle/meta/0007_snapshot.json index 0949a42f4..a3292da07 100644 --- a/apps/dokploy/drizzle/meta/0007_snapshot.json +++ b/apps/dokploy/drizzle/meta/0007_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "80176730-273b-45e4-a7ca-760e29ad6d02", + "prevId": "8ca71247-d512-427d-b115-47a7287ac431", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -224,43 +226,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -382,30 +381,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -516,35 +512,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -649,22 +642,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -727,15 +717,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -777,22 +764,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -863,22 +847,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1006,30 +987,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1145,30 +1123,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1296,30 +1271,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1398,74 +1370,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1525,22 +1494,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1590,22 +1556,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1698,87 +1661,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1827,15 +1787,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1865,22 +1822,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1935,22 +1889,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1992,31 +1943,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2059,22 +2007,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2184,30 +2129,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2269,22 +2211,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2392,14 +2331,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "80176730-273b-45e4-a7ca-760e29ad6d02", - "prevId": "8ca71247-d512-427d-b115-47a7287ac431", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0008_snapshot.json b/apps/dokploy/drizzle/meta/0008_snapshot.json index 5e9d9c718..c09360d28 100644 --- a/apps/dokploy/drizzle/meta/0008_snapshot.json +++ b/apps/dokploy/drizzle/meta/0008_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "54b3cce8-c1ab-46ed-bef9-1bb945d965f9", + "prevId": "80176730-273b-45e4-a7ca-760e29ad6d02", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -224,43 +226,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -382,30 +381,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -516,35 +512,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -649,22 +642,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -727,15 +717,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -777,22 +764,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -863,22 +847,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1006,30 +987,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1145,30 +1123,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1296,30 +1271,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1398,74 +1370,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1525,22 +1494,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1590,22 +1556,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1698,87 +1661,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1827,15 +1787,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1865,22 +1822,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1935,22 +1889,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1992,31 +1943,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2059,22 +2007,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2184,30 +2129,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2269,22 +2211,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2392,14 +2331,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "54b3cce8-c1ab-46ed-bef9-1bb945d965f9", - "prevId": "80176730-273b-45e4-a7ca-760e29ad6d02", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0009_snapshot.json b/apps/dokploy/drizzle/meta/0009_snapshot.json index 6a6ffec89..906bd91ae 100644 --- a/apps/dokploy/drizzle/meta/0009_snapshot.json +++ b/apps/dokploy/drizzle/meta/0009_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "81eb82a8-2190-4dee-a6c8-416ea98e2547", + "prevId": "54b3cce8-c1ab-46ed-bef9-1bb945d965f9", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -224,43 +226,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -382,30 +381,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -516,35 +512,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -649,22 +642,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -727,15 +717,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -777,22 +764,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -863,22 +847,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1006,30 +987,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1145,30 +1123,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1296,30 +1271,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1398,74 +1370,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1525,22 +1494,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1590,22 +1556,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1698,87 +1661,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1827,15 +1787,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1865,22 +1822,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1935,22 +1889,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1992,31 +1943,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2059,22 +2007,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2184,30 +2129,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2269,22 +2211,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2392,14 +2331,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "81eb82a8-2190-4dee-a6c8-416ea98e2547", - "prevId": "54b3cce8-c1ab-46ed-bef9-1bb945d965f9", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0010_snapshot.json b/apps/dokploy/drizzle/meta/0010_snapshot.json index ff5f0f2bb..30db79130 100644 --- a/apps/dokploy/drizzle/meta/0010_snapshot.json +++ b/apps/dokploy/drizzle/meta/0010_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "c4f34dc8-69d6-49f3-809d-be474f0f0fcf", + "prevId": "81eb82a8-2190-4dee-a6c8-416ea98e2547", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -224,43 +226,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -382,30 +381,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -516,35 +512,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -649,22 +642,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -727,15 +717,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -777,22 +764,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -863,22 +847,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1006,30 +987,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1145,30 +1123,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1296,30 +1271,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1398,74 +1370,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1525,22 +1494,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1590,22 +1556,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1698,87 +1661,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1827,15 +1787,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1865,22 +1822,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1935,22 +1889,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1992,31 +1943,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2059,22 +2007,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2184,30 +2129,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2275,22 +2217,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2398,14 +2337,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "c4f34dc8-69d6-49f3-809d-be474f0f0fcf", - "prevId": "81eb82a8-2190-4dee-a6c8-416ea98e2547", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0011_snapshot.json b/apps/dokploy/drizzle/meta/0011_snapshot.json index 9a2215eef..24dc37040 100644 --- a/apps/dokploy/drizzle/meta/0011_snapshot.json +++ b/apps/dokploy/drizzle/meta/0011_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "9c6bb052-9f90-46fd-9382-67984e03f5b1", + "prevId": "c4f34dc8-69d6-49f3-809d-be474f0f0fcf", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -224,43 +226,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -382,30 +381,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -516,35 +512,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -649,22 +642,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -727,15 +717,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -777,22 +764,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -863,22 +847,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1006,30 +987,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1145,30 +1123,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1296,30 +1271,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1398,74 +1370,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1525,22 +1494,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1590,22 +1556,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1698,87 +1661,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1827,15 +1787,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1865,22 +1822,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1935,22 +1889,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -1992,31 +1943,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2059,22 +2007,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2184,30 +2129,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2275,22 +2217,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2398,14 +2337,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "9c6bb052-9f90-46fd-9382-67984e03f5b1", - "prevId": "c4f34dc8-69d6-49f3-809d-be474f0f0fcf", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0012_snapshot.json b/apps/dokploy/drizzle/meta/0012_snapshot.json index 4fe7766c9..78f211d70 100644 --- a/apps/dokploy/drizzle/meta/0012_snapshot.json +++ b/apps/dokploy/drizzle/meta/0012_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "5e715d26-b9c1-4e9c-80b7-408d63832e85", + "prevId": "9c6bb052-9f90-46fd-9382-67984e03f5b1", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -266,43 +268,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -424,30 +423,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -558,35 +554,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -691,22 +684,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -769,15 +759,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -819,22 +806,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -905,22 +889,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1048,30 +1029,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1187,30 +1165,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1338,30 +1313,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1440,74 +1412,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1567,22 +1536,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1632,22 +1598,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1740,87 +1703,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1869,15 +1829,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1907,22 +1864,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1977,22 +1931,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2034,31 +1985,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2101,22 +2049,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2226,30 +2171,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2317,22 +2259,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2440,14 +2379,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "5e715d26-b9c1-4e9c-80b7-408d63832e85", - "prevId": "9c6bb052-9f90-46fd-9382-67984e03f5b1", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0013_snapshot.json b/apps/dokploy/drizzle/meta/0013_snapshot.json index 2bf43ca0c..9a4f2eb18 100644 --- a/apps/dokploy/drizzle/meta/0013_snapshot.json +++ b/apps/dokploy/drizzle/meta/0013_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "5677e0b8-f22f-4565-9161-e97b381c0e1c", + "prevId": "5e715d26-b9c1-4e9c-80b7-408d63832e85", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -564,35 +560,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -697,22 +690,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -775,15 +765,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -825,22 +812,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -911,22 +895,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1054,30 +1035,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1193,30 +1171,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1344,30 +1319,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1446,74 +1418,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1573,22 +1542,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1638,22 +1604,19 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1746,87 +1709,84 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1875,15 +1835,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1913,22 +1870,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -1983,22 +1937,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2040,31 +1991,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2107,22 +2055,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2232,30 +2177,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.registry": { "name": "registry", @@ -2323,22 +2265,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2446,14 +2385,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "5677e0b8-f22f-4565-9161-e97b381c0e1c", - "prevId": "5e715d26-b9c1-4e9c-80b7-408d63832e85", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0014_snapshot.json b/apps/dokploy/drizzle/meta/0014_snapshot.json index 4cf4832c1..c25de1ff4 100644 --- a/apps/dokploy/drizzle/meta/0014_snapshot.json +++ b/apps/dokploy/drizzle/meta/0014_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "c204362f-e392-4d30-829a-2b9df39b3001", + "prevId": "5677e0b8-f22f-4565-9161-e97b381c0e1c", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -564,35 +560,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -697,22 +690,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -775,15 +765,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -825,22 +812,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -911,22 +895,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1054,30 +1035,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1193,30 +1171,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1344,30 +1319,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1446,74 +1418,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1573,22 +1542,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1644,35 +1610,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1771,100 +1734,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1913,15 +1873,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1951,22 +1908,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2021,22 +1975,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2078,31 +2029,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2145,22 +2093,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2270,30 +2215,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2440,22 +2382,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2523,22 +2462,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2664,14 +2600,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "c204362f-e392-4d30-829a-2b9df39b3001", - "prevId": "5677e0b8-f22f-4565-9161-e97b381c0e1c", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0015_snapshot.json b/apps/dokploy/drizzle/meta/0015_snapshot.json index d5327cc3e..f0aa26b01 100644 --- a/apps/dokploy/drizzle/meta/0015_snapshot.json +++ b/apps/dokploy/drizzle/meta/0015_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "c6534c4b-5da2-4694-bd77-235eaeecc60a", + "prevId": "c204362f-e392-4d30-829a-2b9df39b3001", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -564,35 +560,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -697,22 +690,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -781,15 +771,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -831,22 +818,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -917,22 +901,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1060,30 +1041,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1199,30 +1177,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1350,30 +1325,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1452,74 +1424,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1579,22 +1548,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1650,35 +1616,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1777,100 +1740,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1919,15 +1879,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1957,22 +1914,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2027,22 +1981,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2084,31 +2035,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2151,22 +2099,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2276,30 +2221,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2446,22 +2388,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2529,22 +2468,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2670,14 +2606,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "c6534c4b-5da2-4694-bd77-235eaeecc60a", - "prevId": "c204362f-e392-4d30-829a-2b9df39b3001", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0016_snapshot.json b/apps/dokploy/drizzle/meta/0016_snapshot.json index 50dda612f..010de0648 100644 --- a/apps/dokploy/drizzle/meta/0016_snapshot.json +++ b/apps/dokploy/drizzle/meta/0016_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "2d8d7670-b942-4573-9c44-6e81d2a2fa16", + "prevId": "c6534c4b-5da2-4694-bd77-235eaeecc60a", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -704,22 +697,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -788,15 +778,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -838,22 +825,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -924,22 +908,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1067,30 +1048,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1206,30 +1184,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1357,30 +1332,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1459,74 +1431,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1586,22 +1555,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1657,35 +1623,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1784,100 +1747,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1926,15 +1886,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1964,22 +1921,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2034,22 +1988,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2091,31 +2042,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2158,22 +2106,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2283,30 +2228,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2453,22 +2395,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2536,22 +2475,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2677,14 +2613,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "2d8d7670-b942-4573-9c44-6e81d2a2fa16", - "prevId": "c6534c4b-5da2-4694-bd77-235eaeecc60a", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0017_snapshot.json b/apps/dokploy/drizzle/meta/0017_snapshot.json index 2f7f638da..afeb4aa35 100644 --- a/apps/dokploy/drizzle/meta/0017_snapshot.json +++ b/apps/dokploy/drizzle/meta/0017_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "ec852f38-886a-43b4-9295-73984ed8ef45", + "prevId": "2d8d7670-b942-4573-9c44-6e81d2a2fa16", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -704,22 +697,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -788,15 +778,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -838,22 +825,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -924,22 +908,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1067,30 +1048,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1206,30 +1184,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1357,30 +1332,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1459,74 +1431,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1586,22 +1555,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1663,35 +1629,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1790,100 +1753,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1932,15 +1892,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1970,22 +1927,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2040,22 +1994,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2097,31 +2048,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2164,22 +2112,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2289,30 +2234,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2459,22 +2401,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2542,22 +2481,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2683,14 +2619,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "ec852f38-886a-43b4-9295-73984ed8ef45", - "prevId": "2d8d7670-b942-4573-9c44-6e81d2a2fa16", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0018_snapshot.json b/apps/dokploy/drizzle/meta/0018_snapshot.json index b158fa852..220684c0c 100644 --- a/apps/dokploy/drizzle/meta/0018_snapshot.json +++ b/apps/dokploy/drizzle/meta/0018_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "3d47456f-03b7-4b45-87f2-057df7e9cb0b", + "prevId": "ec852f38-886a-43b4-9295-73984ed8ef45", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -710,22 +703,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -794,15 +784,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -844,22 +831,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -930,22 +914,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1073,30 +1054,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1212,30 +1190,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1363,30 +1338,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1465,74 +1437,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1592,22 +1561,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1669,35 +1635,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1796,100 +1759,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1938,15 +1898,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1976,22 +1933,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2046,22 +2000,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2103,31 +2054,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2170,22 +2118,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2295,30 +2240,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2465,22 +2407,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2548,22 +2487,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2689,14 +2625,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "3d47456f-03b7-4b45-87f2-057df7e9cb0b", - "prevId": "ec852f38-886a-43b4-9295-73984ed8ef45", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0019_snapshot.json b/apps/dokploy/drizzle/meta/0019_snapshot.json index 489654669..01b1b7e67 100644 --- a/apps/dokploy/drizzle/meta/0019_snapshot.json +++ b/apps/dokploy/drizzle/meta/0019_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "7c8f815f-4fec-4505-b9c7-c28bac3451f0", + "prevId": "3d47456f-03b7-4b45-87f2-057df7e9cb0b", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -710,22 +703,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -794,15 +784,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -844,22 +831,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -930,22 +914,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1073,30 +1054,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1212,30 +1190,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1363,30 +1338,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1465,74 +1437,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1592,22 +1561,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1669,35 +1635,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1796,100 +1759,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1938,15 +1898,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1976,22 +1933,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2046,22 +2000,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2103,31 +2054,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2170,22 +2118,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2295,30 +2240,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2465,22 +2407,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2548,22 +2487,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2585,10 +2521,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2640,10 +2573,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2739,61 +2669,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2821,10 +2748,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2852,10 +2776,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2991,14 +2912,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "7c8f815f-4fec-4505-b9c7-c28bac3451f0", - "prevId": "3d47456f-03b7-4b45-87f2-057df7e9cb0b", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0020_snapshot.json b/apps/dokploy/drizzle/meta/0020_snapshot.json index 0b9df3027..034ec039b 100644 --- a/apps/dokploy/drizzle/meta/0020_snapshot.json +++ b/apps/dokploy/drizzle/meta/0020_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "cbe2b41d-26b6-4ca5-b40d-0e37faa56f39", + "prevId": "7c8f815f-4fec-4505-b9c7-c28bac3451f0", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -710,22 +703,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -794,15 +784,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -844,22 +831,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -930,22 +914,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1073,30 +1054,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1212,30 +1190,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1363,30 +1338,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1465,74 +1437,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1592,22 +1561,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1669,35 +1635,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1796,100 +1759,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1938,15 +1898,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1976,22 +1933,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2046,22 +2000,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2103,31 +2054,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2170,22 +2118,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2295,30 +2240,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2465,22 +2407,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2548,22 +2487,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2585,10 +2521,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2640,10 +2573,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2746,61 +2676,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2828,10 +2755,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2859,10 +2783,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2998,14 +2919,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "cbe2b41d-26b6-4ca5-b40d-0e37faa56f39", - "prevId": "7c8f815f-4fec-4505-b9c7-c28bac3451f0", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0021_snapshot.json b/apps/dokploy/drizzle/meta/0021_snapshot.json index 0aa3ae985..58bf0e51c 100644 --- a/apps/dokploy/drizzle/meta/0021_snapshot.json +++ b/apps/dokploy/drizzle/meta/0021_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "10f88c8f-bc1e-4dc4-99a5-327469c0da70", + "prevId": "cbe2b41d-26b6-4ca5-b40d-0e37faa56f39", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -710,22 +703,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -794,15 +784,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -844,22 +831,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -930,22 +914,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1073,30 +1054,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1212,30 +1190,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1363,30 +1338,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1465,74 +1437,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1592,22 +1561,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1669,35 +1635,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1796,100 +1759,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1938,15 +1898,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1976,22 +1933,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2046,22 +2000,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2103,31 +2054,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2170,22 +2118,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2295,30 +2240,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2465,22 +2407,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2548,22 +2487,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2585,10 +2521,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2640,10 +2573,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2739,61 +2669,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2821,10 +2748,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2852,10 +2776,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2991,14 +2912,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "10f88c8f-bc1e-4dc4-99a5-327469c0da70", - "prevId": "cbe2b41d-26b6-4ca5-b40d-0e37faa56f39", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0022_snapshot.json b/apps/dokploy/drizzle/meta/0022_snapshot.json index dfad80d91..3a08e1f4e 100644 --- a/apps/dokploy/drizzle/meta/0022_snapshot.json +++ b/apps/dokploy/drizzle/meta/0022_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "86052343-0056-486c-9168-fa84186b4323", + "prevId": "10f88c8f-bc1e-4dc4-99a5-327469c0da70", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -272,43 +274,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -430,30 +429,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -571,35 +567,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -710,22 +703,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -794,15 +784,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -844,22 +831,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -930,22 +914,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1073,30 +1054,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1212,30 +1190,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1363,30 +1338,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1465,74 +1437,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1592,22 +1561,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1669,35 +1635,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1796,100 +1759,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1938,15 +1898,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1976,22 +1933,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2046,22 +2000,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2103,31 +2054,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2170,22 +2118,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2295,30 +2240,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2465,22 +2407,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2548,22 +2487,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2585,10 +2521,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2640,10 +2573,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2739,61 +2669,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2821,10 +2748,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2852,10 +2776,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2992,14 +2913,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "86052343-0056-486c-9168-fa84186b4323", - "prevId": "10f88c8f-bc1e-4dc4-99a5-327469c0da70", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0023_snapshot.json b/apps/dokploy/drizzle/meta/0023_snapshot.json index 3ea3eb7ea..287ff4391 100644 --- a/apps/dokploy/drizzle/meta/0023_snapshot.json +++ b/apps/dokploy/drizzle/meta/0023_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "730bfb9e-42e2-42de-a939-5cfe5ffe54b2", + "prevId": "86052343-0056-486c-9168-fa84186b4323", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -278,43 +280,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -436,30 +435,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -577,35 +573,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -716,22 +709,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -800,15 +790,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -850,22 +837,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -936,22 +920,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1079,30 +1060,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1218,30 +1196,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1369,30 +1344,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1471,74 +1443,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1598,22 +1567,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1675,35 +1641,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1802,100 +1765,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1944,15 +1904,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1982,22 +1939,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2052,22 +2006,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2109,31 +2060,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2176,22 +2124,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2301,30 +2246,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2471,22 +2413,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2554,22 +2493,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2591,10 +2527,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2646,10 +2579,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2745,61 +2675,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2827,10 +2754,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2858,10 +2782,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -2998,14 +2919,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "730bfb9e-42e2-42de-a939-5cfe5ffe54b2", - "prevId": "86052343-0056-486c-9168-fa84186b4323", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0024_snapshot.json b/apps/dokploy/drizzle/meta/0024_snapshot.json index 2ec9dd4ed..d34b38f62 100644 --- a/apps/dokploy/drizzle/meta/0024_snapshot.json +++ b/apps/dokploy/drizzle/meta/0024_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "2c69b31b-ecee-4e20-9959-6dc0c76656fb", + "prevId": "730bfb9e-42e2-42de-a939-5cfe5ffe54b2", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -278,43 +280,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -436,30 +435,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -577,35 +573,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -716,22 +709,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -800,15 +790,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -850,22 +837,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -936,22 +920,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1079,30 +1060,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1218,30 +1196,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1369,30 +1344,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1471,74 +1443,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1598,22 +1567,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1675,35 +1641,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1808,100 +1771,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1950,15 +1910,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1988,22 +1945,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2058,22 +2012,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2115,31 +2066,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2182,22 +2130,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2307,30 +2252,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2477,22 +2419,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2560,22 +2499,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2597,10 +2533,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2652,10 +2585,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2751,61 +2681,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2833,10 +2760,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2864,10 +2788,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3004,14 +2925,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "2c69b31b-ecee-4e20-9959-6dc0c76656fb", - "prevId": "730bfb9e-42e2-42de-a939-5cfe5ffe54b2", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0025_snapshot.json b/apps/dokploy/drizzle/meta/0025_snapshot.json index 098162fe1..15ba3294a 100644 --- a/apps/dokploy/drizzle/meta/0025_snapshot.json +++ b/apps/dokploy/drizzle/meta/0025_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "771c1412-7931-4f79-a789-055b0f51cf0f", + "prevId": "2c69b31b-ecee-4e20-9959-6dc0c76656fb", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -284,43 +286,40 @@ "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -442,30 +441,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -583,35 +579,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -722,22 +715,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -806,15 +796,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -856,22 +843,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -942,22 +926,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1085,30 +1066,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1224,30 +1202,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1375,30 +1350,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1477,74 +1449,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1604,22 +1573,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1681,35 +1647,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1814,100 +1777,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1956,15 +1916,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -1994,22 +1951,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2064,22 +2018,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2121,31 +2072,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2188,22 +2136,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2313,30 +2258,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2483,22 +2425,19 @@ "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2566,22 +2505,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2603,10 +2539,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2658,10 +2591,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2757,61 +2687,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2839,10 +2766,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2870,10 +2794,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3010,14 +2931,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "771c1412-7931-4f79-a789-055b0f51cf0f", - "prevId": "2c69b31b-ecee-4e20-9959-6dc0c76656fb", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0026_snapshot.json b/apps/dokploy/drizzle/meta/0026_snapshot.json index a3cb4bf33..b863fb026 100644 --- a/apps/dokploy/drizzle/meta/0026_snapshot.json +++ b/apps/dokploy/drizzle/meta/0026_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "3dff4fa9-1d03-4748-b3ee-908c34324171", + "prevId": "771c1412-7931-4f79-a789-055b0f51cf0f", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -284,56 +286,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -455,30 +454,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -596,35 +592,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -735,22 +728,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -819,15 +809,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -869,22 +856,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -955,22 +939,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1098,30 +1079,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1237,30 +1215,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1388,30 +1363,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1490,74 +1462,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1617,22 +1586,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1694,35 +1660,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1827,100 +1790,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1969,15 +1929,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2007,22 +1964,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2077,22 +2031,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2134,31 +2085,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2201,22 +2149,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2326,30 +2271,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2496,35 +2438,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2592,22 +2531,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2629,10 +2565,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2684,10 +2617,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2783,61 +2713,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2865,10 +2792,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2896,10 +2820,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2945,10 +2866,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3085,14 +3003,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "3dff4fa9-1d03-4748-b3ee-908c34324171", - "prevId": "771c1412-7931-4f79-a789-055b0f51cf0f", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0027_snapshot.json b/apps/dokploy/drizzle/meta/0027_snapshot.json index f0e490ac7..97811b254 100644 --- a/apps/dokploy/drizzle/meta/0027_snapshot.json +++ b/apps/dokploy/drizzle/meta/0027_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "4dd1240c-ad28-4dd3-9b5c-52dba32b8d24", + "prevId": "3dff4fa9-1d03-4748-b3ee-908c34324171", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -290,56 +292,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -461,30 +460,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -602,35 +598,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -741,22 +734,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -825,15 +815,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -875,22 +862,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -961,22 +945,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1104,30 +1085,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1243,30 +1221,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1394,30 +1369,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1496,74 +1468,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1623,22 +1592,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1700,35 +1666,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1833,100 +1796,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1975,15 +1935,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2013,22 +1970,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2083,22 +2037,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2140,31 +2091,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2207,22 +2155,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2332,30 +2277,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2502,35 +2444,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2598,22 +2537,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2635,10 +2571,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2690,10 +2623,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2789,61 +2719,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2871,10 +2798,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2902,10 +2826,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2951,10 +2872,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3091,14 +3009,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "4dd1240c-ad28-4dd3-9b5c-52dba32b8d24", - "prevId": "3dff4fa9-1d03-4748-b3ee-908c34324171", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0028_snapshot.json b/apps/dokploy/drizzle/meta/0028_snapshot.json index 4d8bb3827..6a36c0a8e 100644 --- a/apps/dokploy/drizzle/meta/0028_snapshot.json +++ b/apps/dokploy/drizzle/meta/0028_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "cbcfd076-035f-4ca2-9643-b8ba8f2b6f03", + "prevId": "4dd1240c-ad28-4dd3-9b5c-52dba32b8d24", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -290,56 +292,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -461,30 +460,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -602,35 +598,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -741,22 +734,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -825,15 +815,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -875,22 +862,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -961,22 +945,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1104,30 +1085,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1243,30 +1221,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1394,30 +1369,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1496,74 +1468,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1623,22 +1592,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1700,35 +1666,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1833,100 +1796,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1975,15 +1935,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2013,22 +1970,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2083,22 +2037,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2140,31 +2091,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2207,22 +2155,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2332,30 +2277,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2502,35 +2444,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2598,22 +2537,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2635,10 +2571,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2690,10 +2623,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2789,61 +2719,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2871,10 +2798,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2902,10 +2826,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2951,10 +2872,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3092,14 +3010,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "cbcfd076-035f-4ca2-9643-b8ba8f2b6f03", - "prevId": "4dd1240c-ad28-4dd3-9b5c-52dba32b8d24", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0029_snapshot.json b/apps/dokploy/drizzle/meta/0029_snapshot.json index 4d7a87157..f8e6f8681 100644 --- a/apps/dokploy/drizzle/meta/0029_snapshot.json +++ b/apps/dokploy/drizzle/meta/0029_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "270dbc4c-104d-4630-b5f3-6c02f0afae49", + "prevId": "cbcfd076-035f-4ca2-9643-b8ba8f2b6f03", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -296,56 +298,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -467,30 +466,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -608,35 +604,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -747,22 +740,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -831,15 +821,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -881,22 +868,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -967,22 +951,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1110,30 +1091,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1249,30 +1227,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1400,30 +1375,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1502,74 +1474,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1629,22 +1598,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1706,35 +1672,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1839,100 +1802,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1981,15 +1941,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2019,22 +1976,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2089,22 +2043,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2146,31 +2097,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2213,22 +2161,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2338,30 +2283,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2508,35 +2450,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2604,22 +2543,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2641,10 +2577,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2696,10 +2629,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2795,61 +2725,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2877,10 +2804,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2908,10 +2832,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2957,10 +2878,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3098,14 +3016,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "270dbc4c-104d-4630-b5f3-6c02f0afae49", - "prevId": "cbcfd076-035f-4ca2-9643-b8ba8f2b6f03", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0030_snapshot.json b/apps/dokploy/drizzle/meta/0030_snapshot.json index c9378bccf..78a898cc7 100644 --- a/apps/dokploy/drizzle/meta/0030_snapshot.json +++ b/apps/dokploy/drizzle/meta/0030_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "8dc242b9-6fa9-4372-9ecd-86ae90dd7d0d", + "prevId": "270dbc4c-104d-4630-b5f3-6c02f0afae49", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -296,56 +298,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -467,30 +466,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -615,35 +611,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -754,22 +747,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -838,15 +828,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -888,22 +875,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -974,22 +958,19 @@ "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1117,30 +1098,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1256,30 +1234,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1407,30 +1382,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1509,74 +1481,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1636,22 +1605,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1713,35 +1679,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1846,100 +1809,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -1988,15 +1948,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2026,22 +1983,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2096,22 +2050,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2153,31 +2104,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2220,22 +2168,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2345,30 +2290,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2515,35 +2457,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2611,22 +2550,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2648,10 +2584,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2703,10 +2636,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2802,61 +2732,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2884,10 +2811,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2915,10 +2839,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2964,10 +2885,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3105,14 +3023,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "8dc242b9-6fa9-4372-9ecd-86ae90dd7d0d", - "prevId": "270dbc4c-104d-4630-b5f3-6c02f0afae49", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0031_snapshot.json b/apps/dokploy/drizzle/meta/0031_snapshot.json index a4fd4e14c..3330e3369 100644 --- a/apps/dokploy/drizzle/meta/0031_snapshot.json +++ b/apps/dokploy/drizzle/meta/0031_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "86b27966-a431-493d-9cbc-2291e280f8f2", + "prevId": "8dc242b9-6fa9-4372-9ecd-86ae90dd7d0d", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -296,56 +298,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -467,30 +466,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -615,35 +611,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -754,22 +747,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -838,15 +828,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -888,22 +875,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -994,35 +978,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1150,30 +1131,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1289,30 +1267,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1440,30 +1415,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1542,74 +1514,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1669,22 +1638,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1746,35 +1712,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1879,100 +1842,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2021,15 +1981,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2059,22 +2016,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2129,22 +2083,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2186,31 +2137,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2253,22 +2201,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2378,30 +2323,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2548,35 +2490,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2644,22 +2583,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2681,10 +2617,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2736,10 +2669,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2835,61 +2765,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2917,10 +2844,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2948,10 +2872,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2997,10 +2918,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3146,14 +3064,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "86b27966-a431-493d-9cbc-2291e280f8f2", - "prevId": "8dc242b9-6fa9-4372-9ecd-86ae90dd7d0d", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0032_snapshot.json b/apps/dokploy/drizzle/meta/0032_snapshot.json index 587e446aa..aed881976 100644 --- a/apps/dokploy/drizzle/meta/0032_snapshot.json +++ b/apps/dokploy/drizzle/meta/0032_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "ce8a8861-2970-4889-ac2e-3cfe60d12736", + "prevId": "86b27966-a431-493d-9cbc-2291e280f8f2", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -296,56 +298,53 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -467,30 +466,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -615,35 +611,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -754,22 +747,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -838,15 +828,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -888,22 +875,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -994,35 +978,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1150,30 +1131,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1289,30 +1267,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1440,30 +1415,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1542,74 +1514,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1669,22 +1638,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1746,35 +1712,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1879,100 +1842,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2021,15 +1981,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2059,22 +2016,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2129,22 +2083,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2186,31 +2137,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2253,22 +2201,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2378,30 +2323,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2548,35 +2490,32 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2644,22 +2583,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2681,10 +2617,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2736,10 +2669,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -2835,61 +2765,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -2917,10 +2844,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -2948,10 +2872,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -2997,10 +2918,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3146,14 +3064,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "ce8a8861-2970-4889-ac2e-3cfe60d12736", - "prevId": "86b27966-a431-493d-9cbc-2291e280f8f2", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0033_snapshot.json b/apps/dokploy/drizzle/meta/0033_snapshot.json index 35509ce9f..40c6d3004 100644 --- a/apps/dokploy/drizzle/meta/0033_snapshot.json +++ b/apps/dokploy/drizzle/meta/0033_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "4b757666-9e18-454e-9cfa-762d03bf378f", + "prevId": "ce8a8861-2970-4889-ac2e-3cfe60d12736", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -376,95 +378,92 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -586,30 +585,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -741,35 +737,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -838,22 +831,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -922,15 +912,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -972,22 +959,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1078,35 +1062,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1234,30 +1215,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1373,30 +1351,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1524,30 +1499,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1626,74 +1598,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1753,22 +1722,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1830,35 +1796,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1963,100 +1926,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2105,15 +2065,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2143,22 +2100,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2213,22 +2167,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2270,31 +2221,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2337,22 +2285,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2462,30 +2407,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2698,74 +2640,71 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2833,22 +2772,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2870,10 +2806,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2925,10 +2858,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3024,61 +2954,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3106,10 +3033,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3137,10 +3061,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3186,10 +3107,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3233,22 +3151,19 @@ "git_provider_authId_auth_id_fk": { "name": "git_provider_authId_auth_id_fk", "tableFrom": "git_provider", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3290,22 +3205,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3371,22 +3283,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3452,22 +3361,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3626,14 +3532,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "4b757666-9e18-454e-9cfa-762d03bf378f", - "prevId": "ce8a8861-2970-4889-ac2e-3cfe60d12736", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0034_snapshot.json b/apps/dokploy/drizzle/meta/0034_snapshot.json index c6a784810..2dd3e13f0 100644 --- a/apps/dokploy/drizzle/meta/0034_snapshot.json +++ b/apps/dokploy/drizzle/meta/0034_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "6a7ce86e-f628-4786-ab30-e160dcdb0a39", + "prevId": "4b757666-9e18-454e-9cfa-762d03bf378f", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -382,95 +384,92 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -592,30 +591,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -747,35 +743,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -844,22 +837,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -928,15 +918,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -978,22 +965,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1084,35 +1068,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1240,30 +1221,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1379,30 +1357,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1530,30 +1505,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1632,74 +1604,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1759,22 +1728,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1836,35 +1802,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1969,100 +1932,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2111,15 +2071,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2149,22 +2106,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2219,22 +2173,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2276,31 +2227,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2343,22 +2291,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2468,30 +2413,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2704,74 +2646,71 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2839,22 +2778,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2876,10 +2812,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2931,10 +2864,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3030,61 +2960,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3112,10 +3039,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3143,10 +3067,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3192,10 +3113,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3239,22 +3157,19 @@ "git_provider_authId_auth_id_fk": { "name": "git_provider_authId_auth_id_fk", "tableFrom": "git_provider", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3296,22 +3211,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3377,22 +3289,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3458,22 +3367,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3632,14 +3538,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "6a7ce86e-f628-4786-ab30-e160dcdb0a39", - "prevId": "4b757666-9e18-454e-9cfa-762d03bf378f", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0035_snapshot.json b/apps/dokploy/drizzle/meta/0035_snapshot.json index 501f634bf..970edd402 100644 --- a/apps/dokploy/drizzle/meta/0035_snapshot.json +++ b/apps/dokploy/drizzle/meta/0035_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "bb060896-7fc0-4bf3-b579-65f118769de0", + "prevId": "6a7ce86e-f628-4786-ab30-e160dcdb0a39", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -382,95 +384,92 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -592,30 +591,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -747,35 +743,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -844,22 +837,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -928,15 +918,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -978,22 +965,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1084,35 +1068,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1240,30 +1221,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1379,30 +1357,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1530,30 +1505,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1632,74 +1604,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1759,22 +1728,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1836,35 +1802,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1969,100 +1932,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2111,15 +2071,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2149,22 +2106,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2219,22 +2173,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2276,31 +2227,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2343,22 +2291,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2468,30 +2413,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2718,74 +2660,71 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2853,22 +2792,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2890,10 +2826,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2945,10 +2878,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3044,61 +2974,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3126,10 +3053,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3157,10 +3081,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3206,10 +3127,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3253,22 +3171,19 @@ "git_provider_authId_auth_id_fk": { "name": "git_provider_authId_auth_id_fk", "tableFrom": "git_provider", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3310,22 +3225,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3391,22 +3303,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3472,22 +3381,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3646,14 +3552,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "bb060896-7fc0-4bf3-b579-65f118769de0", - "prevId": "6a7ce86e-f628-4786-ab30-e160dcdb0a39", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0036_snapshot.json b/apps/dokploy/drizzle/meta/0036_snapshot.json index 92d16f9e9..a5f102a68 100644 --- a/apps/dokploy/drizzle/meta/0036_snapshot.json +++ b/apps/dokploy/drizzle/meta/0036_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "74cd1475-b79c-4226-b4e6-e5ddb9576025", + "prevId": "bb060896-7fc0-4bf3-b579-65f118769de0", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -382,95 +384,92 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -592,30 +591,27 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -747,35 +743,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -851,22 +844,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -935,15 +925,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -985,22 +972,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1091,35 +1075,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1247,30 +1228,27 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1386,30 +1364,27 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1537,30 +1512,27 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1639,74 +1611,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1766,22 +1735,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1843,35 +1809,32 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -1976,100 +1939,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2118,15 +2078,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2156,22 +2113,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2226,22 +2180,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2283,31 +2234,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2350,22 +2298,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2475,30 +2420,27 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2725,74 +2667,71 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -2860,22 +2799,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -2897,10 +2833,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -2952,10 +2885,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3051,61 +2981,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3133,10 +3060,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3164,10 +3088,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3213,10 +3134,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3260,22 +3178,19 @@ "git_provider_authId_auth_id_fk": { "name": "git_provider_authId_auth_id_fk", "tableFrom": "git_provider", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3317,22 +3232,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3398,22 +3310,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3479,22 +3388,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3653,14 +3559,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "74cd1475-b79c-4226-b4e6-e5ddb9576025", - "prevId": "bb060896-7fc0-4bf3-b579-65f118769de0", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0037_snapshot.json b/apps/dokploy/drizzle/meta/0037_snapshot.json index b952fff6d..5ca60d26d 100644 --- a/apps/dokploy/drizzle/meta/0037_snapshot.json +++ b/apps/dokploy/drizzle/meta/0037_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "19a70a39-f719-400b-b61e-6ddf1bcc6ac5", + "prevId": "74cd1475-b79c-4226-b4e6-e5ddb9576025", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -889,22 +882,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -973,15 +963,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1023,22 +1010,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1129,35 +1113,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1291,43 +1272,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1449,43 +1427,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1619,43 +1594,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1734,74 +1706,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1861,22 +1830,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1944,48 +1910,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2090,100 +2053,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2232,15 +2192,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2270,22 +2227,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2340,22 +2294,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2397,31 +2348,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2464,22 +2412,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2595,43 +2540,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2864,87 +2806,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3012,22 +2951,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3049,10 +2985,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3104,10 +3037,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3203,61 +3133,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3285,10 +3212,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3316,10 +3240,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3365,10 +3286,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3412,22 +3330,19 @@ "git_provider_authId_auth_id_fk": { "name": "git_provider_authId_auth_id_fk", "tableFrom": "git_provider", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3469,22 +3384,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3550,22 +3462,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3631,22 +3540,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3726,35 +3632,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3913,14 +3816,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "19a70a39-f719-400b-b61e-6ddf1bcc6ac5", - "prevId": "74cd1475-b79c-4226-b4e6-e5ddb9576025", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0038_snapshot.json b/apps/dokploy/drizzle/meta/0038_snapshot.json index 59a3abcdc..4eb2b5eca 100644 --- a/apps/dokploy/drizzle/meta/0038_snapshot.json +++ b/apps/dokploy/drizzle/meta/0038_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "8ffdfaff-f166-42dc-ac77-4fd9309d736a", + "prevId": "19a70a39-f719-400b-b61e-6ddf1bcc6ac5", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -889,22 +882,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -973,15 +963,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1023,22 +1010,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1129,35 +1113,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1291,43 +1272,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1449,43 +1427,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1619,43 +1594,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1734,74 +1706,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1861,22 +1830,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1944,48 +1910,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2090,100 +2053,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2232,15 +2192,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2270,22 +2227,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2340,22 +2294,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2397,31 +2348,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2464,22 +2412,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2595,43 +2540,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2864,87 +2806,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3013,22 +2952,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3050,10 +2986,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3105,10 +3038,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3204,61 +3134,58 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3286,10 +3213,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3317,10 +3241,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3366,10 +3287,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3413,22 +3331,19 @@ "git_provider_authId_auth_id_fk": { "name": "git_provider_authId_auth_id_fk", "tableFrom": "git_provider", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3470,22 +3385,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3551,22 +3463,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3632,22 +3541,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3727,35 +3633,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3914,14 +3817,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "8ffdfaff-f166-42dc-ac77-4fd9309d736a", - "prevId": "19a70a39-f719-400b-b61e-6ddf1bcc6ac5", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0039_snapshot.json b/apps/dokploy/drizzle/meta/0039_snapshot.json index 90831ed96..3d931bf38 100644 --- a/apps/dokploy/drizzle/meta/0039_snapshot.json +++ b/apps/dokploy/drizzle/meta/0039_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "cf3531ac-cd41-49b6-99d0-a0e377f28115", + "prevId": "8ffdfaff-f166-42dc-ac77-4fd9309d736a", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -889,22 +882,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -973,15 +963,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1023,22 +1010,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1129,35 +1113,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1291,43 +1272,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1449,43 +1427,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1619,43 +1594,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1734,74 +1706,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1861,22 +1830,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1944,48 +1910,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2090,100 +2053,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2232,15 +2192,12 @@ "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2270,22 +2227,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2340,22 +2294,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2397,31 +2348,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2464,22 +2412,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2595,43 +2540,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2864,87 +2806,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3013,22 +2952,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3050,10 +2986,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3105,10 +3038,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3210,74 +3140,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3305,10 +3232,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3336,10 +3260,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3400,22 +3321,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3459,22 +3377,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3516,22 +3431,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3597,22 +3509,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3678,22 +3587,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3773,35 +3679,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3960,14 +3863,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "cf3531ac-cd41-49b6-99d0-a0e377f28115", - "prevId": "8ffdfaff-f166-42dc-ac77-4fd9309d736a", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0040_snapshot.json b/apps/dokploy/drizzle/meta/0040_snapshot.json index a3768cf56..e2a978986 100644 --- a/apps/dokploy/drizzle/meta/0040_snapshot.json +++ b/apps/dokploy/drizzle/meta/0040_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "22cf0495-c3f3-4601-8653-9fb9a66bb72d", + "prevId": "cf3531ac-cd41-49b6-99d0-a0e377f28115", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -889,22 +882,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -973,15 +963,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1023,22 +1010,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1129,35 +1113,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1291,43 +1272,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1449,43 +1427,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1619,43 +1594,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1734,74 +1706,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1861,22 +1830,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1944,48 +1910,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2090,100 +2053,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2243,43 +2203,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2309,22 +2266,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2379,22 +2333,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2436,31 +2387,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2503,22 +2451,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2634,43 +2579,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2903,87 +2845,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3052,22 +2991,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3089,10 +3025,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3144,10 +3077,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3249,74 +3179,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3344,10 +3271,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3375,10 +3299,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3439,22 +3360,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3498,22 +3416,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3555,22 +3470,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3636,22 +3548,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3717,22 +3626,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3812,35 +3718,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -3999,14 +3902,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "22cf0495-c3f3-4601-8653-9fb9a66bb72d", - "prevId": "cf3531ac-cd41-49b6-99d0-a0e377f28115", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0041_snapshot.json b/apps/dokploy/drizzle/meta/0041_snapshot.json index e9ff03046..fccae6cac 100644 --- a/apps/dokploy/drizzle/meta/0041_snapshot.json +++ b/apps/dokploy/drizzle/meta/0041_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "9933f3e8-77a2-40e6-b579-922fe6bb2cb6", + "prevId": "22cf0495-c3f3-4601-8653-9fb9a66bb72d", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -908,22 +901,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1004,15 +994,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1054,22 +1041,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1160,35 +1144,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1322,43 +1303,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1480,43 +1458,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1650,43 +1625,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1765,74 +1737,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1892,22 +1861,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1975,48 +1941,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2121,100 +2084,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2274,43 +2234,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2340,22 +2297,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2410,22 +2364,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2467,31 +2418,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2534,22 +2482,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2665,43 +2610,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2934,87 +2876,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3083,22 +3022,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3120,10 +3056,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3175,10 +3108,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3280,74 +3210,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3375,10 +3302,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3406,10 +3330,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3470,22 +3391,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3529,22 +3447,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3586,22 +3501,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3667,22 +3579,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3748,22 +3657,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3851,35 +3757,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4046,14 +3949,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "9933f3e8-77a2-40e6-b579-922fe6bb2cb6", - "prevId": "22cf0495-c3f3-4601-8653-9fb9a66bb72d", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0042_snapshot.json b/apps/dokploy/drizzle/meta/0042_snapshot.json index 7ffa4a624..9d8f76efc 100644 --- a/apps/dokploy/drizzle/meta/0042_snapshot.json +++ b/apps/dokploy/drizzle/meta/0042_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "24bfb192-237f-4297-83d1-27988dcb6be2", + "prevId": "9933f3e8-77a2-40e6-b579-922fe6bb2cb6", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -908,22 +901,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1016,15 +1006,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1066,22 +1053,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1172,35 +1156,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1334,43 +1315,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1492,43 +1470,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1662,43 +1637,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1777,74 +1749,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1904,22 +1873,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1987,48 +1953,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2133,100 +2096,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2286,43 +2246,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2352,22 +2309,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2422,22 +2376,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2479,31 +2430,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2546,22 +2494,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2677,43 +2622,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2946,87 +2888,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3095,22 +3034,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3132,10 +3068,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3187,10 +3120,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3292,74 +3222,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3387,10 +3314,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3418,10 +3342,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3482,22 +3403,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3541,22 +3459,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3598,22 +3513,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3679,22 +3591,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3760,22 +3669,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3863,35 +3769,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4058,14 +3961,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "24bfb192-237f-4297-83d1-27988dcb6be2", - "prevId": "9933f3e8-77a2-40e6-b579-922fe6bb2cb6", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0043_snapshot.json b/apps/dokploy/drizzle/meta/0043_snapshot.json index 87351af3d..c93e4aa17 100644 --- a/apps/dokploy/drizzle/meta/0043_snapshot.json +++ b/apps/dokploy/drizzle/meta/0043_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "6e07937b-292a-4a59-9a3c-0fae18a1e976", + "prevId": "24bfb192-237f-4297-83d1-27988dcb6be2", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -915,22 +908,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1023,15 +1013,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1080,22 +1067,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1186,35 +1170,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1348,43 +1329,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1506,43 +1484,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1676,43 +1651,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1791,74 +1763,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1918,22 +1887,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2001,48 +1967,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2147,100 +2110,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2300,43 +2260,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2366,22 +2323,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2436,22 +2390,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2493,31 +2444,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2560,22 +2508,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2691,43 +2636,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2960,87 +2902,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3109,22 +3048,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3146,10 +3082,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3201,10 +3134,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3306,74 +3236,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3401,10 +3328,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3432,10 +3356,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3496,22 +3417,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3555,22 +3473,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3612,22 +3527,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3693,22 +3605,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3774,22 +3683,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3877,35 +3783,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4072,14 +3975,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "6e07937b-292a-4a59-9a3c-0fae18a1e976", - "prevId": "24bfb192-237f-4297-83d1-27988dcb6be2", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0044_snapshot.json b/apps/dokploy/drizzle/meta/0044_snapshot.json index 2deb8913e..dd6287995 100644 --- a/apps/dokploy/drizzle/meta/0044_snapshot.json +++ b/apps/dokploy/drizzle/meta/0044_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "172ee8c6-ba83-460b-83e1-b61ba19f450b", + "prevId": "6e07937b-292a-4a59-9a3c-0fae18a1e976", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -908,22 +901,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1016,15 +1006,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1073,22 +1060,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1179,35 +1163,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1341,43 +1322,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1499,43 +1477,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1669,43 +1644,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1784,74 +1756,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1911,22 +1880,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -1994,48 +1960,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2140,100 +2103,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2293,43 +2253,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2359,22 +2316,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2429,22 +2383,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2486,31 +2437,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2553,22 +2501,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2684,43 +2629,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2953,87 +2895,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3102,22 +3041,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3139,10 +3075,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3194,10 +3127,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3299,74 +3229,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3394,10 +3321,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3425,10 +3349,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3489,22 +3410,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3548,22 +3466,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3605,22 +3520,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3686,22 +3598,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3767,22 +3676,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3870,35 +3776,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4065,14 +3968,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "172ee8c6-ba83-460b-83e1-b61ba19f450b", - "prevId": "6e07937b-292a-4a59-9a3c-0fae18a1e976", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0045_snapshot.json b/apps/dokploy/drizzle/meta/0045_snapshot.json index d0e822dcf..2109eb718 100644 --- a/apps/dokploy/drizzle/meta/0045_snapshot.json +++ b/apps/dokploy/drizzle/meta/0045_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "dc1aa20f-26c0-474b-a37a-07be670f9aae", + "prevId": "172ee8c6-ba83-460b-83e1-b61ba19f450b", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -388,108 +390,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -617,43 +616,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -785,35 +781,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -908,22 +901,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1016,15 +1006,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1073,22 +1060,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1179,35 +1163,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1341,43 +1322,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1499,43 +1477,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1669,43 +1644,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1784,74 +1756,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1917,22 +1886,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2000,48 +1966,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2146,100 +2109,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2299,43 +2259,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2365,22 +2322,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2435,22 +2389,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2492,31 +2443,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2559,22 +2507,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2690,43 +2635,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2959,87 +2901,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3108,22 +3047,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3145,10 +3081,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3200,10 +3133,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3305,74 +3235,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3400,10 +3327,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3431,10 +3355,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3495,22 +3416,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3554,22 +3472,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3611,22 +3526,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3692,22 +3604,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3773,22 +3682,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3876,35 +3782,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4071,14 +3974,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "dc1aa20f-26c0-474b-a37a-07be670f9aae", - "prevId": "172ee8c6-ba83-460b-83e1-b61ba19f450b", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0046_snapshot.json b/apps/dokploy/drizzle/meta/0046_snapshot.json index 5feb98ff4..4d5ef1fdd 100644 --- a/apps/dokploy/drizzle/meta/0046_snapshot.json +++ b/apps/dokploy/drizzle/meta/0046_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "d70bcec5-e7af-4872-b2eb-f0a22ae2e3e8", + "prevId": "dc1aa20f-26c0-474b-a37a-07be670f9aae", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -394,108 +396,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -623,43 +622,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -791,35 +787,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -914,22 +907,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1022,15 +1012,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1079,22 +1066,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1185,35 +1169,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1347,43 +1328,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1505,43 +1483,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1675,43 +1650,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1790,74 +1762,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1923,22 +1892,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2006,48 +1972,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2152,100 +2115,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2305,43 +2265,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2371,22 +2328,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2441,22 +2395,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2498,31 +2449,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2565,22 +2513,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2696,43 +2641,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2965,87 +2907,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3114,22 +3053,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3151,10 +3087,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3206,10 +3139,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3311,74 +3241,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3406,10 +3333,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3437,10 +3361,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3501,22 +3422,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3560,22 +3478,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3617,22 +3532,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3698,22 +3610,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3779,22 +3688,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3882,35 +3788,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4077,14 +3980,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "d70bcec5-e7af-4872-b2eb-f0a22ae2e3e8", - "prevId": "dc1aa20f-26c0-474b-a37a-07be670f9aae", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0047_snapshot.json b/apps/dokploy/drizzle/meta/0047_snapshot.json index 4eb04a61e..9e9defbe8 100644 --- a/apps/dokploy/drizzle/meta/0047_snapshot.json +++ b/apps/dokploy/drizzle/meta/0047_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "16ee50a9-7cbc-46a4-af70-c3c85ed45466", + "prevId": "d70bcec5-e7af-4872-b2eb-f0a22ae2e3e8", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -400,108 +402,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -629,43 +628,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -797,35 +793,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -920,22 +913,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1028,15 +1018,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1085,22 +1072,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1191,35 +1175,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1353,43 +1334,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1511,43 +1489,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1681,43 +1656,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1796,74 +1768,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1929,22 +1898,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2012,48 +1978,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2158,100 +2121,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2311,43 +2271,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2377,22 +2334,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2447,22 +2401,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2504,31 +2455,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2571,22 +2519,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2702,43 +2647,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2971,87 +2913,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3120,22 +3059,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3157,10 +3093,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3212,10 +3145,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3317,74 +3247,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3412,10 +3339,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3443,10 +3367,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3507,22 +3428,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3566,22 +3484,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3623,22 +3538,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3704,22 +3616,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3785,22 +3694,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3888,35 +3794,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4083,14 +3986,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "16ee50a9-7cbc-46a4-af70-c3c85ed45466", - "prevId": "d70bcec5-e7af-4872-b2eb-f0a22ae2e3e8", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0048_snapshot.json b/apps/dokploy/drizzle/meta/0048_snapshot.json index e5a2fb1b1..d78854ca6 100644 --- a/apps/dokploy/drizzle/meta/0048_snapshot.json +++ b/apps/dokploy/drizzle/meta/0048_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "928417c8-2e7b-43ba-bc19-44b4d70107f1", + "prevId": "16ee50a9-7cbc-46a4-af70-c3c85ed45466", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -401,108 +403,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -630,43 +629,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -798,35 +794,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -921,22 +914,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1029,15 +1019,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1086,22 +1073,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1192,35 +1176,32 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1354,43 +1335,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1512,43 +1490,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1682,43 +1657,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1797,74 +1769,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -1930,22 +1899,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2013,48 +1979,45 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2159,100 +2122,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2312,43 +2272,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2378,22 +2335,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2448,22 +2402,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2505,31 +2456,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2572,22 +2520,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2703,43 +2648,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -2972,87 +2914,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3121,22 +3060,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3158,10 +3094,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3213,10 +3146,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3318,74 +3248,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3413,10 +3340,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3444,10 +3368,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3508,22 +3429,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3567,22 +3485,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3624,22 +3539,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3705,22 +3617,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3786,22 +3695,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3889,35 +3795,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} } }, "enums": { @@ -4084,14 +3987,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "928417c8-2e7b-43ba-bc19-44b4d70107f1", - "prevId": "16ee50a9-7cbc-46a4-af70-c3c85ed45466", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0049_snapshot.json b/apps/dokploy/drizzle/meta/0049_snapshot.json index 731bf165f..7ef4e6795 100644 --- a/apps/dokploy/drizzle/meta/0049_snapshot.json +++ b/apps/dokploy/drizzle/meta/0049_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "db518175-259d-4f4a-b6d0-fe95067bba61", + "prevId": "928417c8-2e7b-43ba-bc19-44b4d70107f1", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1592,43 +1570,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1762,43 +1737,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1877,74 +1849,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2010,22 +1979,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2106,61 +2072,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2265,100 +2228,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2418,43 +2378,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2484,22 +2441,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2554,22 +2508,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2611,31 +2562,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2678,22 +2626,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2809,43 +2754,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3078,87 +3020,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3227,22 +3166,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3264,10 +3200,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3319,10 +3252,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3424,74 +3354,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3519,10 +3446,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3550,10 +3474,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3614,22 +3535,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3673,22 +3591,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3730,22 +3645,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3811,22 +3723,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3892,22 +3801,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -3995,35 +3901,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4115,43 +4018,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4319,14 +4219,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "db518175-259d-4f4a-b6d0-fe95067bba61", - "prevId": "928417c8-2e7b-43ba-bc19-44b4d70107f1", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0050_snapshot.json b/apps/dokploy/drizzle/meta/0050_snapshot.json index b7e608560..88cecd277 100644 --- a/apps/dokploy/drizzle/meta/0050_snapshot.json +++ b/apps/dokploy/drizzle/meta/0050_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "89b9d2ac-25d4-46ea-8050-74a96a330cd4", + "prevId": "db518175-259d-4f4a-b6d0-fe95067bba61", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1592,43 +1570,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1762,43 +1737,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1877,74 +1849,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2010,22 +1979,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2106,61 +2072,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2265,100 +2228,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2418,43 +2378,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2484,22 +2441,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2554,22 +2508,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2611,31 +2562,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2678,22 +2626,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2809,43 +2754,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3078,87 +3020,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3227,22 +3166,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3264,10 +3200,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3319,10 +3252,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3424,74 +3354,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3519,10 +3446,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3550,10 +3474,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3614,22 +3535,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3673,22 +3591,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3730,22 +3645,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3811,22 +3723,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3899,22 +3808,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4002,35 +3908,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4122,43 +4025,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4326,14 +4226,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "89b9d2ac-25d4-46ea-8050-74a96a330cd4", - "prevId": "db518175-259d-4f4a-b6d0-fe95067bba61", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0051_snapshot.json b/apps/dokploy/drizzle/meta/0051_snapshot.json index beacfa0d4..037eb34e7 100644 --- a/apps/dokploy/drizzle/meta/0051_snapshot.json +++ b/apps/dokploy/drizzle/meta/0051_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "0f21aab4-69a8-4ca9-91fa-7a819774e5ea", + "prevId": "89b9d2ac-25d4-46ea-8050-74a96a330cd4", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1592,43 +1570,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1762,43 +1737,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1877,74 +1849,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2010,22 +1979,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2106,61 +2072,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2265,100 +2228,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2418,43 +2378,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2484,22 +2441,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2554,22 +2508,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2611,31 +2562,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2678,22 +2626,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2809,43 +2754,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3078,87 +3020,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3227,22 +3166,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3264,10 +3200,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3319,10 +3252,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3424,74 +3354,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3519,10 +3446,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3550,10 +3474,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3614,22 +3535,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3673,22 +3591,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3730,22 +3645,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3811,22 +3723,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3899,22 +3808,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4009,35 +3915,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4129,43 +4032,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4333,14 +4233,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "0f21aab4-69a8-4ca9-91fa-7a819774e5ea", - "prevId": "89b9d2ac-25d4-46ea-8050-74a96a330cd4", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0052_snapshot.json b/apps/dokploy/drizzle/meta/0052_snapshot.json index 44d1f80c2..6debca88b 100644 --- a/apps/dokploy/drizzle/meta/0052_snapshot.json +++ b/apps/dokploy/drizzle/meta/0052_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "c5eb96f1-db46-4498-8bf4-417f89422de4", + "prevId": "0f21aab4-69a8-4ca9-91fa-7a819774e5ea", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1592,43 +1570,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1762,43 +1737,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1877,74 +1849,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2010,22 +1979,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2106,61 +2072,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2265,100 +2228,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2418,43 +2378,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2484,22 +2441,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2554,22 +2508,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2611,31 +2562,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2678,22 +2626,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2809,43 +2754,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3078,87 +3020,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3227,22 +3166,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3270,10 +3206,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3325,10 +3258,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3430,74 +3360,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3525,10 +3452,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3556,10 +3480,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3620,22 +3541,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3679,22 +3597,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3736,22 +3651,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3817,22 +3729,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3905,22 +3814,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4015,35 +3921,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4135,43 +4038,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4339,14 +4239,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "c5eb96f1-db46-4498-8bf4-417f89422de4", - "prevId": "0f21aab4-69a8-4ca9-91fa-7a819774e5ea", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0053_snapshot.json b/apps/dokploy/drizzle/meta/0053_snapshot.json index 79d3f6106..1a894288c 100644 --- a/apps/dokploy/drizzle/meta/0053_snapshot.json +++ b/apps/dokploy/drizzle/meta/0053_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "cae9f45f-2b68-45bc-b2c1-cfbe9ebb8104", + "prevId": "c5eb96f1-db46-4498-8bf4-417f89422de4", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1599,43 +1577,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1769,43 +1744,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1884,74 +1856,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2017,22 +1986,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2113,61 +2079,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2272,100 +2235,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2425,43 +2385,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2491,22 +2448,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2561,22 +2515,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2618,31 +2569,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2685,22 +2633,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2816,43 +2761,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3085,87 +3027,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3234,22 +3173,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3277,10 +3213,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3332,10 +3265,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3437,74 +3367,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3532,10 +3459,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3563,10 +3487,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3627,22 +3548,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3686,22 +3604,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3743,22 +3658,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3824,22 +3736,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3912,22 +3821,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4022,35 +3928,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4142,43 +4045,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4346,14 +4246,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "cae9f45f-2b68-45bc-b2c1-cfbe9ebb8104", - "prevId": "c5eb96f1-db46-4498-8bf4-417f89422de4", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0054_snapshot.json b/apps/dokploy/drizzle/meta/0054_snapshot.json index 14a14401b..88447e32e 100644 --- a/apps/dokploy/drizzle/meta/0054_snapshot.json +++ b/apps/dokploy/drizzle/meta/0054_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "25bbf903-8f16-4a7e-977c-df860c858096", + "prevId": "cae9f45f-2b68-45bc-b2c1-cfbe9ebb8104", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1599,43 +1577,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1769,43 +1744,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1884,74 +1856,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2017,22 +1986,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2113,61 +2079,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2272,100 +2235,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2425,43 +2385,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2491,22 +2448,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2561,22 +2515,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2618,31 +2569,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2685,22 +2633,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2816,43 +2761,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3085,87 +3027,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3234,22 +3173,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3277,10 +3213,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3332,10 +3265,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3437,74 +3367,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3532,10 +3459,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3563,10 +3487,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3627,22 +3548,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3686,22 +3604,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3743,22 +3658,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3824,22 +3736,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3912,22 +3821,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4022,35 +3928,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4142,43 +4045,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4346,14 +4246,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "25bbf903-8f16-4a7e-977c-df860c858096", - "prevId": "cae9f45f-2b68-45bc-b2c1-cfbe9ebb8104", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0055_snapshot.json b/apps/dokploy/drizzle/meta/0055_snapshot.json index 35425c076..cf7084957 100644 --- a/apps/dokploy/drizzle/meta/0055_snapshot.json +++ b/apps/dokploy/drizzle/meta/0055_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "21a03d52-4db6-4449-a61c-92b6ceae0bd9", + "prevId": "25bbf903-8f16-4a7e-977c-df860c858096", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1599,43 +1577,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1769,43 +1744,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1884,74 +1856,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2017,22 +1986,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2113,61 +2079,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2272,100 +2235,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2425,43 +2385,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2491,22 +2448,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2561,22 +2515,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2618,31 +2569,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2685,22 +2633,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2816,43 +2761,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3085,87 +3027,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3234,22 +3173,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3277,10 +3213,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3332,10 +3265,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3437,74 +3367,71 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3532,10 +3459,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3563,10 +3487,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3627,22 +3548,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3686,22 +3604,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3743,22 +3658,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3824,22 +3736,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3912,22 +3821,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4022,35 +3928,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4142,43 +4045,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4346,14 +4246,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "21a03d52-4db6-4449-a61c-92b6ceae0bd9", - "prevId": "25bbf903-8f16-4a7e-977c-df860c858096", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0056_snapshot.json b/apps/dokploy/drizzle/meta/0056_snapshot.json index 86c3e12dd..be672e8fd 100644 --- a/apps/dokploy/drizzle/meta/0056_snapshot.json +++ b/apps/dokploy/drizzle/meta/0056_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "24787a88-0754-437a-b077-03a3265b8ef5", + "prevId": "21a03d52-4db6-4449-a61c-92b6ceae0bd9", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -982,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1090,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1147,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1259,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1434,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1599,43 +1577,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1769,43 +1744,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1884,74 +1856,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2017,22 +1986,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2113,61 +2079,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2272,100 +2235,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2425,43 +2385,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2491,22 +2448,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2561,22 +2515,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2618,31 +2569,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2685,22 +2633,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2816,43 +2761,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3085,87 +3027,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3234,22 +3173,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3277,10 +3213,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3332,10 +3265,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gotify": { "name": "gotify", @@ -3376,10 +3306,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3487,87 +3414,84 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_gotifyId_gotify_gotifyId_fk": { "name": "notification_gotifyId_gotify_gotifyId_fk", "tableFrom": "notification", + "tableTo": "gotify", "columnsFrom": [ "gotifyId" ], - "tableTo": "gotify", "columnsTo": [ "gotifyId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3595,10 +3519,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3626,10 +3547,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3690,22 +3608,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3749,22 +3664,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3806,22 +3718,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3887,22 +3796,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3975,22 +3881,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4085,35 +3988,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4205,43 +4105,40 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } } }, "enums": { @@ -4410,14 +4307,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "24787a88-0754-437a-b077-03a3265b8ef5", - "prevId": "21a03d52-4db6-4449-a61c-92b6ceae0bd9", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0057_snapshot.json b/apps/dokploy/drizzle/meta/0057_snapshot.json index 42144075b..8ddfc3b7d 100644 --- a/apps/dokploy/drizzle/meta/0057_snapshot.json +++ b/apps/dokploy/drizzle/meta/0057_snapshot.json @@ -1,5 +1,7 @@ { - "version": "7", + "id": "841960d7-0573-41e4-8529-fd9960f726d5", + "prevId": "24787a88-0754-437a-b077-03a3265b8ef5", + "version": "6", "dialect": "postgresql", "tables": { "public.application": { @@ -462,108 +464,105 @@ "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "application", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_registryId_registry_registryId_fk": { "name": "application_registryId_registry_registryId_fk", "tableFrom": "application", + "tableTo": "registry", "columnsFrom": [ "registryId" ], - "tableTo": "registry", "columnsTo": [ "registryId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_projectId_project_projectId_fk": { "name": "application_projectId_project_projectId_fk", "tableFrom": "application", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "application_githubId_github_githubId_fk": { "name": "application_githubId_github_githubId_fk", "tableFrom": "application", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_gitlabId_gitlab_gitlabId_fk": { "name": "application_gitlabId_gitlab_gitlabId_fk", "tableFrom": "application", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_bitbucketId_bitbucket_bitbucketId_fk": { "name": "application_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "application", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "application_serverId_server_serverId_fk": { "name": "application_serverId_server_serverId_fk", "tableFrom": "application", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "application_appName_unique": { "name": "application_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.postgres": { "name": "postgres", @@ -691,43 +690,40 @@ "postgres_projectId_project_projectId_fk": { "name": "postgres_projectId_project_projectId_fk", "tableFrom": "postgres", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "postgres_serverId_server_serverId_fk": { "name": "postgres_serverId_server_serverId_fk", "tableFrom": "postgres", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "postgres_appName_unique": { "name": "postgres_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.user": { "name": "user", @@ -859,35 +855,32 @@ "user_adminId_admin_adminId_fk": { "name": "user_adminId_admin_adminId_fk", "tableFrom": "user", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "user_authId_auth_id_fk": { "name": "user_authId_auth_id_fk", "tableFrom": "user", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.admin": { "name": "admin", @@ -975,27 +968,6 @@ "primaryKey": false, "notNull": true, "default": 0 - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false } }, "indexes": {}, @@ -1003,22 +975,19 @@ "admin_authId_auth_id_fk": { "name": "admin_authId_auth_id_fk", "tableFrom": "admin", + "tableTo": "auth", "columnsFrom": [ "authId" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.auth": { "name": "auth", @@ -1111,15 +1080,12 @@ "uniqueConstraints": { "auth_email_unique": { "name": "auth_email_unique", + "nullsNotDistinct": false, "columns": [ "email" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.project": { "name": "project", @@ -1168,22 +1134,19 @@ "project_adminId_admin_adminId_fk": { "name": "project_adminId_admin_adminId_fk", "tableFrom": "project", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.domain": { "name": "domain", @@ -1280,48 +1243,45 @@ "domain_composeId_compose_composeId_fk": { "name": "domain_composeId_compose_composeId_fk", "tableFrom": "domain", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_applicationId_application_applicationId_fk": { "name": "domain_applicationId_application_applicationId_fk", "tableFrom": "domain", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "domain", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mariadb": { "name": "mariadb", @@ -1455,43 +1415,40 @@ "mariadb_projectId_project_projectId_fk": { "name": "mariadb_projectId_project_projectId_fk", "tableFrom": "mariadb", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mariadb_serverId_server_serverId_fk": { "name": "mariadb_serverId_server_serverId_fk", "tableFrom": "mariadb", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mariadb_appName_unique": { "name": "mariadb_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mongo": { "name": "mongo", @@ -1620,43 +1577,40 @@ "mongo_projectId_project_projectId_fk": { "name": "mongo_projectId_project_projectId_fk", "tableFrom": "mongo", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mongo_serverId_server_serverId_fk": { "name": "mongo_serverId_server_serverId_fk", "tableFrom": "mongo", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mongo_appName_unique": { "name": "mongo_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.mysql": { "name": "mysql", @@ -1790,43 +1744,40 @@ "mysql_projectId_project_projectId_fk": { "name": "mysql_projectId_project_projectId_fk", "tableFrom": "mysql", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mysql_serverId_server_serverId_fk": { "name": "mysql_serverId_server_serverId_fk", "tableFrom": "mysql", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "mysql_appName_unique": { "name": "mysql_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.backup": { "name": "backup", @@ -1905,74 +1856,71 @@ "backup_destinationId_destination_destinationId_fk": { "name": "backup_destinationId_destination_destinationId_fk", "tableFrom": "backup", + "tableTo": "destination", "columnsFrom": [ "destinationId" ], - "tableTo": "destination", "columnsTo": [ "destinationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_postgresId_postgres_postgresId_fk": { "name": "backup_postgresId_postgres_postgresId_fk", "tableFrom": "backup", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mariadbId_mariadb_mariadbId_fk": { "name": "backup_mariadbId_mariadb_mariadbId_fk", "tableFrom": "backup", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mysqlId_mysql_mysqlId_fk": { "name": "backup_mysqlId_mysql_mysqlId_fk", "tableFrom": "backup", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "backup_mongoId_mongo_mongoId_fk": { "name": "backup_mongoId_mongo_mongoId_fk", "tableFrom": "backup", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.destination": { "name": "destination", @@ -2038,22 +1986,19 @@ "destination_adminId_admin_adminId_fk": { "name": "destination_adminId_admin_adminId_fk", "tableFrom": "destination", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.deployment": { "name": "deployment", @@ -2134,61 +2079,58 @@ "deployment_applicationId_application_applicationId_fk": { "name": "deployment_applicationId_application_applicationId_fk", "tableFrom": "deployment", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_composeId_compose_composeId_fk": { "name": "deployment_composeId_compose_composeId_fk", "tableFrom": "deployment", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_serverId_server_serverId_fk": { "name": "deployment_serverId_server_serverId_fk", "tableFrom": "deployment", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", "tableFrom": "deployment", + "tableTo": "preview_deployments", "columnsFrom": [ "previewDeploymentId" ], - "tableTo": "preview_deployments", "columnsTo": [ "previewDeploymentId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.mount": { "name": "mount", @@ -2293,100 +2235,97 @@ "mount_applicationId_application_applicationId_fk": { "name": "mount_applicationId_application_applicationId_fk", "tableFrom": "mount", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_postgresId_postgres_postgresId_fk": { "name": "mount_postgresId_postgres_postgresId_fk", "tableFrom": "mount", + "tableTo": "postgres", "columnsFrom": [ "postgresId" ], - "tableTo": "postgres", "columnsTo": [ "postgresId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mariadbId_mariadb_mariadbId_fk": { "name": "mount_mariadbId_mariadb_mariadbId_fk", "tableFrom": "mount", + "tableTo": "mariadb", "columnsFrom": [ "mariadbId" ], - "tableTo": "mariadb", "columnsTo": [ "mariadbId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mongoId_mongo_mongoId_fk": { "name": "mount_mongoId_mongo_mongoId_fk", "tableFrom": "mount", + "tableTo": "mongo", "columnsFrom": [ "mongoId" ], - "tableTo": "mongo", "columnsTo": [ "mongoId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_mysqlId_mysql_mysqlId_fk": { "name": "mount_mysqlId_mysql_mysqlId_fk", "tableFrom": "mount", + "tableTo": "mysql", "columnsFrom": [ "mysqlId" ], - "tableTo": "mysql", "columnsTo": [ "mysqlId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_redisId_redis_redisId_fk": { "name": "mount_redisId_redis_redisId_fk", "tableFrom": "mount", + "tableTo": "redis", "columnsFrom": [ "redisId" ], - "tableTo": "redis", "columnsTo": [ "redisId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "mount_composeId_compose_composeId_fk": { "name": "mount_composeId_compose_composeId_fk", "tableFrom": "mount", + "tableTo": "compose", "columnsFrom": [ "composeId" ], - "tableTo": "compose", "columnsTo": [ "composeId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.certificate": { "name": "certificate", @@ -2446,43 +2385,40 @@ "certificate_adminId_admin_adminId_fk": { "name": "certificate_adminId_admin_adminId_fk", "tableFrom": "certificate", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "certificate_serverId_server_serverId_fk": { "name": "certificate_serverId_server_serverId_fk", "tableFrom": "certificate", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "certificate_certificatePath_unique": { "name": "certificate_certificatePath_unique", + "nullsNotDistinct": false, "columns": [ "certificatePath" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.session": { "name": "session", @@ -2512,22 +2448,19 @@ "session_user_id_auth_id_fk": { "name": "session_user_id_auth_id_fk", "tableFrom": "session", + "tableTo": "auth", "columnsFrom": [ "user_id" ], - "tableTo": "auth", "columnsTo": [ "id" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redirect": { "name": "redirect", @@ -2582,22 +2515,19 @@ "redirect_applicationId_application_applicationId_fk": { "name": "redirect_applicationId_application_applicationId_fk", "tableFrom": "redirect", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.security": { "name": "security", @@ -2639,31 +2569,28 @@ "security_applicationId_application_applicationId_fk": { "name": "security_applicationId_application_applicationId_fk", "tableFrom": "security", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "security_username_applicationId_unique": { "name": "security_username_applicationId_unique", + "nullsNotDistinct": false, "columns": [ "username", "applicationId" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.port": { "name": "port", @@ -2706,22 +2633,19 @@ "port_applicationId_application_applicationId_fk": { "name": "port_applicationId_application_applicationId_fk", "tableFrom": "port", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.redis": { "name": "redis", @@ -2837,43 +2761,40 @@ "redis_projectId_project_projectId_fk": { "name": "redis_projectId_project_projectId_fk", "tableFrom": "redis", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "redis_serverId_server_serverId_fk": { "name": "redis_serverId_server_serverId_fk", "tableFrom": "redis", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "redis_appName_unique": { "name": "redis_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + } }, "public.compose": { "name": "compose", @@ -3106,87 +3027,84 @@ "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", "tableFrom": "compose", + "tableTo": "ssh-key", "columnsFrom": [ "customGitSSHKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_projectId_project_projectId_fk": { "name": "compose_projectId_project_projectId_fk", "tableFrom": "compose", + "tableTo": "project", "columnsFrom": [ "projectId" ], - "tableTo": "project", "columnsTo": [ "projectId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "compose_githubId_github_githubId_fk": { "name": "compose_githubId_github_githubId_fk", "tableFrom": "compose", + "tableTo": "github", "columnsFrom": [ "githubId" ], - "tableTo": "github", "columnsTo": [ "githubId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_gitlabId_gitlab_gitlabId_fk": { "name": "compose_gitlabId_gitlab_gitlabId_fk", "tableFrom": "compose", + "tableTo": "gitlab", "columnsFrom": [ "gitlabId" ], - "tableTo": "gitlab", "columnsTo": [ "gitlabId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_bitbucketId_bitbucket_bitbucketId_fk": { "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", "tableFrom": "compose", + "tableTo": "bitbucket", "columnsFrom": [ "bitbucketId" ], - "tableTo": "bitbucket", "columnsTo": [ "bitbucketId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" }, "compose_serverId_server_serverId_fk": { "name": "compose_serverId_server_serverId_fk", "tableFrom": "compose", + "tableTo": "server", "columnsFrom": [ "serverId" ], - "tableTo": "server", "columnsTo": [ "serverId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.registry": { "name": "registry", @@ -3255,22 +3173,19 @@ "registry_adminId_admin_adminId_fk": { "name": "registry_adminId_admin_adminId_fk", "tableFrom": "registry", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.discord": { "name": "discord", @@ -3298,10 +3213,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.email": { "name": "email", @@ -3353,10 +3265,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gotify": { "name": "gotify", @@ -3397,10 +3306,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.notification": { "name": "notification", @@ -3508,87 +3414,84 @@ "notification_slackId_slack_slackId_fk": { "name": "notification_slackId_slack_slackId_fk", "tableFrom": "notification", + "tableTo": "slack", "columnsFrom": [ "slackId" ], - "tableTo": "slack", "columnsTo": [ "slackId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_telegramId_telegram_telegramId_fk": { "name": "notification_telegramId_telegram_telegramId_fk", "tableFrom": "notification", + "tableTo": "telegram", "columnsFrom": [ "telegramId" ], - "tableTo": "telegram", "columnsTo": [ "telegramId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_discordId_discord_discordId_fk": { "name": "notification_discordId_discord_discordId_fk", "tableFrom": "notification", + "tableTo": "discord", "columnsFrom": [ "discordId" ], - "tableTo": "discord", "columnsTo": [ "discordId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_emailId_email_emailId_fk": { "name": "notification_emailId_email_emailId_fk", "tableFrom": "notification", + "tableTo": "email", "columnsFrom": [ "emailId" ], - "tableTo": "email", "columnsTo": [ "emailId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_gotifyId_gotify_gotifyId_fk": { "name": "notification_gotifyId_gotify_gotifyId_fk", "tableFrom": "notification", + "tableTo": "gotify", "columnsFrom": [ "gotifyId" ], - "tableTo": "gotify", "columnsTo": [ "gotifyId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "notification_adminId_admin_adminId_fk": { "name": "notification_adminId_admin_adminId_fk", "tableFrom": "notification", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.slack": { "name": "slack", @@ -3616,10 +3519,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.telegram": { "name": "telegram", @@ -3647,10 +3547,7 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.ssh-key": { "name": "ssh-key", @@ -3711,22 +3608,19 @@ "ssh-key_adminId_admin_adminId_fk": { "name": "ssh-key_adminId_admin_adminId_fk", "tableFrom": "ssh-key", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.git_provider": { "name": "git_provider", @@ -3770,22 +3664,19 @@ "git_provider_adminId_admin_adminId_fk": { "name": "git_provider_adminId_admin_adminId_fk", "tableFrom": "git_provider", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.bitbucket": { "name": "bitbucket", @@ -3827,22 +3718,19 @@ "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "bitbucket", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.github": { "name": "github", @@ -3908,22 +3796,19 @@ "github_gitProviderId_git_provider_gitProviderId_fk": { "name": "github_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "github", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.gitlab": { "name": "gitlab", @@ -3996,22 +3881,19 @@ "gitlab_gitProviderId_git_provider_gitProviderId_fk": { "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", "tableFrom": "gitlab", + "tableTo": "git_provider", "columnsFrom": [ "gitProviderId" ], - "tableTo": "git_provider", "columnsTo": [ "gitProviderId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.server": { "name": "server", @@ -4106,35 +3988,32 @@ "server_adminId_admin_adminId_fk": { "name": "server_adminId_admin_adminId_fk", "tableFrom": "server", + "tableTo": "admin", "columnsFrom": [ "adminId" ], - "tableTo": "admin", "columnsTo": [ "adminId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "server_sshKeyId_ssh-key_sshKeyId_fk": { "name": "server_sshKeyId_ssh-key_sshKeyId_fk", "tableFrom": "server", + "tableTo": "ssh-key", "columnsFrom": [ "sshKeyId" ], - "tableTo": "ssh-key", "columnsTo": [ "sshKeyId" ], - "onUpdate": "no action", - "onDelete": "set null" + "onDelete": "set null", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "uniqueConstraints": {} }, "public.preview_deployments": { "name": "preview_deployments", @@ -4226,43 +4105,113 @@ "preview_deployments_applicationId_application_applicationId_fk": { "name": "preview_deployments_applicationId_application_applicationId_fk", "tableFrom": "preview_deployments", + "tableTo": "application", "columnsFrom": [ "applicationId" ], - "tableTo": "application", "columnsTo": [ "applicationId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" }, "preview_deployments_domainId_domain_domainId_fk": { "name": "preview_deployments_domainId_domain_domainId_fk", "tableFrom": "preview_deployments", + "tableTo": "domain", "columnsFrom": [ "domainId" ], - "tableTo": "domain", "columnsTo": [ "domainId" ], - "onUpdate": "no action", - "onDelete": "cascade" + "onDelete": "cascade", + "onUpdate": "no action" } }, "compositePrimaryKeys": {}, "uniqueConstraints": { "preview_deployments_appName_unique": { "name": "preview_deployments_appName_unique", + "nullsNotDistinct": false, "columns": [ "appName" - ], - "nullsNotDistinct": false + ] + } + } + }, + "public.ai": { + "name": "ai", + "schema": "", + "columns": { + "aiId": { + "name": "aiId", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiUrl": { + "name": "apiUrl", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "apiKey": { + "name": "apiKey", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "model": { + "name": "model", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "isEnabled": { + "name": "isEnabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "adminId": { + "name": "adminId", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "createdAt": { + "name": "createdAt", + "type": "text", + "primaryKey": false, + "notNull": true } }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} + "indexes": {}, + "foreignKeys": { + "ai_adminId_admin_adminId_fk": { + "name": "ai_adminId_admin_adminId_fk", + "tableFrom": "ai", + "tableTo": "admin", + "columnsFrom": [ + "adminId" + ], + "columnsTo": [ + "adminId" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} } }, "enums": { @@ -4431,14 +4380,8 @@ }, "schemas": {}, "_meta": { + "columns": {}, "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "b00fa001-dd12-4f37-97dc-478c7a790779", - "prevId": "24787a88-0754-437a-b077-03a3265b8ef5", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} + "tables": {} + } } \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0058_snapshot.json b/apps/dokploy/drizzle/meta/0058_snapshot.json deleted file mode 100644 index 6d49d76bb..000000000 --- a/apps/dokploy/drizzle/meta/0058_snapshot.json +++ /dev/null @@ -1,4450 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "columnsFrom": [ - "registryId" - ], - "tableTo": "registry", - "columnsTo": [ - "registryId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "columnsFrom": [ - "githubId" - ], - "tableTo": "github", - "columnsTo": [ - "githubId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "columnsFrom": [ - "gitlabId" - ], - "tableTo": "gitlab", - "columnsTo": [ - "gitlabId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "columnsFrom": [ - "bitbucketId" - ], - "tableTo": "bitbucket", - "columnsTo": [ - "bitbucketId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "columnsFrom": [ - "authId" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": true - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "columnsFrom": [ - "authId" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "columns": [ - "email" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "previewDeploymentId" - ], - "tableTo": "preview_deployments", - "columnsTo": [ - "previewDeploymentId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "destinationId" - ], - "tableTo": "destination", - "columnsTo": [ - "destinationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "postgresId" - ], - "tableTo": "postgres", - "columnsTo": [ - "postgresId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mariadbId" - ], - "tableTo": "mariadb", - "columnsTo": [ - "mariadbId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mysqlId" - ], - "tableTo": "mysql", - "columnsTo": [ - "mysqlId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mongoId" - ], - "tableTo": "mongo", - "columnsTo": [ - "mongoId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "previewDeploymentId" - ], - "tableTo": "preview_deployments", - "columnsTo": [ - "previewDeploymentId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "postgresId" - ], - "tableTo": "postgres", - "columnsTo": [ - "postgresId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mariadbId" - ], - "tableTo": "mariadb", - "columnsTo": [ - "mariadbId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mongoId" - ], - "tableTo": "mongo", - "columnsTo": [ - "mongoId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mysqlId" - ], - "tableTo": "mysql", - "columnsTo": [ - "mysqlId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "redisId" - ], - "tableTo": "redis", - "columnsTo": [ - "redisId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "columns": [ - "certificatePath" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "columnsFrom": [ - "user_id" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "columns": [ - "username", - "applicationId" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "githubId" - ], - "tableTo": "github", - "columnsTo": [ - "githubId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "gitlabId" - ], - "tableTo": "gitlab", - "columnsTo": [ - "gitlabId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "bitbucketId" - ], - "tableTo": "bitbucket", - "columnsTo": [ - "bitbucketId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "slackId" - ], - "tableTo": "slack", - "columnsTo": [ - "slackId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "telegramId" - ], - "tableTo": "telegram", - "columnsTo": [ - "telegramId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "discordId" - ], - "tableTo": "discord", - "columnsTo": [ - "discordId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "emailId" - ], - "tableTo": "email", - "columnsTo": [ - "emailId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "gotifyId" - ], - "tableTo": "gotify", - "columnsTo": [ - "gotifyId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "columnsFrom": [ - "sshKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "columnsFrom": [ - "domainId" - ], - "tableTo": "domain", - "columnsTo": [ - "domainId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "fdb721ab-5cc8-4063-a3ca-6437b046669c", - "prevId": "b00fa001-dd12-4f37-97dc-478c7a790779", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0059_snapshot.json b/apps/dokploy/drizzle/meta/0059_snapshot.json deleted file mode 100644 index 7dcf737a3..000000000 --- a/apps/dokploy/drizzle/meta/0059_snapshot.json +++ /dev/null @@ -1,4450 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "columnsFrom": [ - "registryId" - ], - "tableTo": "registry", - "columnsTo": [ - "registryId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "columnsFrom": [ - "githubId" - ], - "tableTo": "github", - "columnsTo": [ - "githubId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "columnsFrom": [ - "gitlabId" - ], - "tableTo": "gitlab", - "columnsTo": [ - "gitlabId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "columnsFrom": [ - "bitbucketId" - ], - "tableTo": "bitbucket", - "columnsTo": [ - "bitbucketId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "columnsFrom": [ - "authId" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "columnsFrom": [ - "authId" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "columns": [ - "email" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "previewDeploymentId" - ], - "tableTo": "preview_deployments", - "columnsTo": [ - "previewDeploymentId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "destinationId" - ], - "tableTo": "destination", - "columnsTo": [ - "destinationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "postgresId" - ], - "tableTo": "postgres", - "columnsTo": [ - "postgresId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mariadbId" - ], - "tableTo": "mariadb", - "columnsTo": [ - "mariadbId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mysqlId" - ], - "tableTo": "mysql", - "columnsTo": [ - "mysqlId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mongoId" - ], - "tableTo": "mongo", - "columnsTo": [ - "mongoId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "previewDeploymentId" - ], - "tableTo": "preview_deployments", - "columnsTo": [ - "previewDeploymentId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "postgresId" - ], - "tableTo": "postgres", - "columnsTo": [ - "postgresId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mariadbId" - ], - "tableTo": "mariadb", - "columnsTo": [ - "mariadbId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mongoId" - ], - "tableTo": "mongo", - "columnsTo": [ - "mongoId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mysqlId" - ], - "tableTo": "mysql", - "columnsTo": [ - "mysqlId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "redisId" - ], - "tableTo": "redis", - "columnsTo": [ - "redisId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "columns": [ - "certificatePath" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "columnsFrom": [ - "user_id" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "columns": [ - "username", - "applicationId" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "githubId" - ], - "tableTo": "github", - "columnsTo": [ - "githubId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "gitlabId" - ], - "tableTo": "gitlab", - "columnsTo": [ - "gitlabId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "bitbucketId" - ], - "tableTo": "bitbucket", - "columnsTo": [ - "bitbucketId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "slackId" - ], - "tableTo": "slack", - "columnsTo": [ - "slackId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "telegramId" - ], - "tableTo": "telegram", - "columnsTo": [ - "telegramId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "discordId" - ], - "tableTo": "discord", - "columnsTo": [ - "discordId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "emailId" - ], - "tableTo": "email", - "columnsTo": [ - "emailId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "gotifyId" - ], - "tableTo": "gotify", - "columnsTo": [ - "gotifyId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "columnsFrom": [ - "sshKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "columnsFrom": [ - "domainId" - ], - "tableTo": "domain", - "columnsTo": [ - "domainId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "8492fecb-69a3-4efb-86b1-7bbc62e1eba8", - "prevId": "fdb721ab-5cc8-4063-a3ca-6437b046669c", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0060_snapshot.json b/apps/dokploy/drizzle/meta/0060_snapshot.json deleted file mode 100644 index f2a028e8d..000000000 --- a/apps/dokploy/drizzle/meta/0060_snapshot.json +++ /dev/null @@ -1,4450 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "columnsFrom": [ - "registryId" - ], - "tableTo": "registry", - "columnsTo": [ - "registryId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "columnsFrom": [ - "githubId" - ], - "tableTo": "github", - "columnsTo": [ - "githubId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "columnsFrom": [ - "gitlabId" - ], - "tableTo": "gitlab", - "columnsTo": [ - "gitlabId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "columnsFrom": [ - "bitbucketId" - ], - "tableTo": "bitbucket", - "columnsTo": [ - "bitbucketId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "columnsFrom": [ - "authId" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "columnsFrom": [ - "authId" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "columns": [ - "email" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "columnsFrom": [ - "previewDeploymentId" - ], - "tableTo": "preview_deployments", - "columnsTo": [ - "previewDeploymentId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "destinationId" - ], - "tableTo": "destination", - "columnsTo": [ - "destinationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "postgresId" - ], - "tableTo": "postgres", - "columnsTo": [ - "postgresId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mariadbId" - ], - "tableTo": "mariadb", - "columnsTo": [ - "mariadbId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mysqlId" - ], - "tableTo": "mysql", - "columnsTo": [ - "mysqlId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "columnsFrom": [ - "mongoId" - ], - "tableTo": "mongo", - "columnsTo": [ - "mongoId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "columnsFrom": [ - "previewDeploymentId" - ], - "tableTo": "preview_deployments", - "columnsTo": [ - "previewDeploymentId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "postgresId" - ], - "tableTo": "postgres", - "columnsTo": [ - "postgresId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mariadbId" - ], - "tableTo": "mariadb", - "columnsTo": [ - "mariadbId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mongoId" - ], - "tableTo": "mongo", - "columnsTo": [ - "mongoId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "mysqlId" - ], - "tableTo": "mysql", - "columnsTo": [ - "mysqlId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "redisId" - ], - "tableTo": "redis", - "columnsTo": [ - "redisId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "columnsFrom": [ - "composeId" - ], - "tableTo": "compose", - "columnsTo": [ - "composeId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "columns": [ - "certificatePath" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "columnsFrom": [ - "user_id" - ], - "tableTo": "auth", - "columnsTo": [ - "id" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "columns": [ - "username", - "applicationId" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "projectId" - ], - "tableTo": "project", - "columnsTo": [ - "projectId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "githubId" - ], - "tableTo": "github", - "columnsTo": [ - "githubId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "gitlabId" - ], - "tableTo": "gitlab", - "columnsTo": [ - "gitlabId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "bitbucketId" - ], - "tableTo": "bitbucket", - "columnsTo": [ - "bitbucketId" - ], - "onUpdate": "no action", - "onDelete": "set null" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "columnsFrom": [ - "serverId" - ], - "tableTo": "server", - "columnsTo": [ - "serverId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "slackId" - ], - "tableTo": "slack", - "columnsTo": [ - "slackId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "telegramId" - ], - "tableTo": "telegram", - "columnsTo": [ - "telegramId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "discordId" - ], - "tableTo": "discord", - "columnsTo": [ - "discordId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "emailId" - ], - "tableTo": "email", - "columnsTo": [ - "emailId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "gotifyId" - ], - "tableTo": "gotify", - "columnsTo": [ - "gotifyId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "columnsFrom": [ - "gitProviderId" - ], - "tableTo": "git_provider", - "columnsTo": [ - "gitProviderId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "columnsFrom": [ - "adminId" - ], - "tableTo": "admin", - "columnsTo": [ - "adminId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "columnsFrom": [ - "sshKeyId" - ], - "tableTo": "ssh-key", - "columnsTo": [ - "sshKeyId" - ], - "onUpdate": "no action", - "onDelete": "set null" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "columnsFrom": [ - "applicationId" - ], - "tableTo": "application", - "columnsTo": [ - "applicationId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "columnsFrom": [ - "domainId" - ], - "tableTo": "domain", - "columnsTo": [ - "domainId" - ], - "onUpdate": "no action", - "onDelete": "cascade" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "columns": [ - "appName" - ], - "nullsNotDistinct": false - } - }, - "policies": {}, - "isRLSEnabled": false, - "checkConstraints": {} - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "id": "1f4eada1-a120-490d-a152-2fc7a81eee7a", - "prevId": "8492fecb-69a3-4efb-86b1-7bbc62e1eba8", - "sequences": {}, - "policies": {}, - "views": {}, - "roles": {} -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0061_snapshot.json b/apps/dokploy/drizzle/meta/0061_snapshot.json deleted file mode 100644 index e35b7b0aa..000000000 --- a/apps/dokploy/drizzle/meta/0061_snapshot.json +++ /dev/null @@ -1,4478 +0,0 @@ -{ - "id": "5ec4c091-a361-4acb-ae2b-dff5078d77f0", - "prevId": "1f4eada1-a120-490d-a152-2fc7a81eee7a", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"refreshRate\":20,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":20,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "tableTo": "auth", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"refreshRate\":20,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":20,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0062_snapshot.json b/apps/dokploy/drizzle/meta/0062_snapshot.json deleted file mode 100644 index bab449b80..000000000 --- a/apps/dokploy/drizzle/meta/0062_snapshot.json +++ /dev/null @@ -1,4478 +0,0 @@ -{ - "id": "a000faa7-0776-43cd-b394-48210be90be1", - "prevId": "5ec4c091-a361-4acb-ae2b-dff5078d77f0", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":20,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":20,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "tableTo": "auth", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":20,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":20,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0063_snapshot.json b/apps/dokploy/drizzle/meta/0063_snapshot.json deleted file mode 100644 index e4f6c8e7c..000000000 --- a/apps/dokploy/drizzle/meta/0063_snapshot.json +++ /dev/null @@ -1,4478 +0,0 @@ -{ - "id": "f2fb7162-4b29-4494-9f6a-ab2794b1be48", - "prevId": "a000faa7-0776-43cd-b394-48210be90be1", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "tableTo": "auth", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0064_snapshot.json b/apps/dokploy/drizzle/meta/0064_snapshot.json deleted file mode 100644 index 8e034af6c..000000000 --- a/apps/dokploy/drizzle/meta/0064_snapshot.json +++ /dev/null @@ -1,4485 +0,0 @@ -{ - "id": "c9ab7857-cc4c-475f-bd11-5f14f11017cc", - "prevId": "f2fb7162-4b29-4494-9f6a-ab2794b1be48", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "tableTo": "auth", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "deployable": { - "name": "deployable", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0065_snapshot.json b/apps/dokploy/drizzle/meta/0065_snapshot.json deleted file mode 100644 index 28eef6187..000000000 --- a/apps/dokploy/drizzle/meta/0065_snapshot.json +++ /dev/null @@ -1,4485 +0,0 @@ -{ - "id": "1240ec96-1751-4de3-b64f-cef9cb716786", - "prevId": "c9ab7857-cc4c-475f-bd11-5f14f11017cc", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "userId": { - "name": "userId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "timestamp(3)", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "user_adminId_admin_adminId_fk": { - "name": "user_adminId_admin_adminId_fk", - "tableFrom": "user", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "user_authId_auth_id_fk": { - "name": "user_authId_auth_id_fk", - "tableFrom": "user", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.admin": { - "name": "admin", - "schema": "", - "columns": { - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "authId": { - "name": "authId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "admin_authId_auth_id_fk": { - "name": "admin_authId_auth_id_fk", - "tableFrom": "admin", - "tableTo": "auth", - "columnsFrom": [ - "authId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.auth": { - "name": "auth", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rol": { - "name": "rol", - "type": "Roles", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "auth_email_unique": { - "name": "auth_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_adminId_admin_adminId_fk": { - "name": "project_adminId_admin_adminId_fk", - "tableFrom": "project", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_adminId_admin_adminId_fk": { - "name": "destination_adminId_admin_adminId_fk", - "tableFrom": "destination", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_adminId_admin_adminId_fk": { - "name": "certificate_adminId_admin_adminId_fk", - "tableFrom": "certificate", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp with time zone", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "session_user_id_auth_id_fk": { - "name": "session_user_id_auth_id_fk", - "tableFrom": "session", - "tableTo": "auth", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "isolatedDeployment": { - "name": "isolatedDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_adminId_admin_adminId_fk": { - "name": "registry_adminId_admin_adminId_fk", - "tableFrom": "registry", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_adminId_admin_adminId_fk": { - "name": "notification_adminId_admin_adminId_fk", - "tableFrom": "notification", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_adminId_admin_adminId_fk": { - "name": "ssh-key_adminId_admin_adminId_fk", - "tableFrom": "ssh-key", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_adminId_admin_adminId_fk": { - "name": "git_provider_adminId_admin_adminId_fk", - "tableFrom": "git_provider", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "adminId": { - "name": "adminId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_adminId_admin_adminId_fk": { - "name": "server_adminId_admin_adminId_fk", - "tableFrom": "server", - "tableTo": "admin", - "columnsFrom": [ - "adminId" - ], - "columnsTo": [ - "adminId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.Roles": { - "name": "Roles", - "schema": "public", - "values": [ - "admin", - "user" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0066_snapshot.json b/apps/dokploy/drizzle/meta/0066_snapshot.json deleted file mode 100644 index 55804f0cc..000000000 --- a/apps/dokploy/drizzle/meta/0066_snapshot.json +++ /dev/null @@ -1,5037 +0,0 @@ -{ - "id": "c5e17a87-0aa3-4178-be24-cfa7cde0f75d", - "prevId": "9cb79f1e-14c2-4deb-b1ab-a1d038f72356", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_temp": { - "name": "user_temp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "two_factor_enabled": { - "name": "two_factor_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_temp_email_unique": { - "name": "user_temp_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_organizationId_organization_id_fk": { - "name": "project_organizationId_organization_id_fk", - "tableFrom": "project", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_organizationId_organization_id_fk": { - "name": "destination_organizationId_organization_id_fk", - "tableFrom": "destination", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_organizationId_organization_id_fk": { - "name": "certificate_organizationId_organization_id_fk", - "tableFrom": "certificate", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session_temp": { - "name": "session_temp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "session_temp_user_id_user_temp_id_fk": { - "name": "session_temp_user_id_user_temp_id_fk", - "tableFrom": "session_temp", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_temp_token_unique": { - "name": "session_temp_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "isolatedDeployment": { - "name": "isolatedDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_organizationId_organization_id_fk": { - "name": "registry_organizationId_organization_id_fk", - "tableFrom": "registry", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_organizationId_organization_id_fk": { - "name": "notification_organizationId_organization_id_fk", - "tableFrom": "notification", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_organizationId_organization_id_fk": { - "name": "ssh-key_organizationId_organization_id_fk", - "tableFrom": "ssh-key", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_organizationId_organization_id_fk": { - "name": "git_provider_organizationId_organization_id_fk", - "tableFrom": "git_provider", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_organizationId_organization_id_fk": { - "name": "server_organizationId_organization_id_fk", - "tableFrom": "server", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_user_id_user_temp_id_fk": { - "name": "account_user_id_user_temp_id_fk", - "tableFrom": "account", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.apikey": { - "name": "apikey", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "start": { - "name": "start", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "key": { - "name": "key", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refill_interval": { - "name": "refill_interval", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "refill_amount": { - "name": "refill_amount", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "last_refill_at": { - "name": "last_refill_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "rate_limit_enabled": { - "name": "rate_limit_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "rate_limit_time_window": { - "name": "rate_limit_time_window", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "rate_limit_max": { - "name": "rate_limit_max", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "request_count": { - "name": "request_count", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "remaining": { - "name": "remaining", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "last_request": { - "name": "last_request", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "permissions": { - "name": "permissions", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "apikey_user_id_user_temp_id_fk": { - "name": "apikey_user_id_user_temp_id_fk", - "tableFrom": "apikey", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "inviter_id": { - "name": "inviter_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "text", - "primaryKey": false, - "notNull": false - - } - }, - "indexes": {}, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_temp_id_fk": { - "name": "invitation_inviter_id_user_temp_id_fk", - "tableFrom": "invitation", - "tableTo": "user_temp", - "columnsFrom": [ - "inviter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - } - }, - "indexes": {}, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_temp_id_fk": { - "name": "member_user_id_user_temp_id_fk", - "tableFrom": "member", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "organization_owner_id_user_temp_id_fk": { - "name": "organization_owner_id_user_temp_id_fk", - "tableFrom": "organization", - "tableTo": "user_temp", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.two_factor": { - "name": "two_factor", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "backup_codes": { - "name": "backup_codes", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "two_factor_user_id_user_temp_id_fk": { - "name": "two_factor_user_id_user_temp_id_fk", - "tableFrom": "two_factor", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/0067_snapshot.json b/apps/dokploy/drizzle/meta/0067_snapshot.json deleted file mode 100644 index 4fc64698e..000000000 --- a/apps/dokploy/drizzle/meta/0067_snapshot.json +++ /dev/null @@ -1,5042 +0,0 @@ -{ - "id": "ba6b8dbb-406c-4ab1-9c24-6dd2e19a9184", - "prevId": "c5e17a87-0aa3-4178-be24-cfa7cde0f75d", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.application": { - "name": "application", - "schema": "", - "columns": { - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewEnv": { - "name": "previewEnv", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewBuildArgs": { - "name": "previewBuildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewWildcard": { - "name": "previewWildcard", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewPort": { - "name": "previewPort", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "previewHttps": { - "name": "previewHttps", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "previewPath": { - "name": "previewPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "previewLimit": { - "name": "previewLimit", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3 - }, - "isPreviewDeploymentsActive": { - "name": "isPreviewDeploymentsActive", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "buildArgs": { - "name": "buildArgs", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "subtitle": { - "name": "subtitle", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "buildPath": { - "name": "buildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBuildPath": { - "name": "gitlabBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBuildPath": { - "name": "bitbucketBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBuildPath": { - "name": "customGitBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerfile": { - "name": "dockerfile", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerContextPath": { - "name": "dockerContextPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerBuildStage": { - "name": "dockerBuildStage", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dropBuildPath": { - "name": "dropBuildPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "healthCheckSwarm": { - "name": "healthCheckSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "restartPolicySwarm": { - "name": "restartPolicySwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "placementSwarm": { - "name": "placementSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "updateConfigSwarm": { - "name": "updateConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "rollbackConfigSwarm": { - "name": "rollbackConfigSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "modeSwarm": { - "name": "modeSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "labelsSwarm": { - "name": "labelsSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "networkSwarm": { - "name": "networkSwarm", - "type": "json", - "primaryKey": false, - "notNull": false - }, - "replicas": { - "name": "replicas", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 1 - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "buildType": { - "name": "buildType", - "type": "buildType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'nixpacks'" - }, - "herokuVersion": { - "name": "herokuVersion", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'24'" - }, - "publishDirectory": { - "name": "publishDirectory", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "application_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "application_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "application", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_registryId_registry_registryId_fk": { - "name": "application_registryId_registry_registryId_fk", - "tableFrom": "application", - "tableTo": "registry", - "columnsFrom": [ - "registryId" - ], - "columnsTo": [ - "registryId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_projectId_project_projectId_fk": { - "name": "application_projectId_project_projectId_fk", - "tableFrom": "application", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "application_githubId_github_githubId_fk": { - "name": "application_githubId_github_githubId_fk", - "tableFrom": "application", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_gitlabId_gitlab_gitlabId_fk": { - "name": "application_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "application", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "application_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "application", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "application_serverId_server_serverId_fk": { - "name": "application_serverId_server_serverId_fk", - "tableFrom": "application", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "application_appName_unique": { - "name": "application_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.postgres": { - "name": "postgres", - "schema": "", - "columns": { - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "postgres_projectId_project_projectId_fk": { - "name": "postgres_projectId_project_projectId_fk", - "tableFrom": "postgres", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "postgres_serverId_server_serverId_fk": { - "name": "postgres_serverId_server_serverId_fk", - "tableFrom": "postgres", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "postgres_appName_unique": { - "name": "postgres_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user_temp": { - "name": "user_temp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "isRegistered": { - "name": "isRegistered", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "expirationDate": { - "name": "expirationDate", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - }, - "two_factor_enabled": { - "name": "two_factor_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "serverIp": { - "name": "serverIp", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "letsEncryptEmail": { - "name": "letsEncryptEmail", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sshPrivateKey": { - "name": "sshPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enableLogRotation": { - "name": "enableLogRotation", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "enablePaidFeatures": { - "name": "enablePaidFeatures", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Dokploy\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"retentionDays\":2,\"cronJob\":\"\",\"urlCallback\":\"\",\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - }, - "cleanupCacheApplications": { - "name": "cleanupCacheApplications", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnPreviews": { - "name": "cleanupCacheOnPreviews", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "cleanupCacheOnCompose": { - "name": "cleanupCacheOnCompose", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "stripeCustomerId": { - "name": "stripeCustomerId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "stripeSubscriptionId": { - "name": "stripeSubscriptionId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serversQuantity": { - "name": "serversQuantity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_temp_email_unique": { - "name": "user_temp_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.project": { - "name": "project", - "schema": "", - "columns": { - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - } - }, - "indexes": {}, - "foreignKeys": { - "project_organizationId_organization_id_fk": { - "name": "project_organizationId_organization_id_fk", - "tableFrom": "project", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.domain": { - "name": "domain", - "schema": "", - "columns": { - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "host": { - "name": "host", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "https": { - "name": "https", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": false, - "default": 3000 - }, - "path": { - "name": "path", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "'/'" - }, - "serviceName": { - "name": "serviceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "domainType": { - "name": "domainType", - "type": "domainType", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'application'" - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "certificateType": { - "name": "certificateType", - "type": "certificateType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'none'" - } - }, - "indexes": {}, - "foreignKeys": { - "domain_composeId_compose_composeId_fk": { - "name": "domain_composeId_compose_composeId_fk", - "tableFrom": "domain", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_applicationId_application_applicationId_fk": { - "name": "domain_applicationId_application_applicationId_fk", - "tableFrom": "domain", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "domain_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "domain", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mariadb": { - "name": "mariadb", - "schema": "", - "columns": { - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mariadb_projectId_project_projectId_fk": { - "name": "mariadb_projectId_project_projectId_fk", - "tableFrom": "mariadb", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mariadb_serverId_server_serverId_fk": { - "name": "mariadb_serverId_server_serverId_fk", - "tableFrom": "mariadb", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mariadb_appName_unique": { - "name": "mariadb_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mongo": { - "name": "mongo", - "schema": "", - "columns": { - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "replicaSets": { - "name": "replicaSets", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": { - "mongo_projectId_project_projectId_fk": { - "name": "mongo_projectId_project_projectId_fk", - "tableFrom": "mongo", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mongo_serverId_server_serverId_fk": { - "name": "mongo_serverId_server_serverId_fk", - "tableFrom": "mongo", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mongo_appName_unique": { - "name": "mongo_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mysql": { - "name": "mysql", - "schema": "", - "columns": { - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "databaseName": { - "name": "databaseName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseUser": { - "name": "databaseUser", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databasePassword": { - "name": "databasePassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "rootPassword": { - "name": "rootPassword", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mysql_projectId_project_projectId_fk": { - "name": "mysql_projectId_project_projectId_fk", - "tableFrom": "mysql", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mysql_serverId_server_serverId_fk": { - "name": "mysql_serverId_server_serverId_fk", - "tableFrom": "mysql", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "mysql_appName_unique": { - "name": "mysql_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.backup": { - "name": "backup", - "schema": "", - "columns": { - "backupId": { - "name": "backupId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "schedule": { - "name": "schedule", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "database": { - "name": "database", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "databaseType": { - "name": "databaseType", - "type": "databaseType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "backup_destinationId_destination_destinationId_fk": { - "name": "backup_destinationId_destination_destinationId_fk", - "tableFrom": "backup", - "tableTo": "destination", - "columnsFrom": [ - "destinationId" - ], - "columnsTo": [ - "destinationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_postgresId_postgres_postgresId_fk": { - "name": "backup_postgresId_postgres_postgresId_fk", - "tableFrom": "backup", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mariadbId_mariadb_mariadbId_fk": { - "name": "backup_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "backup", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mysqlId_mysql_mysqlId_fk": { - "name": "backup_mysqlId_mysql_mysqlId_fk", - "tableFrom": "backup", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "backup_mongoId_mongo_mongoId_fk": { - "name": "backup_mongoId_mongo_mongoId_fk", - "tableFrom": "backup", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.destination": { - "name": "destination", - "schema": "", - "columns": { - "destinationId": { - "name": "destinationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "accessKey": { - "name": "accessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "secretAccessKey": { - "name": "secretAccessKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "bucket": { - "name": "bucket", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "region": { - "name": "region", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "endpoint": { - "name": "endpoint", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "destination_organizationId_organization_id_fk": { - "name": "destination_organizationId_organization_id_fk", - "tableFrom": "destination", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.deployment": { - "name": "deployment", - "schema": "", - "columns": { - "deploymentId": { - "name": "deploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "deploymentStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": false, - "default": "'running'" - }, - "logPath": { - "name": "logPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "isPreviewDeployment": { - "name": "isPreviewDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "errorMessage": { - "name": "errorMessage", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "deployment_applicationId_application_applicationId_fk": { - "name": "deployment_applicationId_application_applicationId_fk", - "tableFrom": "deployment", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_composeId_compose_composeId_fk": { - "name": "deployment_composeId_compose_composeId_fk", - "tableFrom": "deployment", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_serverId_server_serverId_fk": { - "name": "deployment_serverId_server_serverId_fk", - "tableFrom": "deployment", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk": { - "name": "deployment_previewDeploymentId_preview_deployments_previewDeploymentId_fk", - "tableFrom": "deployment", - "tableTo": "preview_deployments", - "columnsFrom": [ - "previewDeploymentId" - ], - "columnsTo": [ - "previewDeploymentId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.mount": { - "name": "mount", - "schema": "", - "columns": { - "mountId": { - "name": "mountId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "type": { - "name": "type", - "type": "mountType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "hostPath": { - "name": "hostPath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "volumeName": { - "name": "volumeName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "filePath": { - "name": "filePath", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serviceType": { - "name": "serviceType", - "type": "serviceType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'application'" - }, - "mountPath": { - "name": "mountPath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "postgresId": { - "name": "postgresId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mariadbId": { - "name": "mariadbId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mongoId": { - "name": "mongoId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "mysqlId": { - "name": "mysqlId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "mount_applicationId_application_applicationId_fk": { - "name": "mount_applicationId_application_applicationId_fk", - "tableFrom": "mount", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_postgresId_postgres_postgresId_fk": { - "name": "mount_postgresId_postgres_postgresId_fk", - "tableFrom": "mount", - "tableTo": "postgres", - "columnsFrom": [ - "postgresId" - ], - "columnsTo": [ - "postgresId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mariadbId_mariadb_mariadbId_fk": { - "name": "mount_mariadbId_mariadb_mariadbId_fk", - "tableFrom": "mount", - "tableTo": "mariadb", - "columnsFrom": [ - "mariadbId" - ], - "columnsTo": [ - "mariadbId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mongoId_mongo_mongoId_fk": { - "name": "mount_mongoId_mongo_mongoId_fk", - "tableFrom": "mount", - "tableTo": "mongo", - "columnsFrom": [ - "mongoId" - ], - "columnsTo": [ - "mongoId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_mysqlId_mysql_mysqlId_fk": { - "name": "mount_mysqlId_mysql_mysqlId_fk", - "tableFrom": "mount", - "tableTo": "mysql", - "columnsFrom": [ - "mysqlId" - ], - "columnsTo": [ - "mysqlId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_redisId_redis_redisId_fk": { - "name": "mount_redisId_redis_redisId_fk", - "tableFrom": "mount", - "tableTo": "redis", - "columnsFrom": [ - "redisId" - ], - "columnsTo": [ - "redisId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "mount_composeId_compose_composeId_fk": { - "name": "mount_composeId_compose_composeId_fk", - "tableFrom": "mount", - "tableTo": "compose", - "columnsFrom": [ - "composeId" - ], - "columnsTo": [ - "composeId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.certificate": { - "name": "certificate", - "schema": "", - "columns": { - "certificateId": { - "name": "certificateId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificateData": { - "name": "certificateData", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "certificatePath": { - "name": "certificatePath", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "autoRenew": { - "name": "autoRenew", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "certificate_organizationId_organization_id_fk": { - "name": "certificate_organizationId_organization_id_fk", - "tableFrom": "certificate", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "certificate_serverId_server_serverId_fk": { - "name": "certificate_serverId_server_serverId_fk", - "tableFrom": "certificate", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "certificate_certificatePath_unique": { - "name": "certificate_certificatePath_unique", - "nullsNotDistinct": false, - "columns": [ - "certificatePath" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session_temp": { - "name": "session_temp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "session_temp_user_id_user_temp_id_fk": { - "name": "session_temp_user_id_user_temp_id_fk", - "tableFrom": "session_temp", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_temp_token_unique": { - "name": "session_temp_token_unique", - "nullsNotDistinct": false, - "columns": [ - "token" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redirect": { - "name": "redirect", - "schema": "", - "columns": { - "redirectId": { - "name": "redirectId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "regex": { - "name": "regex", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "replacement": { - "name": "replacement", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "permanent": { - "name": "permanent", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "uniqueConfigKey": { - "name": "uniqueConfigKey", - "type": "serial", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "redirect_applicationId_application_applicationId_fk": { - "name": "redirect_applicationId_application_applicationId_fk", - "tableFrom": "redirect", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.security": { - "name": "security", - "schema": "", - "columns": { - "securityId": { - "name": "securityId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "security_applicationId_application_applicationId_fk": { - "name": "security_applicationId_application_applicationId_fk", - "tableFrom": "security", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "security_username_applicationId_unique": { - "name": "security_username_applicationId_unique", - "nullsNotDistinct": false, - "columns": [ - "username", - "applicationId" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.port": { - "name": "port", - "schema": "", - "columns": { - "portId": { - "name": "portId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "publishedPort": { - "name": "publishedPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "targetPort": { - "name": "targetPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "protocol": { - "name": "protocol", - "type": "protocolType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "port_applicationId_application_applicationId_fk": { - "name": "port_applicationId_application_applicationId_fk", - "tableFrom": "port", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.redis": { - "name": "redis", - "schema": "", - "columns": { - "redisId": { - "name": "redisId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "dockerImage": { - "name": "dockerImage", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryReservation": { - "name": "memoryReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "memoryLimit": { - "name": "memoryLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuReservation": { - "name": "cpuReservation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "cpuLimit": { - "name": "cpuLimit", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "externalPort": { - "name": "externalPort", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationStatus": { - "name": "applicationStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "redis_projectId_project_projectId_fk": { - "name": "redis_projectId_project_projectId_fk", - "tableFrom": "redis", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "redis_serverId_server_serverId_fk": { - "name": "redis_serverId_server_serverId_fk", - "tableFrom": "redis", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "redis_appName_unique": { - "name": "redis_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.compose": { - "name": "compose", - "schema": "", - "columns": { - "composeId": { - "name": "composeId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "env": { - "name": "env", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "composeFile": { - "name": "composeFile", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "refreshToken": { - "name": "refreshToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sourceType": { - "name": "sourceType", - "type": "sourceTypeCompose", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "composeType": { - "name": "composeType", - "type": "composeType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'docker-compose'" - }, - "repository": { - "name": "repository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner": { - "name": "owner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "autoDeploy": { - "name": "autoDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "gitlabProjectId": { - "name": "gitlabProjectId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitlabRepository": { - "name": "gitlabRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabOwner": { - "name": "gitlabOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabBranch": { - "name": "gitlabBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabPathNamespace": { - "name": "gitlabPathNamespace", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketRepository": { - "name": "bitbucketRepository", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketOwner": { - "name": "bitbucketOwner", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketBranch": { - "name": "bitbucketBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitUrl": { - "name": "customGitUrl", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitBranch": { - "name": "customGitBranch", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "customGitSSHKeyId": { - "name": "customGitSSHKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "composePath": { - "name": "composePath", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'./docker-compose.yml'" - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "randomize": { - "name": "randomize", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "isolatedDeployment": { - "name": "isolatedDeployment", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "composeStatus": { - "name": "composeStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "projectId": { - "name": "projectId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk": { - "name": "compose_customGitSSHKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "compose", - "tableTo": "ssh-key", - "columnsFrom": [ - "customGitSSHKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_projectId_project_projectId_fk": { - "name": "compose_projectId_project_projectId_fk", - "tableFrom": "compose", - "tableTo": "project", - "columnsFrom": [ - "projectId" - ], - "columnsTo": [ - "projectId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "compose_githubId_github_githubId_fk": { - "name": "compose_githubId_github_githubId_fk", - "tableFrom": "compose", - "tableTo": "github", - "columnsFrom": [ - "githubId" - ], - "columnsTo": [ - "githubId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_gitlabId_gitlab_gitlabId_fk": { - "name": "compose_gitlabId_gitlab_gitlabId_fk", - "tableFrom": "compose", - "tableTo": "gitlab", - "columnsFrom": [ - "gitlabId" - ], - "columnsTo": [ - "gitlabId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_bitbucketId_bitbucket_bitbucketId_fk": { - "name": "compose_bitbucketId_bitbucket_bitbucketId_fk", - "tableFrom": "compose", - "tableTo": "bitbucket", - "columnsFrom": [ - "bitbucketId" - ], - "columnsTo": [ - "bitbucketId" - ], - "onDelete": "set null", - "onUpdate": "no action" - }, - "compose_serverId_server_serverId_fk": { - "name": "compose_serverId_server_serverId_fk", - "tableFrom": "compose", - "tableTo": "server", - "columnsFrom": [ - "serverId" - ], - "columnsTo": [ - "serverId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.registry": { - "name": "registry", - "schema": "", - "columns": { - "registryId": { - "name": "registryId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "registryName": { - "name": "registryName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "imagePrefix": { - "name": "imagePrefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "registryUrl": { - "name": "registryUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "selfHosted": { - "name": "selfHosted", - "type": "RegistryType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'cloud'" - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "registry_organizationId_organization_id_fk": { - "name": "registry_organizationId_organization_id_fk", - "tableFrom": "registry", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.discord": { - "name": "discord", - "schema": "", - "columns": { - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.email": { - "name": "email", - "schema": "", - "columns": { - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "smtpServer": { - "name": "smtpServer", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "smtpPort": { - "name": "smtpPort", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "fromAddress": { - "name": "fromAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "toAddress": { - "name": "toAddress", - "type": "text[]", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gotify": { - "name": "gotify", - "schema": "", - "columns": { - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "serverUrl": { - "name": "serverUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appToken": { - "name": "appToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "priority": { - "name": "priority", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 5 - }, - "decoration": { - "name": "decoration", - "type": "boolean", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notification": { - "name": "notification", - "schema": "", - "columns": { - "notificationId": { - "name": "notificationId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "appDeploy": { - "name": "appDeploy", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "appBuildError": { - "name": "appBuildError", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "databaseBackup": { - "name": "databaseBackup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dokployRestart": { - "name": "dokployRestart", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "dockerCleanup": { - "name": "dockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "serverThreshold": { - "name": "serverThreshold", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "notificationType": { - "name": "notificationType", - "type": "notificationType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "discordId": { - "name": "discordId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "emailId": { - "name": "emailId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gotifyId": { - "name": "gotifyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "notification_slackId_slack_slackId_fk": { - "name": "notification_slackId_slack_slackId_fk", - "tableFrom": "notification", - "tableTo": "slack", - "columnsFrom": [ - "slackId" - ], - "columnsTo": [ - "slackId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_telegramId_telegram_telegramId_fk": { - "name": "notification_telegramId_telegram_telegramId_fk", - "tableFrom": "notification", - "tableTo": "telegram", - "columnsFrom": [ - "telegramId" - ], - "columnsTo": [ - "telegramId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_discordId_discord_discordId_fk": { - "name": "notification_discordId_discord_discordId_fk", - "tableFrom": "notification", - "tableTo": "discord", - "columnsFrom": [ - "discordId" - ], - "columnsTo": [ - "discordId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_emailId_email_emailId_fk": { - "name": "notification_emailId_email_emailId_fk", - "tableFrom": "notification", - "tableTo": "email", - "columnsFrom": [ - "emailId" - ], - "columnsTo": [ - "emailId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_gotifyId_gotify_gotifyId_fk": { - "name": "notification_gotifyId_gotify_gotifyId_fk", - "tableFrom": "notification", - "tableTo": "gotify", - "columnsFrom": [ - "gotifyId" - ], - "columnsTo": [ - "gotifyId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "notification_organizationId_organization_id_fk": { - "name": "notification_organizationId_organization_id_fk", - "tableFrom": "notification", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.slack": { - "name": "slack", - "schema": "", - "columns": { - "slackId": { - "name": "slackId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "webhookUrl": { - "name": "webhookUrl", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.telegram": { - "name": "telegram", - "schema": "", - "columns": { - "telegramId": { - "name": "telegramId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "botToken": { - "name": "botToken", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "chatId": { - "name": "chatId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "messageThreadId": { - "name": "messageThreadId", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.ssh-key": { - "name": "ssh-key", - "schema": "", - "columns": { - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "privateKey": { - "name": "privateKey", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "publicKey": { - "name": "publicKey", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "lastUsedAt": { - "name": "lastUsedAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "ssh-key_organizationId_organization_id_fk": { - "name": "ssh-key_organizationId_organization_id_fk", - "tableFrom": "ssh-key", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.git_provider": { - "name": "git_provider", - "schema": "", - "columns": { - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "providerType": { - "name": "providerType", - "type": "gitProviderType", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'github'" - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "git_provider_organizationId_organization_id_fk": { - "name": "git_provider_organizationId_organization_id_fk", - "tableFrom": "git_provider", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.bitbucket": { - "name": "bitbucket", - "schema": "", - "columns": { - "bitbucketId": { - "name": "bitbucketId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "bitbucketUsername": { - "name": "bitbucketUsername", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "appPassword": { - "name": "appPassword", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "bitbucketWorkspaceName": { - "name": "bitbucketWorkspaceName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "bitbucket_gitProviderId_git_provider_gitProviderId_fk": { - "name": "bitbucket_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "bitbucket", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.github": { - "name": "github", - "schema": "", - "columns": { - "githubId": { - "name": "githubId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "githubAppName": { - "name": "githubAppName", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubAppId": { - "name": "githubAppId", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "githubClientId": { - "name": "githubClientId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubClientSecret": { - "name": "githubClientSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubInstallationId": { - "name": "githubInstallationId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubPrivateKey": { - "name": "githubPrivateKey", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "githubWebhookSecret": { - "name": "githubWebhookSecret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "github_gitProviderId_git_provider_gitProviderId_fk": { - "name": "github_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "github", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.gitlab": { - "name": "gitlab", - "schema": "", - "columns": { - "gitlabId": { - "name": "gitlabId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "gitlabUrl": { - "name": "gitlabUrl", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'https://gitlab.com'" - }, - "application_id": { - "name": "application_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "redirect_uri": { - "name": "redirect_uri", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "group_name": { - "name": "group_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "gitProviderId": { - "name": "gitProviderId", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "gitlab_gitProviderId_git_provider_gitProviderId_fk": { - "name": "gitlab_gitProviderId_git_provider_gitProviderId_fk", - "tableFrom": "gitlab", - "tableTo": "git_provider", - "columnsFrom": [ - "gitProviderId" - ], - "columnsTo": [ - "gitProviderId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.server": { - "name": "server", - "schema": "", - "columns": { - "serverId": { - "name": "serverId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ipAddress": { - "name": "ipAddress", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "port": { - "name": "port", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'root'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "enableDockerCleanup": { - "name": "enableDockerCleanup", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "organizationId": { - "name": "organizationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "serverStatus": { - "name": "serverStatus", - "type": "serverStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'active'" - }, - "command": { - "name": "command", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "''" - }, - "sshKeyId": { - "name": "sshKeyId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metricsConfig": { - "name": "metricsConfig", - "type": "jsonb", - "primaryKey": false, - "notNull": true, - "default": "'{\"server\":{\"type\":\"Remote\",\"refreshRate\":60,\"port\":4500,\"token\":\"\",\"urlCallback\":\"\",\"cronJob\":\"\",\"retentionDays\":2,\"thresholds\":{\"cpu\":0,\"memory\":0}},\"containers\":{\"refreshRate\":60,\"services\":{\"include\":[],\"exclude\":[]}}}'::jsonb" - } - }, - "indexes": {}, - "foreignKeys": { - "server_organizationId_organization_id_fk": { - "name": "server_organizationId_organization_id_fk", - "tableFrom": "server", - "tableTo": "organization", - "columnsFrom": [ - "organizationId" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "server_sshKeyId_ssh-key_sshKeyId_fk": { - "name": "server_sshKeyId_ssh-key_sshKeyId_fk", - "tableFrom": "server", - "tableTo": "ssh-key", - "columnsFrom": [ - "sshKeyId" - ], - "columnsTo": [ - "sshKeyId" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.preview_deployments": { - "name": "preview_deployments", - "schema": "", - "columns": { - "previewDeploymentId": { - "name": "previewDeploymentId", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "branch": { - "name": "branch", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestId": { - "name": "pullRequestId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestNumber": { - "name": "pullRequestNumber", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestURL": { - "name": "pullRequestURL", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestTitle": { - "name": "pullRequestTitle", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "pullRequestCommentId": { - "name": "pullRequestCommentId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "previewStatus": { - "name": "previewStatus", - "type": "applicationStatus", - "typeSchema": "public", - "primaryKey": false, - "notNull": true, - "default": "'idle'" - }, - "appName": { - "name": "appName", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "applicationId": { - "name": "applicationId", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "domainId": { - "name": "domainId", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "createdAt": { - "name": "createdAt", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expiresAt": { - "name": "expiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "preview_deployments_applicationId_application_applicationId_fk": { - "name": "preview_deployments_applicationId_application_applicationId_fk", - "tableFrom": "preview_deployments", - "tableTo": "application", - "columnsFrom": [ - "applicationId" - ], - "columnsTo": [ - "applicationId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "preview_deployments_domainId_domain_domainId_fk": { - "name": "preview_deployments_domainId_domain_domainId_fk", - "tableFrom": "preview_deployments", - "tableTo": "domain", - "columnsFrom": [ - "domainId" - ], - "columnsTo": [ - "domainId" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "preview_deployments_appName_unique": { - "name": "preview_deployments_appName_unique", - "nullsNotDistinct": false, - "columns": [ - "appName" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "is2FAEnabled": { - "name": "is2FAEnabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "resetPasswordToken": { - "name": "resetPasswordToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "resetPasswordExpiresAt": { - "name": "resetPasswordExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationToken": { - "name": "confirmationToken", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "confirmationExpiresAt": { - "name": "confirmationExpiresAt", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "account_user_id_user_temp_id_fk": { - "name": "account_user_id_user_temp_id_fk", - "tableFrom": "account", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.apikey": { - "name": "apikey", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "start": { - "name": "start", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "prefix": { - "name": "prefix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "key": { - "name": "key", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "refill_interval": { - "name": "refill_interval", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "refill_amount": { - "name": "refill_amount", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "last_refill_at": { - "name": "last_refill_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "enabled": { - "name": "enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "rate_limit_enabled": { - "name": "rate_limit_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": false - }, - "rate_limit_time_window": { - "name": "rate_limit_time_window", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "rate_limit_max": { - "name": "rate_limit_max", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "request_count": { - "name": "request_count", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "remaining": { - "name": "remaining", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "last_request": { - "name": "last_request", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "permissions": { - "name": "permissions", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "apikey_user_id_user_temp_id_fk": { - "name": "apikey_user_id_user_temp_id_fk", - "tableFrom": "apikey", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "inviter_id": { - "name": "inviter_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_temp_id_fk": { - "name": "invitation_inviter_id_user_temp_id_fk", - "tableFrom": "invitation", - "tableTo": "user_temp", - "columnsFrom": [ - "inviter_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "team_id": { - "name": "team_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "canCreateProjects": { - "name": "canCreateProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToSSHKeys": { - "name": "canAccessToSSHKeys", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canCreateServices": { - "name": "canCreateServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteProjects": { - "name": "canDeleteProjects", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canDeleteServices": { - "name": "canDeleteServices", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToDocker": { - "name": "canAccessToDocker", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToAPI": { - "name": "canAccessToAPI", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToGitProviders": { - "name": "canAccessToGitProviders", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "canAccessToTraefikFiles": { - "name": "canAccessToTraefikFiles", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "accesedProjects": { - "name": "accesedProjects", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - }, - "accesedServices": { - "name": "accesedServices", - "type": "text[]", - "primaryKey": false, - "notNull": true, - "default": "ARRAY[]::text[]" - } - }, - "indexes": {}, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": [ - "organization_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_temp_id_fk": { - "name": "member_user_id_user_temp_id_fk", - "tableFrom": "member", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "organization_owner_id_user_temp_id_fk": { - "name": "organization_owner_id_user_temp_id_fk", - "tableFrom": "organization", - "tableTo": "user_temp", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": [ - "slug" - ] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.two_factor": { - "name": "two_factor", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "secret": { - "name": "secret", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "backup_codes": { - "name": "backup_codes", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "two_factor_user_id_user_temp_id_fk": { - "name": "two_factor_user_id_user_temp_id_fk", - "tableFrom": "two_factor", - "tableTo": "user_temp", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.buildType": { - "name": "buildType", - "schema": "public", - "values": [ - "dockerfile", - "heroku_buildpacks", - "paketo_buildpacks", - "nixpacks", - "static" - ] - }, - "public.sourceType": { - "name": "sourceType", - "schema": "public", - "values": [ - "docker", - "git", - "github", - "gitlab", - "bitbucket", - "drop" - ] - }, - "public.domainType": { - "name": "domainType", - "schema": "public", - "values": [ - "compose", - "application", - "preview" - ] - }, - "public.databaseType": { - "name": "databaseType", - "schema": "public", - "values": [ - "postgres", - "mariadb", - "mysql", - "mongo" - ] - }, - "public.deploymentStatus": { - "name": "deploymentStatus", - "schema": "public", - "values": [ - "running", - "done", - "error" - ] - }, - "public.mountType": { - "name": "mountType", - "schema": "public", - "values": [ - "bind", - "volume", - "file" - ] - }, - "public.serviceType": { - "name": "serviceType", - "schema": "public", - "values": [ - "application", - "postgres", - "mysql", - "mariadb", - "mongo", - "redis", - "compose" - ] - }, - "public.protocolType": { - "name": "protocolType", - "schema": "public", - "values": [ - "tcp", - "udp" - ] - }, - "public.applicationStatus": { - "name": "applicationStatus", - "schema": "public", - "values": [ - "idle", - "running", - "done", - "error" - ] - }, - "public.certificateType": { - "name": "certificateType", - "schema": "public", - "values": [ - "letsencrypt", - "none" - ] - }, - "public.composeType": { - "name": "composeType", - "schema": "public", - "values": [ - "docker-compose", - "stack" - ] - }, - "public.sourceTypeCompose": { - "name": "sourceTypeCompose", - "schema": "public", - "values": [ - "git", - "github", - "gitlab", - "bitbucket", - "raw" - ] - }, - "public.RegistryType": { - "name": "RegistryType", - "schema": "public", - "values": [ - "selfHosted", - "cloud" - ] - }, - "public.notificationType": { - "name": "notificationType", - "schema": "public", - "values": [ - "slack", - "telegram", - "discord", - "email", - "gotify" - ] - }, - "public.gitProviderType": { - "name": "gitProviderType", - "schema": "public", - "values": [ - "github", - "gitlab", - "bitbucket" - ] - }, - "public.serverStatus": { - "name": "serverStatus", - "schema": "public", - "values": [ - "active", - "inactive" - ] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/apps/dokploy/drizzle/meta/_journal.json b/apps/dokploy/drizzle/meta/_journal.json index b6009700f..7943d6939 100644 --- a/apps/dokploy/drizzle/meta/_journal.json +++ b/apps/dokploy/drizzle/meta/_journal.json @@ -404,78 +404,8 @@ { "idx": 57, "version": "6", - "when": 1737306063563, - "tag": "0057_tricky_living_tribunal", - "breakpoints": true - }, - { - "idx": 58, - "version": "6", - "when": 1737612903012, - "tag": "0058_brown_sharon_carter", - "breakpoints": true - }, - { - "idx": 59, - "version": "6", - "when": 1737615160768, - "tag": "0059_striped_bill_hollister", - "breakpoints": true - }, - { - "idx": 60, - "version": "6", - "when": 1737929896838, - "tag": "0060_disable-aggressive-cache", - "breakpoints": true - }, - { - "idx": 61, - "version": "7", - "when": 1738481304953, - "tag": "0061_many_molten_man", - "breakpoints": true - }, - { - "idx": 62, - "version": "7", - "when": 1738482795112, - "tag": "0062_slippery_white_tiger", - "breakpoints": true - }, - { - "idx": 63, - "version": "7", - "when": 1738522845992, - "tag": "0063_panoramic_dreadnoughts", - "breakpoints": true - }, - { - "idx": 64, - "version": "7", - "when": 1738564387043, - "tag": "0064_previous_agent_brand", - "breakpoints": true - }, - { - "idx": 65, - "version": "7", - "when": 1739087857244, - "tag": "0065_daily_zaladane", - "breakpoints": true - }, - { - "idx": 66, - "version": "7", - "when": 1739426913392, - "tag": "0066_yielding_echo", - "breakpoints": true - }, - { - "idx": 67, - "version": "7", - "when": 1740892043121, - "tag": "0067_condemned_sugar_man", + "when": 1737251708859, + "tag": "0057_damp_prism", "breakpoints": true } ] diff --git a/apps/dokploy/hooks/useLocalStorage.tsx b/apps/dokploy/hooks/useLocalStorage.tsx deleted file mode 100644 index e7462a1a2..000000000 --- a/apps/dokploy/hooks/useLocalStorage.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { useState } from "react"; - -export const useLocalStorage = (key: string, initialValue: boolean) => { - // State to store our value - // Pass initial state function to useState so logic is only executed once - const [storedValue, setStoredValue] = useState(() => { - try { - if (typeof window === "undefined") return initialValue; - const item = window.localStorage.getItem(key); - return item ? JSON.parse(item) : initialValue; - } catch (error) { - console.error(error); - return initialValue; - } - }); - - // Return a wrapped version of useState's setter function that persists the new value to localStorage - const setValue = (value: boolean | ((val: boolean) => boolean)) => { - try { - // Allow value to be a function so we have same API as useState - const valueToStore = - value instanceof Function ? value(storedValue) : value; - setStoredValue(valueToStore); - if (typeof window !== "undefined") { - window.localStorage.setItem(key, JSON.stringify(valueToStore)); - } - } catch (error) { - console.error(error); - } - }; - - return [storedValue, setValue] as const; -}; diff --git a/apps/dokploy/lib/auth-client.ts b/apps/dokploy/lib/auth-client.ts deleted file mode 100644 index f1088e73f..000000000 --- a/apps/dokploy/lib/auth-client.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { organizationClient } from "better-auth/client/plugins"; -import { twoFactorClient } from "better-auth/client/plugins"; -import { apiKeyClient } from "better-auth/client/plugins"; -import { createAuthClient } from "better-auth/react"; - -export const authClient = createAuthClient({ - // baseURL: "http://localhost:3000", // the base url of your auth server - plugins: [organizationClient(), twoFactorClient(), apiKeyClient()], -}); diff --git a/apps/dokploy/lib/languages.ts b/apps/dokploy/lib/languages.ts index a19c95893..f83b3de65 100644 --- a/apps/dokploy/lib/languages.ts +++ b/apps/dokploy/lib/languages.ts @@ -1,7 +1,6 @@ export const Languages = { english: { code: "en", name: "English" }, polish: { code: "pl", name: "Polski" }, - ukrainian: { code: "uk", name: "Українська" }, russian: { code: "ru", name: "Русский" }, french: { code: "fr", name: "Français" }, german: { code: "de", name: "Deutsch" }, @@ -18,7 +17,6 @@ export const Languages = { norwegian: { code: "no", name: "Norsk" }, azerbaijani: { code: "az", name: "Azərbaycan" }, indonesian: { code: "id", name: "Bahasa Indonesia" }, - malayalam: { code: "ml", name: "മലയാളം" }, }; export type Language = keyof typeof Languages; diff --git a/apps/dokploy/lib/utils.ts b/apps/dokploy/lib/utils.ts index b763e9ee9..c83f5e22f 100644 --- a/apps/dokploy/lib/utils.ts +++ b/apps/dokploy/lib/utils.ts @@ -12,18 +12,3 @@ export async function generateSHA256Hash(text: string) { const hashArray = Array.from(new Uint8Array(hashBuffer)); return hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); } - -export function formatTimestamp(timestamp: string | number) { - try { - // Si es un string ISO, lo parseamos directamente - if (typeof timestamp === "string" && timestamp.includes("T")) { - const date = new Date(timestamp); - if (!Number.isNaN(date.getTime())) { - return date.toLocaleString(); - } - } - return "Fecha inválida"; - } catch { - return "Fecha inválida"; - } -} diff --git a/apps/dokploy/migrate.ts b/apps/dokploy/migrate.ts deleted file mode 100644 index e1f52c9a3..000000000 --- a/apps/dokploy/migrate.ts +++ /dev/null @@ -1,149 +0,0 @@ -// import { drizzle } from "drizzle-orm/postgres-js"; -// import { nanoid } from "nanoid"; -// import postgres from "postgres"; -// import * as schema from "./server/db/schema"; - -// const connectionString = process.env.DATABASE_URL!; - -// const sql = postgres(connectionString, { max: 1 }); -// const db = drizzle(sql, { -// schema, -// }); - -// await db -// .transaction(async (db) => { -// const admins = await db.query.admins.findMany({ -// with: { -// auth: true, -// users: { -// with: { -// auth: true, -// }, -// }, -// }, -// }); -// for (const admin of admins) { -// const user = await db -// .insert(schema.users_temp) -// .values({ -// id: admin.adminId, -// email: admin.auth.email, -// token: admin.auth.token || "", -// emailVerified: true, -// updatedAt: new Date(), -// role: "admin", -// serverIp: admin.serverIp, -// image: admin.auth.image, -// certificateType: admin.certificateType, -// host: admin.host, -// letsEncryptEmail: admin.letsEncryptEmail, -// sshPrivateKey: admin.sshPrivateKey, -// enableDockerCleanup: admin.enableDockerCleanup, -// enableLogRotation: admin.enableLogRotation, -// enablePaidFeatures: admin.enablePaidFeatures, -// metricsConfig: admin.metricsConfig, -// cleanupCacheApplications: admin.cleanupCacheApplications, -// cleanupCacheOnPreviews: admin.cleanupCacheOnPreviews, -// cleanupCacheOnCompose: admin.cleanupCacheOnCompose, -// stripeCustomerId: admin.stripeCustomerId, -// stripeSubscriptionId: admin.stripeSubscriptionId, -// serversQuantity: admin.serversQuantity, -// }) -// .returning() -// .then((user) => user[0]); - -// await db.insert(schema.account).values({ -// providerId: "credential", -// userId: user?.id || "", -// password: admin.auth.password, -// is2FAEnabled: admin.auth.is2FAEnabled || false, -// createdAt: new Date(admin.auth.createdAt) || new Date(), -// updatedAt: new Date(admin.auth.createdAt) || new Date(), -// }); - -// const organization = await db -// .insert(schema.organization) -// .values({ -// name: "My Organization", -// slug: nanoid(), -// ownerId: user?.id || "", -// createdAt: new Date(admin.createdAt) || new Date(), -// }) -// .returning() -// .then((organization) => organization[0]); - -// for (const member of admin.users) { -// const userTemp = await db -// .insert(schema.users_temp) -// .values({ -// id: member.userId, -// email: member.auth.email, -// token: member.token || "", -// emailVerified: true, -// updatedAt: new Date(admin.createdAt) || new Date(), -// role: "user", -// image: member.auth.image, -// createdAt: admin.createdAt, -// canAccessToAPI: member.canAccessToAPI || false, -// canAccessToDocker: member.canAccessToDocker || false, -// canAccessToGitProviders: member.canAccessToGitProviders || false, -// canAccessToSSHKeys: member.canAccessToSSHKeys || false, -// canAccessToTraefikFiles: member.canAccessToTraefikFiles || false, -// canCreateProjects: member.canCreateProjects || false, -// canCreateServices: member.canCreateServices || false, -// canDeleteProjects: member.canDeleteProjects || false, -// canDeleteServices: member.canDeleteServices || false, -// accessedProjects: member.accessedProjects || [], -// accessedServices: member.accessedServices || [], -// }) -// .returning() -// .then((userTemp) => userTemp[0]); - -// await db.insert(schema.account).values({ -// providerId: "credential", -// userId: member?.userId || "", -// password: member.auth.password, -// is2FAEnabled: member.auth.is2FAEnabled || false, -// createdAt: new Date(member.auth.createdAt) || new Date(), -// updatedAt: new Date(member.auth.createdAt) || new Date(), -// }); - -// await db.insert(schema.member).values({ -// organizationId: organization?.id || "", -// userId: userTemp?.id || "", -// role: "admin", -// createdAt: new Date(member.createdAt) || new Date(), -// }); -// } -// } -// }) -// .then(() => { -// console.log("Migration finished"); -// }) -// .catch((error) => { -// console.error(error); -// }); - -// await db -// .transaction(async (db) => { -// const projects = await db.query.projects.findMany({ -// with: { -// user: { -// with: { -// organizations: true, -// }, -// }, -// }, -// }); -// for (const project of projects) { -// const _user = await db.update(schema.projects).set({ -// organizationId: project.user.organizations[0]?.id || "", -// }); -// } -// }) -// .then(() => { -// console.log("Migration finished"); -// }) -// .catch((error) => { -// console.error(error); -// }); diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json index 12ff30b82..27c0eb875 100644 --- a/apps/dokploy/package.json +++ b/apps/dokploy/package.json @@ -1,6 +1,6 @@ { "name": "dokploy", - "version": "v0.18.4", + "version": "v0.17.2", "private": true, "license": "Apache-2.0", "type": "module", @@ -16,7 +16,6 @@ "studio": "drizzle-kit studio --config ./server/db/drizzle.config.ts", "migration:generate": "drizzle-kit generate --config ./server/db/drizzle.config.ts", "migration:run": "tsx -r dotenv/config migration.ts", - "manual-migration:run": "tsx -r dotenv/config migrate.ts", "migration:up": "drizzle-kit up --config ./server/db/drizzle.config.ts", "migration:drop": "drizzle-kit drop --config ./server/db/drizzle.config.ts", "db:push": "drizzle-kit push --config ./server/db/drizzle.config.ts", @@ -37,19 +36,6 @@ }, "dependencies": { "@ai-sdk/openai": "^1.0.12", - "better-auth": "1.2.0", - "bl": "6.0.11", - "rotating-file-stream": "3.2.3", - "qrcode": "^1.5.3", - "otpauth": "^9.2.3", - "hi-base32": "^0.5.1", - "boxen": "^7.1.1", - "@octokit/auth-app": "^6.0.4", - "nodemailer": "6.9.14", - "@react-email/components": "^0.0.21", - "node-os-utils": "1.3.7", - "@lucia-auth/adapter-drizzle": "1.0.7", - "dockerode": "4.0.2", "@codemirror/lang-json": "^6.0.1", "@codemirror/lang-yaml": "^6.1.1", "@codemirror/language": "^6.10.1", @@ -90,7 +76,6 @@ "@uiw/react-codemirror": "^4.22.1", "@xterm/addon-attach": "0.10.0", "@xterm/xterm": "^5.4.0", - "@xterm/addon-clipboard": "0.1.0", "adm-zip": "^0.5.14", "ai": "^4.0.23", "bcrypt": "5.1.1", @@ -102,7 +87,7 @@ "copy-webpack-plugin": "^12.0.2", "date-fns": "3.6.0", "dotenv": "16.4.5", - "drizzle-orm": "^0.39.1", + "drizzle-orm": "^0.30.8", "drizzle-zod": "0.5.1", "fancy-ansi": "^0.1.3", "i18next": "^23.16.4", @@ -123,7 +108,6 @@ "public-ip": "6.0.2", "react": "18.2.0", "react-confetti-explosion": "2.1.2", - "react-day-picker": "8.10.1", "react-dom": "18.2.0", "react-hook-form": "^7.52.1", "react-i18next": "^15.1.0", @@ -146,9 +130,7 @@ "@faker-js/faker": "^8.4.1" }, "devDependencies": { - "@types/qrcode": "^1.5.5", - "@types/nodemailer": "^6.4.15", - "@types/node-os-utils": "1.3.4", + "@tailwindcss/typography": "^0.5.15", "@types/adm-zip": "^0.5.5", "@types/bcrypt": "5.0.2", "@types/js-cookie": "^3.0.6", @@ -162,7 +144,7 @@ "@types/swagger-ui-react": "^4.18.3", "@types/ws": "8.5.10", "autoprefixer": "10.4.12", - "drizzle-kit": "^0.30.4", + "drizzle-kit": "^0.21.1", "esbuild": "0.20.2", "lint-staged": "^15.2.7", "memfs": "^4.11.0", diff --git a/apps/dokploy/pages/_error.tsx b/apps/dokploy/pages/_error.tsx index d28e2cb00..958e17407 100644 --- a/apps/dokploy/pages/_error.tsx +++ b/apps/dokploy/pages/_error.tsx @@ -90,7 +90,7 @@ export default function Custom404({ statusCode, error }: Props) { } // @ts-ignore -Error.getInitialProps = ({ res, err }: NextPageContext) => { +Error.getInitialProps = ({ res, err, ...rest }: NextPageContext) => { const statusCode = res ? res.statusCode : err ? err.statusCode : 404; return { statusCode, error: err }; }; diff --git a/apps/dokploy/pages/accept-invitation/[accept-invitation].tsx b/apps/dokploy/pages/accept-invitation/[accept-invitation].tsx deleted file mode 100644 index bc60d970f..000000000 --- a/apps/dokploy/pages/accept-invitation/[accept-invitation].tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Button } from "@/components/ui/button"; -import { authClient } from "@/lib/auth-client"; -import { useRouter } from "next/router"; - -export const AcceptInvitation = () => { - const { query } = useRouter(); - - const invitationId = query["accept-invitation"]; - - // const { data: organization } = api.organization.getById.useQuery({ - // id: id as string - // }) - - return ( -
- -
- ); -}; - -export default AcceptInvitation; diff --git a/apps/dokploy/pages/api/[...trpc].ts b/apps/dokploy/pages/api/[...trpc].ts index 85ddbb286..df85440b9 100644 --- a/apps/dokploy/pages/api/[...trpc].ts +++ b/apps/dokploy/pages/api/[...trpc].ts @@ -1,11 +1,17 @@ import { appRouter } from "@/server/api/root"; import { createTRPCContext } from "@/server/api/trpc"; -import { validateRequest } from "@dokploy/server"; +import { validateBearerToken, validateRequest } from "@dokploy/server"; import { createOpenApiNextHandler } from "@dokploy/trpc-openapi"; import type { NextApiRequest, NextApiResponse } from "next"; const handler = async (req: NextApiRequest, res: NextApiResponse) => { - const { session, user } = await validateRequest(req); + let { session, user } = await validateBearerToken(req); + + if (!session) { + const cookieResult = await validateRequest(req, res); + session = cookieResult.session; + user = cookieResult.user; + } if (!user || !session) { res.status(401).json({ message: "Unauthorized" }); diff --git a/apps/dokploy/pages/api/auth/[...all].ts b/apps/dokploy/pages/api/auth/[...all].ts deleted file mode 100644 index 48aa03706..000000000 --- a/apps/dokploy/pages/api/auth/[...all].ts +++ /dev/null @@ -1,7 +0,0 @@ -import { auth } from "@dokploy/server/index"; -import { toNodeHandler } from "better-auth/node"; - -// Disallow body parsing, we will parse it manually -export const config = { api: { bodyParser: false } }; - -export default toNodeHandler(auth.handler); diff --git a/apps/dokploy/pages/api/deploy/github.ts b/apps/dokploy/pages/api/deploy/github.ts index 5e64d8b26..2ee173940 100644 --- a/apps/dokploy/pages/api/deploy/github.ts +++ b/apps/dokploy/pages/api/deploy/github.ts @@ -3,7 +3,9 @@ import { applications, compose, github } from "@/server/db/schema"; import type { DeploymentJob } from "@/server/queues/queue-types"; import { myQueue } from "@/server/queues/queueSetup"; import { deploy } from "@/server/utils/deploy"; +import { generateRandomDomain } from "@/templates/utils"; import { + type Domain, IS_CLOUD, createPreviewDeployment, findPreviewDeploymentByApplicationId, @@ -119,7 +121,7 @@ export default async function handler( if (IS_CLOUD && app.serverId) { jobData.serverId = app.serverId; await deploy(jobData); - continue; + return true; } await myQueue.add( "deployments", @@ -154,7 +156,7 @@ export default async function handler( if (IS_CLOUD && composeApp.serverId) { jobData.serverId = composeApp.serverId; await deploy(jobData); - continue; + return true; } await myQueue.add( @@ -180,9 +182,8 @@ export default async function handler( } } else if (req.headers["x-github-event"] === "pull_request") { const prId = githubBody?.pull_request?.id; - const action = githubBody?.action; - if (action === "closed") { + if (githubBody?.action === "closed") { const previewDeploymentResult = await findPreviewDeploymentsByPullRequestId(prId); @@ -200,86 +201,79 @@ export default async function handler( res.status(200).json({ message: "Preview Deployment Closed" }); return; } - // opened or synchronize or reopened - if ( - action === "opened" || - action === "synchronize" || - action === "reopened" - ) { - const repository = githubBody?.repository?.name; - const deploymentHash = githubBody?.pull_request?.head?.sha; - const branch = githubBody?.pull_request?.base?.ref; - const owner = githubBody?.repository?.owner?.login; + const repository = githubBody?.repository?.name; + const deploymentHash = githubBody?.pull_request?.head?.sha; + const branch = githubBody?.pull_request?.base?.ref; + const owner = githubBody?.repository?.owner?.login; - const apps = await db.query.applications.findMany({ - where: and( - eq(applications.sourceType, "github"), - eq(applications.repository, repository), - eq(applications.branch, branch), - eq(applications.isPreviewDeploymentsActive, true), - eq(applications.owner, owner), - ), - with: { - previewDeployments: true, - }, - }); + const apps = await db.query.applications.findMany({ + where: and( + eq(applications.sourceType, "github"), + eq(applications.repository, repository), + eq(applications.branch, branch), + eq(applications.isPreviewDeploymentsActive, true), + eq(applications.owner, owner), + ), + with: { + previewDeployments: true, + }, + }); - const prBranch = githubBody?.pull_request?.head?.ref; + const prBranch = githubBody?.pull_request?.head?.ref; - const prNumber = githubBody?.pull_request?.number; - const prTitle = githubBody?.pull_request?.title; - const prURL = githubBody?.pull_request?.html_url; + const prNumber = githubBody?.pull_request?.number; + const prTitle = githubBody?.pull_request?.title; + const prURL = githubBody?.pull_request?.html_url; - for (const app of apps) { - const previewLimit = app?.previewLimit || 0; - if (app?.previewDeployments?.length > previewLimit) { - continue; - } - const previewDeploymentResult = - await findPreviewDeploymentByApplicationId(app.applicationId, prId); - - let previewDeploymentId = - previewDeploymentResult?.previewDeploymentId || ""; - - if (!previewDeploymentResult) { - const previewDeployment = await createPreviewDeployment({ - applicationId: app.applicationId as string, - branch: prBranch, - pullRequestId: prId, - pullRequestNumber: prNumber, - pullRequestTitle: prTitle, - pullRequestURL: prURL, - }); - previewDeploymentId = previewDeployment.previewDeploymentId; - } - - const jobData: DeploymentJob = { - applicationId: app.applicationId as string, - titleLog: "Preview Deployment", - descriptionLog: `Hash: ${deploymentHash}`, - type: "deploy", - applicationType: "application-preview", - server: !!app.serverId, - previewDeploymentId, - }; - - if (IS_CLOUD && app.serverId) { - jobData.serverId = app.serverId; - await deploy(jobData); - continue; - } - await myQueue.add( - "deployments", - { ...jobData }, - { - removeOnComplete: true, - removeOnFail: true, - }, - ); + for (const app of apps) { + const previewLimit = app?.previewLimit || 0; + if (app?.previewDeployments?.length > previewLimit) { + continue; } - return res.status(200).json({ message: "Apps Deployed" }); + const previewDeploymentResult = + await findPreviewDeploymentByApplicationId(app.applicationId, prId); + + let previewDeploymentId = + previewDeploymentResult?.previewDeploymentId || ""; + + if (!previewDeploymentResult) { + const previewDeployment = await createPreviewDeployment({ + applicationId: app.applicationId as string, + branch: prBranch, + pullRequestId: prId, + pullRequestNumber: prNumber, + pullRequestTitle: prTitle, + pullRequestURL: prURL, + }); + previewDeploymentId = previewDeployment.previewDeploymentId; + } + + const jobData: DeploymentJob = { + applicationId: app.applicationId as string, + titleLog: "Preview Deployment", + descriptionLog: `Hash: ${deploymentHash}`, + type: "deploy", + applicationType: "application-preview", + server: !!app.serverId, + previewDeploymentId, + }; + + if (IS_CLOUD && app.serverId) { + jobData.serverId = app.serverId; + await deploy(jobData); + return true; + } + await myQueue.add( + "deployments", + { ...jobData }, + { + removeOnComplete: true, + removeOnFail: true, + }, + ); } + return res.status(200).json({ message: "Apps Deployed" }); } return res.status(400).json({ message: "No Actions matched" }); diff --git a/apps/dokploy/pages/api/health.ts b/apps/dokploy/pages/api/health.ts index 57875a192..9dc8101e5 100644 --- a/apps/dokploy/pages/api/health.ts +++ b/apps/dokploy/pages/api/health.ts @@ -1,7 +1,7 @@ import type { NextApiRequest, NextApiResponse } from "next"; export default async function handler( - _req: NextApiRequest, + req: NextApiRequest, res: NextApiResponse, ) { return res.status(200).json({ ok: true }); diff --git a/apps/dokploy/pages/api/providers/github/setup.ts b/apps/dokploy/pages/api/providers/github/setup.ts index 327122509..a1ce98d48 100644 --- a/apps/dokploy/pages/api/providers/github/setup.ts +++ b/apps/dokploy/pages/api/providers/github/setup.ts @@ -1,6 +1,11 @@ import { db } from "@/server/db"; import { github } from "@/server/db/schema"; -import { createGithub } from "@dokploy/server"; +import { + createGithub, + findAdminByAuthId, + findAuthById, + findUserByAuthId, +} from "@dokploy/server"; import { eq } from "drizzle-orm"; import type { NextApiRequest, NextApiResponse } from "next"; import { Octokit } from "octokit"; @@ -16,13 +21,14 @@ export default async function handler( req: NextApiRequest, res: NextApiResponse, ) { - const { code, state, installation_id }: Query = req.query as Query; + const { code, state, installation_id, setup_action }: Query = + req.query as Query; if (!code) { return res.status(400).json({ error: "Missing code parameter" }); } const [action, value] = state?.split(":"); - // Value could be the organizationId or the githubProviderId + // Value could be the authId or the githubProviderId if (action === "gh_init") { const octokit = new Octokit({}); @@ -33,6 +39,17 @@ export default async function handler( }, ); + const auth = await findAuthById(value as string); + + let adminId = ""; + if (auth.rol === "admin") { + const admin = await findAdminByAuthId(auth.id); + adminId = admin.adminId; + } else { + const user = await findUserByAuthId(auth.id); + adminId = user.adminId; + } + await createGithub( { name: data.name, @@ -43,7 +60,7 @@ export default async function handler( githubWebhookSecret: data.webhook_secret, githubPrivateKey: data.pem, }, - value as string, + adminId, ); } else if (action === "gh_setup") { await db diff --git a/apps/dokploy/pages/api/stripe/webhook.ts b/apps/dokploy/pages/api/stripe/webhook.ts index 9e8c9da5e..d4599f784 100644 --- a/apps/dokploy/pages/api/stripe/webhook.ts +++ b/apps/dokploy/pages/api/stripe/webhook.ts @@ -1,7 +1,7 @@ import { buffer } from "node:stream/consumers"; import { db } from "@/server/db"; -import { organization, server, users_temp } from "@/server/db/schema"; -import { type Server, findUserById } from "@dokploy/server"; +import { admins, server } from "@/server/db/schema"; +import { findAdminById } from "@dokploy/server"; import { asc, eq } from "drizzle-orm"; import type { NextApiRequest, NextApiResponse } from "next"; import Stripe from "stripe"; @@ -64,35 +64,33 @@ export default async function handler( session.subscription as string, ); await db - .update(users_temp) + .update(admins) .set({ stripeCustomerId: session.customer as string, stripeSubscriptionId: session.subscription as string, serversQuantity: subscription?.items?.data?.[0]?.quantity ?? 0, }) - .where(eq(users_temp.id, adminId)) + .where(eq(admins.adminId, adminId)) .returning(); - const admin = await findUserById(adminId); + const admin = await findAdminById(adminId); if (!admin) { return res.status(400).send("Webhook Error: Admin not found"); } const newServersQuantity = admin.serversQuantity; - await updateServersBasedOnQuantity(admin.id, newServersQuantity); + await updateServersBasedOnQuantity(admin.adminId, newServersQuantity); break; } case "customer.subscription.created": { const newSubscription = event.data.object as Stripe.Subscription; await db - .update(users_temp) + .update(admins) .set({ stripeSubscriptionId: newSubscription.id, stripeCustomerId: newSubscription.customer as string, }) - .where( - eq(users_temp.stripeCustomerId, newSubscription.customer as string), - ) + .where(eq(admins.stripeCustomerId, newSubscription.customer as string)) .returning(); break; @@ -102,16 +100,14 @@ export default async function handler( const newSubscription = event.data.object as Stripe.Subscription; await db - .update(users_temp) + .update(admins) .set({ stripeSubscriptionId: null, serversQuantity: 0, }) - .where( - eq(users_temp.stripeCustomerId, newSubscription.customer as string), - ); + .where(eq(admins.stripeCustomerId, newSubscription.customer as string)); - const admin = await findUserByStripeCustomerId( + const admin = await findAdminByStripeCustomerId( newSubscription.customer as string, ); @@ -119,13 +115,13 @@ export default async function handler( return res.status(400).send("Webhook Error: Admin not found"); } - await disableServers(admin.id); + await disableServers(admin.adminId); break; } case "customer.subscription.updated": { const newSubscription = event.data.object as Stripe.Subscription; - const admin = await findUserByStripeCustomerId( + const admin = await findAdminByStripeCustomerId( newSubscription.customer as string, ); @@ -135,23 +131,23 @@ export default async function handler( if (newSubscription.status === "active") { await db - .update(users_temp) + .update(admins) .set({ serversQuantity: newSubscription?.items?.data?.[0]?.quantity ?? 0, }) .where( - eq(users_temp.stripeCustomerId, newSubscription.customer as string), + eq(admins.stripeCustomerId, newSubscription.customer as string), ); const newServersQuantity = admin.serversQuantity; - await updateServersBasedOnQuantity(admin.id, newServersQuantity); + await updateServersBasedOnQuantity(admin.adminId, newServersQuantity); } else { - await disableServers(admin.id); + await disableServers(admin.adminId); await db - .update(users_temp) + .update(admins) .set({ serversQuantity: 0 }) .where( - eq(users_temp.stripeCustomerId, newSubscription.customer as string), + eq(admins.stripeCustomerId, newSubscription.customer as string), ); } @@ -172,13 +168,13 @@ export default async function handler( } await db - .update(users_temp) + .update(admins) .set({ serversQuantity: suscription?.items?.data?.[0]?.quantity ?? 0, }) - .where(eq(users_temp.stripeCustomerId, suscription.customer as string)); + .where(eq(admins.stripeCustomerId, suscription.customer as string)); - const admin = await findUserByStripeCustomerId( + const admin = await findAdminByStripeCustomerId( suscription.customer as string, ); @@ -186,7 +182,7 @@ export default async function handler( return res.status(400).send("Webhook Error: Admin not found"); } const newServersQuantity = admin.serversQuantity; - await updateServersBasedOnQuantity(admin.id, newServersQuantity); + await updateServersBasedOnQuantity(admin.adminId, newServersQuantity); break; } case "invoice.payment_failed": { @@ -197,7 +193,7 @@ export default async function handler( ); if (subscription.status !== "active") { - const admin = await findUserByStripeCustomerId( + const admin = await findAdminByStripeCustomerId( newInvoice.customer as string, ); @@ -205,15 +201,13 @@ export default async function handler( return res.status(400).send("Webhook Error: Admin not found"); } await db - .update(users_temp) + .update(admins) .set({ serversQuantity: 0, }) - .where( - eq(users_temp.stripeCustomerId, newInvoice.customer as string), - ); + .where(eq(admins.stripeCustomerId, newInvoice.customer as string)); - await disableServers(admin.id); + await disableServers(admin.adminId); } break; @@ -222,20 +216,20 @@ export default async function handler( case "customer.deleted": { const customer = event.data.object as Stripe.Customer; - const admin = await findUserByStripeCustomerId(customer.id); + const admin = await findAdminByStripeCustomerId(customer.id); if (!admin) { return res.status(400).send("Webhook Error: Admin not found"); } - await disableServers(admin.id); + await disableServers(admin.adminId); await db - .update(users_temp) + .update(admins) .set({ stripeCustomerId: null, stripeSubscriptionId: null, serversQuantity: 0, }) - .where(eq(users_temp.stripeCustomerId, customer.id)); + .where(eq(admins.stripeCustomerId, customer.id)); break; } @@ -246,26 +240,20 @@ export default async function handler( return res.status(200).json({ received: true }); } -const disableServers = async (userId: string) => { - const organizations = await db.query.organization.findMany({ - where: eq(organization.ownerId, userId), - }); - - for (const org of organizations) { - await db - .update(server) - .set({ - serverStatus: "inactive", - }) - .where(eq(server.organizationId, org.id)); - } +const disableServers = async (adminId: string) => { + await db + .update(server) + .set({ + serverStatus: "inactive", + }) + .where(eq(server.adminId, adminId)); }; -const findUserByStripeCustomerId = async (stripeCustomerId: string) => { - const user = db.query.users_temp.findFirst({ - where: eq(users_temp.stripeCustomerId, stripeCustomerId), +const findAdminByStripeCustomerId = async (stripeCustomerId: string) => { + const admin = db.query.admins.findFirst({ + where: eq(admins.stripeCustomerId, stripeCustomerId), }); - return user; + return admin; }; const activateServer = async (serverId: string) => { @@ -282,27 +270,19 @@ const deactivateServer = async (serverId: string) => { .where(eq(server.serverId, serverId)); }; -export const findServersByUserIdSorted = async (userId: string) => { - const organizations = await db.query.organization.findMany({ - where: eq(organization.ownerId, userId), +export const findServersByAdminIdSorted = async (adminId: string) => { + const servers = await db.query.server.findMany({ + where: eq(server.adminId, adminId), + orderBy: asc(server.createdAt), }); - const servers: Server[] = []; - for (const org of organizations) { - const serversByOrg = await db.query.server.findMany({ - where: eq(server.organizationId, org.id), - orderBy: asc(server.createdAt), - }); - servers.push(...serversByOrg); - } - return servers; }; export const updateServersBasedOnQuantity = async ( - userId: string, + adminId: string, newServersQuantity: number, ) => { - const servers = await findServersByUserIdSorted(userId); + const servers = await findServersByAdminIdSorted(adminId); if (servers.length > newServersQuantity) { for (const [index, server] of servers.entries()) { diff --git a/apps/dokploy/pages/confirm-email.tsx b/apps/dokploy/pages/confirm-email.tsx new file mode 100644 index 000000000..2910a2677 --- /dev/null +++ b/apps/dokploy/pages/confirm-email.tsx @@ -0,0 +1,96 @@ +import { OnboardingLayout } from "@/components/layouts/onboarding-layout"; +import { Logo } from "@/components/shared/logo"; +import { CardDescription, CardTitle } from "@/components/ui/card"; +import { db } from "@/server/db"; +import { auth } from "@/server/db/schema"; +import { IS_CLOUD, updateAuthById } from "@dokploy/server"; +import { isBefore } from "date-fns"; +import { eq } from "drizzle-orm"; +import type { GetServerSidePropsContext } from "next"; +import Link from "next/link"; +import type { ReactElement } from "react"; + +export default function Home() { + return ( +
+
+ + + Dokploy + + Email Confirmed + + Congratulations, your email is confirmed. + +
+ + Click here to login + +
+
+
+ ); +} + +Home.getLayout = (page: ReactElement) => { + return {page}; +}; +export async function getServerSideProps(context: GetServerSidePropsContext) { + if (!IS_CLOUD) { + return { + redirect: { + permanent: true, + destination: "/", + }, + }; + } + const { token } = context.query; + + if (typeof token !== "string") { + return { + redirect: { + permanent: true, + destination: "/", + }, + }; + } + + const authR = await db.query.auth.findFirst({ + where: eq(auth.confirmationToken, token), + }); + + if ( + !authR || + authR?.confirmationToken === null || + authR?.confirmationExpiresAt === null + ) { + return { + redirect: { + permanent: true, + destination: "/", + }, + }; + } + + const isExpired = isBefore(new Date(authR.confirmationExpiresAt), new Date()); + + if (isExpired) { + return { + redirect: { + permanent: true, + destination: "/", + }, + }; + } + + await updateAuthById(authR.id, { + confirmationToken: null, + confirmationExpiresAt: null, + }); + + return { + props: { + token: authR.confirmationToken, + }, + }; +} diff --git a/apps/dokploy/pages/dashboard/docker.tsx b/apps/dokploy/pages/dashboard/docker.tsx index e01a763be..96387c07d 100644 --- a/apps/dokploy/pages/dashboard/docker.tsx +++ b/apps/dokploy/pages/dashboard/docker.tsx @@ -1,11 +1,10 @@ import { ShowContainers } from "@/components/dashboard/docker/show/show-containers"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; -import { IS_CLOUD } from "@dokploy/server/constants"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { IS_CLOUD, validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Dashboard = () => { @@ -28,7 +27,7 @@ export async function getServerSideProps( }, }; } - const { user, session } = await validateRequest(ctx.req); + const { user, session } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { @@ -45,20 +44,21 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); try { await helpers.project.all.prefetch(); + const auth = await helpers.auth.get.fetch(); - if (user.role === "member") { - const userR = await helpers.user.one.fetch({ - userId: user.id, + if (auth.rol === "user") { + const user = await helpers.user.byAuthId.fetch({ + authId: auth.id, }); - if (!userR?.canAccessToDocker) { + if (!user.canAccessToDocker) { return { redirect: { permanent: true, @@ -72,7 +72,7 @@ export async function getServerSideProps( trpcState: helpers.dehydrate(), }, }; - } catch (_error) { + } catch (error) { return { props: {}, }; diff --git a/apps/dokploy/pages/dashboard/monitoring.tsx b/apps/dokploy/pages/dashboard/monitoring.tsx index 4272c4536..7cdfcd4b0 100644 --- a/apps/dokploy/pages/dashboard/monitoring.tsx +++ b/apps/dokploy/pages/dashboard/monitoring.tsx @@ -1,86 +1,11 @@ -import { ContainerFreeMonitoring } from "@/components/dashboard/monitoring/free/container/show-free-container-monitoring"; -import { ShowPaidMonitoring } from "@/components/dashboard/monitoring/paid/servers/show-paid-monitoring"; +import { ShowMonitoring } from "@/components/dashboard/monitoring/web-server/show"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; -import { Card } from "@/components/ui/card"; -import { useLocalStorage } from "@/hooks/useLocalStorage"; -import { api } from "@/utils/api"; -import { IS_CLOUD } from "@dokploy/server/constants"; -import { validateRequest } from "@dokploy/server/lib/auth"; -import { Loader2 } from "lucide-react"; +import { IS_CLOUD, validateRequest } from "@dokploy/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; - -const BASE_URL = "http://localhost:3001/metrics"; - -const DEFAULT_TOKEN = "metrics"; +import React, { type ReactElement } from "react"; const Dashboard = () => { - const [toggleMonitoring, _setToggleMonitoring] = useLocalStorage( - "monitoring-enabled", - false, - ); - - const { data: monitoring, isLoading } = api.user.getMetricsToken.useQuery(); - return ( -
- {/* - You are watching the Free plan.{" "} - - Upgrade - {" "} - to get more features. - */} - {isLoading ? ( - -
- Loading... - -
-
- ) : ( - <> - {/* {monitoring?.enabledFeatures && ( -
- - -
- )} */} - {toggleMonitoring ? ( - -
- -
-
- ) : ( - -
- -
-
- )} - - )} -
- ); + return ; }; export default Dashboard; @@ -99,7 +24,7 @@ export async function getServerSideProps( }, }; } - const { user } = await validateRequest(ctx.req); + const { user } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { diff --git a/apps/dokploy/pages/dashboard/project/[projectId].tsx b/apps/dokploy/pages/dashboard/project/[projectId].tsx index 605fe6e52..7134c14d5 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId].tsx @@ -13,7 +13,6 @@ import { import { ProjectLayout } from "@/components/layouts/project-layout"; import { BreadcrumbSidebar } from "@/components/shared/breadcrumb-sidebar"; import { DateTooltip } from "@/components/shared/date-tooltip"; -import { DialogAction } from "@/components/shared/dialog-action"; import { StatusTooltip } from "@/components/shared/status-tooltip"; import { Button } from "@/components/ui/button"; @@ -26,7 +25,6 @@ import { CardHeader, CardTitle, } from "@/components/ui/card"; -import { Checkbox } from "@/components/ui/checkbox"; import { Command, CommandEmpty, @@ -51,34 +49,27 @@ import { cn } from "@/lib/utils"; import { appRouter } from "@/server/api/root"; import { api } from "@/utils/api"; import type { findProjectById } from "@dokploy/server"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import { - Ban, - Check, - CheckCircle2, - ChevronsUpDown, CircuitBoard, FolderInput, GlobeIcon, Loader2, PlusIcon, Search, - X, } from "lucide-react"; +import { Check, ChevronsUpDown, X } from "lucide-react"; import type { GetServerSidePropsContext, InferGetServerSidePropsType, } from "next"; import Head from "next/head"; import { useRouter } from "next/router"; -import { type ReactElement, useMemo, useState } from "react"; -import { toast } from "sonner"; +import React, { useMemo, useState, type ReactElement } from "react"; import superjson from "superjson"; export type Services = { - appName: string; - serverId?: string | null; name: string; type: | "mariadb" @@ -99,86 +90,72 @@ type Project = Awaited>; export const extractServices = (data: Project | undefined) => { const applications: Services[] = data?.applications.map((item) => ({ - appName: item.appName, name: item.name, type: "application", id: item.applicationId, createdAt: item.createdAt, status: item.applicationStatus, description: item.description, - serverId: item.serverId, })) || []; const mariadb: Services[] = data?.mariadb.map((item) => ({ - appName: item.appName, name: item.name, type: "mariadb", id: item.mariadbId, createdAt: item.createdAt, status: item.applicationStatus, description: item.description, - serverId: item.serverId, })) || []; const postgres: Services[] = data?.postgres.map((item) => ({ - appName: item.appName, name: item.name, type: "postgres", id: item.postgresId, createdAt: item.createdAt, status: item.applicationStatus, description: item.description, - serverId: item.serverId, })) || []; const mongo: Services[] = data?.mongo.map((item) => ({ - appName: item.appName, name: item.name, type: "mongo", id: item.mongoId, createdAt: item.createdAt, status: item.applicationStatus, description: item.description, - serverId: item.serverId, })) || []; const redis: Services[] = data?.redis.map((item) => ({ - appName: item.appName, name: item.name, type: "redis", id: item.redisId, createdAt: item.createdAt, status: item.applicationStatus, description: item.description, - serverId: item.serverId, })) || []; const mysql: Services[] = data?.mysql.map((item) => ({ - appName: item.appName, name: item.name, type: "mysql", id: item.mysqlId, createdAt: item.createdAt, status: item.applicationStatus, description: item.description, - serverId: item.serverId, })) || []; const compose: Services[] = data?.compose.map((item) => ({ - appName: item.appName, name: item.name, type: "compose", id: item.composeId, createdAt: item.createdAt, status: item.composeStatus, description: item.description, - serverId: item.serverId, })) || []; applications.push( @@ -200,11 +177,17 @@ export const extractServices = (data: Project | undefined) => { const Project = ( props: InferGetServerSidePropsType, ) => { - const [isBulkActionLoading, setIsBulkActionLoading] = useState(false); const { projectId } = props; - const { data: auth } = api.user.get.useQuery(); - - const { data, isLoading, refetch } = api.project.one.useQuery({ projectId }); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); + const { data, isLoading } = api.project.one.useQuery({ projectId }); const router = useRouter(); const emptyServices = @@ -231,70 +214,6 @@ const Project = ( const [selectedTypes, setSelectedTypes] = useState([]); const [openCombobox, setOpenCombobox] = useState(false); - const [selectedServices, setSelectedServices] = useState([]); - const [isDropdownOpen, setIsDropdownOpen] = useState(false); - - const handleSelectAll = () => { - if (selectedServices.length === filteredServices.length) { - setSelectedServices([]); - } else { - setSelectedServices(filteredServices.map((service) => service.id)); - } - }; - - const handleServiceSelect = (serviceId: string, event: React.MouseEvent) => { - event.stopPropagation(); - setSelectedServices((prev) => - prev.includes(serviceId) - ? prev.filter((id) => id !== serviceId) - : [...prev, serviceId], - ); - }; - - const composeActions = { - start: api.compose.start.useMutation(), - stop: api.compose.stop.useMutation(), - }; - - const handleBulkStart = async () => { - let success = 0; - setIsBulkActionLoading(true); - for (const serviceId of selectedServices) { - try { - await composeActions.start.mutateAsync({ composeId: serviceId }); - success++; - } catch (_error) { - toast.error(`Error starting service ${serviceId}`); - } - } - if (success > 0) { - toast.success(`${success} services started successfully`); - refetch(); - } - setIsBulkActionLoading(false); - setSelectedServices([]); - setIsDropdownOpen(false); - }; - - const handleBulkStop = async () => { - let success = 0; - setIsBulkActionLoading(true); - for (const serviceId of selectedServices) { - try { - await composeActions.stop.mutateAsync({ composeId: serviceId }); - success++; - } catch (_error) { - toast.error(`Error stopping service ${serviceId}`); - } - } - if (success > 0) { - toast.success(`${success} services stopped successfully`); - refetch(); - } - setSelectedServices([]); - setIsDropdownOpen(false); - setIsBulkActionLoading(false); - }; const filteredServices = useMemo(() => { if (!applications) return []; @@ -322,16 +241,16 @@ const Project = (
-
- +
+ {data?.name} {data?.description} - {(auth?.role === "owner" || auth?.canCreateServices) && ( -
+ {(auth?.rol === "admin" || user?.canCreateServices) && ( +
@@ -380,151 +299,78 @@ const Project = (
) : ( <> -
-
-
- 0} - className={cn( - "data-[state=checked]:bg-primary", - selectedServices.length > 0 && - selectedServices.length < - filteredServices.length && - "bg-primary/50", - )} - onCheckedChange={handleSelectAll} - /> - - Select All{" "} - {selectedServices.length > 0 && - `(${selectedServices.length}/${filteredServices.length})`} - -
- - - - - - - Actions - - - - - - - - - +
+
+ setSearchQuery(e.target.value)} + className="pr-10" + /> +
- -
-
- setSearchQuery(e.target.value)} - className="pr-10" - /> - -
- - - - - - - - No type found. - - {serviceTypes.map((type) => ( - { - setSelectedTypes((prev) => - prev.includes(type.value) - ? prev.filter((t) => t !== type.value) - : [...prev, type.value], - ); - setOpenCombobox(false); - }} - > -
- - {type.icon && ( - - )} - {type.label} -
-
- ))} + + + + + + + + No type found. + + {serviceTypes.map((type) => ( { - setSelectedTypes([]); + setSelectedTypes((prev) => + prev.includes(type.value) + ? prev.filter((t) => t !== type.value) + : [...prev, type.value], + ); setOpenCombobox(false); }} - className="border-t" > -
- - Clear filters +
+ + {type.icon && ( + + )} + {type.label}
- - - - -
+ ))} + { + setSelectedTypes([]); + setOpenCombobox(false); + }} + className="border-t" + > +
+ + Clear filters +
+
+
+
+
+
@@ -562,27 +408,6 @@ const Project = (
-
- handleServiceSelect(service.id, e) - } - > -
- -
-
-
@@ -657,7 +482,7 @@ export async function getServerSideProps( const { params } = ctx; const { req, res } = ctx; - const { user, session } = await validateRequest(req); + const { user, session } = await validateRequest(req, res); if (!user) { return { redirect: { @@ -673,8 +498,8 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); @@ -691,7 +516,7 @@ export async function getServerSideProps( projectId: params?.projectId, }, }; - } catch (_error) { + } catch (error) { return { redirect: { permanent: false, diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx index 94b8f5f5d..bdde2af50 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/application/[applicationId].tsx @@ -13,13 +13,13 @@ import { ShowGeneralApplication } from "@/components/dashboard/application/gener import { ShowDockerLogs } from "@/components/dashboard/application/logs/show"; import { ShowPreviewDeployments } from "@/components/dashboard/application/preview-deployments/show-preview-deployments"; import { UpdateApplication } from "@/components/dashboard/application/update-application"; -import { DeleteService } from "@/components/dashboard/compose/delete-service"; -import { ContainerFreeMonitoring } from "@/components/dashboard/monitoring/free/container/show-free-container-monitoring"; -import { ContainerPaidMonitoring } from "@/components/dashboard/monitoring/paid/container/show-paid-container-monitoring"; +import { DockerMonitoring } from "@/components/dashboard/monitoring/docker/show"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { BreadcrumbSidebar } from "@/components/shared/breadcrumb-sidebar"; +import { DialogAction } from "@/components/shared/dialog-action"; import { StatusTooltip } from "@/components/shared/status-tooltip"; import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; import { Card, CardContent, @@ -38,10 +38,9 @@ import { import { cn } from "@/lib/utils"; import { appRouter } from "@/server/api/root"; import { api } from "@/utils/api"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; -import copy from "copy-to-clipboard"; -import { GlobeIcon, HelpCircle, ServerOff } from "lucide-react"; +import { GlobeIcon, HelpCircle, ServerOff, Trash2 } from "lucide-react"; import type { GetServerSidePropsContext, InferGetServerSidePropsType, @@ -49,7 +48,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useEffect, useState } from "react"; +import React, { useState, useEffect, type ReactElement } from "react"; import { toast } from "sonner"; import superjson from "superjson"; @@ -65,7 +64,6 @@ type TabState = const Service = ( props: InferGetServerSidePropsType, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); const { applicationId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; @@ -84,8 +82,17 @@ const Service = ( }, ); - const { data: isCloud } = api.settings.isCloud.useQuery(); - const { data: auth } = api.user.get.useQuery(); + const { mutateAsync, isLoading: isRemoving } = + api.application.delete.useMutation(); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); return (
@@ -133,13 +140,6 @@ const Service = (
{ - if (data?.server?.ipAddress) { - copy(data.server.ipAddress); - toast.success("IP Address Copied!"); - } - }} variant={ !data?.serverId ? "default" @@ -176,8 +176,35 @@ const Service = (
- {(auth?.role === "owner" || auth?.canDeleteServices) && ( - + {(auth?.rol === "admin" || user?.canDeleteServices) && ( + { + await mutateAsync({ + applicationId: applicationId, + }) + .then(() => { + router.push( + `/dashboard/project/${data?.projectId}`, + ); + toast.success("Application deleted successfully"); + }) + .catch(() => { + toast.error("Error deleting application"); + }); + }} + > + + )}
@@ -219,16 +246,12 @@ const Service = ( General Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {!data?.serverId && ( Monitoring )} Logs @@ -251,54 +274,13 @@ const Service = (
- - -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && - isCloud && - data?.serverId && ( -
- - -
- )} */} - - {/* {toggleMonitoring ? ( - - ) : ( */} -
- -
- {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
@@ -360,7 +342,7 @@ export async function getServerSideProps( const { query, params, req, res } = ctx; const activeTab = query.tab; - const { user, session } = await validateRequest(req); + const { user, session } = await validateRequest(req, res); if (!user) { return { redirect: { @@ -376,8 +358,8 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); @@ -389,8 +371,6 @@ export async function getServerSideProps( applicationId: params?.applicationId, }); - await helpers.settings.isCloud.prefetch(); - return { props: { trpcState: helpers.dehydrate(), @@ -398,7 +378,7 @@ export async function getServerSideProps( activeTab: (activeTab || "general") as TabState, }, }; - } catch (_error) { + } catch (error) { return { redirect: { permanent: false, diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx index 46b727d2a..dba3aea89 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/compose/[composeId].tsx @@ -1,15 +1,14 @@ import { ShowVolumes } from "@/components/dashboard/application/advanced/volumes/show-volumes"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-enviroment"; import { AddCommandCompose } from "@/components/dashboard/compose/advanced/add-command"; -import { DeleteService } from "@/components/dashboard/compose/delete-service"; +import { DeleteCompose } from "@/components/dashboard/compose/delete-compose"; import { ShowDeploymentsCompose } from "@/components/dashboard/compose/deployments/show-deployments-compose"; import { ShowDomainsCompose } from "@/components/dashboard/compose/domains/show-domains"; import { ShowGeneralCompose } from "@/components/dashboard/compose/general/show"; import { ShowDockerLogsCompose } from "@/components/dashboard/compose/logs/show"; import { ShowDockerLogsStack } from "@/components/dashboard/compose/logs/show-stack"; +import { ShowMonitoringCompose } from "@/components/dashboard/compose/monitoring/show"; import { UpdateCompose } from "@/components/dashboard/compose/update-compose"; -import { ComposeFreeMonitoring } from "@/components/dashboard/monitoring/free/container/show-free-compose-monitoring"; -import { ComposePaidMonitoring } from "@/components/dashboard/monitoring/paid/container/show-paid-compose-monitoring"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { BreadcrumbSidebar } from "@/components/shared/breadcrumb-sidebar"; import { StatusTooltip } from "@/components/shared/status-tooltip"; @@ -32,9 +31,8 @@ import { import { cn } from "@/lib/utils"; import { appRouter } from "@/server/api/root"; import { api } from "@/utils/api"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; -import copy from "copy-to-clipboard"; import { CircuitBoard, ServerOff } from "lucide-react"; import { HelpCircle } from "lucide-react"; import type { @@ -44,8 +42,7 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useEffect, useState } from "react"; -import { toast } from "sonner"; +import React, { useState, useEffect, type ReactElement } from "react"; import superjson from "superjson"; type TabState = @@ -59,7 +56,6 @@ type TabState = const Service = ( props: InferGetServerSidePropsType, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); const { composeId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; @@ -78,8 +74,15 @@ const Service = ( }, ); - const { data: auth } = api.user.get.useQuery(); - const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); return (
@@ -128,13 +131,6 @@ const Service = (
{ - if (data?.server?.ipAddress) { - copy(data.server.ipAddress); - toast.success("IP Address Copied!"); - } - }} variant={ !data?.serverId ? "default" @@ -146,7 +142,7 @@ const Service = ( {data?.server?.name || "Dokploy Server"} {data?.server?.serverStatus === "inactive" && ( - +
@@ -215,16 +211,22 @@ const Service = ( General - Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {data?.composeType === "docker-compose" && ( + + Environment + + )} + {!data?.serverId && ( Monitoring )} Logs @@ -244,59 +246,17 @@ const Service = (
- - -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && - isCloud && - data?.serverId && ( -
- - -
- )} - - {toggleMonitoring ? ( - - ) : ( */} - {/*
*/} - - {/*
*/} - {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
@@ -356,7 +316,7 @@ export async function getServerSideProps( const { query, params, req, res } = ctx; const activeTab = query.tab; - const { user, session } = await validateRequest(req); + const { user, session } = await validateRequest(req, res); if (!user) { return { redirect: { @@ -372,8 +332,8 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); @@ -384,7 +344,7 @@ export async function getServerSideProps( await helpers.compose.one.fetch({ composeId: params?.composeId, }); - await helpers.settings.isCloud.prefetch(); + return { props: { trpcState: helpers.dehydrate(), @@ -392,7 +352,7 @@ export async function getServerSideProps( activeTab: (activeTab || "general") as TabState, }, }; - } catch (_error) { + } catch (error) { return { redirect: { permanent: false, diff --git a/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx b/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx index e91e0978d..fed8faa36 100644 --- a/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx +++ b/apps/dokploy/pages/dashboard/project/[projectId]/services/mariadb/[mariadbId].tsx @@ -2,20 +2,20 @@ import { ShowResources } from "@/components/dashboard/application/advanced/show- import { ShowVolumes } from "@/components/dashboard/application/advanced/volumes/show-volumes"; import { ShowEnvironment } from "@/components/dashboard/application/environment/show-enviroment"; import { ShowDockerLogs } from "@/components/dashboard/application/logs/show"; -import { DeleteService } from "@/components/dashboard/compose/delete-service"; import { ShowBackups } from "@/components/dashboard/database/backups/show-backups"; import { ShowExternalMariadbCredentials } from "@/components/dashboard/mariadb/general/show-external-mariadb-credentials"; import { ShowGeneralMariadb } from "@/components/dashboard/mariadb/general/show-general-mariadb"; import { ShowInternalMariadbCredentials } from "@/components/dashboard/mariadb/general/show-internal-mariadb-credentials"; import { UpdateMariadb } from "@/components/dashboard/mariadb/update-mariadb"; -import { ContainerFreeMonitoring } from "@/components/dashboard/monitoring/free/container/show-free-container-monitoring"; -import { ContainerPaidMonitoring } from "@/components/dashboard/monitoring/paid/container/show-paid-container-monitoring"; +import { DockerMonitoring } from "@/components/dashboard/monitoring/docker/show"; import { ShowCustomCommand } from "@/components/dashboard/postgres/advanced/show-custom-command"; import { MariadbIcon } from "@/components/icons/data-tools-icons"; import { ProjectLayout } from "@/components/layouts/project-layout"; import { BreadcrumbSidebar } from "@/components/shared/breadcrumb-sidebar"; +import { DialogAction } from "@/components/shared/dialog-action"; import { StatusTooltip } from "@/components/shared/status-tooltip"; import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; import { Card, CardContent, @@ -34,9 +34,9 @@ import { import { cn } from "@/lib/utils"; import { appRouter } from "@/server/api/root"; import { api } from "@/utils/api"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; -import { HelpCircle, ServerOff } from "lucide-react"; +import { HelpCircle, ServerOff, Trash2 } from "lucide-react"; import type { GetServerSidePropsContext, InferGetServerSidePropsType, @@ -44,7 +44,8 @@ import type { import Head from "next/head"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import React, { useState, type ReactElement } from "react"; +import { toast } from "sonner"; import superjson from "superjson"; type TabState = "projects" | "monitoring" | "settings" | "backups" | "advanced"; @@ -52,17 +53,22 @@ type TabState = "projects" | "monitoring" | "settings" | "backups" | "advanced"; const Mariadb = ( props: InferGetServerSidePropsType, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); - const { mariadbId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; const [tab, setSab] = useState(activeTab); const { data } = api.mariadb.one.useQuery({ mariadbId }); - const { data: auth } = api.user.get.useQuery(); - - const { data: isCloud } = api.settings.isCloud.useQuery(); - + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); + const { mutateAsync: remove, isLoading: isRemoving } = + api.mariadb.remove.useMutation(); return (
)}
-
+
- {(auth?.role === "owner" || auth?.canDeleteServices) && ( - + {(auth?.rol === "admin" || user?.canDeleteServices) && ( + { + await remove({ mariadbId }) + .then(() => { + router.push( + `/dashboard/project/${data?.projectId}`, + ); + toast.success("Mariadb deleted successfully"); + }) + .catch(() => { + toast.error("Error deleting the mariadb"); + }); + }} + > + + )}
@@ -188,16 +219,12 @@ const Mariadb = ( General Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {!data?.serverId && ( Monitoring )} Backups @@ -218,51 +245,13 @@ const Mariadb = (
- -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && ( -
- - -
- )} - - {toggleMonitoring ? ( - - ) : ( -
*/} - - {/*
*/} - {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); const { mongoId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; const [tab, setSab] = useState(activeTab); const { data } = api.mongo.one.useQuery({ mongoId }); - const { data: auth } = api.user.get.useQuery(); - - const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); + const { mutateAsync: remove, isLoading: isRemoving } = + api.mongo.remove.useMutation(); return (
@@ -145,8 +154,33 @@ const Mongo = (
- {(auth?.role === "owner" || auth?.canDeleteServices) && ( - + {(auth?.rol === "admin" || user?.canDeleteServices) && ( + { + await remove({ mongoId }) + .then(() => { + router.push( + `/dashboard/project/${data?.projectId}`, + ); + toast.success("Mongo deleted successfully"); + }) + .catch(() => { + toast.error("Error deleting the mongo"); + }); + }} + > + + )}
@@ -189,16 +223,12 @@ const Mongo = ( General Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {!data?.serverId && ( Monitoring )} Backups @@ -219,51 +249,13 @@ const Mongo = (
- -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && ( -
- - -
- )} - - {toggleMonitoring ? ( - - ) : ( -
*/} - - {/*
*/} - {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); const { mysqlId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; const [tab, setSab] = useState(activeTab); const { data } = api.mysql.one.useQuery({ mysqlId }); - const { data: auth } = api.user.get.useQuery(); - - const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); + const { mutateAsync: remove, isLoading: isRemoving } = + api.mysql.remove.useMutation(); return (
- {(auth?.role === "owner" || auth?.canDeleteServices) && ( - + {(auth?.rol === "admin" || user?.canDeleteServices) && ( + { + await remove({ mysqlId }) + .then(() => { + router.push( + `/dashboard/project/${data?.projectId}`, + ); + toast.success("Mysql deleted successfully"); + }) + .catch(() => { + toast.error("Error deleting the mysql"); + }); + }} + > + + )}
@@ -188,19 +221,15 @@ const MySql = (
General Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {!data?.serverId && ( Monitoring @@ -223,51 +252,13 @@ const MySql = (
- -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && ( -
- - -
- )} - - {toggleMonitoring ? ( - - ) : ( -
*/} - - {/*
*/} - {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); const { postgresId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; const [tab, setSab] = useState(activeTab); const { data } = api.postgres.one.useQuery({ postgresId }); - const { data: auth } = api.user.get.useQuery(); + const { data: auth } = api.auth.get.useQuery(); - const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); + + const { mutateAsync: remove, isLoading: isRemoving } = + api.postgres.remove.useMutation(); return (
@@ -144,8 +155,33 @@ const Postgresql = (
- {(auth?.role === "owner" || auth?.canDeleteServices) && ( - + {(auth?.rol === "admin" || user?.canDeleteServices) && ( + { + await remove({ postgresId }) + .then(() => { + router.push( + `/dashboard/project/${data?.projectId}`, + ); + toast.success("Postgres deleted successfully"); + }) + .catch(() => { + toast.error("Error deleting the postgres"); + }); + }} + > + + )}
@@ -188,16 +224,12 @@ const Postgresql = ( General Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {!data?.serverId && ( Monitoring )} Backups @@ -222,51 +254,13 @@ const Postgresql = (
- -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && ( -
- - -
- )} - - {toggleMonitoring ? ( - - ) : ( -
*/} - - {/*
*/} - {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
, ) => { - const [_toggleMonitoring, _setToggleMonitoring] = useState(false); const { redisId, activeTab } = props; const router = useRouter(); const { projectId } = router.query; const [tab, setSab] = useState(activeTab); const { data } = api.redis.one.useQuery({ redisId }); - const { data: auth } = api.user.get.useQuery(); - - const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: auth } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: auth?.id || "", + }, + { + enabled: !!auth?.id && auth?.rol === "user", + }, + ); + const { mutateAsync: remove, isLoading: isRemoving } = + api.redis.remove.useMutation(); return (
- {(auth?.role === "owner" || auth?.canDeleteServices) && ( - + {(auth?.rol === "admin" || user?.canDeleteServices) && ( + { + await remove({ redisId }) + .then(() => { + router.push( + `/dashboard/project/${data?.projectId}`, + ); + toast.success("Redis deleted successfully"); + }) + .catch(() => { + toast.error("Error deleting the redis"); + }); + }} + > + + )}
@@ -188,16 +221,12 @@ const Redis = ( General Environment - {((data?.serverId && isCloud) || !data?.server) && ( + {!data?.serverId && ( Monitoring )} Logs @@ -217,51 +246,13 @@ const Redis = (
- -
-
- {data?.serverId && isCloud ? ( - - ) : ( - <> - {/* {monitoring?.enabledFeatures && ( -
- - -
- )} - - {toggleMonitoring ? ( - - ) : ( -
*/} - - {/*
*/} - {/* )} */} - - )} + {!data?.serverId && ( + +
+
-
- + + )}
, ) { const { req, res } = ctx; - const { user, session } = await validateRequest(req); + const { user, session } = await validateRequest(req, res); const helpers = createServerSideHelpers({ router: appRouter, @@ -45,14 +46,14 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); await helpers.settings.isCloud.prefetch(); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); if (!user) { return { redirect: { diff --git a/apps/dokploy/pages/dashboard/requests.tsx b/apps/dokploy/pages/dashboard/requests.tsx index cb4545875..d1a927e34 100644 --- a/apps/dokploy/pages/dashboard/requests.tsx +++ b/apps/dokploy/pages/dashboard/requests.tsx @@ -1,9 +1,9 @@ import { ShowRequests } from "@/components/dashboard/requests/show-requests"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; -import { IS_CLOUD } from "@dokploy/server/constants"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { IS_CLOUD, validateRequest } from "@dokploy/server"; import type { GetServerSidePropsContext } from "next"; import type { ReactElement } from "react"; +import * as React from "react"; export default function Requests() { return ; @@ -22,7 +22,7 @@ export async function getServerSideProps( }, }; } - const { user } = await validateRequest(ctx.req); + const { user } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { diff --git a/apps/dokploy/pages/dashboard/settings/billing.tsx b/apps/dokploy/pages/dashboard/settings/billing.tsx index 7ba5717e9..5c58e25a9 100644 --- a/apps/dokploy/pages/dashboard/settings/billing.tsx +++ b/apps/dokploy/pages/dashboard/settings/billing.tsx @@ -2,11 +2,10 @@ import { ShowBilling } from "@/components/dashboard/settings/billing/show-billin import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; -import { IS_CLOUD } from "@dokploy/server/constants"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { IS_CLOUD, validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -30,8 +29,8 @@ export async function getServerSideProps( }; } const { req, res } = ctx; - const { user, session } = await validateRequest(req); - if (!user || user.role === "member") { + const { user, session } = await validateRequest(req, res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -46,13 +45,13 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); diff --git a/apps/dokploy/pages/dashboard/settings/certificates.tsx b/apps/dokploy/pages/dashboard/settings/certificates.tsx index 0c82ed4fb..732b6622a 100644 --- a/apps/dokploy/pages/dashboard/settings/certificates.tsx +++ b/apps/dokploy/pages/dashboard/settings/certificates.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { return ( @@ -24,8 +24,8 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const { user, session } = await validateRequest(req); - if (!user || user.role === "member") { + const { user, session } = await validateRequest(req, res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -40,12 +40,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); return { diff --git a/apps/dokploy/pages/dashboard/settings/cluster.tsx b/apps/dokploy/pages/dashboard/settings/cluster.tsx index a1a46bb65..a6605c573 100644 --- a/apps/dokploy/pages/dashboard/settings/cluster.tsx +++ b/apps/dokploy/pages/dashboard/settings/cluster.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { IS_CLOUD, validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -33,8 +33,8 @@ export async function getServerSideProps( }, }; } - const { user, session } = await validateRequest(ctx.req); - if (!user || user.role === "member") { + const { user, session } = await validateRequest(ctx.req, ctx.res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -48,12 +48,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); return { props: { diff --git a/apps/dokploy/pages/dashboard/settings/destinations.tsx b/apps/dokploy/pages/dashboard/settings/destinations.tsx index 3c906b55c..c5c6f2f81 100644 --- a/apps/dokploy/pages/dashboard/settings/destinations.tsx +++ b/apps/dokploy/pages/dashboard/settings/destinations.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -25,8 +25,8 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const { user, session } = await validateRequest(req); - if (!user || user.role === "member") { + const { user, session } = await validateRequest(req, res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -41,12 +41,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); return { diff --git a/apps/dokploy/pages/dashboard/settings/git-providers.tsx b/apps/dokploy/pages/dashboard/settings/git-providers.tsx index 7a9b08df9..dc37522ac 100644 --- a/apps/dokploy/pages/dashboard/settings/git-providers.tsx +++ b/apps/dokploy/pages/dashboard/settings/git-providers.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -24,7 +24,7 @@ Page.getLayout = (page: ReactElement) => { export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { - const { user, session } = await validateRequest(ctx.req); + const { user, session } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { @@ -40,21 +40,23 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); try { await helpers.project.all.prefetch(); await helpers.settings.isCloud.prefetch(); - if (user.role === "member") { - const userR = await helpers.user.one.fetch({ - userId: user.id, + const auth = await helpers.auth.get.fetch(); + + if (auth.rol === "user") { + const user = await helpers.user.byAuthId.fetch({ + authId: auth.id, }); - if (!userR?.canAccessToGitProviders) { + if (!user.canAccessToGitProviders) { return { redirect: { permanent: true, @@ -68,7 +70,7 @@ export async function getServerSideProps( trpcState: helpers.dehydrate(), }, }; - } catch (_error) { + } catch (error) { return { props: {}, }; diff --git a/apps/dokploy/pages/dashboard/settings/index.tsx b/apps/dokploy/pages/dashboard/settings/index.tsx deleted file mode 100644 index 4c060cbb5..000000000 --- a/apps/dokploy/pages/dashboard/settings/index.tsx +++ /dev/null @@ -1,219 +0,0 @@ -import { DashboardLayout } from "@/components/layouts/dashboard-layout"; - -import { AlertBlock } from "@/components/shared/alert-block"; -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { DialogFooter } from "@/components/ui/dialog"; -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, -} from "@/components/ui/form"; -import { Switch } from "@/components/ui/switch"; -import { appRouter } from "@/server/api/root"; -import { api } from "@/utils/api"; -import { validateRequest } from "@dokploy/server"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { createServerSideHelpers } from "@trpc/react-query/server"; -import { Settings } from "lucide-react"; -import type { GetServerSidePropsContext } from "next"; -import { type ReactElement, useEffect } from "react"; -import { useForm } from "react-hook-form"; -import { toast } from "sonner"; -import superjson from "superjson"; -import { z } from "zod"; - -const settings = z.object({ - cleanCacheOnApplications: z.boolean(), - cleanCacheOnCompose: z.boolean(), - cleanCacheOnPreviews: z.boolean(), -}); - -type SettingsType = z.infer; - -const Page = () => { - const { data, refetch } = api.user.get.useQuery(); - const { mutateAsync, isLoading, isError, error } = - api.user.update.useMutation(); - const form = useForm({ - defaultValues: { - cleanCacheOnApplications: false, - cleanCacheOnCompose: false, - cleanCacheOnPreviews: false, - }, - resolver: zodResolver(settings), - }); - useEffect(() => { - form.reset({ - cleanCacheOnApplications: data?.user.cleanupCacheApplications || false, - cleanCacheOnCompose: data?.user.cleanupCacheOnCompose || false, - cleanCacheOnPreviews: data?.user.cleanupCacheOnPreviews || false, - }); - }, [form, form.reset, form.formState.isSubmitSuccessful, data]); - - const onSubmit = async (values: SettingsType) => { - await mutateAsync({ - cleanupCacheApplications: values.cleanCacheOnApplications, - cleanupCacheOnCompose: values.cleanCacheOnCompose, - cleanupCacheOnPreviews: values.cleanCacheOnPreviews, - }) - .then(() => { - toast.success("Settings updated"); - refetch(); - }) - .catch(() => { - toast.error("Something went wrong"); - }); - }; - return ( -
- -
- - - - Settings - - Manage your Dokploy settings - {isError && {error?.message}} - - - - - ( - -
- Clean Cache on Applications - - Clean the cache after every application deployment - -
- - - -
- )} - /> - ( - -
- Clean Cache on Previews - - Clean the cache after every preview deployment - -
- - - -
- )} - /> - ( - -
- Clean Cache on Compose - - Clean the cache after every compose deployment - -
- - - -
- )} - /> - - - - - -
-
-
-
- ); -}; - -export default Page; - -Page.getLayout = (page: ReactElement) => { - return {page}; -}; -export async function getServerSideProps( - ctx: GetServerSidePropsContext<{ serviceId: string }>, -) { - const { req, res } = ctx; - const { user, session } = await validateRequest(ctx.req); - if (!user) { - return { - redirect: { - permanent: true, - destination: "/", - }, - }; - } - if (user.role === "member") { - return { - redirect: { - permanent: true, - destination: "/dashboard/settings/profile", - }, - }; - } - - const helpers = createServerSideHelpers({ - router: appRouter, - ctx: { - req: req as any, - res: res as any, - db: null as any, - session: session as any, - user: user as any, - }, - transformer: superjson, - }); - await helpers.user.get.prefetch(); - - return { - props: { - trpcState: helpers.dehydrate(), - }, - }; -} diff --git a/apps/dokploy/pages/dashboard/settings/notifications.tsx b/apps/dokploy/pages/dashboard/settings/notifications.tsx index fbdc2e205..0b75fc67a 100644 --- a/apps/dokploy/pages/dashboard/settings/notifications.tsx +++ b/apps/dokploy/pages/dashboard/settings/notifications.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -25,8 +25,8 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const { user, session } = await validateRequest(req); - if (!user || user.role === "member") { + const { user, session } = await validateRequest(req, res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -41,12 +41,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); return { diff --git a/apps/dokploy/pages/dashboard/settings/profile.tsx b/apps/dokploy/pages/dashboard/settings/profile.tsx index 83ff5624c..44e007f11 100644 --- a/apps/dokploy/pages/dashboard/settings/profile.tsx +++ b/apps/dokploy/pages/dashboard/settings/profile.tsx @@ -1,5 +1,6 @@ -import { ShowApiKeys } from "@/components/dashboard/settings/api/show-api-keys"; +import { GenerateToken } from "@/components/dashboard/settings/profile/generate-token"; import { ProfileForm } from "@/components/dashboard/settings/profile/profile-form"; +import { RemoveSelfAccount } from "@/components/dashboard/settings/profile/remove-self-account"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; @@ -8,20 +9,28 @@ import { getLocale, serverSideTranslations } from "@/utils/i18n"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { - const { data } = api.user.get.useQuery(); + const { data } = api.auth.get.useQuery(); + const { data: user } = api.user.byAuthId.useQuery( + { + authId: data?.id || "", + }, + { + enabled: !!data?.id && data?.rol === "user", + }, + ); - // const { data: isCloud } = api.settings.isCloud.useQuery(); + const { data: isCloud } = api.settings.isCloud.useQuery(); return (
- {(data?.canAccessToAPI || data?.role === "owner") && } + {(user?.canAccessToAPI || data?.rol === "admin") && } - {/* {isCloud && } */} + {isCloud && }
); @@ -37,7 +46,7 @@ export async function getServerSideProps( ) { const { req, res } = ctx; const locale = getLocale(req.cookies); - const { user, session } = await validateRequest(req); + const { user, session } = await validateRequest(req, res); const helpers = createServerSideHelpers({ router: appRouter, @@ -45,14 +54,19 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); await helpers.settings.isCloud.prefetch(); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); + if (user?.rol === "user") { + await helpers.user.byAuthId.prefetch({ + authId: user.authId, + }); + } if (!user) { return { diff --git a/apps/dokploy/pages/dashboard/settings/registry.tsx b/apps/dokploy/pages/dashboard/settings/registry.tsx index 42f0627f4..49c9ec20f 100644 --- a/apps/dokploy/pages/dashboard/settings/registry.tsx +++ b/apps/dokploy/pages/dashboard/settings/registry.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -25,8 +25,8 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const { user, session } = await validateRequest(req); - if (!user || user.role === "member") { + const { user, session } = await validateRequest(req, res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -40,12 +40,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); return { diff --git a/apps/dokploy/pages/dashboard/settings/server.tsx b/apps/dokploy/pages/dashboard/settings/server.tsx index 0c5e36dc0..d501f1fa6 100644 --- a/apps/dokploy/pages/dashboard/settings/server.tsx +++ b/apps/dokploy/pages/dashboard/settings/server.tsx @@ -1,12 +1,13 @@ import { WebDomain } from "@/components/dashboard/settings/web-domain"; import { WebServer } from "@/components/dashboard/settings/web-server"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; + import { appRouter } from "@/server/api/root"; import { getLocale, serverSideTranslations } from "@/utils/i18n"; import { IS_CLOUD, validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -15,49 +16,6 @@ const Page = () => {
- {/* -
- - - - Paid Features - - - Enable or disable paid features like monitoring - - - -
- - Enable Paid Features: - - - { - update({ - enablePaidFeatures: !data?.enablePaidFeatures, - }) - .then(() => { - toast.success( - `Paid features ${ - data?.enablePaidFeatures ? "disabled" : "enabled" - } successfully`, - ); - refetch(); - }) - .catch(() => { - toast.error("Error updating paid features"); - }); - }} - /> -
-
- {data?.enablePaidFeatures && } -
-
*/} - - {/* */}
); @@ -81,7 +39,7 @@ export async function getServerSideProps( }, }; } - const { user, session } = await validateRequest(ctx.req); + const { user, session } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { @@ -90,7 +48,7 @@ export async function getServerSideProps( }, }; } - if (user.role === "member") { + if (user.rol === "user") { return { redirect: { permanent: true, @@ -105,12 +63,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); return { props: { diff --git a/apps/dokploy/pages/dashboard/settings/servers.tsx b/apps/dokploy/pages/dashboard/settings/servers.tsx index 5cc30b832..36fde9834 100644 --- a/apps/dokploy/pages/dashboard/settings/servers.tsx +++ b/apps/dokploy/pages/dashboard/settings/servers.tsx @@ -6,7 +6,7 @@ import { getLocale, serverSideTranslations } from "@/utils/i18n"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -27,7 +27,7 @@ export async function getServerSideProps( ) { const { req, res } = ctx; const locale = await getLocale(req.cookies); - const { user, session } = await validateRequest(req); + const { user, session } = await validateRequest(req, res); if (!user) { return { redirect: { @@ -36,7 +36,7 @@ export async function getServerSideProps( }, }; } - if (user.role === "member") { + if (user.rol === "user") { return { redirect: { permanent: true, @@ -51,12 +51,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); return { diff --git a/apps/dokploy/pages/dashboard/settings/ssh-keys.tsx b/apps/dokploy/pages/dashboard/settings/ssh-keys.tsx index 2472feab4..239edac6a 100644 --- a/apps/dokploy/pages/dashboard/settings/ssh-keys.tsx +++ b/apps/dokploy/pages/dashboard/settings/ssh-keys.tsx @@ -5,7 +5,7 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { @@ -24,7 +24,7 @@ Page.getLayout = (page: ReactElement) => { export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { - const { user, session } = await validateRequest(ctx.req); + const { user, session } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { @@ -33,29 +33,30 @@ export async function getServerSideProps( }, }; } - const { req, res } = ctx; + const { req, res, resolvedUrl } = ctx; const helpers = createServerSideHelpers({ router: appRouter, ctx: { req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); try { await helpers.project.all.prefetch(); + const auth = await helpers.auth.get.fetch(); await helpers.settings.isCloud.prefetch(); - if (user.role === "member") { - const userR = await helpers.user.one.fetch({ - userId: user.id, + if (auth.rol === "user") { + const user = await helpers.user.byAuthId.fetch({ + authId: auth.id, }); - if (!userR?.canAccessToSSHKeys) { + if (!user.canAccessToSSHKeys) { return { redirect: { permanent: true, @@ -69,7 +70,7 @@ export async function getServerSideProps( trpcState: helpers.dehydrate(), }, }; - } catch (_error) { + } catch (error) { return { props: {}, }; diff --git a/apps/dokploy/pages/dashboard/settings/users.tsx b/apps/dokploy/pages/dashboard/settings/users.tsx index 16f90abb1..e70728909 100644 --- a/apps/dokploy/pages/dashboard/settings/users.tsx +++ b/apps/dokploy/pages/dashboard/settings/users.tsx @@ -1,4 +1,3 @@ -import { ShowInvitations } from "@/components/dashboard/settings/users/show-invitations"; import { ShowUsers } from "@/components/dashboard/settings/users/show-users"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; @@ -6,14 +5,13 @@ import { appRouter } from "@/server/api/root"; import { validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Page = () => { return (
-
); }; @@ -27,9 +25,8 @@ export async function getServerSideProps( ctx: GetServerSidePropsContext<{ serviceId: string }>, ) { const { req, res } = ctx; - const { user, session } = await validateRequest(req); - - if (!user || user.role === "member") { + const { user, session } = await validateRequest(req, res); + if (!user || user.rol === "user") { return { redirect: { permanent: true, @@ -44,12 +41,12 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - await helpers.user.get.prefetch(); + await helpers.auth.get.prefetch(); await helpers.settings.isCloud.prefetch(); return { diff --git a/apps/dokploy/pages/dashboard/swarm.tsx b/apps/dokploy/pages/dashboard/swarm.tsx index 155531160..f40a0a832 100644 --- a/apps/dokploy/pages/dashboard/swarm.tsx +++ b/apps/dokploy/pages/dashboard/swarm.tsx @@ -1,15 +1,18 @@ import SwarmMonitorCard from "@/components/dashboard/swarm/monitoring-card"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; -import { IS_CLOUD } from "@dokploy/server/constants"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { IS_CLOUD, validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; import type { ReactElement } from "react"; import superjson from "superjson"; const Dashboard = () => { - return ; + return ( + <> + + + ); }; export default Dashboard; @@ -28,7 +31,7 @@ export async function getServerSideProps( }, }; } - const { user, session } = await validateRequest(ctx.req); + const { user, session } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { @@ -45,20 +48,21 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); try { await helpers.project.all.prefetch(); + const auth = await helpers.auth.get.fetch(); - if (user.role === "member") { - const userR = await helpers.user.one.fetch({ - userId: user.id, + if (auth.rol === "user") { + const user = await helpers.user.byAuthId.fetch({ + authId: auth.id, }); - if (!userR?.canAccessToDocker) { + if (!user.canAccessToDocker) { return { redirect: { permanent: true, @@ -72,7 +76,7 @@ export async function getServerSideProps( trpcState: helpers.dehydrate(), }, }; - } catch (_error) { + } catch (error) { return { props: {}, }; diff --git a/apps/dokploy/pages/dashboard/traefik.tsx b/apps/dokploy/pages/dashboard/traefik.tsx index ce8208beb..9cd7eefcf 100644 --- a/apps/dokploy/pages/dashboard/traefik.tsx +++ b/apps/dokploy/pages/dashboard/traefik.tsx @@ -1,11 +1,10 @@ import { ShowTraefikSystem } from "@/components/dashboard/file-system/show-traefik-system"; import { DashboardLayout } from "@/components/layouts/dashboard-layout"; import { appRouter } from "@/server/api/root"; -import { IS_CLOUD } from "@dokploy/server/constants"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { IS_CLOUD, validateRequest } from "@dokploy/server"; import { createServerSideHelpers } from "@trpc/react-query/server"; import type { GetServerSidePropsContext } from "next"; -import type { ReactElement } from "react"; +import React, { type ReactElement } from "react"; import superjson from "superjson"; const Dashboard = () => { @@ -28,7 +27,7 @@ export async function getServerSideProps( }, }; } - const { user, session } = await validateRequest(ctx.req); + const { user, session } = await validateRequest(ctx.req, ctx.res); if (!user) { return { redirect: { @@ -45,20 +44,21 @@ export async function getServerSideProps( req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); try { await helpers.project.all.prefetch(); + const auth = await helpers.auth.get.fetch(); - if (user.role === "member") { - const userR = await helpers.user.one.fetch({ - userId: user.id, + if (auth.rol === "user") { + const user = await helpers.user.byAuthId.fetch({ + authId: auth.id, }); - if (!userR?.canAccessToTraefikFiles) { + if (!user.canAccessToTraefikFiles) { return { redirect: { permanent: true, @@ -72,7 +72,7 @@ export async function getServerSideProps( trpcState: helpers.dehydrate(), }, }; - } catch (_error) { + } catch (error) { return { props: {}, }; diff --git a/apps/dokploy/pages/index.tsx b/apps/dokploy/pages/index.tsx index 200ca8efe..2c5ab0bbd 100644 --- a/apps/dokploy/pages/index.tsx +++ b/apps/dokploy/pages/index.tsx @@ -1,15 +1,9 @@ +import { Login2FA } from "@/components/auth/login-2fa"; import { OnboardingLayout } from "@/components/layouts/onboarding-layout"; import { AlertBlock } from "@/components/shared/alert-block"; import { Logo } from "@/components/shared/logo"; -import { Button } from "@/components/ui/button"; -import { CardContent, CardDescription } from "@/components/ui/card"; -import { - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, -} from "@/components/ui/dialog"; +import { Button, buttonVariants } from "@/components/ui/button"; +import { CardContent } from "@/components/ui/card"; import { Form, FormControl, @@ -19,186 +13,88 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { - InputOTP, - InputOTPGroup, - InputOTPSlot, -} from "@/components/ui/input-otp"; -import { Label } from "@/components/ui/label"; -import { authClient } from "@/lib/auth-client"; -import { IS_CLOUD, isAdminPresent } from "@dokploy/server"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { cn } from "@/lib/utils"; +import { api } from "@/utils/api"; +import { IS_CLOUD, isAdminPresent, validateRequest } from "@dokploy/server"; import { zodResolver } from "@hookform/resolvers/zod"; -import { REGEXP_ONLY_DIGITS } from "input-otp"; import type { GetServerSidePropsContext } from "next"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useState } from "react"; +import { type ReactElement, useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; -const LoginSchema = z.object({ - email: z.string().email(), - password: z.string().min(8), +const loginSchema = z.object({ + email: z + .string() + .min(1, { + message: "Email is required", + }) + .email({ + message: "Email must be a valid email", + }), + + password: z + .string() + .min(1, { + message: "Password is required", + }) + .min(8, { + message: "Password must be at least 8 characters", + }), }); -const _TwoFactorSchema = z.object({ - code: z.string().min(6), -}); +type Login = z.infer; -type LoginForm = z.infer; +type AuthResponse = { + is2FAEnabled: boolean; + authId: string; +}; interface Props { IS_CLOUD: boolean; } export default function Home({ IS_CLOUD }: Props) { + const [temp, setTemp] = useState({ + is2FAEnabled: false, + authId: "", + }); + const { mutateAsync, isLoading, error, isError } = + api.auth.login.useMutation(); const router = useRouter(); - const [isLoginLoading, setIsLoginLoading] = useState(false); - const [isTwoFactorLoading, setIsTwoFactorLoading] = useState(false); - const [isBackupCodeLoading, setIsBackupCodeLoading] = useState(false); - const [isTwoFactor, setIsTwoFactor] = useState(false); - const [error, setError] = useState(null); - const [twoFactorCode, setTwoFactorCode] = useState(""); - const [isBackupCodeModalOpen, setIsBackupCodeModalOpen] = useState(false); - const [backupCode, setBackupCode] = useState(""); - const [isGithubLoading, setIsGithubLoading] = useState(false); - const [isGoogleLoading, setIsGoogleLoading] = useState(false); - const loginForm = useForm({ - resolver: zodResolver(LoginSchema), + const form = useForm({ defaultValues: { email: "", password: "", }, + resolver: zodResolver(loginSchema), }); - const onSubmit = async (values: LoginForm) => { - setIsLoginLoading(true); - try { - const { data, error } = await authClient.signIn.email({ - email: values.email, - password: values.password, + useEffect(() => { + form.reset(); + }, [form, form.reset, form.formState.isSubmitSuccessful]); + + const onSubmit = async (values: Login) => { + await mutateAsync({ + email: values.email.toLowerCase(), + password: values.password, + }) + .then((data) => { + if (data.is2FAEnabled) { + setTemp(data); + } else { + toast.success("Successfully signed in", { + duration: 2000, + }); + router.push("/dashboard/projects"); + } + }) + .catch(() => { + toast.error("Signin failed", { + duration: 2000, + }); }); - - if (error) { - toast.error(error.message); - setError(error.message || "An error occurred while logging in"); - return; - } - - // @ts-ignore - if (data?.twoFactorRedirect as boolean) { - setTwoFactorCode(""); - setIsTwoFactor(true); - toast.info("Please enter your 2FA code"); - return; - } - - toast.success("Logged in successfully"); - router.push("/dashboard/projects"); - } catch (_error) { - toast.error("An error occurred while logging in"); - } finally { - setIsLoginLoading(false); - } - }; - - const onTwoFactorSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - if (twoFactorCode.length !== 6) { - toast.error("Please enter a valid 6-digit code"); - return; - } - - setIsTwoFactorLoading(true); - try { - const { error } = await authClient.twoFactor.verifyTotp({ - code: twoFactorCode.replace(/\s/g, ""), - }); - - if (error) { - toast.error(error.message); - setError(error.message || "An error occurred while verifying 2FA code"); - return; - } - - toast.success("Logged in successfully"); - router.push("/dashboard/projects"); - } catch (_error) { - toast.error("An error occurred while verifying 2FA code"); - } finally { - setIsTwoFactorLoading(false); - } - }; - - const onBackupCodeSubmit = async (e: React.FormEvent) => { - e.preventDefault(); - if (backupCode.length < 8) { - toast.error("Please enter a valid backup code"); - return; - } - - setIsBackupCodeLoading(true); - try { - const { error } = await authClient.twoFactor.verifyBackupCode({ - code: backupCode.trim(), - }); - - if (error) { - toast.error(error.message); - setError( - error.message || "An error occurred while verifying backup code", - ); - return; - } - - toast.success("Logged in successfully"); - router.push("/dashboard/projects"); - } catch (_error) { - toast.error("An error occurred while verifying backup code"); - } finally { - setIsBackupCodeLoading(false); - } - }; - - const handleGithubSignIn = async () => { - setIsGithubLoading(true); - try { - const { error } = await authClient.signIn.social({ - provider: "github", - }); - - if (error) { - toast.error(error.message); - return; - } - } catch (error) { - toast.error("An error occurred while signing in with GitHub", { - description: error instanceof Error ? error.message : "Unknown error", - }); - } finally { - setIsGithubLoading(false); - } - }; - - const handleGoogleSignIn = async () => { - setIsGoogleLoading(true); - try { - const { error } = await authClient.signIn.social({ - provider: "google", - }); - - if (error) { - toast.error(error.message); - return; - } - } catch (error) { - toast.error("An error occurred while signing in with Google", { - description: error instanceof Error ? error.message : "Unknown error", - }); - } finally { - setIsGoogleLoading(false); - } }; return ( <> @@ -213,81 +109,31 @@ export default function Home({ IS_CLOUD }: Props) { Enter your email and password to sign in

- {error && ( + {isError && ( - {error} + {error?.message} )} - {!isTwoFactor ? ( - <> - {IS_CLOUD && ( - - )} - {IS_CLOUD && ( - - )} -
- + {!temp.is2FAEnabled ? ( + + +
( Email - + )} /> ( @@ -295,7 +141,7 @@ export default function Home({ IS_CLOUD }: Props) { @@ -303,127 +149,15 @@ export default function Home({ IS_CLOUD }: Props) { )} /> - - - - - ) : ( - <> -
-
- - - - - - - - - - - - - Enter the 6-digit code from your authenticator app - - -
-
- -
- - - - - Enter Backup Code - - Enter one of your backup codes to access your account - - - -
-
- - setBackupCode(e.target.value)} - placeholder="Enter your backup code" - className="font-mono" - /> - - Enter one of the backup codes you received when setting up - 2FA - -
- -
- - -
-
-
-
- + + ) : ( + )}
@@ -469,7 +203,8 @@ Home.getLayout = (page: ReactElement) => { export async function getServerSideProps(context: GetServerSidePropsContext) { if (IS_CLOUD) { try { - const { user } = await validateRequest(context.req); + const { user } = await validateRequest(context.req, context.res); + if (user) { return { redirect: { @@ -478,7 +213,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { }, }; } - } catch (_error) {} + } catch (error) {} return { props: { @@ -497,7 +232,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { }; } - const { user } = await validateRequest(context.req); + const { user } = await validateRequest(context.req, context.res); if (user) { return { diff --git a/apps/dokploy/pages/invitation.tsx b/apps/dokploy/pages/invitation.tsx index 32026c0e6..77f9f2493 100644 --- a/apps/dokploy/pages/invitation.tsx +++ b/apps/dokploy/pages/invitation.tsx @@ -1,8 +1,12 @@ import { OnboardingLayout } from "@/components/layouts/onboarding-layout"; -import { AlertBlock } from "@/components/shared/alert-block"; import { Logo } from "@/components/shared/logo"; import { Button } from "@/components/ui/button"; -import { CardContent, CardDescription, CardTitle } from "@/components/ui/card"; +import { + Card, + CardContent, + CardDescription, + CardTitle, +} from "@/components/ui/card"; import { Form, FormControl, @@ -12,10 +16,10 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { authClient } from "@/lib/auth-client"; import { api } from "@/utils/api"; import { IS_CLOUD, getUserByToken } from "@dokploy/server"; import { zodResolver } from "@hookform/resolvers/zod"; +import { AlertTriangle } from "lucide-react"; import type { GetServerSidePropsContext } from "next"; import Link from "next/link"; import { useRouter } from "next/router"; @@ -26,9 +30,6 @@ import { z } from "zod"; const registerSchema = z .object({ - name: z.string().min(1, { - message: "Name is required", - }), email: z .string() .min(1, { @@ -37,6 +38,7 @@ const registerSchema = z .email({ message: "Email must be a valid email", }), + password: z .string() .min(1, { @@ -69,17 +71,11 @@ interface Props { token: string; invitation: Awaited>; isCloud: boolean; - userAlreadyExists: boolean; } -const Invitation = ({ - token, - invitation, - isCloud, - userAlreadyExists, -}: Props) => { +const Invitation = ({ token, invitation, isCloud }: Props) => { const router = useRouter(); - const { data } = api.user.getUserByToken.useQuery( + const { data } = api.admin.getUserByToken.useQuery( { token, }, @@ -89,9 +85,11 @@ const Invitation = ({ }, ); + const { mutateAsync, error, isError, isSuccess } = + api.auth.createUser.useMutation(); + const form = useForm({ defaultValues: { - name: "", email: "", password: "", confirmPassword: "", @@ -100,9 +98,9 @@ const Invitation = ({ }); useEffect(() => { - if (data?.email) { + if (data?.auth?.email) { form.reset({ - email: data?.email || "", + email: data?.auth?.email || "", password: "", confirmPassword: "", }); @@ -110,32 +108,20 @@ const Invitation = ({ }, [form, form.reset, form.formState.isSubmitSuccessful, data]); const onSubmit = async (values: Register) => { - try { - const { error } = await authClient.signUp.email({ - email: values.email, - password: values.password, - name: values.name, - fetchOptions: { - headers: { - "x-dokploy-token": token, - }, - }, - }); - - if (error) { - toast.error(error.message); - return; - } - - const _result = await authClient.organization.acceptInvitation({ - invitationId: token, - }); - - toast.success("Account created successfully"); - router.push("/dashboard/projects"); - } catch (_error) { - toast.error("An error occurred while creating your account"); - } + await mutateAsync({ + id: data?.authId, + password: values.password, + token: token, + }) + .then(() => { + toast.success("User registered successfuly", { + description: + "Please check your inbox or spam folder to confirm your account.", + duration: 100000, + }); + router.push("/dashboard/projects"); + }) + .catch((e) => e); }; return ( @@ -152,155 +138,114 @@ const Invitation = ({ Invitation - {userAlreadyExists ? ( -
- -
- Valid Invitation! - - We detected that you already have an account with this - email. Please sign in to accept the invitation. - -
-
+ + Fill the form below to create your account + +
+
- -
- ) : ( - <> - - Fill the form below to create your account - -
-
- - {/* {isError && ( -
- - - {error?.message} - -
- )} */} - - -
- -
- ( - - Name - - - - - - )} - /> - ( - - Email - - - - - - )} - /> - ( - - Password - - - - - - )} - /> - - ( - - Confirm Password - - - - - - )} - /> - - -
- -
- {isCloud && ( - <> - - Login - - - Lost your password? - - - )} -
-
- -
+ {isError && ( +
+ + + {error?.message} +
- - )} + )} + + +
+ +
+ ( + + Email + + + + + + )} + /> + ( + + Password + + + + + + )} + /> + + ( + + Confirm Password + + + + + + )} + /> + + +
+ +
+ {isCloud && ( + <> + + Login + + + Lost your password? + + + )} +
+
+ +
+
); }; -// http://localhost:3000/invitation?token=CZK4BLrUdMa32RVkAdZiLsPDdvnPiAgZ -// /f7af93acc1a99eae864972ab4c92fee089f0d83473d415ede8e821e5dbabe79c + export default Invitation; Invitation.getLayout = (page: ReactElement) => { return {page}; @@ -310,15 +255,6 @@ export async function getServerSideProps(ctx: GetServerSidePropsContext) { const token = query.token; - // if (IS_CLOUD) { - // return { - // redirect: { - // permanent: true, - // destination: "/", - // }, - // }; - // } - if (typeof token !== "string") { return { redirect: { @@ -331,17 +267,6 @@ export async function getServerSideProps(ctx: GetServerSidePropsContext) { try { const invitation = await getUserByToken(token); - if (invitation.userAlreadyExists) { - return { - props: { - isCloud: IS_CLOUD, - token: token, - invitation: invitation, - userAlreadyExists: true, - }, - }; - } - if (invitation.isExpired) { return { redirect: { @@ -359,7 +284,6 @@ export async function getServerSideProps(ctx: GetServerSidePropsContext) { }, }; } catch (error) { - console.log("error", error); return { redirect: { permanent: true, diff --git a/apps/dokploy/pages/register.tsx b/apps/dokploy/pages/register.tsx index 393c2ba24..e42231a2f 100644 --- a/apps/dokploy/pages/register.tsx +++ b/apps/dokploy/pages/register.tsx @@ -2,7 +2,12 @@ import { OnboardingLayout } from "@/components/layouts/onboarding-layout"; import { AlertBlock } from "@/components/shared/alert-block"; import { Logo } from "@/components/shared/logo"; import { Button } from "@/components/ui/button"; -import { CardContent, CardDescription, CardTitle } from "@/components/ui/card"; +import { + Card, + CardContent, + CardDescription, + CardTitle, +} from "@/components/ui/card"; import { Form, FormControl, @@ -12,23 +17,20 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { authClient } from "@/lib/auth-client"; +import { api } from "@/utils/api"; import { IS_CLOUD, isAdminPresent, validateRequest } from "@dokploy/server"; import { zodResolver } from "@hookform/resolvers/zod"; import { AlertTriangle } from "lucide-react"; import type { GetServerSidePropsContext } from "next"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useEffect, useState } from "react"; +import { type ReactElement, useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; const registerSchema = z .object({ - name: z.string().min(1, { - message: "Name is required", - }), email: z .string() .min(1, { @@ -72,13 +74,11 @@ interface Props { const Register = ({ isCloud }: Props) => { const router = useRouter(); - const [isError, setIsError] = useState(false); - const [error, setError] = useState(null); - const [data, setData] = useState(null); + const { mutateAsync, error, isError, data } = + api.auth.createAdmin.useMutation(); const form = useForm({ defaultValues: { - name: "", email: "", password: "", confirmPassword: "", @@ -91,25 +91,19 @@ const Register = ({ isCloud }: Props) => { }, [form, form.reset, form.formState.isSubmitSuccessful]); const onSubmit = async (values: Register) => { - const { data, error } = await authClient.signUp.email({ - email: values.email, + await mutateAsync({ + email: values.email.toLowerCase(), password: values.password, - name: values.name, - }); - - if (error) { - setIsError(true); - setError(error.message || "An error occurred"); - } else { - toast.success("User registered successfuly", { - duration: 2000, - }); - if (!isCloud) { - router.push("/"); - } else { - setData(data); - } - } + }) + .then(() => { + toast.success("User registered successfuly", { + duration: 2000, + }); + if (!isCloud) { + router.push("/"); + } + }) + .catch((e) => e); }; return (
@@ -131,15 +125,15 @@ const Register = ({ isCloud }: Props) => {
{isError && ( -
+
- {error} + {error?.message}
)} - {isCloud && data && ( - + {data?.type === "cloud" && ( + Registered successfully, please check your inbox or spam folder to confirm your account. @@ -153,19 +147,6 @@ const Register = ({ isCloud }: Props) => { className="grid gap-4" >
- ( - - Name - - - - - - )} - /> { }; export async function getServerSideProps(context: GetServerSidePropsContext) { if (IS_CLOUD) { - const { user } = await validateRequest(context.req); + const { user } = await validateRequest(context.req, context.res); if (user) { return { diff --git a/apps/dokploy/pages/reset-password.tsx b/apps/dokploy/pages/reset-password.tsx index 0f6cf0b32..42e2ce002 100644 --- a/apps/dokploy/pages/reset-password.tsx +++ b/apps/dokploy/pages/reset-password.tsx @@ -12,13 +12,17 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { authClient } from "@/lib/auth-client"; +import { db } from "@/server/db"; +import { auth } from "@/server/db/schema"; +import { api } from "@/utils/api"; import { IS_CLOUD } from "@dokploy/server"; import { zodResolver } from "@hookform/resolvers/zod"; +import { isBefore } from "date-fns"; +import { eq } from "drizzle-orm"; import type { GetServerSidePropsContext } from "next"; import Link from "next/link"; import { useRouter } from "next/router"; -import { type ReactElement, useEffect, useState } from "react"; +import { type ReactElement, useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; @@ -50,12 +54,11 @@ const loginSchema = z type Login = z.infer; interface Props { - tokenResetPassword: string; + token: string; } -export default function Home({ tokenResetPassword }: Props) { - const [token, setToken] = useState(tokenResetPassword); - const [isLoading, setIsLoading] = useState(false); - const [error, setError] = useState(null); +export default function Home({ token }: Props) { + const { mutateAsync, isLoading, isError, error } = + api.auth.resetPassword.useMutation(); const router = useRouter(); const form = useForm({ defaultValues: { @@ -65,32 +68,26 @@ export default function Home({ tokenResetPassword }: Props) { resolver: zodResolver(loginSchema), }); - useEffect(() => { - const token = new URLSearchParams(window.location.search).get("token"); - - if (token) { - setToken(token); - } - }, [token]); - useEffect(() => { form.reset(); }, [form, form.reset, form.formState.isSubmitSuccessful]); const onSubmit = async (values: Login) => { - setIsLoading(true); - const { error } = await authClient.resetPassword({ - newPassword: values.password, - token: token || "", - }); - - if (error) { - setError(error.message || "An error occurred"); - } else { - toast.success("Password reset successfully"); - router.push("/"); - } - setIsLoading(false); + await mutateAsync({ + resetPasswordToken: token, + password: values.password, + }) + .then((data) => { + toast.success("Password reset successfully", { + duration: 2000, + }); + router.push("/"); + }) + .catch(() => { + toast.error("Error resetting password", { + duration: 2000, + }); + }); }; return (
@@ -107,9 +104,9 @@ export default function Home({ tokenResetPassword }: Props) {
- {error && ( + {isError && ( - {error} + {error?.message} )}
@@ -197,9 +194,35 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { }; } + const authR = await db.query.auth.findFirst({ + where: eq(auth.resetPasswordToken, token), + }); + + if (!authR || authR?.resetPasswordExpiresAt === null) { + return { + redirect: { + permanent: true, + destination: "/", + }, + }; + } + const isExpired = isBefore( + new Date(authR.resetPasswordExpiresAt), + new Date(), + ); + + if (isExpired) { + return { + redirect: { + permanent: true, + destination: "/", + }, + }; + } + return { props: { - tokenResetPassword: token, + token: authR.resetPasswordToken, }, }; } diff --git a/apps/dokploy/pages/send-reset-password.tsx b/apps/dokploy/pages/send-reset-password.tsx index 10d1058aa..c4cd851ce 100644 --- a/apps/dokploy/pages/send-reset-password.tsx +++ b/apps/dokploy/pages/send-reset-password.tsx @@ -1,8 +1,14 @@ +import { Login2FA } from "@/components/auth/login-2fa"; import { OnboardingLayout } from "@/components/layouts/onboarding-layout"; import { AlertBlock } from "@/components/shared/alert-block"; import { Logo } from "@/components/shared/logo"; import { Button } from "@/components/ui/button"; -import { CardContent, CardDescription, CardTitle } from "@/components/ui/card"; +import { + Card, + CardContent, + CardDescription, + CardTitle, +} from "@/components/ui/card"; import { Form, FormControl, @@ -12,7 +18,7 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { authClient } from "@/lib/auth-client"; +import { api } from "@/utils/api"; import { IS_CLOUD } from "@dokploy/server"; import { zodResolver } from "@hookform/resolvers/zod"; import type { GetServerSidePropsContext } from "next"; @@ -42,14 +48,13 @@ type AuthResponse = { }; export default function Home() { - const [temp, _setTemp] = useState({ + const [temp, setTemp] = useState({ is2FAEnabled: false, authId: "", }); - - const [error, setError] = useState(null); - const [isLoading, setIsLoading] = useState(false); - const _router = useRouter(); + const { mutateAsync, isLoading, isError, error } = + api.auth.sendResetPasswordEmail.useMutation(); + const router = useRouter(); const form = useForm({ defaultValues: { email: "", @@ -62,20 +67,19 @@ export default function Home() { }, [form, form.reset, form.formState.isSubmitSuccessful]); const onSubmit = async (values: Login) => { - setIsLoading(true); - const { error } = await authClient.forgetPassword({ + await mutateAsync({ email: values.email, - redirectTo: "/reset-password", - }); - if (error) { - setError(error.message || "An error occurred"); - setIsLoading(false); - } else { - toast.success("Email sent", { - duration: 2000, + }) + .then((data) => { + toast.success("Email sent", { + duration: 2000, + }); + }) + .catch(() => { + toast.error("Error sending email", { + duration: 2000, + }); }); - } - setIsLoading(false); }; return (
@@ -91,9 +95,9 @@ export default function Home() {
- {error && ( + {isError && ( - {error} + {error?.message} )} {!temp.is2FAEnabled ? ( @@ -127,7 +131,9 @@ export default function Home() {
- ) : null} + ) : ( + + )}
@@ -149,7 +155,7 @@ export default function Home() { Home.getLayout = (page: ReactElement) => { return {page}; }; -export async function getServerSideProps(_context: GetServerSidePropsContext) { +export async function getServerSideProps(context: GetServerSidePropsContext) { if (!IS_CLOUD) { return { redirect: { diff --git a/apps/dokploy/pages/swagger.tsx b/apps/dokploy/pages/swagger.tsx index 11ea0731d..b5deb2ac8 100644 --- a/apps/dokploy/pages/swagger.tsx +++ b/apps/dokploy/pages/swagger.tsx @@ -30,41 +30,7 @@ const Home: NextPage = () => { return (
- (args: any) => { - const result = ori(args); - const apiKey = args?.apiKey?.value; - if (apiKey) { - localStorage.setItem("swagger_api_key", apiKey); - } - return result; - }, - logout: (ori: any) => (args: any) => { - const result = ori(args); - localStorage.removeItem("swagger_api_key"); - return result; - }, - }, - }, - }, - }, - ]} - requestInterceptor={(request: any) => { - const apiKey = localStorage.getItem("swagger_api_key"); - if (apiKey) { - request.headers = request.headers || {}; - request.headers["x-api-key"] = apiKey; - } - return request; - }} - /> +
); }; @@ -72,7 +38,7 @@ const Home: NextPage = () => { export default Home; export async function getServerSideProps(context: GetServerSidePropsContext) { const { req, res } = context; - const { user, session } = await validateRequest(context.req); + const { user, session } = await validateRequest(context.req, context.res); if (!user) { return { redirect: { @@ -87,17 +53,17 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { req: req as any, res: res as any, db: null as any, - session: session as any, - user: user as any, + session: session, + user: user, }, transformer: superjson, }); - if (user.role === "member") { - const userR = await helpers.user.one.fetch({ - userId: user.id, + if (user.rol === "user") { + const result = await helpers.user.byAuthId.fetch({ + authId: user.id, }); - if (!userR?.canAccessToAPI) { + if (!result.canAccessToAPI) { return { redirect: { permanent: true, diff --git a/apps/dokploy/public/locales/ml/common.json b/apps/dokploy/public/locales/ml/common.json deleted file mode 100644 index 0967ef424..000000000 --- a/apps/dokploy/public/locales/ml/common.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/apps/dokploy/public/locales/ml/settings.json b/apps/dokploy/public/locales/ml/settings.json deleted file mode 100644 index cb62b6ec3..000000000 --- a/apps/dokploy/public/locales/ml/settings.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "settings.common.save": "സേവ് ചെയ്യുക", - "settings.common.enterTerminal": "ടർമിനലിൽ പ്രവേശിക്കുക", - "settings.server.domain.title": "സർവർ ഡോമെയ്ൻ", - "settings.server.domain.description": "നിങ്ങളുടെ സർവർ അപ്ലിക്കേഷനിൽ ഒരു ഡോമെയ്ൻ ചേർക്കുക.", - "settings.server.domain.form.domain": "ഡോമെയ്ൻ", - "settings.server.domain.form.letsEncryptEmail": "ലെറ്റ്സ് എൻക്രിപ്റ്റ് ഇമെയിൽ", - "settings.server.domain.form.certificate.label": "സർട്ടിഫിക്കറ്റ് പ്രൊവൈഡർ", - "settings.server.domain.form.certificate.placeholder": "ഒരു സർട്ടിഫിക്കറ്റ് തിരഞ്ഞെടുക്കുക", - "settings.server.domain.form.certificateOptions.none": "ഒന്നുമില്ല", - "settings.server.domain.form.certificateOptions.letsencrypt": "ലെറ്റ്സ് എൻക്രിപ്റ്റ്", - - "settings.server.webServer.title": "വെബ് സർവർ", - "settings.server.webServer.description": "വെബ് സർവർ റീലോഡ് ചെയ്യുക അല്ലെങ്കിൽ ശുചീകരിക്കുക.", - "settings.server.webServer.actions": "നടപടികൾ", - "settings.server.webServer.reload": "റീലോഡ് ചെയ്യുക", - "settings.server.webServer.watchLogs": "ലോഗുകൾ കാണുക", - "settings.server.webServer.updateServerIp": "സർവർ IP അപ്ഡേറ്റ് ചെയ്യുക", - "settings.server.webServer.server.label": "സർവർ", - "settings.server.webServer.traefik.label": "ട്രാഫിക്", - "settings.server.webServer.traefik.modifyEnv": "ചുറ്റുപാടുകൾ മാറ്റുക", - "settings.server.webServer.traefik.managePorts": "അധിക പോർട്ട് മാപ്പിംഗ്", - "settings.server.webServer.traefik.managePortsDescription": "ട്രാഫിക്കിനായി അധിക പോർട്ടുകൾ ചേർക്കുക അല്ലെങ്കിൽ നീക്കം ചെയ്യുക", - "settings.server.webServer.traefik.targetPort": "ടാർഗറ്റ് പോർട്ട്", - "settings.server.webServer.traefik.publishedPort": "പ്രസിദ്ധീകരിച്ച പോർട്ട്", - "settings.server.webServer.traefik.addPort": "പോർട്ട് ചേർക്കുക", - "settings.server.webServer.traefik.portsUpdated": "പോർട്ടുകൾ വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു", - "settings.server.webServer.traefik.portsUpdateError": "പോർട്ടുകൾ അപ്ഡേറ്റ് ചെയ്യാൻ പരാജയപ്പെട്ടു", - "settings.server.webServer.traefik.publishMode": "പ്രസിദ്ധീകരണ മോഡ്", - "settings.server.webServer.storage.label": "ഇടം", - "settings.server.webServer.storage.cleanUnusedImages": "ഉപയോഗിക്കാത്ത ഇമേജുകൾ ശുചീകരിക്കുക", - "settings.server.webServer.storage.cleanUnusedVolumes": "ഉപയോഗിക്കാത്ത വോള്യങ്ങൾ ശുചീകരിക്കുക", - "settings.server.webServer.storage.cleanStoppedContainers": "നിർത്തിയ കണ്ടെയ്‌നറുകൾ ശുചീകരിക്കുക", - "settings.server.webServer.storage.cleanDockerBuilder": "ഡോക്കർ ബിൽഡറും സിസ്റ്റവും ശുചീകരിക്കുക", - "settings.server.webServer.storage.cleanMonitoring": "മോണിറ്ററിംഗ് ശുചീകരിക്കുക", - "settings.server.webServer.storage.cleanAll": "എല്ലാം ശുചീകരിക്കുക", - - "settings.profile.title": "അക്കൗണ്ട്", - "settings.profile.description": "നിങ്ങളുടെ പ്രൊഫൈൽ വിശദാംശങ്ങൾ ഇവിടെ മാറ്റുക.", - "settings.profile.email": "ഇമെയിൽ", - "settings.profile.password": "പാസ്വേഡ്", - "settings.profile.avatar": "അവതാർ", - - "settings.appearance.title": "ദൃശ്യമാനം", - "settings.appearance.description": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന്റെ തീം ഇഷ്ടാനുസൃതമാക്കുക.", - "settings.appearance.theme": "തീം", - "settings.appearance.themeDescription": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു തീം തിരഞ്ഞെടുക്കുക", - "settings.appearance.themes.light": "ലൈറ്റ്", - "settings.appearance.themes.dark": "ഡാർക്ക്", - "settings.appearance.themes.system": "സിസ്റ്റം", - "settings.appearance.language": "ഭാഷ", - "settings.appearance.languageDescription": "നിങ്ങളുടെ ഡാഷ്ബോർഡിന് ഒരു ഭാഷ തിരഞ്ഞെടുക്കുക", - - "settings.terminal.connectionSettings": "കണക്ഷൻ ക്രമീകരണങ്ങൾ", - "settings.terminal.ipAddress": "IP വിലാസം", - "settings.terminal.port": "പോർട്ട്", - "settings.terminal.username": "ഉപയോക്തൃനാമം" -} diff --git a/apps/dokploy/public/locales/ru/settings.json b/apps/dokploy/public/locales/ru/settings.json index 0d87ed159..1e71d7102 100644 --- a/apps/dokploy/public/locales/ru/settings.json +++ b/apps/dokploy/public/locales/ru/settings.json @@ -1,6 +1,5 @@ { "settings.common.save": "Сохранить", - "settings.common.enterTerminal": "Открыть терминал", "settings.server.domain.title": "Домен сервера", "settings.server.domain.description": "Установите домен для вашего серверного приложения Dokploy.", "settings.server.domain.form.domain": "Домен", @@ -8,26 +7,18 @@ "settings.server.domain.form.certificate.label": "Сертификат", "settings.server.domain.form.certificate.placeholder": "Выберите сертификат", "settings.server.domain.form.certificateOptions.none": "Нет", - "settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt", + "settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt (По умолчанию)", "settings.server.webServer.title": "Веб-сервер", "settings.server.webServer.description": "Перезагрузка или очистка веб-сервера.", + "settings.server.webServer.server.label": "Сервер", + "settings.server.webServer.traefik.label": "Traefik", + "settings.server.webServer.storage.label": "Дисковое пространство", "settings.server.webServer.actions": "Действия", "settings.server.webServer.reload": "Перезагрузить", "settings.server.webServer.watchLogs": "Просмотр логов", "settings.server.webServer.updateServerIp": "Изменить IP адрес", - "settings.server.webServer.server.label": "Сервер", - "settings.server.webServer.traefik.label": "Traefik", "settings.server.webServer.traefik.modifyEnv": "Изменить переменные окружения", - "settings.server.webServer.traefik.managePorts": "Назначение портов", - "settings.server.webServer.traefik.managePortsDescription": "Добавить или удалить дополнительные порты для Traefik", - "settings.server.webServer.traefik.targetPort": "Внутренний порт", - "settings.server.webServer.traefik.publishedPort": "Внешний порт", - "settings.server.webServer.traefik.addPort": "Добавить порт", - "settings.server.webServer.traefik.portsUpdated": "Порты успешно обновлены", - "settings.server.webServer.traefik.portsUpdateError": "Не удалось обновить порты", - "settings.server.webServer.traefik.publishMode": "Режим сопоставления", - "settings.server.webServer.storage.label": "Дисковое пространство", "settings.server.webServer.storage.cleanUnusedImages": "Очистить неиспользуемые образы", "settings.server.webServer.storage.cleanUnusedVolumes": "Очистить неиспользуемые тома", "settings.server.webServer.storage.cleanStoppedContainers": "Очистить остановленные контейнеры", @@ -49,10 +40,5 @@ "settings.appearance.themes.dark": "Темная", "settings.appearance.themes.system": "Системная", "settings.appearance.language": "Язык", - "settings.appearance.languageDescription": "Выберите язык для панели управления", - - "settings.terminal.connectionSettings": "Настройки подключения", - "settings.terminal.ipAddress": "IP адрес", - "settings.terminal.port": "Порт", - "settings.terminal.username": "Имя пользователя" + "settings.appearance.languageDescription": "Select a language for your dashboard" } diff --git a/apps/dokploy/public/locales/uk/common.json b/apps/dokploy/public/locales/uk/common.json deleted file mode 100644 index 0967ef424..000000000 --- a/apps/dokploy/public/locales/uk/common.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/apps/dokploy/public/locales/uk/settings.json b/apps/dokploy/public/locales/uk/settings.json deleted file mode 100644 index 766a1bff9..000000000 --- a/apps/dokploy/public/locales/uk/settings.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "settings.common.save": "Зберегти", - "settings.common.enterTerminal": "Увійти в термінал", - "settings.server.domain.title": "Домен сервера", - "settings.server.domain.description": "Додайте домен до вашого серверного застосунку.", - "settings.server.domain.form.domain": "Домен", - "settings.server.domain.form.letsEncryptEmail": "Електронна пошта для Let's Encrypt", - "settings.server.domain.form.certificate.label": "Постачальник сертифікатів", - "settings.server.domain.form.certificate.placeholder": "Оберіть сертифікат", - "settings.server.domain.form.certificateOptions.none": "Відсутній", - "settings.server.domain.form.certificateOptions.letsencrypt": "Let's Encrypt", - - "settings.server.webServer.title": "Веб-сервер", - "settings.server.webServer.description": "Перезавантажте або очистьте веб-сервер.", - "settings.server.webServer.actions": "Дії", - "settings.server.webServer.reload": "Перезавантажити", - "settings.server.webServer.watchLogs": "Перегляд логів", - "settings.server.webServer.updateServerIp": "Оновити IP-адресу сервера", - "settings.server.webServer.server.label": "Сервер", - "settings.server.webServer.traefik.label": "Traefik", - "settings.server.webServer.traefik.modifyEnv": "Змінити середовище", - "settings.server.webServer.traefik.managePorts": "Додаткові порти", - "settings.server.webServer.traefik.managePortsDescription": "Додайте або видаліть порти для Traefik", - "settings.server.webServer.traefik.targetPort": "Цільовий порт", - "settings.server.webServer.traefik.publishedPort": "Опублікований порт", - "settings.server.webServer.traefik.addPort": "Додати порт", - "settings.server.webServer.traefik.portsUpdated": "Порти успішно оновлено", - "settings.server.webServer.traefik.portsUpdateError": "Не вдалося оновити порти", - "settings.server.webServer.traefik.publishMode": "Режим публікації", - "settings.server.webServer.storage.label": "Дисковий простір", - "settings.server.webServer.storage.cleanUnusedImages": "Очистити невикористані образи", - "settings.server.webServer.storage.cleanUnusedVolumes": "Очистити невикористані томи", - "settings.server.webServer.storage.cleanStoppedContainers": "Очистити зупинені контейнери", - "settings.server.webServer.storage.cleanDockerBuilder": "Очистити Docker Builder і систему", - "settings.server.webServer.storage.cleanMonitoring": "Очистити моніторинг", - "settings.server.webServer.storage.cleanAll": "Очистити все", - - "settings.profile.title": "Обліковий запис", - "settings.profile.description": "Змініть дані вашого профілю.", - "settings.profile.email": "Електронна пошта", - "settings.profile.password": "Пароль", - "settings.profile.avatar": "Аватар", - - "settings.appearance.title": "Зовнішній вигляд", - "settings.appearance.description": "Налаштуйте тему вашої панелі керування.", - "settings.appearance.theme": "Тема", - "settings.appearance.themeDescription": "Оберіть тему для вашої панелі керування", - "settings.appearance.themes.light": "Світла", - "settings.appearance.themes.dark": "Темна", - "settings.appearance.themes.system": "Системна", - "settings.appearance.language": "Мова", - "settings.appearance.languageDescription": "Оберіть мову для вашої панелі керування", - - "settings.terminal.connectionSettings": "Налаштування з'єднання", - "settings.terminal.ipAddress": "IP-адреса", - "settings.terminal.port": "Порт", - "settings.terminal.username": "Ім'я користувача" -} diff --git a/apps/dokploy/public/templates/alist.svg b/apps/dokploy/public/templates/alist.svg deleted file mode 100644 index 37d5fdcd9..000000000 --- a/apps/dokploy/public/templates/alist.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/apps/dokploy/public/templates/answer.png b/apps/dokploy/public/templates/answer.png deleted file mode 100644 index 3fca604d4895423acefc7a4d9d203592d4a81ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3775 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 Da`o^h diff --git a/apps/dokploy/public/templates/appwrite.svg b/apps/dokploy/public/templates/appwrite.svg deleted file mode 100644 index 2034a812a..000000000 --- a/apps/dokploy/public/templates/appwrite.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/apps/dokploy/public/templates/convex.svg b/apps/dokploy/public/templates/convex.svg deleted file mode 100644 index 8622c4c07..000000000 --- a/apps/dokploy/public/templates/convex.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/dokploy/public/templates/erpnext.svg b/apps/dokploy/public/templates/erpnext.svg deleted file mode 100644 index d699ea2ad..000000000 --- a/apps/dokploy/public/templates/erpnext.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/apps/dokploy/public/templates/evolutionapi.png b/apps/dokploy/public/templates/evolutionapi.png deleted file mode 100644 index bd9b3850a53b5524e9c04f1d2cec3a290bcd34d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17605 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 - - - - diff --git a/apps/dokploy/public/templates/glance.png b/apps/dokploy/public/templates/glance.png deleted file mode 100644 index 54fc4131137d09784f3057b58cc18afdaab13ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7946 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 CNyW7Q diff --git a/apps/dokploy/public/templates/linkwarden.png b/apps/dokploy/public/templates/linkwarden.png deleted file mode 100644 index 843f681eb9fe01e745aa4a4d2935b69ebde0c825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80831 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 BDb)Y~ diff --git a/apps/dokploy/public/templates/mailpit.svg b/apps/dokploy/public/templates/mailpit.svg deleted file mode 100644 index 58675a267..000000000 --- a/apps/dokploy/public/templates/mailpit.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/apps/dokploy/public/templates/maybe.svg b/apps/dokploy/public/templates/maybe.svg deleted file mode 100644 index a4a877360..000000000 --- a/apps/dokploy/public/templates/maybe.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/apps/dokploy/public/templates/outline.png b/apps/dokploy/public/templates/outline.png deleted file mode 100644 index b241f01d77ba1fc7f829ff3a577a94b69136ee8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2158 zcmcIl`CF5B5}!9A31GxXMG=w^v=QXcAS#GJ;>uQ#DtHn>G>9&72^c`}BFSrM70_ZI zs$dl~D+*L@EK!a^ST1cUQV};*0x=OhV#o$axkF$3H|#$1!^|`D`Ofvs%r`T9`#$g?0P0;8E>Z?5?-_=NEBLjN`tqI!#|F&PFBFQ<@rdbhlJvH_li;+t0Jl`| zoj&wn)Ey~HoA4ZC& zBQb>al00t#ff3ZMF<;%-_3zEpfz+Sx;UK+STAOAnC$iWhNmT8{%Cc!YBFq@cvO_-> zY%i`Uv*vKKF3@!1@0Z&GF=}J}@G&B9=uGd)SD?1-im}fPZKiXMY_tbC&zE&xda@-1J~GxJla;#*TdN(ReN^KhIF|_KFufS^Z61m-ubfUxLB85*CxU7s%lAS zL9@BBTf1d#c5EZrGf;iPcyrTC!YN=FdGk=yHwRK$y}*hX1p-OoQg}j^0hb=D?XyB< zn9k#jSWINhVZf=?SZcqd5kIsU>kv-uGEc;WqN9;?lJ^1`xayGb=Bd$J!+4M`?8#S&d> z%{agRFV4GOq@xNDkW1>>19__t%4TU5o!X=ukE?%bZ7>s~^mK%ZG>K>Hdsll^+@gk_ zou`}b=as6Kqs!&vhJk`%OyqbROfOHp4E@A)N^I($G{qoQ33JDHw$>8VgM)Xcy;cr7 zH)zJUU1{4us3Dbbr&5?n0O8eR2uSTfad!d0x4>N`0^nQ7li%ZkgNNKuCjbWsPpVxB z@rc?AFTYF433dJ){(oeF{trp6*C&h*-x;~^>b227AYj%nJ*RQlCtjnAxbhi?ke=fY zP;w|dhXk;PymbUXnzbo}4zSzH^)Vh$HzM;i)}eOk8!~`}{Ez6K&$-Df+eSxITtwGG zof8ui`;$&TO{=LGD|Y<@3{70U*(|ov}8bAnqqNP^!E@N`oC` z&l7F%;9x-s@b^D%H%QM%fHTWwjGOHNhGykcriGcrIJl%e6?kiPUMM*YN}7)a{N4d* zduUjG2Hoa@);O`t9y}HhT3N?UdVgQM6h{Ph3}wl$gMIc8z7Q@RHEJ$BQj<}xZ6>0` zRC6y<-C?ozE8qAwK)F`s2se=&i3O&(bUZ=0tc)Z7l=Q7YPvg5+po1OKmX@VpY{c^< zeXi)_pcDE9DGu811E(8Q9M6f($2x zN)JNygiE0XjNNYfrLYHW^~=I+DMf$qWSh{Dhhx_B8_jyA|p86B{&CQQ#&VV;eCp zT2$&13?Hw5d+uy1!tzyEGsKr*_hDf!mGf~Klsr;LRDG7`=FI-C5BYcXN1!H`b01h$Y(Qh{yIfO^A)odgA=P zY69Bw!$uiYd6n>~o!DTqgpUKUpeCpLs~|^zSygR=d2ipceG$?<)WImC=x@&AdBRk` zf-K;t#8UFJAlTnGrFj|V&G7KU>q1qfB@pdyRo!62PsxTuWz$Ut_6RKs_{NyRlsv_t i$|u1J``@kLy`=Yc-sU1JeJD225c2o!K^1@Fef1~y9Dh>) diff --git a/apps/dokploy/public/templates/pocket-id.svg b/apps/dokploy/public/templates/pocket-id.svg deleted file mode 100644 index 0ee89b14b..000000000 --- a/apps/dokploy/public/templates/pocket-id.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/dokploy/public/templates/registry.png b/apps/dokploy/public/templates/registry.png deleted file mode 100644 index 39418022e3363b38db53f6ed913ef9ec66099877..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28962 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 - - - - - - - \ No newline at end of file diff --git a/apps/dokploy/public/templates/spacedrive.png b/apps/dokploy/public/templates/spacedrive.png deleted file mode 100644 index a10fffd526c657f7efa794fb53dbb1654c9d8478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326880 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 )L6Ejfy zRq?g^@)kW_<2gISQnRq3lS3%xDY{v|-1)K>2>D}`^BfJQ4XSSN!UBbT_MkPzMHODh zM;$J*g|qw^GjQpgC_z!WqxwF7XA;5X;U5ov8^Sk50iGiS3lbec2b=nOo~8lu?C^( zx4M9HD^_le+gT(5tOsXR9^y!*R8B{c7C4GtH9h)Et&n0-qn$o)s`_G4CCBWEF0;+r z5}2^+=cQSJt_8NJMc9cTBJ+ViEi1wXeCY%MD}-ftkoV>sbSqjg1In>EuH;WxLVo^v zb}Z3>KUu21@E6~afB7GOLw@O3pOCAc?gbZx@;VKnH=cru z)8!-yjKG2|d;?ikPs-{$)e4V7Osv~0&cfGSGz}g`bv3Bp>PjYSYCU(y z&lCbU&}#0cUmEI2jE;*ttuc;9nZ5?}My;HS@4Hr4Z_dH0RE9tcm8F?AKX}lM>;O8J zLVHGp$QXpTm7W-e0)}35+Nz0C*6vgGaX@(OZXkKi{4ag$Bs1U8VK1c_x)@xiM%TMF zD(h>K1iGZSrdl7-z|V;Tc*X;A->Vhpz*0LTH=I4(L=!loA5d7WXCi$nw_gACp~%j= zZDdHTi%#VA+`en*_Zq5yzw%c|y->7sdalSNy$7ZefN~{*UlQ5>5#;Lmh3eiDemg5m zC_#)Hyt6>Ge%S>Y6n1P>*T2!+x9#x-=#L7!zZ)`JXI9SXEO9Ud9xjz}6c%1E&W(8Q|0mA4hSirf=;Ji_}H7Ej=$Q+Z>0$fz&p{mVZ#za>q81m?p zFk96BOm#JI7xfpY>Y- zszFZy?E}p?H{o9Lpt9#N?)xdK_ryQd10+Hejz5^vGCw73+qT_4fZi1Wx~1U!HdN2oh`||wRame#ywPpIVuSyo zONqd_7c=+_ZF3(KADnv%@w9+_0kD_szFpOG!8u#dA7=c;7O^`WpA^~cAk&q|AAR_F z`Tm#Qlqdh{g-rL$zVl;~I#^JeIn&+!>bWSu-iAoauW1G-b8XQWd$xZrqgtnmx={CG z7e{Stnx5QM0bf~H-L-XB^_6249sASIttvYSlfOu}x&w2JSM3Bw4}1OoArM>$ItN=x z?^5T#escR&ty9;41RN zo(G|?e-e==MfgLJ`~Pw$+!rjgk>boKyM_bf8g)#?;MgZHUggedJm%|U32fW8Jv4y+ zD7JS)-#M@EyIq|OuG3q|29wc(JRCd>OvDVl)uY5gql8_2nFTPiK)zmNEde;49HCZ( zr;|t^~Vv&z<{NTQK=65RCqSvNyY-o6`!m z(0`zX8@r!5QUHCnnL=S_2RU`D&(GBxT2t}TT&dfLB5^a{ET~whZ7Qs-3-#*n37FYH zmI-uIRaXH2wl)8b`zVDC!WXeXe)9eGywR!E*Wt&*_Q~RCpX5;6(F5g)#*1bSK@MwX zC_bNm2l!@VE6{k^!)HvftT5rN z=WwPUwDZ9{jb4f110vI>MXtVduwLu3B*lrroDZ6<0PI`0mDjB+;iNsDPD!K4BYmT| zZ`%gYZ#y{WqrZj>6_HtR9_XZnwD+>IB$X* z2V+kY<<6Z8`N4Nymyi4(pOg3hYnL+JqsX*;kuw;r`^ecTXOT3)y9V$i!7KaW+~ny)O5=AR@2wmgL&7q7G$r91sDU5GljEiYkgfYOgnB6w!4LGtd8bBFkCSitO3?)jbn3KC9^V#$kRuv`}ag} z$9|qst5OuRMg^X9l7@?0X10%<^gp+W#ckW;1<)VnfTi5N9uyQ2yXIo|89z z^p4zldMEpPlVEoWW{QV~dM8={jtaEs-f@-bhy0**5*~bb8U1aGj~DES6ZHHuvky)1Fn3Iv#?62mv@BwL_D#dN(I=qOYL+`n9f4 z#!i7M`fj|{(awF>Ug^OKAejNoYu3WG)b7+A6(k{gJ@-8@oCVp|_p#!7B)RXAM2Gjk zX#FqsUevl>w)&u1FPQ^o9iScpM8j_zRE{5}lZNBfNXhlkSLk<54T;*x z#Av}CzwTYuC{W*b(IC}VWj8G958t8#{^(WR4JzPH4q*K>4o)^~W<}{>&qnwW55u1E zS{Y#Zd`V^2UcE5*lb)a+2HqtYbB9W9oUGqqBsl0tQtTx8nkOC6eXdcA3yB7d>eI8R z5^}Wi;r`{Lzd6vnLuC>{V@JTB_q*qKlj|Z^es-i{J?fL*aTn==62y+ZR!PGt$5NoT zXznEtk3jjhZQJ7s&>t4qy$#@;x8(Tf?;7G{nqg0PNS%Z#uo0mX% z@&g1Ghm$AGb`hebfb!ct@#>J@}+mFqvB>6(7IOS zj2E?faD&n{9(ia*AYAPXm=xh^HDXuOiml?HoYXVkwUFJUK7b0t{Kw~2tKg8 zPII%72vrwGNlk)cOohQ`5e8w+8i~%(rOM<%x=fCW;ZW>to(d)rJR@@TG06VA(x|#$ z$8@lEN+>~jkGgKDwrhd8=x^J$ZMO@cKThEMaXyDYGbI~iv;nP}*GH}q0}J`u#j<0o z*4t;;167H4Y4`2|lqJA_^(zOQTh;d&oKGSb7mx?{C;7wQ{F?mi)qC>92M((324}4T z-EdTcH1Qh>D0|fnIHRWq-fdWghT0c}Dln*kz7Rqf^i-=cOe#F)qy!o^WCy#?i{nF|dtE13akZh!MkY%6->xGm^L@LssK zjph3Q#6c}pKwP2ML&dp?AJLnDkihSCs|1FVLW%ht%KS++N@}1EB!ERU$I?Ujo!2pw zut7hux;g?M?PDK(9vr*&v;5s9kyu!fwBQJvpa-5@^bET@t(ocr<6x;jN0RAZk=T;!VV;}Ox z#ie}tGvAg^{+F-H2Y&6YJa~OyMA=H%O?jcCI0$ubS_MnB$yU@dK+!@6RQo-QGrKm9 zx!>GQVxTy06k~QF@!PXU3#+WCqWm8X(mqwMc#*xBWKndVj{fH&!b$Zbs;X~wABfP} zN6hia`Fn7J_)-<#V#kn)M3oqoYB*Qi)Xr?;hcJuJwmO zW0nEOic@DKb;lOtI1Y(PrlNrtYh3f0E0Nu^BGYFVRd*wd$R$p=A_tam$MF2jPau1a z8tB`z0mgZ6wD@hibpZXQ@#$>==Z})w?qvoMtg~!^3=G#0*S~rsdp@ePwgT|Bk5sz(vye2^UKQ%`Qdk8m*4rnJtxopYjLN~Sc<;c zyyvz8zR=y#2m!M4us*>rlbTK%4%SK}j%^5|t;H;tm{!0I6@k5^_|X@Yen5TJ?SFQ{T3CEkJ){WBPHWp9C~1cywh)pv7C;;Q?hhhqk~j6Ii{M)y{zM zWB}8%@~9U)R26=Di=E|VJ~{p8Vk@|7!8jhdRMTGM6CZtEUjObrx%2c+rU%opob2!r z*{*nn1Gp1q=mJ?O7T2bOPwMG@YttEz`lI|XYnUL}&)f>=oa>qXEHVa#nx-?6O_ zLm)Cal=iaifoN&aPC}@>-?RWR9XhB$2o&PLp6|K8PXT;-y?%WHbz_)GGjv|~8eGQ= zf;M)pX{I){9ML(jO@e5(=qy+Yd%j1iyY4S-d93o2UGL;`7vxc4xqEPTaR_jf_GC`^5 zC_?P&J=IF?2#qpGS5_V2WrDyU4ME)_7{BuqC!CX;)E9H2z}*qy>mm>SC4~E0n}vx% zWA)1qf%M>=XsX``#0nkaYgT*~u*@v8j!KX^sn z|F`bS{;h+hng-vtXL(&&Z{kcEmS!OU=?GwrY1G>Owrc;Vmi-!dFS|iV%P#lag7xTU zT6q5u2%akE`x3092{hZ&L5-*sC~wEF0X(6isfI;T?idCQ4{jxp$8kYbt*=j^l?ya` zjU84xRbz#(J*=RpA*5K1PNy{h-LVIIUhK|uaPH9c%=a*v3&t4XS#9EZppG-I>0AZ- zH997vfVF4Q7FE&L^ogI-Z{AB#WW?UA&tdRbYZ4af=Sjwi8*@t!>Cn2Db%NepcTUKr zGGcYI5MqmYu+F4!p2tODFM{_|_Ma5F z`U(Vh&6+~@9ni&{p`LUvr#P5k(%+5x(KoEVZMO%Y-y}}GEhGIFf^%#3DYMiW+N0%V zTuwqv3a74Bdv-y&H}Nvas_I2~O56u7J+hX7n7p;AS`>iuRX_!j`T#p;0go#J_FZ_P7A_hdzKG z$G&sM0W77arR!=mymeVEG^FZ7&)BIr;5k}kGoW3JMVXn&x5cvV#N8_jgrM9whQ9xF zj>lp#ok~`~k!tnlAA3<={q)b}eIL9$^qwCduC_}n0XY<%9aWWGK`pIHOFERU1ulTK zpj_kJZQN+PMp}nvGdO2a_h-zWZI!9v5VVaMh8E~Ionl*Ty+7Knfk!p>BM_fZSGB8m z1GVTPtrxOX-L--{n3ia>a7|OS(NL7tzC^Th0gU8EG-tsHRFRzKJYV__P-kXJMSt$9 zB32AIRT!nKYf}-oOPbw6b_OJlp6(i&yP6kqF34Q7R&wPt8Er#IS)-gg9?slP?|E?j z{@i=$fO%%v9;|8a=)8h}gzpEncpQ`WovG={k5j67RIf3`JYPtLGtkfp4IP!>a<~9?GFH*uZi6MQ>5;H8Jk9N<5{ngqPUOvpX*+AQ8C`OZQJbt z=qpF#bt>RKwEf(Ign}jJ1_y+)jj3DE!(jcw_-Rr)C^!P`j1vSsfjO7jMqjOd`PrZG zt184~98)?z=<3=k&+{X-{grS0Q2y{gd0BqxZ{C#$Ki`Y&>gb1!T$tY|sC{ECn>FjX zLHn7qGaQS6gk8Zk1u%=+LkLD34zek%rh48vCoH_(qN+|?DTMj1?s@P;cfoeud%iHw z;f!T8z0{`o5!+yCP7r}!(?Wety;z%m63^VXmDPcjAVkVjmun^)>dFtttG-qS2==TC zZ6BAJue;}i^h66cKsQ9>j0hdQ!wiVzxgX2gszvuJ(-S@NeAiIldyCtsK%1O#?irxm zd!(aPa*-7p3ToZ$tlw@Ty-C8_aRJSBNSaCw!aa+mK`r{W_;{BD zXq|CjVYjAXp-pXv7{E${EvaqLoRp7g-F7%{MUE${>Un#VqCz0;SS8`~O)qE7pjUqB zdDq`J)OPp9yR@&P6GHkbXXW1~6;C$rjJ9bjdn{`~x+)Q8^;%nzmJ@xYtas6GfptaW zocFZJD==O$^!KO|Jt+`|oRwrX*KkF^7|zuCtT7Txn%`iCHhqrL_b9;50#Hc+^N41h zrAM8+MrV=@ly#L`ujf7c+^*ZYHPfHZ9Jtr90*W;#17vj}q4G|jXKmxnp!99#j3iV_ zW`V7K&oXC2f!X6aH`Oa8v>u6@{K9e{X!w+?#gPU$k7DnV(#|ARyDSOdcyi_pR^}lu zMBe#5$aGJHJ#X|NDd|3|p00w9i($l?MZ1B?Oenu=2*qt;aoct~0QyZ1#M@9kzb$>| zPUcb!pqRFi?buoLsFjQ+PUjb{52yA?Pwbl};EomHt%QQ*QQlD8z4LMwek$Naop?BX zW)iu)xR5XW*~{{^-~OSz?^o~0{_UeM9BDvB!}ENGq3z9f>)NDAO1A9J=maKpHAH)y z_pH3iwX_CT`s$Y2rE*@U6_h!z4B{k z>GhmGI1fR2HSxDAR|w9<={MKO5#^&PR^s8LWV@%_y?ZG?`0nfSFaN=d^2}ekly4Apn2 zW9iQQHi5vb*NceARq@+N(b)C)F>KbT%h2=p4cQ?Uy8M;;J4^sf!im={)pe}1s#1!? z^hDdx?`N-{1v-a>l^GDTc7_NTF}7k;Kcl!DSf9hdoZbYDFvjv>pJ1=u+&(r z0>rh-l)dvFWRAuDpd&D zsl+TuXCh8%_RiLNltG07UdADOZ0P#N!dxrsgdegre>78V6F=6mK_O3z`c4QAVx%&O z?4A*M@cSbB?~35A%vASo9w<|=@vbMDb5K{qJsUMEX3#zBmVn&0ZQH{K=#N9jh!6RD zH+jBm0vl`cXTsiv z75IrFyB%bIMfsDDeocP*%G+}113Te^sg=Dw3BjpyKDEJ#q5{Cph6ID8%>Flver<14 zsXz(!I z2o}%{!zQSX+L(U#OEq~m)OQ*pLuSyddgxiwQ#H+k9XtdHBh;R^EgdRqZ73Yy6HC?J z`z%xvhmz=L?asr?_}10<5CCZE<(jqQVXu#8*l=a9h0|by1UGn3yz}QZ-}i_DpG|5+ z=bEu`bDkYD?}o7^V8A=x1M@K1LPmc|=X{u5HtEMwEaoPUUu4tqVGh;$JRQ$>Ae>YY zJ(`Y&1v|Od`ktdy>}XGP5|O(UzAp04Cyw6eJNr41>zw^O!9TYngEr`{lCzQn;2Pv_ z+qOM?fd07no0bb9?8+!Gr>dH2z9;yH(!FigR6oB*0?`5*>SHp{3@_}EuEBiO53XoSfX(|Dc;n!VOxv9au zUW9FWdkgCA+Gbswu8|WBKmsQ~@H0qWuz(qiK}NE&z4$1nDHt(%7j1iAZBr0AYe9Y&rLOL<<(cpv0PeF04Ux z87R9(d{{Zxi|ylHy$Zp#A-gDKz#$Ug_)Nht_uNLr(2RW}v91iAs|S9)zUz_10|%~i zjVN9g80$*>x&HH=b7Dp}z}San4aOjLut3-R)&lu);JswM3b!hNz|#EaB1nchLS_0e zpd{IT>G6@n`-@<1@mye<6hs+FT^$7D9{jn;gBK5iaZJu(saFW+&0(b9e=eN_&P7g5g=b@a^NNt46rB7u4<)4A@UaTo}J8yTCcYN2Ozu~U$I|BvcPgl)~2E% zTm9zj1=Jl?UklK4qU4Oo~Z29zBUc)p{t(l z4lyM_*7&v-chV#cTMK;YkKXhOdS{0u9`e-6q0Ti|TbE*-D5QB1h&!G0z5v9hi<`s{ zkSlw{Q8EG5b)l^y1m|^PA%wVrs;^)7%Im<6=qA<}vTzK~0JloTHZTg_@g?Yl@8RTT z4kbTXW`X~z7AEv#N;-p`9sG;|urZRL9bNk(sq2yNiR3Bll(eqFs%u#zx|dB_++;OB zdM3RDLRRQbI*E;JGQ?Q6nieXyNw%u}%BmW3Q8S5>7ro@ZOAB`@rVFXcTAwKGe=v~9 zX;eWMgxComOR77VOMC&HB&?A_Xu&%V_u}--o)EeJame)M0aXce&opqsHB%}DF2{MBoLB}RKJSUgh z-q7FC?pFf468h&si-OCb%3l2a^5R1N;xpfr7e4-DdEW=`$kkhWk)0?{^F_6N@psee z?Xi$l8K9u8r-~&^)qWpcD<7*u4c3b6EWFs8zGCZVF8$XQC6bw}5zEk^{h3B>w2hCn zJnk`}0;y>3oQ_ppYy2o~`wT=URMfyalnMBKWXjG^0(=??znRa)=smRhs%zE>;yD43 zzUvRVwr>%8W_iwHt47lt@qw1Y=sb@m8PoP|8gp|-P^kz2(Kvcw@i+b#h|I*XQVSGGT>r!EHK?{9$oEzMP4|Del z#{B5Ly@h67PH|<{U8tL%e@HRC$fJ@hJ4a!--~Z2^muLRU9ofIN7hFiw zd)^4Lp@gC>pUvvQL-YLG2of%pE#Ws~ARSxass`(*o*ydBcNTCSO@xFw1c2JJ9^I;u zp#@>=$N26gUll{@1k$HcKn^wK-4bPMEOClf0eT4xC@`Tx~pOBTDQ*Mwkju9%Yp0?_vndpS`J&l)5%T+4C47$|^60Ga6z&Y&iMS&Ev#=E_^g~2|f{vxL$ zVuEwelfB9a)3#I#DibttD!t$-qP7>=RPIGS`TH-*PhPtxci+F0Y0pZvy}SW14g{$c z-qA!COSRlmz_t3)mmr}|5G8qpX(?)Us}E-m|E4uDt}O zN@P0O1%7IH?X!ywWCN=%bwca*EFXC-$v8}yDG1mphfC?L1%RO=-cA?}Hdra?MW zkAK#Mg#qfzWCZXK3X|Km0rbZe3*Yz&U3X@m_L{~-##y3C(fclJ<;=4JBHCcr{7RDc z9-dOOz_$`lWGm`s0&j``X4+(<-O(y%UByG8{*Fu^u3LGB0-XiOWufj`eZTz7@!S}JW;VdSJ}ngXWxkD< zEgoml4p~{X%~f=$#e6D&>QtVu1+Y=sw9!jC5q92*#x>958|E|8V7=|HM0%Ri9^|CY z3uTk+f*)+FbW)oHU1iIO<2(`e|x$}8bNJ2GYA-33?5txgNBdYpMd~@GKAwIyPAsD(En<^g6|r z<1)+sGYbr&Qp(kQP7yyuhGg;6;o!x39ErjB@HVLwA+xDmcdRm3{aY6q#;7@C=uZ-it z5I{MTTs6s$1U75|z8NpDQ{{@{pg`%D9dNFz=K5OcBoEjF<&vn{Njtgkc93`8ejuOt z@bfasUM}v6Ob^-q2x1| zJOZn7X_yvp0?&?DwW+@DdXlrACz$Bx484SP8J_VN?e(1ZO6oVcJ~0V8N7T)k0G?}r zZKj%=rG00u$YkIgvfm$NE{yodC;ZIAzmHzJcV8hnCIS6-1_kJ}*n?>Pjd<-aTHnlf z9i6{trwMnJVHb2Vl_ga3Gz(X@aHzAI>wOKzntNA**eIT;Scbd9cklfng!e?`Le65= z(%TBKLw6htoWllg z5(T^P7e=0WZ@SfUFXPPq#M@-fgZ?;o|CZPr>sIk}^?agSUS7%zUwKVF_fNhf&wlW( zT)n;*fUP_kmHI4drFN8Ez@(w!ZB@Tj#hIOsUD||l6omJ1>?p8ib>LFNt%Ck7E)-vW z&u&Dwd=6p(O6v~Q!I9R)uf9ecEZ24-oS>@cs;`{V0Kl1+u1gfOsep9F(%N%u=Ml8_ zY#o&6(FQGwYkPlbf?PAz#PMm=Q+KDA++h5EmW>jjt=b4xyD7II9jqg$>|t~b8dVDK zJqXD4(ZJ88WXs^SjR5|&7GxRVy9SJBzO5i>Iu+RNrwl#^{i6;L$l8V|4fMnDnQ7U2(?Z--y92H1=7+*8tw$-J`2e zXsGW;m2((9hkf69z1KjFwsJ&>#ie8q%!JQmv?)&4cSXRy_O=(8} zuvq~3nnBQiu2swLwx#vJc{IittoN1$t@pmMOa{}QCleX0Zv2D(W5XJ+VP@Sb7M@$SPEsf4 z<9DBGQnS+LG*@Nkj8C>}Pl`<67J27$5L_gk09GovXNPyw4uAlk8_Mk)IN!F13eY23 zwzn2#rj&;cm>=Rx!`h)mU#*&K zRlJ!1=TZFF3c?-!yFc2h{pbfjmp}Z6FUm9j>ZMHYOoE*p>FEl|s~f>U;LVI)$cE~N zFp54duGNT0cT;WEW=nO3hIc-a6E!orpXrzB?IN z1*?~BVnMYmy~F8@XEezWH|B;@kZ~SA2WDa#{WYy1ozti8oVgV*H#rnC47S{NlYVYN z1Ap}9uTjvVPJ{&r&_g6;gBgLgwN&!8O6png=u>CHQbLE(WyJ^j=_vf8d^uqozVHQjJ%>AfE#!nSFlJui-?1ahgq z@TY54sg`9(o7~m+t@r3HEsZAmezINrW05OuyOxYcrFWbx7=g2nuuX8IxIv{bTzP*t zFZ6ADC;@*QKwAm^*;PnaAdt4bT6xwij%YDR+9RO?K>D~ekKqf}(M&xkTQE{& zCxZQAuU3ssw*n1E*_Ea+4JksDXM_L*!A*XJwuKbi?#%(_3@haAJKHF$o0SEnE#OtR zXxgZoW8a^5IvzS}Y0>OQepcda$PF%{snbu?UV9e#T)@bI^U4aKU8h?6IqU_Vd7m?) zd87T@o!)q6eb*-mE83}qPn}afZ){nwg%$T?{J`fq6mf#m!SdO72c2tVS)$JRzng0I z?77LAzlVw`=KW9hhnuD}-&?av1j)sP-mz z!$QUb<<)ghH5Hyb2*Z8v)gQ|r|Hm)M2mXz_bMHBwh>4{T97Gy*cjM$?1{?~&vzB&) z&WeO~H05th+r@`r%7U zHPY5*sBPCg8@JA!oS7TlegvKTaezX0?O5aaJ-TpZ#m3fB*B^#>+Buc)>~;1$)mQXn z_s4tU=j1hUeic%k(b6~S=zM^miacNkL9e%-HOJFv(L5`4ud2Wv$E&H!G z?0-}oF~FWv+MAM+xq46F7H(wlhCAlZ|JE0m)hVSU@#(O>68gtSo%i z>WpG~MxP*Vx5vVvwx2*YMZ!K>>fZE8P5L}U3Hz%_KKbz%<(@o{%lF{WdoEJ>lb?1{ z%9qiLyp+N_f|ce3{J=6DU_jimox<)0PJpNr^wy;rT2xjo8mg3DG_*7Fuddyq#&+Sd4U_te|7bnGb0d>uXa zSz7kmXO85v7zOv)=bK3YOvxmR7{aM*D%vaAfom!8rCpf&8FRnBD@Yq}VO6q=8PUp; z0>rU?ch5!@QiH#)<^|3Cz;cO&43244>FgX9m#0djb8679b;S|I2L{2@4xf?Vb^ zl*3kMbP5rbzxh%@GcC{pby9ltckQ390t`!VYnmu`?p(^ZU;cso>Hqhe@=Jg7u3Y{6 z*n93awAB^#mh!GYS6>*4@4*4&&>d-NF)zOh3&$bb^*W8@N3x}A(E6?AvLHGUTl&sKo1YK^nn4OqClJrLP_K;*%v zL>|0+1niR^r=`HV*G4%qpY+}vsj2K_9^7w2a@%%00s6ZYY@Z_*;{X(TU>j{s(X$~* zSI;x^7T4X5rs7=w?DU4WU_}E2%r;V{c$+5(#~>l$hzaDg+%AQ*YSqJpM0`uY$c3v1u(0`D4{FRJQx8omMN#6qEWl<0HC zDY&1cP7a-_=nsmcO@>~A@=34ICWD};%E+-E9rKt&Y#*ratxFGuTV3`<88yhKS5XOq ze7cDNOH;slkUn+(G&jI&>A@KRTSg1OXt<}5kiw8f#{jS#og1!OBrOBTkX%oC%K0OJ zd0Mfa^^Tdbpv!oNXA>O5z|9A&>G8%6IKM_PVlnxcU>jIeWAkwt73Y(+7`52-p^l!+Z-G+J4Tt*r~lj;lTz;e5rpp?*I4$azR`HQ7a!Ak zU$oEp$h%;!lUo^m+io2|=R^MPZO&3Tj9p4V=r#Oy!z6X0GCmZPCMGuh4?3!x7OmVA zhN`~D8l0Ei$cz_f>wZ|ma*V*a<%>Q|a_8=)y!`xkOIHpOv`>y0uV2NFk)u#CMs$ryws|uw8cMM@qDMpFVxvPA%v@ zdh4lJ72hTH;1WC>>3C%VYQbmAHKOoLZ_+bF%?PR95hMYkfd#Dh!3tyz@LPR;{*|wS zObxyXo4U?iyH5N%6e{dJpYJtZ#=Xj9*dS~7ylWArCV0h4K(@ADJtM+40=ORr;EX`< z+9X0I`X8}Jlfmm+b3H4PC_IN%A&wneuLnPCIb~?T*r2u_LiPR~{me?&0&P+?kr-q2 zPQYH7L-452HDdpCv^yAqMGD>y&1+P+4lB)jlMzh_4A6Lyt71=cfJZ6iRL1!T>N zyCKMBFvv|`^In$Q0_S4)`yTd7*?V5s1$Je~(M*OxQOr6O z+H()o_&qASmrAsyM&03OG{C>9tfTHzhXux|E86G=kOH{<(2Rl}woknAV>glmws4(c z%jPvN_L7URl5>cGopf4(M(1@aDrYg;NweJm86bIGYtcFOYuV3@R%Zu%<Snfq5EHDp!00Q)&HybDl%zJ5UsNsB^B?Ioj|4%z`s-SgG`-5(=>QR2h}`=Gg!e?`LgF?>xkdpt z=5m$2gXl{8=8e8>j|V`1oCfG40QU{8NK`Mc41jvo3p!E+u_m0ZqPr8snF1|s zA_yknEKNA;1rkW5j#^OIs<^_eW|!Av(e)$*^pf%kZ}swvyXAnjSbOVuEfW{9xD%kB z(4Kl(O)qKTkZ^F#cwLLV6$utAP|^MGr2p=i)Sbvtp%9#lVm63lc{mb>dzEHw1LT}@ zS}^F`wxr4d00y6SiIRI(OAl>bT2nbbmrmc?7Y335BUJb6^idD9b^`!3(_0;Zsex*C zw{p(RdoQbc$(z_A_&$4y0fxEf@EOu+Bb<|;;t8xFu3((i0sz;x&buBYfpvI%<3nCW z7p89=^E=SXpwbR8Erj${7c+4rqW$E3ng@(hnOtxymbP|v3f&aC>w`h+WB{sbTTo+u0!8TRW1FbrH zpudsGsRa)q0l0fr*OA18rShJozh|#?4G15-rcqV#(SGwx|9W=9T#>Y3_BlG|elCb$ zvdx0M1Vm@tAi~haT)+UpQzew!I1Ra}K!Su5#7?~@-E*S#fg)oG6dn5oom8czW^Vs% zbCjKBzuDz`MDG1DWO`G&RrDdi8zr;?by|xRCg>a+=^VzkZQCOR=v&`;3}(gd9j2P( ztS@5ZatAYz6gjJZF_YP5qRQR&)57&8?+VaG36-GV+yYe-DVLWQ^3wC)kuQDtd-DDd z-jS;}_9`N`sO^-c!@F1Z>v$>Ab|Qy*h%iOMT2VDPQ1z53fHh*-+F5~%6`L1{b`0Kh znquhtWclspjWYH{H@2@+D21u`B*F_ebkAzsp-vE?8MmnD?Mr1HapB1lX;YPR7Z9Un z5STP{T1goRpShKEY==0U#6a*0sPlo7xJv<;9*`ZLH=#m!8hx$Br;Dr?&R91d`R6l0 zcumzcYge|0YRH#=z*DQiKS&I`pFNzb113 zc@bPX4nRDAdgH+R<;LLf#qi3%bMQ6ZwrzVj0R3^>_z*wa>C0xvY9=EJH+fZAb4J43lH5O~XChiHgW&iF0A1y*>DZ}@m zIjV13ESB<`iKAcZY5#j^s^pw|$qS5IjnSgY4%Xv!GU68nQV9dRQd+~la_mp`{WYz~ z9A=C=#ZX+2-zdQt#--HBCb*-1hR9^UdMCLgVm|=qY!^f&gjY!siO5qT zZx>Z`&!)E*OZT1;li?1cv1EPTxxU#OeZ!X9_Q(PHRz1(1SLTJ~HChPKrS-QL2tMY9xU2?R;676@Xu+I%gYP-`g55?m*Z3V=872V!1;Q zF;Tb^;nh-QnT7EteYjd3n3d>ZasPE7Qz)XN@L8{_@DeA}p!(h$$|voSIRjrN0@mp7 zh5%$UBCYuY_BgVNQ8e_2yB2c2Im9|4W861w1k(0hx`E)?!gK@Q&Gb!YKyP;cJo6m0 zYZeDT%N57(_2aK$6J-0?dx?uIIPN^3b7KoKScj!=RmBX0p;zH_D)bEQ9aG~3OV%|r zRuJDOb|Ic>+wra)?L00_fJyjsqpr*^vnqmxhO-E1vzqku5Xz6@*o*#Nk*lvCd(khQ z*mH2MJhOGZ4P~U$I#K*@qq%R}?E~ny2?XDk^IN;uAY?pSE;?6+T-@R^=`Oy(KcO<^pKl6?HlO-I@pBwkFs}z2`a+ z(dSq7dpGxk%^a)K0ufV3lJiaq0A@Io*~)#Fk~;vnv%T|~^XZMxwQB4GYjk(KWGMOB zM21(H?mQz?G|{`36O)DxxR35%R5_pQ`{uF%oB4Kd{CCE%*Y4jFpL3hB9H)#7W590% z>Q^vmF7Pq?XKnioGxu2woSsU;T#~=_x_*TAu#&FQu&HnavzSEiUXgo$0-4@O3dUt@ z`ri5^G=pR;{FvwM-<%lPhm=MRUh{M6O;Gx%ah06in zL#t|T=jiFu+)ymUa9{*nnA!sSIBNokM6KosP2QKu1-gAu?f_?=Rq6yntXVv$;_G$o5@o;4#ZkZD{~yCN>N zU{J&rcoQpexiXn0HDlfS96Tl=V9p`dQr)ac>R4@x62U-3wI1|VcLXu={0yErRMGcu zh{$EV#?na)xVLtIAuxiW;oK4^OSTP|Z`-XGKDb&& zRH-Pi^=PgkIM4X4R)0`E(wPNWT98zMbFq}+?W&&cQ71(%E-vJy=U+ z{oDKI!J&b2#=pIjrU#Sblr(zxslUt&Elei>XC;nm$+cq4&lGNSfO9{(rP(uWk_Q{N z_)-|oKT64Ks6WZ#Lb*Q*lbyi26hVZemacov>&iI%cLv2+ge~S{rGQQqY_s>A_4{m2 zHd1?`Hwmu*dr5Ik%oM`2fh928!h z5nKzL`wq51l?HgM|BZ!JmKiTt@h*1k`{2Z9&`C`la0bt$WUteq8`K&#C&87IYK{@V zB%C^2hS6RGPm5fAP2`>DJ5>7fni}3@Yggctbm%9J*4lcw1t27S&w?dQxP! z+sVDR@5`Tm^aXiBb_Y80RD*J9V4qfQABaW^I(EI7*$O|N#)Ik4KMc<CKr9v)2F?s(w&I;}pAFThjw))Z6-LBn#?)1GxWN^nB2eqyj=(^NvW#L( zwQok0kVpWbOfogADxOGWbOFGKc-p8hcXt14EY8-P*P8V)du~0jJwoGmKpNL3B%*b7 z&`+J2-t^$!aZMWq`w5D$eNKG)TClZTs}h&&4B-Jk^J=wpB)vUnH+v@?(95wfP%{mn zok5z(tv}ZKnlEhlUYH`F<%)V99x9!mY^v5+b z#D}xLGCK>kPyvH&ZXGXl>KQk2n(XzVOH6ka4|GT1zy$7Sl*N0rdDH&H=?S&^&71yS zomiMCmv=7Y8!voEzVus%>iL7&_nd_-lbQWhRp;G88DO@OI%nYY@bUN z)ORLWWC3F)kub8awZL!$e9OSkBMA$UakjyAh~@Qw^{Dk%1YW1)b14G-RNI5|xe;Mn zI_K=!Ff#c(c?K|Vk^|w~QG@Z*8cR*zR-e`J8KQSsln7@gfz)|Fm~D^fuIC8Z3RM!I zo8aN%HpF`O)9hH%G|@H3hJ;Id8~a>|?2c9R`!9>&PW{eUEmv-$00VP|H3e$A@_cPq};MA4zpWqNo#(Kd7PG(JxQK{J>jE$b$+ zk_a7T>hKul=P7~<$o+d)^67v1b$O5Mg!iZ80(GqO(Smyvm*cFvpi^qBR;8OAYqQo{ z-S?7K-(}s?U0QDG1VeWvO7yC?AE%M((07<&DucyYYS7qv#U~Wtr6tglM{Ahf5tyH% zfyv0ARRVG_+by~i2U>4j_5wRc+=uME1Ht%Q#Y|Q&9i8M_nPhR_Ya?xC5kr`$43j}Z zsOMr32`-6GM@@lQSqX^G0g;(=S$n+EiuXCa^5^us_kj7iGSP`DbCu}k!1Lw+uGDD-I2hZXBRL z%u#krRNgswZcqVRH{<4re3djTckbu}5X^vcu6zdcGn<*7ce)l&VynkSf=Y~&0*#mZ z)Sl}!O>*bXrF{Dv-fBlZ^?^7jEA}YJD)Pp0qM@5ro4H+3A0ZK(cqbC>_ zEH>y2!}c=JfT&=kcJe}fpL3a2-eG7mESzu#S724jY5Z-eXfuq1n;3Fm_lC2iw=1WE zQ?z8dAJFLcCOSX}W)g(T8cpAF7V}J1uy&F-H2cWW2JY3nW&vI#wZ!_G3O#!!T7g@r z>U*l1*K~HR){X>V(-hjF%J?YVJPX>gz*Gi4%QHT=M!B9VkCU+yTN8V*bFOE`D?@gy z4x5DoEC!3d&TLED$aOF|-YnUcNX0#>uy@YY($cZCBw*f0<%701p>s}BODw$EL;;A_SUUv#d$gln`>XeP&z{#OpeEEKTe|=zfjc zBL2ZRJ*}v2=)!UV;N>SS^6@dUPQA|m%b1K|Uys_56{c^~@C<#O$@ACW zojS<@k-oS1G`ObsddNFtg%04R12nn`DsOJeCQ>9wZaI!Csj6~EX`hUTFtxwBg2Xf~ zn(WOzg-sdZPM6;J!9e0Mt=eYXBUsSiNNnhbKf9dhhyW6#?T^iD?oo-tLG1!k`I5u3JRfdBvYc-mRI8k-!@(wU!`-T%ZyMF#hHJ3!z>O^vLy%4V%FtAZ_mYdg=EXv3r}FeI`#h;E)zVe;?E1qSTz~p6Y955I={Fw* z%$cZqjX>SndoxPm9|ffzQ0^Tg>q8zSF>Y#zas-S!KsanmN!}+$Nge0Wo7xef2R!-@ z!g)tfBx@m^_(YsUOmOIi31OWr9FR#r0gHxJHWruALcHFTFdeAvd`sl*PaoG>IIPYH zg!j$?;_I&%VFOeQj-U<_`K8ZF?;Gaawrd0EzbNUR>+qKKdUt|gm8Z;FuzzOzAfukE zo{DJ3i`4`VZ7>mir|J7m(%YD+G$a5{Oc+^;juk6KBk2$IQzue21DVz)tzP3W!yZp;4aQyZA03SA zj|XT*aN1wgYp_lYf<^cG9na>0%@6qmRZW|_JyE&FPi?isTf^N zf{SK=M#jOL7sOfY7dlD8Qos%;iaZ_Xh*O56vYH#52aB6X)tIS8ks9|6F$5k56}5Ad zo8Y#=oZWka!F#;|R1YN{f&3jMm`rBALmeSOLF5C5HjY>45j#m~A_`t?>tgO0138 z5Jtnxh_~v`RM6h4%#)g@aQYkU;KF=SkO1z!&-xsaAh@@CES2zyOGTVVakNRHZ5Z@! zqlcV2=%VUF*Etmi0mbq7o=$@Wf+?1dFv7V-SD*AaBID#5!{&{CFwG254|O$QA14xt zTO$N_j+Gb^$Lf(sm;jXL0`Adk96gTr`7BV3`qbsjd(eqJObT~G(2jJ#c_Ohw@$Jga zwRamy66k%8`epa-Ymd@Ck}#r~9H4z}nGOEALR+LIW4dgxibReB=Dln=Z4m?0YS)Ve zKil+w}tU$1&5x8~P4AK@pO| zu5_rQ!Av?IW(tDMUKQC}&>Y*eo}HR^uAVY&=&o+R~=&FbDSs_mlyK0pS&rb z`e!f8v;XQ{xq9m)5GNsTo^G^K+nphqHPQZU68;lIh;0auQb5PsHY*U6x zBcMzhv>7AxUI;Tm&}tCS9R&y;ab5jJ7e}2c2F&EyjQ6al7?8qaFS<-%>!1wgjmO`J*)U_-Op323)rUa+9a{_=mP6YoYq+$E6GIy6&4dJU?kcg zzMb!VW+vQ~SBzG%CJ#(ISx@nr%QT>85f2m`Hc;fjv5NjF$kk6pu^RIIn zu^S>%p#_|yA+=S`x9xfX`ojdvx5QR$tQ1%6nB*w)gcMKsf?;)WI`Ldb`-#69+I4TMxpUe{^ufC5WQfdJSe@w<(B2 zHvs85DVROwlJgw)=CNJ^kkwp+D#@gqCL(aaYyjSyuSY7fYkILq*0n5%&7RvR4P4GV z?=?bd=fnlpq~b}FM6Doa`qzg-u9jcQ z?i3su<2-jXg(xC-MW*kH zy!{s_P!@ja(pUhd?rH{OxY{{GAIUb&F{ z{X_M<1kn&XazU{}Si0b8h3T3qA0=y`VDZ>I54%cV{gv_B#Rx^fNB|&!+%P{w*Z3xi zH~VEsD*8R#I|w_`C3TA)ry7Kp74xNve*ESnjpf?n@d|f5X8|NhCsBuncH#Ni+j9^^ zl(&q7TN>`}?-pF@)wsKAR>@{IRaR?|{_;K6>o0Cep_Fj7Sy?QQP? z%1m-%T5+6&=+=<>eTMeF=6VCleAAaa;+Y+5gt}`#2ku#SsD)x_XNF=Hh|KizGvODX z=&3K|KoE>4947=C!BeWIxnbs%a}V5S0Aol&?4$~cc^9xOOFQQx!Lx1r-xGk>vF@dM zC}q5XV@nyzolF#YO5~kSL-s$HZWXnM z*16kY+pm7I0>+u)O%raz_#DjVT7z(e$tfE0bM0~AsJb6-?)~D|ds&3x<}48Aig-<& zU;|1mpvW?s41(uLjKG_St-@#n;z|j=46C#~QO_ws+N4=2ZpaWkpiW#!zszwR_$hh)YugBVz`SRjCdu>Y0kV-L zBT_IQY!Azv`x<$GYx%sVW}kTWWMaSUoQH}ZAQB2x4qMaqa@rM3DW>ZbMj(ECz=Tb1 z7+*rI)zLVibGfkRe6^EGH3zO9-SQkJ5j-h!^>vYVUOE7Dj*1z}84RfCeM<-&(ramx z%@2Lst^=SyP8%Qc_ku*52h=r?CoQFDC&23^F^!5J6a9{iCOA*%rkBw+gTiB2JUIe% z`l}Y5m5wc3w%S%qiqk~dUF_tYcdq1%fBv%UL}Yhy=t*x+uCAoh%TO3gI}9E0zEin4 zG4%PX*;LP>rSqXV^WM)obznc5MJxyA`%){O>+9}Q)pg3C{VbZl zS;ttwqb&6GD-rHw@j@>v<&%-gD*fL6;$kU>pRwTmH=c!|) z5}8nNL3#T#BD}Xy-BZG+*)V_P9a8`H#Nb4VDtfslGqz~kwr$G+^vBir{JPIE@tH`4 z-JC#F-#MZTX(u~))^$hyS`0kWgDj~H_?R=U8BVh($-J`fhHf^3t zbL9f(DCvu(#7xz@9vJ%7X)7D;FZN3itJR=94=YGxp_#zKL%j;P9iZS=V0vY=k!o&s zec_q=Ey2qOz^&}>g70Oj*1g}4P}eg|fs{h)AYf;3PgOFf>q(xlP@@B?LrVK7SnMg^ zGpO*A4yRBd%%-@5C(_&N7kuwkpZ@M)ceg7@b?AWtO5nB_f&N9)m|i< zYebHEdT!z%f8 z%Excp2GAd?jgM}35ZegFQUt7=)3A#=2>AzEB7(GV!Mo8Jxk!d#zohuYr! z*Hb_Bk_pFqH%*kUe&Jj4hTNAs@7u|Ae=;uC_CL4nNbIF3r*kT8iPBMC1<}bEV@@2P z@fG*ew>Fg>-SdgSE{$Y>>1$rmp3&S%2B5yAwEHozZ#dJ?+F^4ZbPv0bhsybMu!i9d zi&)&TIzqvL=5B#&908>Q_w{?zsnM616g#lve+BC90kzT85 zGcWe4K$#?v7r=5fqZ7UQYsAn-Jk~{Wy_Q~;dW3R+&S%$v^--Xm1@fcxeJ1XybZFND z*+P2jWJYnlb8i`dd=Efc&w`R@FY7#GGPb~C^iB@guIgBYo%>X+S!~nGO~SS-24|o5 z5+5#NxuB2u(YrqS_>oaU*JzC^(YX8CGI36wajpXbU3#dJ7L$nF5#d`R_r7E#$D9-4 za1h^duMCa{Boh|Jxt)aKHmdu!J$!)vFstV`No`MNq#^z!Z@#mRNDGw@F_{#78Hq(0 zgY}dhT7vq=pqJF8bb89rl;K`bx3~0|y}r1(ke~hd4f))MzA4ZCrK7bP;^>iK)XK%8 z#e)ZAwV1X5+6TG*1MH{r*+i6Z_n1wN+wTBPV9fO1GS|T%7NGlgZAnHKz%A8p+c#aS zfb%eWK9D7&exkZ7FZ71ePSlocwEMc-^QZb8j6@xp;H;vavkf+BMJ+~vYf{&p=WVlK zV0t2ZAjQlVl!-YO&w}>6NqxRiGO+xf_CoIo!;SV-cN^;y2xcvi&H&@5eMh3bm*`z`s0vA@W2NEc0tF-_;my8^g0+?BadIskr31UU6`rwGhX5LdN zD$%BU3i3VY33YimF^(skOP!z$>>@KUkvl!9`;5-2jl{AJGf`gr2v$jalSz6dvil{G zcRnq0^4u$+o#?Dv*G_BwsiJX?ey!_5^LSfr}!2$Z?GFToJIENkBl`p6} z*{nH7Uc+ULDBg;%{vO#Knc^WvOLy09N&H~7S4}s+V~E)8u#*?R`ii{v_1ERef8|o9 zccz(Ni-KTIWwcfHfJ3bM@$xx1z_A`Tw&HuKZ`wX43XGh2EeI!4>b(0xZ?#;Vx4-j- zDm)z+^RxZ_xt4a$K%~w~STK?P(8PACyG$znZQ9?I$t9(Tl6ZsZynP5G^vS`3_k4he$qh2{O!enBv z!Kq=_Q~K}ihn-j=N|%v9jFZQJBJE9keq z_ngK- zdvD*DFMQ$~@|0Z4{@x_A^Bdb2f^#S8WDrqM!B6;rRDT}^*q{k8PmNJ<^GRk?w@7Ct zf(xReKK&8*C+{3iYUwTI{lr0t6%;McbnT!%pv~Xx>9j)gsOVk^xM88AFE(sO5)5sy zb*d`Z3=&k|heacmwimteRu2FmEkF`Y0qk^q1QkJD-6q+0aZt${qP{OyUpYNMqJEbX zz3lvb0ALJRoMnZ}GRL08S1p&swT^hDk9l~7z0 z&j-gSE9vBU=euniK)-!}n~!kcY;AbZbCNMB<^(uT#T=RHc|y>Foy=>kpu)yZ z$*jb$sXnQm^Pb9SIq^-Lg~WpT$9riOG((>!- zCK`J&l{3a5CG!$42!=|;hE5d4exTFro%RE!9-`6ugIoeqTdl=fIQ5)?_li7tUgVu` ziQvwmg^by`GMTRl2R;1vS3hr9^h2m5odM3bYWlX_3_#}%fBxL>o@>!!fbDr=hht;Z z%hWmm-kYtMm~gzHya{NHpV!=Tvv<8%J?T;0jR{W2*Fq}@mlW0A%lHD2{T1b_pZ}&z z!UH844E$uo@Coget$J!l^4=VH)F zTfoH?QDr^!TsQmA#RTh8sIwEtD*Bc7`aS}8NUdr+DIi%SB1r$SS`~P^_Y%!_w4;sg zdG~xua;k^^49Ylr$z+ifmEF>kp;j}Go>^xN4s8fC!gjpA@W_3C2QA@TU>@n{ z3}`WE0+W}(bfy|XzHks_ zt=h>($M8T>kjeLOj^mM-w@wKQ-NU|B(6=oF=(l}<@D}XfpsZQY0h!ETa>DSyc_hfh zUhq)_Lm_A%>FcQ|>*!8)9$nU4U@YZ$Pt{$l>N(}k<)!@Shd+}q{`M>K)L*(3UeyQl z2+yY~YbgR3$)9P)S_&wnz z7}r&DbTj0rl-R{glJo#PqXYs)Fp0>;p%1+Q$7_0BU?EMDwnVY`=kc~R;(eZePl(@yklg9 zdGtds^h3&x<_xo`_u9ZAme^^O`V0FR2%dWewoBs`<9%0s6xL%?~>X zz?(a@R+!6}XP5`+VH-L-F+#5gYi;J7F^H~zF7AR?A-DQV**W}VtQ{6ucaAyJ)c|?< zh40AszV)Wu{iO?;uBO6-+HS1FNhr=!qU$tXS>$idp6D$MY}sP$+p0AH^zb`KKPzhq zzMvV=P>S;`gy=GmJ@c-?1?HJOaPYrYLcymo!mQ4oVzgPY9S}ayzURkB2$;R-r?EXb ziKg-$nNDdKr$1X7uwGPsEP*RiksZyuMg{cge8&VKC{tWP^~RZJVC|Fk0A`$Ks`ddl z>E#5%YrMEc#;c;fWa-MJ?~m32uLWM)WL9 zM!=j05dc^d{EI=oXXjP!y=O?q-Q~Pr%qO@jGJRj<-is>uW`012oteq$g%UGD;01mP zl+Udc*ueU>-4sB-g+Tkp_U~m7lM?}lXAKo}dzI&mK#H}Fv9mC66sWVU;5j$Jt|B@M zu>{|vxN7aowNZAvoxJttJMzU(d_$g;oq!Zhw!aCDND0OCj4*0DexJ3loHbwf#t?!P z5kVYp+5OoGZKl|=9$YqUXvET4hc74Ra2EBQtE=EJ5()ZxlxKNoSX-2LU3std{nbwP zi=w+s$JgNaUut@L3F<4Pzg!OJ#Kn-R?|-hsl#UXXg_)($E@IHS*#=`&NjGt<*PJ;0$1ngGsy zb!q*2ee5vJ+PJIG+98KuFW3E?5o^vrDR3aSMq@2!8_6IOCmYs9$jm{Gk~u89`O|0L zD{}91BGa1(T(~RI)`h&=DlqSX-`bR%_dq1L$jeyB`L~e%Rj|*fkS@-D%Rn z;5kyH8?a^ryl4Vrkge|>&!m9*bfh^vjcLH0R-I@NP}tntl?e*Q|o^V zqG|rUyc@Qkd1ftlYvxsN{!&F>GIzX^h33vBm=yzDF9LF9j>{4Eo1FIsc7=Hf(xHN0 zHdbg0h=={RvI1TOzDOkfP^Gx6SIw(_voi-&$(cD=_5*aX?UVOFMx>dMqJL*VPY>8< zK>9hlEF;!sy$K{G`7gQ3c9s<|qLgp^9E!9J+)Gz?W<_7QnNSKC$NCt|0(|eDlslj7 z^_-5=0!I@!z2U|Hp+H{01TgPdTDeJo>BJdgT$d6(V-+8uTS;cH7Fw$yv;FK%RUVDM zJDS9)oebf~d(f!dN3r7y&tNV##&RXHdq(8`S47@<<*4Q^WAD;x*q~TjVPe<$qxM24 zH(|JCep?>Mm0VmxrYlyE0bK~|J80X_zI~cykFbU&2%36hGqLDIN*!7& z5P&FcRaK96UjYNK#|>v_s?Y4ddO>93s|A#}m0|CqwI9h~Di6#}JXF!I3P3&;VsfW5 zEGz7%yK@@vs(*V1@F+k%&@f&oc9Kjd`I_oAZI4_xan~qDvvDh^RB8zmz}PwkXu-2M zUhU>HL6a_{5tPGux4h)uwXR873U}6aEdsP7-rw2ZO+kVolcUV4z>DN7=_^$6-74}V zajQaos%}OYXYT+&8qqS|nE$4ph@<^#)puQ0R0t!uT@%3ewAF#WBzP-RX!{_9Acpg|w}Y z{aawJZA=_r+o7g%0uDofQd8SEkiKo#572LO^?U_5PXh(r7b)$(bufuu0Jc(OBy;VI zt+|^Z+^kwL0OdUzyu^!?sk|Qa?nQm(7C7fbxwyEHpZ)X=`QpdEEzkbtyYk?z>7W8C zwH7#?YBxf|*;;aoPMLykDo1xcvy)`O_&9(Ku`^{Th#mX+Aac$udJ03S{IW<{K`6#hwa{lfzZaOtRAds+>Y z{MZ_5tLr3MM)F9j!WIU}g@J=aKJ$@okJZi`iO<>n8faqLQD_W_Z2J|}YZW7`uwtHnEH6{rGv zAnqBr0626zV`XnMWp96W!M?iJDBtHmns$sC;v zjlT12Alg(5c~EcP?RN6bm%b~nz3{p`@$98cS9K&?VJXuEz89Lz_Z{@Ro+ShgxXLKW|U{ZYF2Xf<1d z-l$5Q0qfV*W6oSgu-j2KS{%^t+axYMow-b*FWj~=U7zK3gV|9(JX zJsb&IBG7ZL={W_Qs^<{^PquW}-@!q9#|RQnS|%JxkR%g1P!s7Ki9lunUK-$B|Kr3a z!xJLYcSP>JqyRc&u+2b6iCK`Y;#5<8z9Y9|RnE66`nLH1{icBG+Rr}>5bY-`!$r_m zy!KZv7gTdyJQQNHj?Ef7LMoXUFPhj=3t?oH=J=d9LAKQsC#|nDDT3Wj-nn-rfAOhr z%6sKPrU#Q?SMTUVy+UlL)n9du$D!-TXj97Og4qS(-Y3F<65YOc>t`CKf!6OJ9U6FW zk;yynevi#}>^=5X-r=6JB@$;<(dWPJj{tgKRFJ7E>l(C(_|?2ZCA+BvPqszRoHnY! zDQ7x;MU90tfLl)vma4n{eVu@yNx84zf0}))AvkCf4$J6c(7FKiu4IDWjIKsFP!l4c z!yxw@;5uSYmPxR3@cgXLPZA5pjd+oJ0Pu|a8Yx|e_a$q|=CMSgb(Q`2WL1pBgy;B* zeTGQ{mGB=SP|Tk47APBe7VKEI(SH`ztV3ILw=_7YfU9MBr|sLExQ?AfMHJWR7z++C z_P}OireQFsN_WlWnph+?ta!se2OQT91#q|yxO|48-Vnv?ch{BXFyrh z{pj1aZPy3TZzI@V@%hw3MjHsZaf8!SUQU)S-3nI5F*tV%ye1|gw<^?XpSe`{X3gb_ zXW&sqX)hqwBy3g{XYcb#?p$8V4}b7edH$b%Pu}}iFNF`{Xt{)8)=w)xItD zb{3>~9v@uQD>oI#o2=;R_@7By>HVr-940`ZbLn+pT7&DVO4B6Bu&Bfv!D3t0ZX-Lh zQsH>>b}NrGz`vO}EXEgM+yrR?XA}FKOLgz9ADL?T8e1xne82f9P#v_y>L!@7YwjfL zz0#QjTiIS%S4ljgb7UD~(Pj4fx;+K?OpAp_iFc^f^eo$Y=V#fAG1)60oqoq^Z3vi4 z@ZL|7YJ+mPYC29bxQr zkG$)F-U~dFD#0n?q*x5yucAxb>u!og1-EJ8XML(I=&5WsvmXjD}Dud((ymk#i@S{WLC!2JK|K=v*(Lm|%o`NV>6 zo%K0*$Jt!Bf1V1=@1+L1rPUfSSFX$cTb}6ZgyCb(_C40Y9omFiDN4v9dMIhMmf#!V z2P>8jI*mT@IuJ))byvc04Xx9#P1FIOHa#pU_h5Z)Ru3q=L}!$Ym(taG_v-zxB9SI#1H6H#wX)EAqkfP z!*Xq&E71>GLvjm?ByC8y44#uQAL3GkKNq?8ytw7}j6j^em}uP_iRUdPcS|%5r=hZe z^KH8pfId7cKP<$310M}U-XcYI6U4)|yz(Z@v|{FHA}(eBdUS6n zr7v1{5Qp2zn{VEeuYT$kd5>I}D>|L*1X#<2!G+G8_v4R~T1kb@3gq2;xCfQll9kela+9#^ExedBa~NqZc99t?6@bP^48NcI`ZU=-1_NF>Y{agxOs{YqMH zV--lkOk&m5Wz>LJT3}YuE4_Q^^|qH_-bhT6fs%R`WWi3Tu^wj@cxNV|$~M637L_fv z`|`h29Kd=>$L{=^=`qh#rK1=&+si)Xz-|xlWfKUiea;8e<~h>0?DZ=%M}~0Ervrpc z?{LPVj;UNwXW&~Eb_Vy}RH)AgB3hL7l@;@H?KhJMUc#PzjAuUUQL)|=D5s%XW3Yyx zgvWyJgCpryqH1f}lrJpCT)UEZm>d7RPvqX0MD{-y zkqg5UU4l3|NNx_bh(N|#Nef`E6Ehp#ecR3h=#OcZhm!OZH?9>>FOeALRVwue4@mdG zIqXTLYX#H;`@IT#Hd)X)u2o5MCoQMv&I3=UpQm0BR1WNm3;FJAKa#J1?1%Ecf9q1F zci4$$dfAHtkUMJ%IuD6l0KbOH2=1*7{&kAhHb9d(l@J-K!8r~ZSWopAns8lvVC$-Q z1pHfKx)yY!1H5w>K^eZ8EESlzixs!R`rZ+&Ulo7c*H!fD%L=s5w+7NygiwR^dR)N_ zJeq#)Q$@eygG+C+sK7qL_#7u0EE32_R*g$y`@ zm@rC|ahlN#9ax}U4r?mjEArquk^8S5D(b>~jC?MX zVIuJe1eFAD-r2ToTMf`xkK!BtZcovBbia&)#;$Dxl2vzW@)_toAEugH+ca=rt#WN3 zD#YmiWv+o8Eg}ZM9wO63dFi=VJU`1-C3&+Ihsd50cdy6eI zQafsmtXV7_`Ey@JtJ+WTMdav!`F2=BG=+U^A!Pu(J?L-0c&EmOvZ;Zg*SeJ+V4Z21 zj@7bL72Oa5YWm+MRRx0mo@jvRGBBEe8LnL!%RYDNxViQx_pZT=SuFMRGB^>%f@V$zj>x_yeBG`RUgfIa`%9*N1Vx2ml-4tdUKPd zdfw|{mrj68@u|`)k|AE@mr;;!oV!`g9$ESm_m>?IOh*x$2Eca#xY#XqU50{@)ELT} za1q5!y^o!RsOf<}X8K6_Yu;oRFia17pt?{Lz1%K)u-c)`QqzL8etO-x{iD9_;(S^9 zbAiXQ!zpgP5Rv;L_r7)j>`~B>F3e@4C3d{hrIQ4r4dgelzHRFO`eQV3uEj^ZZLe)6 zM+TF*wGaTEV-8k7*hwge1Qf23@0p*c8L)=*)CBd1)}qh08W{Q3@@TF0)*EljSO4r4 zdFJwtOz%u$mNgUz=SUjX7%=RnTAc-lrrW4^O6w5cKQt3*XY|_VeX0YYmLeZf|4J`*T3}o~aaw{_f{EBdCj9^)LSH;+jc zr1uoavw!OW=%n~j2-dy*APMq&wB|KQfq_JWZ&8)se^j~Z*=&tiewx4cS`K;@_QXNf z*q`-C4=%HWK2Uc7_!|4Wfuuw#2@`yQo$(sy-sm2`EQFvp9=c=7KMMw8!7Obk+0Rdy zF{}kJ11qyWt4Qh01R~3#G5B5t&x+jpoXFMd2g|i+{!ZBxuY7l0K|k7wY46_~&3)U} z0rZE7l2=yG)AX;={aQjE$^Dh!iwQ-@Fen}=F;d1AD|`EEPTCej5l;**F=<-CbgHLF z?f>H9Lca6r59Q@Q|B1Zs-?}6Fx2LKnfo84r*z;uoSy+N`ve0;Kc+GCC>ffBD4vhdr z&!B}GTDRN)G#o3adOO^~>8iX}0JmJlwU`|1pD7O2-SR|d5Cox}{8G}KPo)m=YN1Hj&&{guz zpu(g8Txglb-2NFbBhr>;!E;Gf%oE8I(;_TtyI`UModla}+W6OkfAbHM#69uOzF^&x zssE0oDD`6ZxYuoIXvga$F7hWCo>zajF@D^l65MWTw=23Z2FhtW#7rSQIO+jcVm{Sgc@UdK5(FI-&H zj4?Nv_+CcTBqLxl(gPU*c!>gTX-e7jD5AzWF%Voz_b{?wxt}J=b6@<{vXrp};`wN) zjp$%5%k}qduwU0~OQAPZ@LUUDS@dn6OwM4$p<0^Z+;(l}rmxr&wnOs$r_$1g3&Fi1 z4b`R2M0$kcndY^3jOM+!Y~1u+Esp-6enbaf^jhV8k|X`nusEZ>pHq-<>mh~ zd5-{&6p0P1QeRfrYyUNa{_f!^FKKal&h!(sOeQ3IOq^ceD^Yc%*I%9$KN|(;e=#Lt3^M*b< zx}kXA;d>iqkvj&jg=b78)`XI#x=X&Fva)faKM6J7rA`unUdCDys?i0#{o?XMe*UvJ z<+)G1CQtvRL-iaxQ3j-C)!RBTt76WxCT;7}46@{zaYM!(>R_8*nkqg3!?+GZFWiZ| zj^-L@#2!$M)(nXEejbW0_-{YE5bXOoApJQ87>@pv-XAOJ7b3DpeKQ~~P1vNRBWU;N z{LTzwt8q*dxL8W=7Ok}j6lo+kSkv2SL{nx`&l(kF-ePhRc5J)0*b)UQg88IYN7fHZYs9Wj2UA=hjcj-NC1pTfp1|uJnW09t$9< zv`5wRlfBw&-~NGo_bac<6Yswe?%N0G8#8g}rote9(~-VsKkVqn|YhR_pJj!ADwG^ivDgq6zI>Urc~8? zzE#V&Z5*KA)78-@P_bbqqlajrhCwM}`clI`q45^$pUg$;7`cbK^;Lmy7c(QMvSsOwML+AKt zE!I34IAmWK4&}4DKi2>l!E>Nd5%+EfQ{vJ3w-#u(tLQK#_sll%{SjdAL{Rvm^F)7` z43F7qshBSSzD*R+t%w)k-uV0J946zPZYtpx9o|Sx+9FVDj9Gr~PS3f1_o-THOg9M2 z*}(whqV^Gv7<|?)q|C~s}d!D%z?kDjo z)80)g`_|jkgg<5w_;;KB;?$kjY}DD|Ere!pSm&uJkcn{C;2fP?1Lzif!346DR&Cn? z)--(OX~@-C0(FtunICJ@d~ImU;ke^vDxSF6tFB%M9;@h_ihlFSsP0Z}K*FMZL%jFQ zn4`>KS^?Dg`O+4Iqo`i-Rdvz_2&A$m2l&74WPQVb6#IA+TWRNI#I7W z6M~i*yR_Ccynf%6()^&SY%fZox4lw)iXzmo3Jy|aLC5|`2)=^MC$gHr&slOWGq zM>80EC=oNTuaNx^Bvn$^(bIP*|B0YlKH&XcJ~xzM9Q_{QuI_-xzF{zTTXNxy;tTa# z$9ue<>+P6@y0_nYaE``9CLS%XA3^K~Z+)i7?!A=zUp>;?FUJKt(_@zXpvipyoUu|? z&OJ5vjpn`q^v80$DPcHoJt!w=SeRQ)F+9mU(@VT2<8(V=DsZjj>5Rzck$&BC!eu?HrarOI%tIxd}2wasEW(tpH8=eNhe6Qs`F)^ zyelFX;a(=*Zm&A((dw;vkHK7>6<_O7;)BF2MgevIqFIl3f{KPG_vqoH!D| zJhJ^u=f4cwO34WL$imz@Ei-H*9IL8LXHL{1iq>YKQB;DWl3Jk+ql!6}Yd)<#cv9r* z+mw5+$U$#t6hI6(9x*lObN%FHrM&#_CJ?u6eSrQj1>0_mIGmBq(`uXL1m-EcXZwb) z<<@2Bj`^f!=NOnRnZy79P3BkpY;pLVB!y23aTx4&a&jldR$y>;mhYHPD<4%KD1rh?`hAF>frPI7uWCvPl-&?-047VxAFLqmy`$ z#5iQ~Rp^Q3Il#P(?-=Sl9FyE^5Tx%mK_AG~6o7Uv>Bg9>9aY!>X}IUo+@Hz0W_S|; z+IO(A)?_S}=>F}LNM_B+BWH`Xd(VsTN*V#yj6E;Y7Q@#LH5ytwuvN~ttq0J5!M9$k zpcQ<@-jZB;UpG`L3s-ZJK)SYH!onNPog~CPaox1{YqITH-dqwTa-TMH6aqvkBZ|qH-c}x}i^^qk2$rAr3`? z!=}gg$3H7rEFt|p`o1ls7Tp({>h1&l`8-d)=+k1gR?;v}LU7H2CIzzf?~21uI%uul z8`$)66roNDJg2e>ZUj)2P;`)GrKZQoVT?8C2s(s^k|ZP7+V+eUlnJLj72GmolUlMmF)btY3K?j;nQ1Px1SjmRq1dx|fn7WS%J z;&>fD?2#4*6KF+#?-uL8>LaJ*#Oi|Q!xhW`voaq5RXB+xPYll=uy#?QoF|YB`p{b! zdtj8}iuRiCJEDcP^)g{6ejqyuPe%!!j?wJAO(J+&xN}pDyoj$0UA9dQ>T8F)EbOsT)o2Y`hb{5GFDDzi#hV;@`kKo;ED&B0L3>|d<1^~YP zHJsQU{pvrCgZb)EMVCoLPVA0?-hQINH^OX?*g~zWu$YwtF0}b7iN=;DD@rlg!e^1T z1?%zVf_hI;zId;v3ZzqHVhRgdnjtnl)d~26DmbGlApnK!fGhWJlk`R9Ml92=tE!#> z`4*iyd+r*;YGi98ElN^8TA#eN${oZ&xBw!Ab87k*6#}j3?qO<@$;fi&d3o`AfM#q_StTtWn z8My7V=j;~>%F{)eY$(_O@P-`^$#1+@WdE|rJFm)IQ6G(yuWN%*-N`BJFF<{(qHmiI z&~FvmzJZr(1?WX)(f3vWtUUjLrms}>JTZCNK`KIZ_B3sfox^0R7f#SPO_Y~k_>Syl zFS`pI6g|a2`kk^AX^F-e9^+OiAl$QFEG>aFFAMAIzqfR=7T&l1=1HIRFqu%N3F!VE zGf1zK6Lj~TbEpcG)WNV8PZON8_`O#P|Npc1CtH$bNs=JOENW&x#gLhmr~@Q`!Uk*n zKGx_(FB*Lg7UA3@bK^mAIwZuE@2_l9f+9uiHKUbo2lf9bTt{?aNm9R zF%dHpxhcK)KA=`p(bWZ^Lak5`vvl`&f>8$(T3eO6zAoa;&6T z>+ky|t zlyi_<^#H%H&cYmaekMTQ*ZtF*Sj|QE7v|sY4s-Fx|9W`kdWV=!IYhnZTS?6o)$@l<1%mQ8y54 zw)ug*wbUMF_VBQ?AHIKU|M`FZC;Qc_*Io7;Q}NXzW1^1K7O6F00p(R;vP(AG!|N)Q zN+)QT%>h5M@BOblepCorz{5GZXv9OCpRFQ#`tgln`yAY_0NG`M-fcFSav1V6D z(>ms<5mtYQzD%OvPBV3V=G{r3rzO^F3g|QYD3g5Lq8os?U?&FY?BDH*NV5XWal`La zFYgV6L@FSr6!fo+!V_C5Y^glRfIk8-y~Ph*taG?E;eod?S?i|?nhIYXs(xq@!QgMWE$LC37>0dom_U=I%u_VsW7 zVE_0(eq&$!-(FjLhe;{46{0JgD}iU|)k9rX?&<^rj-^~q0IY>n%t0mFyL~u`7f>L0 za!vQj^VY?gjr(;$G0b7ddQo*zhLf=gunwWIv0elRR5z0 zIB?^75e*VD;GVoU^s185t%}uK|8Qr0tjN^LkdPC{fBeIL{TF+0d)qzqW$Fl^9t6Og z>2wsXi7rL+(#3MC6`ZRHaoH2@8ZL1V$_v|^h7w4(HQpQy)Q?$ek0&1uY>*HO%xX>b zudnAeA2a5^`>gk=)ZM$@P{$dVqbqqI1muKpfF!z<2l_nwA;>zR{JvQ7DzPV8Dhhh6 zVaYfW>ojI{MnDCMYj4=50HPir^qB(%ke-2A#NZ?ZqE{++bB09k83Xk}d=aYV&AL zs=1jxn!WuyBgPYvW7F`wKw-urEBr_i^X_3NKS23CuR^Q{vo;;2YUL zierFyt(_Kc7l0)3Sr2+dO|i?8?%t5{V-P=d|+yCXC?Mr*G_8vzsOr@>LBVNFS z5D9YC*Z{`$89-KK?UQjIw^9pMXt;c0`LYihW^B4CE}iAGMI56YJPh1=13A*(EaGhx z?AWgV4Ac0mARJ`6qf^iaX@WSu*N&5HfABOvsk>k5vb$3E`M!j&KzQ;lHv()mvBn4c z5;)>Q7#LBQwe@|oslT6Oll#CE(4;2=_XupMW}pcPKQ6aDQ1{sLT-lt7<8L!D$SQVhw1{KkschZw z@K&0i7rw@%768ynyxa?niuhYDV@G!s|E1ZF|C`zVhl85?{46MIVlYl(%MCr1Ql8_> zpe2YUtrlSa^7=#p`cGB49nZK+Xf`g}pW8;vgPfGi7LPOwUM+PG9_C0;KQg~__Rv!# zM*%?bK>f5G*sF&J`~BD7+CTiies5p=Utd|0BKHvA3-^W>ry2tI-*=pQ;153nwy~Vgm+BW>!RBGfNp zbz5~jl;s&BF*ri1GGWTFWddXyEc1kQyE7P(!E09T-nO8B@LRXU&pm#G>3s;%xh)F#q2*ctyoWyatz%OZB%F0L z`g=%voM)FhDi1%mEv%JVKwRP-#cV2*Ze)%0=^h*6IZt>xsu-_>L|EX?V4`KHa_gcH zH;W(p7iN$D&FuZxX8vlUzj;+CuZkI%%Zk?`rx~Qbygqe+{(%Aa2jAv~axX9U9Icof zSDtIuE2H|?OP-F17h%2zpE8I}7u!g69R-3R5`)V;)%!r(&FnY-{kQh*_iydhXS*Zt z+#)5RY*ZjvCK{T8B3pRMg% zKzb6ao&j~UJo{JxZWVBkV#c;qDvpBSS)`MaEb|J`Qf2bM-VEZot}?HY_!c9RknN)i z#*^4XUa}T|Y;43 z@)eK+A2uKQ^7<(P^beIi$1{Kb4j|tx?;Va}9pBPi9*Dh#{XK};&yu=(v``A<&P3!+ z3uBuCXl%7xE0liD+4G(6?D4VL-~a8u*sE^vv3QtcfT7$Ey`oBE6b?rZ`2M7%Wtop~ zwFebZCpRRl#%RHn%w(!qTj-vL0Mh)H(;{(HbhqYX7TZWB&7In>ErGm`qC4kI`2vQ(J#Uc*2NaZa^M-13Ok@Sk zT$1C7z#Ge?Gf=&d0pQ;5K)C#^03HdEC<0&!=CdAdrR1KXmEe0tQ8<~s-Qe%7{IauC zkYq@-HbqL}5imy%a3y)rR+VZXs2oYvtn1fD4WO!6*wpuZZN}WTku|AOdNRj=qi7oO z++G}G#5H#DZzO~RCIrdW9w%UxRTF{{?XxxBT-n&h<8VR08_B9mhawq|fxm@0ZXwr# zv`Kk2MyxnI6(i2ziwu(Hu!9g zO5S?W_8V@VsLvb+gvuFH%ae%_96>0Wh2 zfr|v`iq=>mTSXUZ>*pYq0SL!5$i@cy94ZAonspZtein<{+qr-4d?~t;fb;il%Aykh z>umysZic2+*Ugx9+jMV2XR<*^Icjf)OaHkAfMxkFRw@ZZzY!pTSaw3qctt ztq3x)UJ60I5Kvc`s>(wS(`}#hGM9n*hEi^oDK3l8F`yxUV5aV!+Duh^x)XuKs!-o1 zA9P!VXcwE;Dq!yjh6pTg1uTmlo8@3h4in;Rd3c?RYWa)hD}oA}us_~uaHs_5G*^bj z*35^8ub*3_WWt~)>WixU^myFEXQI5HO($dYd{}G8Gp%0l*R(Iq-u)M|$3Jvs?%+Bt zH@!Tc$4q^`QnLPHwf6El0Q8@D_8iZ3JQLD(2|T#^_-2-`D$>2dx4aTKg}VxS)`h?q z2%BppNVTBMQ(bFtR#~B!&6!I+D{4V{(|q97D7DS+YWlO21Lao<|G7us|NOiptI?+s~Yc z7A3Li_7n&@0*ZhB$KTqcJ=w#Xqt`SA$)YNt z@nFs_Kuz?rn*g-{Iv{;v>e)4STdVPal}sMno~GDiI`-Z_ByyclL|MN+wFtE$Q1x+( z6K(U_>T|*(&~#EQpfIxsGd!BT{d=6`NJQ!o*WAX9GlBO*1WZ%mc=A*sZ z+aKTAfBj#7V_(>VVGkh?C!$lI{qj~WJzC5?ooqfWzOKLP(`X}xz}^P|$qaJic4rqM z!04{1N~lJofeDa-Ky@ET2>DHCL7^8Z7EHjIXW}U#bj+-;Y6QZvPx!dAV{B$-@4K?~ zGthQzhsZ3?*nN2tcXQo~O#@N#9!;DPVYpKnIu%!f4MKCOJQZ}1E^87~c4zCO?DZsT zQV7zU-kvHsRzi6EKD-j7S3!4$(XyZyJ0M{~V2&Ud&-QCMNkE4|mB??24JxJf;5rDE zgaA+!WrHT0qUY$DL=gS(Wdf(dkz_)AMbSAqglwH7WD+(W`|M#Z$JoXs4ka1p&7PIq zojw<$TW7p)d^zt~B-Kq@Y-(b|sh&bi_`4=aoUGju;emimV-ZiFTu0tS`j0Z395~lsG2Qjq`*rC{RNo?4s;G`J&J7v3m=XkNTkKJA(%Yp-p2mwaAA$d;C&Mw26k2S)WV;i4(tyRx@KjCLlS=KtEfGr}D zD+ALc&P3(A!F9nRxf%%EMfcj#5B>drF?;__r{-S7Do7?&x$2}EF?zh8mkjy~K)*Z4 zepWDl4_mdV4@dQMEhWsJ5M|rhSLnm1@4GIl#3aE73Vrok7tfu$ z{oB8MZGW)0_Ug+AYfs0eeTt}DWjTS-mztc6Q?Q@QjcuNoqDLW~HVD4wi5B_@o?T|Z zU3JZeBQ@SN3`Cf&3(SG^e?#}unu&6E@!gs5 z=*JYQpBf?yPn5%%xS0t+c9q3ebfK=WP1{n+PJuZAUnMlBzULd1+AGhh2=r$FCU`!F z>g73ptO?7BjC>@Vb`8pa5|IPRZWjn5h~F{rkK~>hX;%UMMEgwGA^>sShk5Ul?buu~ zHg1qz6K88{TK(dk9!r#P;R7@DrbpEY$$cZ|I2&iNcFkm@6C$JHbaeh_J1DugZ_M8P z69y%BPh#Q_gx{D&m!fh>N&HI&{RN=^c>%X=VBYRESv>)}u7j$O#dG~IMDd1A7Z6c8 zXdd763^elvyi=m8UJoRFO_?^kO7JZL zfRzlcO~4v~9zy(tvaw`6At}NPDLLnpj*RpuAFkuE^=VM^9D#g9q%2??9)MD4a!9Rf zYDyIds`-A%?0=EP`Lop;sh)~_;;DFC|Ap6PZ~xn|Lai8UM@g}$imFr@OOkaSC1P*^ z>(7FLUS1yoK)-e}{5dDlRia$e{oN@a&-Ycidu8#a&?N@8~LhnXop)YIV__Q3JtgJc*iKE3t zEc7C_{qv(7|Cxm@4H*eVqNVZk=|VC~Waguer$d?h+rKq?`XT8pHfy zABV`!4M=*&P1p=sY`-Q+jKHFeWzreYiAv~)^JCAQW@*VTl5+Rd7hC|PG@Dy_4rD+L zfm--PLP@DhV%J55)R;(|ZLbQes<+RAc2I!Xf@_B2*hf}csGrJAGNdAuq5{GT#7Ezs z4R(){3yJI;cZD}An%_}$hjrAxUt0pneXy9CFDNM@}{@t9Czp^Fu= z+X1>?FCt|_l1fTBlS-~GT_Mv}f_VkZtkH0(mp|@fTQmhKNhdGr>-ner@_r)Lm z1)$#z?A{feKiBS|?GH8$%{|G3Y7bo?S`;oQMa#7i&?8V@h6rx6&r5Ry=5F?{|NJ}q z!QR{M)rn;ucjO|R@RS-|w4zO?ZpW@#rzK}d;IL0VY)pi0h0Q)~$`eAjhoO}oYz^}v zO5%MOV?Q6K^9SrQH+`Waq6cSI{lT`qnyM)}WZkZx0eI{Yum3ARyR?#`oUQHOrQhN#}uzD#QFF7|7{IbmS1(bPs4pdz^0KUw& zj)5c)!w0CqX&x8EAf2s$y;YPF=}f)CgXaKU+OpnZ1x8p;eXCoVsh(rW)v~Grwmx86 z_KQ|@sBzoUT41KD3sAJH>-BPy(rtiS9YXYeBT&=6v1>qn9|-0^l-0L@6iR&Fdte7L zZ=I5u9pxNl%b^I!HTykpfO=xHeUV4cxmrq9BPo&#vF?((U%V$tO*m;7A4BDp?g{{V zEZ(=wcZ}fH?H~@bDDMfrTZ=N+`yCXHQSf{`=qk zo4r0}8r|c}`TB5Q3zW0q12X?PUn~AFaH6^j8bvz^D_jSw;aupm*>nH){F%#23I+F9 z8=1KZ07+|NY>LLh9Q}UOwSIxeEm(UHR9A3cbDxXWyR-IbT-MzBu$TR@%)Qy67u|_^ z`w7g?)8q76U*0Z6;z}ZGthYz0w=diB)fTABDxFo_S>UEXdMD<{%j#2n%1HxofJ#BS zi#5;!5lm=T3kuSMbySuVH<6K5fwBm4BXB4M*%a80Z*6LSwzOKXl4`{rWEE{nk=%lc zvunV3rfQy*i5HI7O2BaXZL_#?E&%iluvcB#V03_7LPUre*PY-tjnf>^8$CCG*rFv53klr`I4-b+aE<`i~VD7&4U|(JzA3%TR-gEr9Cm69s3&BLh zHlt3iUCXkSX=)aDA?X3f2s$hf9Z`L(n>Z8*=2(sA@!t)whlid0@TVW`AOE-C+2>!q zIySH|2*n468*fc1GOt|-x4Z|ul$VAt6T>OUw+>uqPlB0F@a}jODdAIG2P)#SjzSOC zS3&_LI>Q1&0#dbIUu}?M9C0UWcxcm>$62z1bzhLI4Zs`=v}CuJUos*OX7=dk^7eCC zUeouo45q>RvWGE2T;4eYeqa==TQfBf^(QOMCGFT`ueBR`G03RYHL)w3fquGfi#3aS z!wYet;oQ_Z7nG%EO2V6fpCuW1ON8DcuucR2q_dzc7@z2wwk^m2u5FCY$+RE|lw1aqByt;l)wyD#lV?L;@#=&unTe;} z7qIt#2YdX}p${ExdwlJcyhXIVjd8v^zc%yp=f!^QQwHcirPl}OJ+}gjbrZm@)Po^d z98m0ouO5byloy$yNUePdLM>sf#K zDBZ(z@#{SIZokoYnPA*%#Wo(BpG(;Xk+}WQbqz+d;{(w2ITG_FIP34n76r3&8KiUZ zr;)hvLzz7heOr!!^o6qTjiN{x0y`7jo)(!)tkR74`YqcOYVWj95W$)mWzr+SR;q?F zneL>d1p#K+<1Xv}HC6tff!j&=4XE|lhGc|o^X>*#UuOh%QJb^n(bEUIWg@JID*$o1 zA6w^ZBTpvTPC(ApqZ0Pw_>``1LF+;)rWd0Epx|eJTGP+xGb*`TB=RUI>U^prEHQ_0 zkf7&+(L%JTvU_MkG`wFJ>Cnls&oZ@4tKd8bfpcr)IT|<~*m*0>%-@(j{(*`Kjg+NBcFHt=VQWKtp!ixUd?8uPx@_ zd@4a-19=~;foPvQ14edf$zZ;@b4H3~vzfYd1!z`nn%H@RC=g2zXj_R12|83pOL2`& z@P{n;HsK{7RA*&s;8w6!V}LNV@hUuqWB{K)V815b60h?jIj=IlNGc^})$XbgnE==llZcJgLt?&S%~US z52!M06-y#73%}TJu6D7hp-(0`poY;Su0!WR z;(g9Oo0pF$&*7Bz0U-+py66cnxJ`qo8R#S7 z=%lB4poX2=rQQ0xpT>1j^Ugs1Oz0$FVg{N^+eV>GyyT_^4L+Gab;)O(>|+K!K+*LS z!Q4iysUWiwNv7OLsXT}Xo^KJ~3rK=+Gg&4*a5Pv=IKAsv@0>1%CUNJWFd)V}E9-{_ z(aV~&ggDO0KSrwhI1Ubv=T+ny5=J8~d)9Rh2py>poxpf)_Vypm@ObG%j}sz6T;}>%|Pp8GwIzeQE&xPDnZvaoC1lpBboI)lb@J@A|c1x^z<~eLsN3BI76!0jj(a zIYV1HEmaoB0#?Ovp8U_>zI|u^{9nJe&+XyxKm-Gbd2|=ampKKIYG%W z9L*24g*!8QT1Dbcpk20~umEXlu#d8_hu(MRR#POpm@Rrv0DQ4e1GzhcEPYfWNeKd# zDL1Zs?P42?XkI~GUJ{xXsJj~>G)eEb5?y22!dWm*K7-X-E7ZFq-|G;-BL?LVq)Gh1 zBjB#^yrinz*0qzQL5qHF0&&#?DnXIzjke;otb$YZGt#=TwXfeSIqs@EO(m{ODmU0M zhuL!2Sk_%Q#1mNM_r_@b8fgeb+DA(^dALvgV!=sBSVZ{8x2sZ;o2PBX@O?wv;ywZO7jXUw1N0lgZu)$?H|V}a zXswI;Qvh4pC9}dX{cqJvw$&Q#mLUW6@F2&xMfC<6H~__9k(~2xx3h2m@F)A{|KShz z#eaHb?Xh)Dut8JW;z!MN%>(d`8O~)hJzhaG7XVM*!N49ffAclhYiAhV|8L$)0_5p+ zLUM2Tk|{^v4ZkYQcjJysFPA?NQCut<4utQILCL;rWo&-_ zd;sufQmJ?KUY|1Ay~f}1lh%Xz4tSd=gP-m3PRF-^WCS3+2eJKckK@(^*fRpO83<$m zSAlfPvfALP#*_#ORP`B1w*p9K!(eSw(y-5TuLR6I8}8 zCCv*8@DU*($@4&bc5{*gl8FrYjF5INc%x56iC0%mM#IkR4o&Fs6RR%d$pk;@Rdg@0$d<`+fNsspy5@kB>-~IbH_N~3OS6}R` zJs~Nz1i1!8LmNtKJvJWm@TtqOty7Q}Wubi~k&1LJXi>Z#BTx-)3&6fssrRJRe(kEq zKq9D`i2iSml!yeztlHOh@fRkpOPkA694VyRV-!;21%RufS}!RU6*( zU>!Vtuhsq2N09Eizxx?r!{A zsq@N&-(-J0E2&kA?wB&m>e*Q-c@Hw<*t(w-^_#9P$oaie+PadF-jvKJfZvpR&XoPl zXv+$e*Ln|Dg{r#*5gQ)&%9lLsC$~;~PLM58wSih2Tw~^y44CG<1YWbe7RX(dM&-qi7gNW5MJ&dQDO-p z`o%nqscjcHu;W5^ai6<#wvfaD!ljmvRWhM5m%A(FdgJGj3CU&0I1?B1b`aTqim}d? zLRCslNq~w9d~|+U-*rYdn6{8ZvpmIJs9KYS6ELYiFetE_)@WcJ>|m7}m3bPRm{JiF@RezO+?LuLdmEmA&RTg8KzXNQ9Xpul zK-{Ma(67O}f3C@L4-awAzwerKtnbU?Kp+aNBLstDIjeeeb@R4Rh52q|OTq^*FXY{B zXYb!V+Hd~;Yx~k34%u^8kaL7m7|fcqSXri`UOh>KAUK|M*WFGorQ@nnC@#SKAipAh z-WKiinzTQb(*3&Ga8|(1uC!8t*Lz!G`|R~Se9L_hsY5U(rz(LJpdI&cvYKL9bhkA- z+X47X;OD%eXSQpb3AH)H(GzJ+KLgNL;}{c=b8T~Gu~1pB?yLG|D{CiA1A0aPC@ZQE zq^o{&alDHa9Y`Pv87r69V@XG5zUTpfSN-a=uRY0xV-jtvl%LZ~s|j!tr2HiD1MLMb zwFMxw5Jccj1^lW_*l+4d3 z*o>>dPuJYd2SxZO1z-^Y*4fi}g*TeVx7oH*4yxmUrE+52q+gy7y=7-x*9CViVaqFh zd=*2pv8qF=@<(yylbQd*?Cn3m+S?=QxiT3^!MhmO^t}QM>A9F*IPOKs{Zj+zxPG$U z^#>nv(jo4%s*+%vZ|+w3a#G$7Bc-YdAV#p-E8Co{B7ZdCW?A$s6EGdzZnv}VzyHDh z@qhl>zWSTjwtu&`c!U@W!W3?*O_Kqj!`7KF`)T_$pM1mZ;Dzs8e^d2G0@vGbriIfY z5ME7YDV=^A@djg<0rwG(GlGR@@gc|_-jm-Qqbp^ELtxQo%+I~(Caeg}#%%j+;WzZG zW6iwVWVJH~{ie&nJBxCWIgjnnK)~u6AYPi= z9_tIpJXKSu66vh1Dax)E`@ggDYzm?a8F}^HSwo6ubj5c|<===^l;s$Rb^!)}H(83A zMx_VV!z^PiO|$GYR2Yh8=;hZs4oV2oAQk zjL(4hSyUC>Tei|4OVgQh{ebnb>^d!(@6UU#_;B&OoPjrdeBP3t^3dkeOscUjhrT!4 zeP#Ck@5~;*J1DtV-GQrF^s3{nB37#)y+5XxQuj{1VXY$*-#(k&8qtn+WFLV9fM1qpld5&f!G%D&zMNPs&pdgs}A zP>{d&_$y^&jO5$i4yEq9oNsaMWq7+`p87;0o|UsJJ>;hS#;FLR7z-z$m$i1N zEI3o_cJ@fc*i&Aqwn!ZeEU+#VPxh!kzGTLN)wv;KkJqZI)APtl$qoT)kh*^Bd~28g zF`+a$|AsjWDQvmcop;YA@OyBzc+?a6wEqT9frmOHK%75OzVOY=-k3f8&g|X4<6^Z| z#5JgZ_v{Crb0&0(WeyiFuTKD=ZvX^W&5?U%&+j!!F+OPA;t~}14|MEBAsZAI3?x+F z(zCn~?1vQyRk>Kj;!c16?swnVTYI$KE5C?^L=jOq@Rixzcg>1<0hGWl^&l-A;eDsS z7QOS0KW9K1VGBX^9H5>=}4DA^?e0K8i#M2iyJUPG+MMNYAD1z`(vA72Po@y0^ra zd@6$dJ=p{nM+2J5$SD?V|V(xnqMo=(Wkg1ug45D#gpYa|(^_dQc z2ZY2xteo!EX1pxCLY77LePk^UucfV%M_LLR=-T1SGXzvGW-&$*?Ko*Si<{wXAQTr| zaNin#c_G|Heoof)o%@OJc>(F47(l;Ki0p2!4=4;b1p8$1SN(zgm;9D<@H+Tby^qy> z`}|bffH$( zDXf;$o(;*W6G$7y%_G!AY+9eUTJhW|B!(4?>=vS^R#}F%8{OAEfL#5ajgQRHA|?1t zP;UJHPOnX`AF$fC9l`k1kxFgd#MqP4-;)&@^Eq!_a^$!TCrY>=Z9g6;g^yqpYcDYY zjndi-QBO0@J??5d^V$Lupen1h;l6{;=+nvo1(1UEoR+%>6$K2?G7wnFBqLa0V2OZf z5M)+LZTl>sv=S>Q!Xsk>qbz6y%md|i)cD+*c-*!7Fi!G>=L|VK>-;Vx4ID&)U9^{M zu&bBELZv&xEg(an$qh;rW!E$dgF27N#m*EX@TTXntXWt{<;&X$NfcEjT53_DS`vvY zZ$xIX&w~5^B=FgKO_k^#ibBD?nSW*WQ=yB)W+T*oW-TQwPb!zs#sLuRvV!N@+eb;WdI{dS@R`c9k6ZSH3h;22%%XqQ;&+z;5z=qx z26ZmSO2^j-gCH!0n-zvh5OnDsh$+hrYRNMa1m5ZQj@#iq>n8Q+;dUrKnltK6nh6&-km*5WFqP<^iJJK>>3FYU|J- zv{Dv5A3qR}RrZ)xU?_Yx7lAT;e&cri*b1OzbA`DMR0Yyb$L+4kD0Pj)T*gB7_$qAH z-Qz8?9bCi-eVva&>mU-7qh#P>MF>vN`ALJumy6kB~tVBq{iWX~Z2f#|^pk!TFnHB8SQN(so!Cuc{cTu%ogOarRGCWa@rvQKv3YicbGzow}>~Je@J5fwz?WCu3TVIOu{a$|80Q7>eEDH*+@e_j!s6_FlOLB51-X5W7M zC;Q_MZ|&jrjP?S8Kk?aJeVEKYfAardW}u{v5yX9MlM_Mj7G8{iw--0bn{E*@*K46 zNN_&~M!lE1#R}#FXs~HtGpI*5)}ohDs=-?ziYA1;V431OCj%)dV7fniCOl@LE$Y!u zK(6vz2O}l}VK~;aiwZ}XfENoq=}~EJX3wr>X-1y;S|bprL#4kQB(rZ8Ta#H#qR8_u z+MvmKsfZ2%_`$NqYAgaPIO;jx;{Ej-a1$9_=>G4lild(kjjaJnqzrt&smPm{hp1w& z;eK4xqiAlxte0b2aU}1|jCsFUvnev`M?f#LH(Sa) zO@nk=vaiZ~1xW8Ra}Yss1kz1`bn!hiZXrfz>D<3(cC zH+(2i3I-Ik-zjSI=rjMw@;ISu0%$Dk9N_@zx~D@h7>NZQG;zMe~(n!<9_B%d1&&`^ALo30?yU+M*3?VVfPt#Up|}1 zbMBz`QxHL*;WG5(|bDm zJ~#ofEV&SCB>`Q^^IewVVc^&YkOnr_LI z1EM#)+gPLf>2u&%EW$jw7gV)O_FP?_)YEnFiR@ei?1Vj~9NRF(Pzqts6%)LDVA8v( zsJBN|nQzSA{R<5559kNQ1eg4%7@I4=4bnz?0_}58I#3SXUtS+GK>uKD(ucBDn`}G! z1-LH|_B)-2v~w{XSf*@qb!;l-cXncUxxHFtA(ZD?xMo}6<8HUJw?DqK-~8?G?X%s( z)Z?3%Id}mgf)P2VIRP&LO7_`!eK{cC*6Z$+P)LP!NESJCwNg!Pj-3o%_usmI5gR?ss2{4bYg^BEb;H@6@@Um+b+U*fi zp=7~kvGtoFvDb^n$^@BU7csL;p*;o3HfH4&m_LiB1-;tC{htXUUK_^+WQ|X40by_V zY3)Tm55s=)f@8$#ht1fv2B8f2b!t<;_?(Ct?-!?W>{7X8Ms)>PYmRpd29)aD1b|uP z1&teE=3kh-`|oB?KbrZ2)dc2}>rvK@)CB{fFgqCZ+0WIVI{GfMxqCULVz)=f1P=zyHC0{}12U>%V?5 zv`UWl5@k^6SZX*tzUx?+>2dt~+^Uxs^^6RPy*IgbdS5QsBsh1eqCHYpmn|!wR|PS1 zkZuLq#FySaq*TeOvyK9_0t(_UR|?SQ2OC1Z-V*VnDAPL;0O@%Z$c#1( z-drYb(9cLmKr~(BiJlR#6|q3G)!s{G|AWvbvN2;sfQxfotiIYf*7H4#z^ndVF(b2t zWalk4B5bVR>skL(O&f?74=k=&p{?7VUpGn6*;p%=iXYmf2>?QQla>jnwKR#57viaZ zP9mrrnPXy`tyB*m`Wv&S-t^3kZTXdoAhVYm_fHX^{}h1q)j+@6 z&rR4Xzw!|1Jy-Y3_*PQOFCtP#OE4YDi{A)DpfJk3~pIR8$7eBGvBbz8#wqjDahcSol| za8=74IjJTH2@CdI1>-IZN+F2{822w{z#ZgzfqrALZ0iYw9u&Vn5=VWI-9{D(-Tza{ z?CW;n#=XXEwDF-?a$!qmofrB7k_EUWu^uN4jF)pVaC|Dooe9B&>&oD_q3m2uYxVZ(6#oh!B+p5=6rc&MokfR%A3&qeltVccOC{&_?{M%Cgxt z53}^KNXh2v^K=kO69R}5NQ+u|SL8yJ{TKI|7q9{Y*8Lo8l_UkOx(qdvJj=8bG6IoO zIVBOg6$|s;F@v6`T2gs2WHw$k1wo?AJ%H1B zo0y>Cwpoi1_;a(knt_~}k$vV}69!H}x(7Y!{NG%FEz;XZKszD4X6kRydAQe< zpypw3CR28Y(CNVBk1#*>puDzzXUcDA>UfAS-*!k(9h| zdbsd$lzsBS5?2&jzufLwcAJ1WOe=1b)dpg#GM2fAaPLe+-%G^jkgQ+=a?HWNc&WK< z=#}n2YqxPDX(C2~TH~PIEbjZ})hXU((S0ga@>JVmyuZ97j(sI9gE*E0EcLV46fZwS;;QJt(V3w%k*Zs=lO2i|sxv%5{--;|7H2YX(5Lr7w<_&z! z(4ES7_xoo5{+n;?)zOc7thIvi?&jQc2tHmLz^?G+^LK1TxE-JCF_;i{_vnRET#(XnqkJqy=M=C?f2N?#%gQX`wHlz z?DqAGKz9s6w67On!$!+FuI7%#8$eM5?DvrK36p4?QPO4YRX>4rTr%hF;C=4_w>E&VX3bI+UF{O0c3gTr=Digjf-f_Ss0%Kc3ZRYQYqd7 zQMhGng}1vBgd=6iN>O?dxQlw&ktn5SHk(2~?JS-pg7xef8ui<&_hGTk+ET7;+TR=r z(xH9sQH6mO5GV2~3*~(trJPzp@7#w#~JjyM6!NkM^(s`ycF!zj|f+_eh@GtVH|z zat%-Zjmm|lDM_7Gtto@>O#Qa?+6xbrUj7a%@S3;c+ouP6&n4iu8vJ)vWq^%;b2=ry z4Itn-x>02P>vL0tb3wTi$aXV(e|WzggV4oxjd`V?2Dq(RZz?3#1Li4@8PH=n%vXeFh6J@n!A=pgy!r3$B;5b8V(=&4T`7 zMPQ_YeT3uzxo!{@1wLQjZYmSDlGiha%P}z{Yv)>r0+WpgbY1 zAWpve`^&WkofC?T%JhSzaHp*;MJdT+yrRUHIMQ|HCO~6i;2^TMX?vK$II*E0_YzMcz*zJUQu{-EA-xZF$r1qCcHKikHWUIeZUr_aS+x! z+9s0H`Xy5rVR{4$eJ@7iJA3!;oqheEzqdEPda$-{!%B^;PI7a094P?z)GRDs$e|cy z0SJ|LxLe#^zV^oU4=p#ipSPm>uI5i#R|??6d@=%JUA#a4n~$Z_PsXGIxSl=YD+6(H zK(2DH(cd2z0-6B6jszAu@UoA_)+FJ^e!jRzt2LZ@(0g>;Rbu=h2n zX27;t5TqIJS+)dNn|Dgc#s!`RD<=kk6i6pPnyq`P-#k;F2lIp`pqKTPo9I!NLV6Yy z2vz$(n1z?cWPnn1kAQyUv#hM~s#+~fF*~(N6NEK_?OImFVWe-{w7R}SfXJXZ8}qdl zHfkWEaZo~N1gKMGb=wANlmI1+^zNGwpjC4<@PHo#_X0ex2pA*)YX#qKy$cDF->qcT z!3m>v8SiC1@I+ey7u}9=PJ`de=!jKI+DU9(OJ%}`fmvvk{NcMEXe%xXS2NC*Q7R|KkhgBQW-r0vO?aWpaa$V%lASRP2q%)0wZi ziym^d6+b`G5eoCo7Isdvu^eps@R^5%MVB==0qdQcKX%}`32lf;IBxV!pMa>yqMwO} zg1}sxz`+6-j0=?MviGBP8=U()M}RvJqg%k`H24iBOY5a@T9S3AW6TJLtS`LszL@pE^PVLw0XkqFI2^R~r+ob|Xf5lN*LFvO0b_}VCovOJTk+4AB1og(n1 z{9SDR0q)V&OzHA2^WZsb0i)#3p&dobJoVD|oZ zx5eUBaBf;!=klkEwb*LaM=!6B6rg{wJw1~!Tt!R-5u2CaLv)|F5*S|CAF>4S6=RCX zif!v9NUUjSHa${MofdXCv)_O7tv%Y_cCUQQ5^fs!xIa7s*_GdG!7;tH+{!C@3b>TV ztI!8@UR1{hgsnOO)1tJ2inkOcVeR|~lnEc!58v|ldxBlhQ zlfK{6GL!c(+Z{yW?5R_9?*<4&9rog1js%sey^Ix4s!WP*L#XoV{#Y9k1Qeh|ZDUy5+cd^j$Z#uA zln?{-r`@qPcI;LI#+DHPkso!o-(bP3WUnm~1}g;bWrcN^?p1HXRUmoVMlEt`UVF^> z(rXb3+%4y51;Ct%`$eAUFmw0;z(SMGjNq6{<@G~U+fABS%UFU2nUEs^+!%zN#xdmI z6RrltqkPt6fhfTm$Vupg3>68*F$4Y9E>>$n>*%%E7ZGk?lRn6uxB~9yo{$$H`{@Dn zKS%cbIY@!YuEe`PJiBph6^)KWleP|(7snD=f6O(SW|mlfm|1`vLhObBq*HQ5c)slS zuy20@hJYdN(!_1S^ZMko87ELHA-Xw(Pj1!AYxtf*g zX3F+Vk$nbvN_E}>uW{8Q4l-w0236ksB4bL|@Jf`gMA`zdv5*l;LxyDfDq}^#68UXQ zGPSJz!UJN537*aCb_5cwQ!Td|Cy{<8?^jVFu*`j||5a+?vSJ|9O0Za9vHxvD(0UM% zA4=pk0<^#yd1T;TRVAFV=)4$(JEkZHj(OgzHqhBh69rN~1NbxV5stkZ}f6{p$JKx#+_mB4P|L_O<(q3D8-)ce_ zh;qtYzzYc+*6`VlbIE*LtAQK;u9FEoYN=Q1FScHs{FcPgmp)=ObkK+HJD^aTebVH0 z$<6|1LfCFR77qPuLU(J|Iaz}#@9r!4dwAU5C374bYEfRV)Zmq!Br7|VrK8b4Awa*G z^sh$&RfXlN5tv3C>_do~Mb9^ges-!mAe7seGFN4JMg*liIj1PQ%&g2jAxvnDB81Y^ z>PV);@E#> z_U@lx?R^}#JO@s%Zirnw_jRtgUmpp+ync=V{imKiuYhv`E|sVj%ci;o+4F2DGV6~3 zyJIUN&NR`MCxFWg0k(`M*`FuZhpI-4<2+fcee>Ht+3R2LtnEQPu$OmSz_~((+(>3R z_J)Op9p_2SCyJB3lJQvn^5|19g=3z+$&U;h&X>!rWkf;r83W}#MdHie*1vtB3lPk^ zCGhZm|DfUG0@xjir|?`}f9!Q{Fzn3isoVd46oKo}J%(Ze@bY%EbH6uRAgG9(y6+W8 zohc0^`etJm{aiW^q{3Cg01y_J$15*y zASrjZ#N9-wZigP=fruRK|0eIbAhK2FHtkOrDKw?46Bj#TrN6(o?C=u40Bp8Z9v%Mex57$FHQAR|Ii zL`6Ui*GMb?l;m(8Be46_;-piQ)n7n9AVoJ%&$VG&ZeuF?NMieIv&XN^_V15M?nNw< zTloebZy*B9wHO?ZW%>-HLS(2e93J?8Swng3Kj=$g&H;_O~e3 z4kAv1FgOLp<%K2cAs2o42(}X{W0FN^=R5n;x8K_z{(nE(>tF2*`)0X(t998q1V9&Q z5ph=fT%Vh`Vovi6vG>e+c6{e?@4d^N2$W&-eFp1An&^Kr70`Bf!el}tAC(F6UY=stnh<`~M`feG}Ue&3hO8HO_W1?U?uQ696U zSk}mM&oBb}GWvO!4Z^7E-i()Cn?>cE1Plt0E_<|13)C&g0b%78kQ?OtHaf(*08pc`pJzO7YHf9wGLLo2dx1?N{PE5hPTx+?kHbeNT1DGSPhlz(}3>=aviK5KAa z*5JP-@N39Jo9Xd}sFE_utu{et2gOpX~;J-8d_|#Q-gc1a7<$^ieo@==$=o zj6@Bc$bc@-Hy^3vxfnYu@z*wkUWD0mSP@^j%2kUglo~A8j^}yaUn{f6KI|C@!=&rx zK6GD*o5SC&9ip!GVCGL#k9nuw4nLH8>1ZHPa0Fy8L5)Z1Lbm7??*_=sVXd}Jqnc}?YOGnf~q_UA=lq3*efP>~XDK|i*c%(zRkpnDD=68R%!o#Zs8Ofkrf&IlY}eF{cd z?8@hdbnWP$o;WkE&lP$d$42v>;E>sL*P^P?S~gdd_=8#d+U)(GIxqBV@X3}ex|*nN zWi?&a3iOga|C9jwy@2;Kyl|&4g?1TRUtT{B1cA$4hSj4Fa26d&_r2lR=g&&5dBtA* z@BZ|IJ=&AGdm8=Ws!73V+Zrc=GWb-mwwDgGjKnFy&+JK{p)UnW#Yu;t;1E~erYK~x z^&F1kz$W&R>hvRr_u9*R&Zw{O9L_ZodcnM9Oxz4lemSqBqB|x*xFwitwjnQ6sRt|4m ziP$VC!#7JUzf=itlv%|FYc?ak@6lKcO5x4I5?N$|XmhIo$)-kPdezLntBkx@;KEXA zO9b5lm3vh-PDvW39T1dAGsSg?3ITNzNB~MytrBJD89A_!dW+vzAby7eC|6{`xri)E z;c5ZGXq-TP8;OBIkxvnzX4M3OB%7(_K`(#-@+R~lY<;F=Vuly)M+cyY^iW7SVtX`u z|LwIg^%b$L)hlEB{f8gFWXnGxfc_KkGyk(}6Qo!-6A)oHq>G@(wy8tniUclHAeg>?|te1C3|?uve=qgc1YiJ8B`h9AS|(z zSYNuhp_t)h%ZDh@btYIRe9t3-#|kvF0%q#7(3`!HSmabWpt9u0|23h#APF0AawjTl z51)xbe330QVY&5&Qhs2)=`v8RH9Nd~@s&kmNK~u-e@YMqqO4>tf%M#9($eXV+51+g z{yuh6t&f0QQ|pW}4&eoqCUb(|IA;m+YUbpg#67$r6A2?H_G-XsQ)C+R0uG z#T|C6%(l#XWfopm)+~>mRc)X$*<4NGY!8W9uxlW^MFg&T%Y>laV$hz&$m$%FA3goO zN8cwxc?+S`hxE+hd>%;`W_pKxwVBj-ItI;t1nD-Ft@mJES*`gD9&yf&D@9`kGU$7a ze~$uap`5-3cvHD&9|(#78zzLz=8|yJCHVbSX^2(gXLtOhR;Jna4eR?*aj+%!SF zEn|ROnZCP^d`d8l+jdT(1@WqCAy`{nCK22qTtU>HiS^k#6VXf6!-LuTZ#K4(-UA=Z zf2#t-L?~_s=Py=kA2UF|XTSI}*{WTAQ$(KUN%gdEIKE{wIr`dWTXxmh73$6tkrozE z8vAdA&5Nzz0L*=7kMADs+i$)T@7(yQ-Xjt%N5Vk=V~jh4DEP=e^QC;4i;h6T>%W$^hCftG1YQU$Efnpy3wRguga zKpVPsLEI@5u)k36!#&!%@^`<0^aVUO4n$7dYXT6h0jz5+!LE_5lDUpf!B< zu@e00S(I5V4WG5~7(94pF}u8wJMa9sWf`&hOzfwkJ7&TCq$YdjLC58-OAjItX`9?G(mg)-8q7#nMd>$URd6?<4 z_*9!?%W~t>x^_a0sti3(-p@UdLUW?H;#q=yp6O(2Zh?_;@ z-0cOSf0O|IC;GZeU-l#d!vOqM2Q;x@e#HU%oyiE4;bHJ354M|nPF7Vnp?|-7*x3(1 zytUu|<9GJvue3m1#lU_2%L`;orfiOzE?1;d?i;3pmlVo_i|RQzpT`-dZO1N~sVKuo z_G*YnxL`)m%m{>!bL$W^LCo$W$i_Pl4iZwr#q5qm=5WfQpR8t{eDphaEFc_iqd-q% z*$19VZf3HKT4jE;U|eu#Pd$wkOdn4ay;r&b!J&|mX>qs=^t&p-HqlFM{5uP%>E0g* zz1cQS1nZ&qd4~4-^Jpe5o-$Fl(9Wu`&?&1o>P2q_O%zrJ8vti0k+=vHO`pxzF7!4R z8QloPDtCfw;;m~400`?VAhB`_tm&)(;w1?cf%1$b5Mxj8(M2e(6ix{s>=*G%Ag~`3 zkqYK*iPnMOese;+g53DSxHf(dxQ*x0PY4G1m(~UrFNn31gWkyl1Q^zP|J>~H-^?C= z7_HXsolw68-yi_#RAdw{W$qszK>vv=x8JIy7%rHeXBFHkp3oZ(2{+vETe2PsS!8|a zjOE4lOIT{_Sr%v5&fFfK9_^3+{G&a5w#!2J<>-BZc>-8Y=qZEU3TXRAmco;n$$A_; z+2Y_Aeg3y^2plS7%j)SN#|q_{fl@$-zAm*`>K-4d^|A?Ro|vQFb?*_0ibx zlr$aJH|Jn|{l!Tn&RPe!XP3P)uqBtDr<20;h|xeANWK4QdzewR-2|+P?x6nbvcqzK-?N&X$VK2B^ zN>FfJ5*jhC#Lz_6e_6HzZ}J{&E6o~dmxiEX@yBg9VQq<7 z%-`jHm31V`WP_;4(|gzA)EGQ%#vTE%CAtELRM#0WW_`|<^xy_%_i3520_&!;=K}y@VAa+N1$Jyc9g8y+ zakegCBoEjrIT<4;%hRk(-h{nW0C+Q?S_R~CT@2Lzqu(ku`m|SE5lA@;O9dG-Ag-(e zAxN;{UTBvCJU5ADD&z#PMXe&j9~aQRv<*PzkE`P-EM? zq@O;RwI9qLzZD&n(D(8^L3yNyg<|Fl_Tq#7aRT(`$avp@NGk8U@VR#n;Arl8vMo>c z?Q6_guUU4xTcvBPiPKF?-0GCGcB~p)a2BdV8rUT6eWC@3fB2 z$n>z5Bk*}!m$7asrGo^-V>(`L$u_#~P9(tTx;%C_Sew1gZRjz_WWBid^MV9WSc6BK zf<&wV+6r>92E{?pKPb|-m4-QIS%3*3``QQ3+JV5c*sN@QDR*zH@~|Wfz}oOn=_kU}t9&m~AHKh$#@)1D}>JzDxl-B?zJ(Y$VB9 z#Lpe+>ueg7Q$UIQf1apBr+xB??SyK7fQS=hg+~Q=F)Ol4IzKs|SgfvF!K3O7MZ92* z7sASY0Zb7toU0Ohs2hY;#otYnBAE8E9EOi*ULC8txBCcyuAc)*fkmL#OxRR93_rr& z|6vU>p1uFvVlpoTD{B3My?CL2bO8NXQ1zVv<~@$7Qkq@pX-)m6@C@UJdu`9d@wrO- z5BEFQxoE)6?1#5M+M_k|-IzhglJf;~@!oh4*nB$5*W48Fb{&q@1XY+4zZbxFO*I4? z`szJ|pw!`8j8cD2O^zt&b)P@4(H-+MaC!JorSDG2pc!7XGXR0tS!p~vQU$Dh-MIbE z(l5R@Lpu@*Pu&+=SN?tuV6m2KGv(zei+<|qyNFcUTl`R!{h(m?>A`!$Tn~j(V z$^6<80Y))rl!AO{v!=Ysi$J{cyR?1|x(SU|jEMC|COitR32UVVZ<%Y3Gs)@d+L1+O z^dVn=GZL`S6`K9`8z;EdrRAU}(txu55uM*;z79&>2Qu@N zHGj#VzX0^-n!KT<#jX3z0Qj}66AI@L9q$G#$uiXO1AequQ*3qkPzhM|@N}Z`_u##g z3Ug~_-+%wZ834-dlyR{pMXAZFB?D?3f zy&SKqBN%5d)+yA3DJ-Op3BcWF*yFPHQ^9&Omq(0{79ycIsb`#(6tMK&Ur3?K)PM}r1x|R3ZR<^gKl77X+}TAdPc}6iiaj<%;k6Om-+sF=%p~fz=2M&)_oh zMDMM^qHJMm^Ck9sR&y7iUuDLvU|%JMS}*3R9RV89S`+t0f@0;^1@j~mtIMiEP{__^ z+YQUst#hJa8R}&2bD==2`yBoa+Dp!ot<1uafn`j>Z^j7ENaQk0jR^e>1*+FB9$$%| z{%H;ITxV+|i%DOZJ^ta~g+3^tSJd1$h+NX&ToKI9wrZ5jd3k+80R3)_;2VJXJ-|6E z1U=UrJK{+DrXg8wwyoQNcmu&XL=W@IXUdn-B%bB}?G{+yxjjBU*&lxUoxL7h0B3`$ zF^cj8(n?tBl>^N$ImF&GP#jIud@A&GIMN%y<;4-IupUtvb!YR+HemD9(F+&W9AocsRZhmK<}`kZCyy}P}U zK)a1VxJ~yvL`zJ6vD%pp5Iwc3&ldV_1RF`L4J=H=P5EP2GU>+10|B0uJsQ+DF!qrv z@MaeKtoLnPw4_sH4x1&O-WF$%wc4~Gnxh_KVKpc1zM6j2DF5>a`7J%`&B9)u%xjuv z(3Sn1@fbj=q?^tfmJ1r8pXqG;+yaro$){e~1xg~w3O)6~3(tB%ntif+mQqhKqn3)QL9>d)awa309IK7*{|LC5pULB+p_U=K(pzk?Bx%C8nN# zZub7SX6^kE4OOaqpQBnfi>k;ts!aKd7y73H(4YA#f3W@z!~mi|UBB%d*jnQ>t6~dF!H(bA9y$1B{cP9VZ%*DBecP2;=XLu-Fsh3(zq9MiwyDJOu$Ua= zB5)9z>(JnlKypn1c_$X6=#1D%arp1Mt|$8GP~tdv%CZt_=8-;w8^2_a7Qnp(U!zA@ z)Eh`u&;<|~etS$2sh-WqHft$87r%|NfGXHWvPJ`1X+8^{shFQltr;wXWW*jR8V{yE zA5}*&ut!Q-l`{w;K+imqje~}{`3FgMU=ZwTWR8N92&G5sd=AaxzIID`yv29Ve&H4; zL&E#Sv>$p#+{iw7@zA8b;>Pd8`2$L}730k;^R5ICmrA1}C5wKY%S!eWLJJlNHo9z| znV*^SwQ_Lp7>H8)$ZMU)s#skFA}dA&u?En!KH*q}g)n|+1ndw#fnVoS2E83K=wbX@ zaXq>h_F-cch{N^c=zgEP5@T2W)*D0FL(pfgap;Z(6T9yRCf%h3zmG$;i zW^H_sG63c&b%NyCF@z51ciIp$9Lu1u?AzZ8xARY#6r5ji`#Xax$uW&t`+0<$+`m&Y z0JdiE=OX~C5%6464+cWOtoe2{m_M4?gAIalzJNg=)ZGoEAlsnCdkz*3U&6GwqKPta zvgWX|;IITx^VSE7>%n!Y<&FAtUX!Da=Bcg za)m8%_FW|6aOyl?UY{yJ-w4j{X`Ob>%d^7{)LtPrgsbm1eFK(!nKK(Sj(Bu6S8@9ks=Z`PcbWBU{coxu9wk>1e=UEj9>gG#&+@CgF&8Ca*;;Higl1?hea zmT?J^mss2-K&Iv5(>7XPw#(yuNv0shrcZ#ekz0*Sjs8AgEL_X9K_4c?h!RIg&uqATfdr!Q)PJiyl_pRu`$F-CPmjn zwW39C1dWkb%RqZ@eIa9ET7|+vuYa|h zdJH2l9hJZ%gkGTn>5Z31&c6`4&RchzEx7bAP8Omj+ct%O%x?yp7PpvVI+Q82?O zB4OG<+XB`rG53h8zIJ4Q9l9rd)p&P0k0D4E4(2b%2ZPz}SknGzLu2ybhYlOwJI8;G z%!|ICZ_1p^nfEbX^t8v;TH=2W?ixvj)yRBq#(|+KOP6AGNNn1Sm#n9t6S^#4^?E`D z(MVd21ZYpyqD}aiv$0GB+nQ;0`WfT{0lA*^32zYxOF_9HUzDvK13PpL0~fJt8JM3l zXb`^YQJaSvKj`xE2wBT=c;xXDB!^iKhx-ve>u&fxso-xnAqSGdSlb{$oK9|*AAWJ^~T$n(-JkgH&3u>)mIwq(ISnTFQpSYfq+ahfmeIC z_(c1$ZO3wWSxE0&tj)CPn))5mts}j{7&=iENJj8mqhqZU?Xig7xoK&-Som$c9tbEM zr~bL;d+Wi>-jAi1@G1D*cgNHFrnAZ$0>YP!n_FDUE=sOx%Z<3JFToxr!8cI#bu(cf zXF~jF0>6!^r)R(G_t7|!ihvYg`=B7biQ_QgyId@Jj{Kh~$<4gT!Jjpb?(Ucc!$?U_ zBv7{i;aR>z^aH0#=+HU=Qh>0(9$htqBklobB6c3A&a=!S$eb{uA7DZ$epA-hI8hNQ z#jBP9Q5w#OC@Dr)@qlMQHaKPpjD*8OG+tH#^s=RS)>K7M+K<@dzpVKY(e*fZ>bhxy`OSy7m>x>i(OwS zB$RbR8!Zn|uClHm^SWj9)rf*R8f!PWq+v7`u}B;m%y!2I{rfI+j^oPT`tKeWrba+G z#?sCaghK=F)2m_0{-ce)@%@^)9i*?eK$iG8!?Y@~DxGcM>gx!~MS;ZE9JkXO&P46H9v(2l zi;?n7ICyfgXvE!OZGZ7V><}eeJk^$BSgY)!_JQ&IFcD=a%{Q~St!O62;AZVdv!@>s zhe=leUnHBU=txETW?(#0cYk?(ECBr;K>4SVJ+G5n^dV6OoEawAa${aI9!OS{q=c!m z@<~8kJO{P7_X`nV_NQ;ZKU%I?A_>a}-b?E$^aQXqQr0RG1t?y{@z*XWRJUr^`~0x0XFzRk~1$cmuU(~~G zJd@r)e9{r$2T*0N3b-Q)B8B%k=FF{lyexK6;ybK_I@4-dY}$-x><8~`6Q0O{%DrWx zUP-E6*@>}bTM7sYPxFv)7pnDAA)5d>?@HXOLc3uVAZkxA>NRg7Bd@9jz^(O6S;)t}o56*FChl zyJVhMIXESBclrM_NY5H1aL$4c#yahom2YNtbVaaEsU5w_J6LcwiuSNR>i#!vQHehV zp}q#flZf28KfZtkl-l?u!-65peNy*sCQ8mBRM{=at_MJi_JbEe`T}HZwQge>QWMny zEh<0n_S5F7fGI<)1f$N13z`41b>N->1oqu2JMICvP=a@CVNjmQvq!voE{5|lh$k4~ z?I#?;Q^g(ld-!Hec!60LXrSg(ie4bMhV40nkG-oI1g`NT4`T_c5sc5 z{=^Wnf7%!RoH-YkiVIN#TglRe$U17!1SE*GYz)ff8+27zBrGYTW)xyEVI_M4xB%?& zhZ|$_fY96$`+MQdizV^pnllCZm)EBV&_4j)zUu~|nXY~za9nu|3N!~&-?-O&8!T{qid@Of{Qx5lOp{2I~Py&%UHD` z58sXOnFMe#fAs%9D64nDW$ViMo^14&b!Dq&ROoHatS{nj>hmLdD*kC-Yv1Kf;QK;+FV%Kh21iz?Ww z_J$cOAt7p+Z}Ks#>L$eREbmK~>f%^M-IxHJ3m}?h)FrvW#J`vTS7M7=dAODR$5l2Q zu^kw@Nh5!8DePvV0)%DJt=^MvmWcGp^<*WB%02cL+ye@bf;a6^(YkhNwK{#rdr`zW zb`Z7ewD(>RS~Cb#q!j|RRNDoCh~D8bSBi5(2Sp2KI-%x5%5X=Y?QI&SSsFp`^VX zRNGI${rtPu{Tk!vGZ9=!UShF}Y`4rX6N0mepjDTx`x+#6)^W;$iIpN#6?l+f zos@P{aF3vTJ+przz2$SDE)|St02qAVg0YE&muB0vnaq(T;z~dZCVj=tVxM-PQd_lN zvt|1P7%EWP5Fh>Wlkw#RY^?CDD4ZxQKaxpoecA+CV;k#z8m zxPh!JkR*X}76|49Cz&wpr?rmEJZDiwnK_{Q?@hY{=olC4+KuemK}x_gV_2VEo!aSb**G-6KwGEB zyuIqd1t{m^$w7KobncM|9smE3-|P0^vCSK=LU5Vs;VmrF{(K??PT9eonLpW(T|a}@ zDR{RY#ACGbSw-DQ`FoI2z4YkYnpv~h(>yFv!c1_W3!Wi?3?mF^d1?l}jr*8`#EjHF zEhu3wd#6upwCvec<+n4i0w)*bJ<$KQnJhmK%W;)h7t2N~V2IoU+*sc{vjXRU z{j}1AAacH57I>6rz0Oit&TNxim?D=Gi}vk`=Sdi1Vm*{kUsVwUZePZ#S}2Z8`lyvs zJ#|tL=X2;E2NjQ0#7%EwSkf+-*QjY>f(o7sc?{Jqu~s4>T-&3FOttQ5!V(LCVV|2l zeQVYpFJKfbe9zu1jgy~Pz88!sFriE-#F)}_|@ex3~&GrxMs0xSXq0pJBQunsMiqg(M>-4~s-= zl9<-o1z5;eGoisjW6kaf-U6P3;>8(+ zyWc1I|ML2&0`wcvH-1Xlb6$nY)e-Rw$635tQ9&{u`$=JH@8(3_DLBaz?%_$MpDvAq54 zfey2F>O1!iWcab?*DqO63bMOHIRIXdd)1q^(SbX)YBMBW=;F%unf;+s0U}5}{oX~% zdljTx;K4k{tq@{cC}h*y8Urgob!WgtRRw^9cqW8*?t82}uLyxK1m>!Wf&p<8e&E6L zk!I8i08@Ii3l(x#z1WD=-Yo&G^Y|)ffwQl@(l&^)x_#+%_FPxnjLsXJL4aCXx5{ewvXGc_5R9>l3PQww|{)J-K*W$Ph?dWYz~NM z^mz58gXFDaOk~CHKk*^bu(UJVC2eSjOB7L_u~nG7K4>)!z#?d9AbKkF4Y>B3T;d{ZH=YmZ~B1A zd2Z_3-MqYhjsX2u#^|S#Jy#+$+i>UY$LJfkp%ikFEDF*G+5-iN0(t>o8=^H)?aqV6 zWL^l}-QK@@Z|}c;G=J5x+Z!fBCXD7AE==6-s*T1t?7H=KfXE~|h0dyX7jy)$iR)QM zRA2mNK~+aMH7lO-NT{g(X-4x3>vw$x$SAb?$q;W~k16^p^LU zn{iRNW?I+`6In3>o#h@DCF`@jTIfk`e7p0wMb%j0akH^%8bC#*x#4j@1G~y|TV|42 zRe%v2Jk&^WN;*c_axq`1$20TkZW^#>rQ8gxN~^G%d#NtHk9^b_fni$dTV>y=`n`#< zh{ho~A9PIVEVgEr%k?Zo8J#b#ZSN+*OMUt64Ed~Z+IZ1>71i?vGk zX$7L=is=?X@9`5SiXTkO?HYx7?q@#b%U$f%jXct7T^`X@M`6+;xGL=op2c1$Ie-q- zf>urxDm0VNkpS_iu$%zu;5;r@V+uT+5i&Lb^088*sX(#+?$dGG4)c9yuXf6qH}Lxx zV`hB>+1-_B-G2gLzHDhMr&lKhX4q9g= zclH|!IAtoS!b}sP%o4bL#1SKZGhzu}pH2`_ zdU0&z0tN8JXyf>zx*!x5$O;kRZuaiodwaCK`Oa@>s?kd7xtI2uxm?@N;i)nK7^A(G}q_!&j7D&=CUTeya#z_Y9ur zts*6a#{4%s?ndTu8?G5?I)EQU;!eHj?V#>%dy(;uyv^sC=2!!uIo9i~dKNGX8hj~1 zHCpZ}zQ5j;PM4!50%4lXhqnBZ8Cs#>tW=o+?e?L1&sjEq3G_u-xB~R4YPfN)WK)?? z+h)b6%Jo^Pbh;iv+gu@Au2q>h`$?o858-RidbmZ#JDT%y3>kQ~r{Mc!^U#DU{{;Mz%sn@KkA{MGmfNVM%I+k?Z-j&# z#%H*%K;{>8RC3<0pG8M$Bo~n}h}{vKE%*oN_Z+!ivl-s*S%IBL=_-UWOI|Z-4?KrmhtB0*CxAd7H0OElv@YZqP3ijE!vY)%C+wt+MH@WZ$;D>igjmh`2wUU%mGtjeRQZCL>D<`T}iM7CLAk4CcG zl*F*HTznxWl+Sl&@77G(4YAT%dfWmuEAMy6z&!2)Z)P-I-hU3Okrk(BdTSo{{}hfinbU=pu;Uq>L^s4JDzV#x-cWU=;#GrAM{QUS&_!^+L)i zq(DE6+gORcCH8I0_(9)`^O`h~1nj9qNij1jHm69n%e8^jddP{oj%Y_oXU@x^-dVzKrq0ra1dayzS7?|}|*J>ab#qhAYH ztMDliXaj<}m_lEfva!iDIh62R+RHa=_wbLWr$^gcJGarpDn?egad@$ucMiNd_=sBD zo@QNq@pTqHHv64GBOTooQgWz}&kU^j!J8Ac?Ed#&XoH&1#VrxQOF+c{0Gg$CY$`yPK-9EziK=R#-s}Qkg8*9T z)1GZF1F}gOd8y<*%92|mR%bzfd`5;8h>OPVufbjom(1=wtiqCR_4=OA2Xd^Um|(30 z^z-k}vLQey%D0SryPOPDYH!9XEW&j$A_FX_{F!q(9<(QfagcO-8|T(3gZ^l?e=PQK zBZ{8IzyADSw;%i}QKfKb--(a?g%Ib}mUD>2GAp&>BXfHVMkC32IEuCSo_vAw<3U zpxJt-PaT}S(@oTrL1x?6vVJ2a?6`56i9619$-I!4Lte9i5X|RBX<64lOgN=?fm@s5 z{Jsl1d)uxyZV1!o2jG49ph1h9osZFtiiz=zIhMZld7Ih&OMAQ*kUm=n`6!S?l+GIi zMV6G7l7KMkr8PkSs6bzqt_q+o%WqZS+&X>5W}$7wNsZk>eq$?ebt1w?gKL5UBJ8Yy zoJY1;9<)oS{$Bw+7%@OC!Ax6Bg&F2x!KB%4OO(?K0&FRWFM#A*ywFkjpIz~rIVQQ> z<9_M4?$&u~p%^{US^2uKbTdl621L+_WW-7=$n{6WqLe^1US%nD9eU4mL9(cebRw{O zantqwz@*uMw2}ubcAf{}RN}se4C(G(DIC}hqY%{1bLIt{zX0@Gu-UWX{ysb9wq5_t z6)?>V!Exs?!uGF3zOMyLw!Kuna=54+GgElqxBU^mIn6~%miFrLM4V)bqjz z&w2fQ{r?qcY1UVSOeOSBxB%!*(fzFIJ^}L~=scFPHzUGbcKJQEE$h{NJuYRJ!g8jp z1vzM4LHdcr;Oh!R|9vRJ)_v9(u(P5sy5%bKL%`WIP^VT?w)Qxyu|!sW41P^$FseMo zS#TW)t1&XdDqi!dEWKcd7KyDbV5kKdXI0Ky0lds3+X|v-nU$Hc5rsg&Ol zuy3WDS({9#3t*Fl*HV=Loh44tKZ+-#%iV)HyR0vrm>mLZF;@A*h-ZkoYnoV!NY%^! zu?n?`g?b%Q53}PYo&yLfNdP;SxMQQ0@FrZbC9~qT$^Q1G|NK(|=*dE|Y34pt_FOSf zz7b0+PtWw2{EBnL^*4HH7gYf`Tu&xcdWkkcV;m?z!0i3o_qH=%JkV#b#93sat|T^`8JGc|7wKh zfg!PiV|zrBhtCcBPW#m)K?V3%fqVt36H7aXjTOe@T=hpYochl9-Tk}oz6lOq`?a8* zm{C9et`Sx9sg!*P!sb$VfCj?I0$LWJi|4^bH^Hgc+Y-zPV5TzHEO43uX%j&$l=u^b zPqheY)qW{B4>G1K7_53~^nk*r{V=(Ya}`IBEjI;}3n+2RV_5EsDUr{9@TSYoOPS0f zSht|UVGwa^9O$t)ik7A$e2nU>Jez}oon8i}8Ce2CjG+UA>K+*Pf04^)0;O&vk(s&m zpjd?v-DC1TL?^qt%q?hZxn@f>jWMblx_yXU&-sIa^ql6#?D>9n1wNeYR2H(>1#@nTBO z^P1@u@ao0)U^P|pjmKWebR!df+jxVQfqPIYxCz7;(4pHw_~-2p@9mZCMiHt2WL-Zi zQJ+`|I2xynPs7I_GoXFjPKMsaS!$vphQyb>v=oX$IK5-j)JN!V;9>&8od8A`Xr?k`m zb03do21cYWeGUwbsiO;@Y9xSp{mePg7FKCW-0duYX1N#}?SUp9&eY<{bcFx~fsuds zEM5h!-cAV#1errYY?vTv==VW@c|asfk<-XGe#7^a@Sd3fqy=y${kv_gAPGql(Q`h` zn>H|-qAYoxziKgK0%%d6dD;^nd7)<_Y9<5`DOup!;Q;Hi7PR+)yBbi?9nL)@*A#1s zwuy0pg^cAoCXh}op=B8(bwmw4yH+xpGi!|~VjT$~D%XT{Aq1;51I*sQ_CFSc=A7Rb z79_3ijiExj#}{z^2>|qKd#JCSjT^J)S!wm6% z^6>)Z58nfx4J+GwXX{Jxvf4lP`nmAWq_;>HA;e4)?~ z0CNTo%!Gg)v;sOK0GQV}qO$EMa1HvFhlDGHU>)M@9UTLqUL9s>&3HCXfkQ^BSUdru z^5$qC@<9-l%p(vxQ~mYKm)e5u2Qf?3R*+el&11vnaQSH(5IL2;cWMQgDBRCg3mD$tV!!zxwer{}w^-9|k$8pY}Z~W}#^|1i- zXJCCkBsiy86d?fTQB+O5LZh3n3;{Pp@e=kx0C6D3SvOuE7Zz}+5F3$whq*Pt-oJgc z-J;S}lZV^#i@XQ92sUx$9zBBFaaNmw_gFTLU$pIge*q2PeZZhq5M#~s0F09xwO!Ly z?@6is={P;=VV^|a96|sN0#G2i=DsrgY`+@Pn++=E^9&-C%A;NU(0j%0xflJY&OVf3 z%mGy6e(FQeIfH%h-te=UG6A=(6zoP|9>bgk15^wUE01#H;35PECalFQwnn2p>&mk| zDTO!Tx2?eX{0|1+&61M&PE;7#8fZH*zYvhl>kS5 zR$1}q{+Z(mJw81h1mckCs@K49UGIDbWWKy#&4%hg4%_GTre^^r&+qLM*0+G&0_m}^ zI!j4AN+3Pgp2ykeoXNRmn)H#KT;=oV7Fe#5YuK+u_*Q55n!3AkLRgv@a0KZ+@OB%m z)QCvjFu2VIu^%SxHmqAyWq`_|E~|(bR=MN2sYaappq@_sr4dwbG1CnQl<1|ObJL~!s*F1$O^^`S%N$^R%c_(-;Wwo{TIPiwD5|3X)~UTz z)1cNe_3R?SUvUm;Y>&h$G z{%s*tO8V0gw5eY8@)fkJ>eiR?_D=zzX8_`! zUIUQ3o~dim;LRd{zTvQ^51$_Q;iU9vNiPTlAY5U6!>K9=R0OTWWBfWd_i8!DH5U}! z|7BbAWONEgGx&tB1>I`vYw2DEq^rscq(Gkj+7(F7;dFGgT+tl~ABF<8h4u5tV_@xe zuwXlVulGgol->`^4c6y_6F_Z&>T_pfw)UX=d8ZK=SLdrd#TU?D4djexw_6Y(FF@RQ zS$FD#t}M|+=9vLzC3t2eXg9V0Ci>Qyu$^g;WR_Qm!2+SZsNXhwoQocOX*(sV5K4k> znV6gD((X`n%>w&A%QMy~kWbjINJ-uV2n^3#^-!A-jWb=^-2dIgweKT|);;HMg7iWvU}A?7T>g|*}GrL_H{2k7^hPdM3+YJMXk}@(F!)&To zdHmZc*sYRvO1e&0FF;E4Qx zx+ft8`5@VFQ*0iZ4N9%`?c*ACs&y^6<^WLqs`JHc20%|w`$=jo+CEYUS;^#j;Zo^7 zca`_XBpgQ|wI?*GjRg@)w%F^p+6ve`C`s@Cm}o5zN~wLlSwPtC6^J7o$IAKg46!fU zuV@coSxJ28R$eI)OZ?3VNJm7U)U4U!zsEW_5D>oz$GI7v%xrIF56AzWK=QsYac_`K(&8<_4XP~VSHGU{DrZ{jPJa~yv93!hh%D7=`FFnnyGva}O<7OlqhZyvR z)dEO>IJqvl&$0lLGf)w=zj8igE+%~{)QWwuOkq7x8)txmX805+jfCWq#hHTgN(NnQ zgO+CZ)emMelZ{#zm?jMZ&{zTF5s=QvG_$~7aH%#J2MmC;!i%&TLW27|zJ4Y((K>JW zVSA&sWuyvk0ny%DP&qS*vp8{zAo=braQ;cV2yjSgs6?ElttUOw^Y8g-fTW&dk8xvr9^-zDdU3z*@( zT{8S9LAYac^jRcs0M3`_sd*>%H}4NyIBx!LRsJPp7v01s|bdpB^S^>@FAc= z4A#SJdqGIAB;zu%a zIBEwKeP+#xIj}}ji6Z6<^-K3diF>&P^aFh-Y_Sdg{qp*l06N0CaDUW}=h;qJ-ct1m z$)Z}^_qZXpuY$>3{t@~9u053uh%+IS@;Dz#upS?uY&VF+DKNR^kWni6&q~`7jw`5* z$~fgboLKiJU7;?JtqSGXc%zOP*j!nq)|1Yx+>~t{h}fLdvU#@07M?AR-|^|_TxPO4 z6xZQa)LX6%^qh>12lq7w`@9PgA{1@?@I=7=m`OkWeb|jJ!2A*~`7o$WfHtR~Z&l9a zs_SD!j_|uYh#v2N6DWrO?FEo7dg@_X_1z%AswIl;je{Jz592{71?r}aC>GH=vDSzE z-$em8s+=EWi&;u6wC8G;_AOH@IiVb`{JwisLd(G;QYQiHk*|EJ7|$~Gk^g&CvTbRY z!O0CF)Cb|Qu6)twd5%B_piD3DECeiGkaGd*jc!00uccFM%4f5LcNHRjGn=Mw4da7_LlS!|~PY6`U)O zY@QI;2!MXu>2D$+DUfb=mfMPk-Z$PDk+|Ge-bm8eWN(=k`?fxMC51*h%RD;I zZ1lYQPwbzLb7}sp%8%_J-F?}gqK?@4@xFTmAf1ouMWtRJF9fYIW@tTFYGBwM|9YHy z%^g%d{qQ-KYy|qi4zXaIp%ZcvpP$bU|BAQH4A_XCyrB(Zvn!G>W{`jvlL6q zYPKx~+z_S3)<*U73TQ%BT5mxH+XAA(YPM=-@%SSMi)4mf&V$n*J`rS?k^#lcIO4u* zw_@AC26BG(C+Azy&rYVJ)c0|NJTESb92Q$TD!RF}yg*lRbd%sRmRT&UQ5e<^qWhyeO#2I!f=J8s;L^8fBxr!{;hH!n8c zd?*kMDwDm@>%F%!8ZjtpgvSOi$7;2|--~cTfnr3JYrs`gDVN&ny~yi)inHxI%b&Ug zj5XK}>utws9e!(%ugrD3_)TfVk!ag*UrZLO73X4hLw4QQ_gsq0xn;@+(fO?+bKc#@ ztCOMCAb4nZ?Q7G zB4uYHpsYT|EXtCe`>;3NxNw&$gSH^soQbkU=s7&yf*4u|q>Yrdt9FD;xj(2NFxA?? zDm|h(DTs}xgw^`>gY-5lo5JBhyx^H`vGw907$&L?nrT73Vf{R9X9L+Dk^si7PANEhEVQ5^5Q&csPZ%Ce@YwaTW zjTdnKkpc9dlJ7Zi#iXx%4BR+>0noJ-|1e z5@1j5sNzmf!Ud?r1f*(RRf_=|YKr72%~zR6Hm(96XwG`hl1CzCo0zOH)&?V<$K&^F zr+Wuuolz4ALItNgMj^NW>1SUA)qLGnn?}6J^HVOb71edtUw&!iIThlM{qef-pfCBv zLRuWZbBs{&`dH?UBS?Sh#-X=ev*YLOWL0E?pc_EWvynAl^kdVKN|uoi0IgZnkM12k z6I-KEuxtXTC&F$+KtF+$NNn!B?UsnZDK&YLF$eKkH;aY$s9JsYx5Y}>v~1pTzw*py zU2SWNZCXeWs1kBpf$BBj%$RlqGP+d&Qz2wmQdAE-()+(p{@@MqajDor5+_ygO2@?q z#nmR}o*NNvwBULQvaEl$$Y=9O1PvNMF3$r5ef-lsv|IxO-sqV#02MuqW!dMR`K8~T z3@T2SX%O;Ufi@*&Cn7~UFHF=luqN?tjoUrVT$O@1nFWJSVEm=5{UZhF_XLhVm5EYN zGoO{sc?^m9KVjHerV1i!w08a(|Mht{!sgTOSVuB)GG?=1?e-lRnR{+d! zycHBIn1FR>3$o^X9Py8YyMBPRL2w5DkF& z=oA2EYXz<3tU)@K)g-ijBY-FBhi4#zX4oz0z1|=o7xuDe;FkuKx@{DD0|$3X^*!uW7Jl&TcO^x2(F-1VqyuKHjigah zuCkIm>YSr85VCDV|7*Qi8-`RZEYMOwPG<0@>X`B2| zxZAAcJ|X0_7kylz+I$ji27(x~bHl!{D!sR)M>PZ4!-#p|djv2u;9&)EITJ+0)brg3 zp){Kw90v+2>r3Xokrsi1)H5om5S-{R;xT`|zKz5S1n`vvZ_TvLTLq+|;8o55R@1gr z$|qfA&!aNVwt?HXhXSk5&ixK~&Aw>+Gi6TxtQ& zCCZHSDCSl+C4@LUNgyo!$h|QWpDLjO+KVonh^Fh?5IyV>&QBwW2L634Zjhc#}t9XdC$1A(Te(fv!tI{(t|62LI_lP5MsPEoPt%1 z*(2*n40;?Q`(%W;n3d({47mbe3fNIKeMI^e7t+&vawaGrr@;IQ`!1D@MuuitB}cGL zCDNw`QT3l&QWj2ar4nJhMJJ(5k!#iPN@|t0RfJ{w7PMS|KWACFxl+1C#eiKTnJ%_! zT@SXh=(D=7x+?9C)}JsQgwBl5Hf;3151fHo1?cym`{jVzL=^M{1t(!}Xv^yU&CVIo zjarRoH^jVm!^)zPfE~|^K-{MW(C-YOqlN8e0>CHV^JEhd?Am-3GWfr15 zR1qK~7Ci@7BdA?}OVvWzIWa%e1aiiUB1+eK+oh=JxO32Gf?Tdiwvni{1U9!#5EzqM zW3^OcIkiPGi?5@PtHwRz#r1e|5S^71&ROVbYaRjL%Wr(}Ue};Gwrg`z>OM=zW!qq5 z(WbxGS$)>DI0Zfrb`Xg>mb%*>=OEtOn&qaz!luA!7FC+#CSU=nEMpF{G{dMsx&#)s zR#YtN!h9K{z2ugGe9}|OO6Hr$nhx3Y7W4-PAPt#KU1AB>jF<4v!Soh#m-Wlj65Sw< zQ02-?*?cqV*BuGLLD{Gkdb*{EogyBPZ^ulF4ALPF%AA+pYVdnCQvSE-9yH$Howf}W zF*B^!lo*N5QN7&Pvh|{i4r`s5gQ6jW%`6SO39d;b44NB#=6VF4;;_L(%BTWktkQ8B zpUoNW)e;VT?jA{?^YM56<|C;{>@NlRwA71DzVow6{#aFrE=!M_fcd7Jm2d1*pMUN# z7=I~s|JVWgPc3_1iST{(LeGBhYC(kQH z$98Up<`NRG5U8RCU+H^aJKYpat8JC$Zyi?eX$S(s@}y&B^f_?Wd0X7Hgn-`lTG4!k zu)cwK;nxV$y|MbMAcgoiT90! zh*MH*PJ#1zuuekS9>9)gATl~q;QSuMoWXEttq1&ApOXWj5w%i8iLt4bs!hY)l30B8 z&bd8?z8f5h6yC*m=S=zwSpV1n`n|#VJ+kMOW0;gUqkWaL+R2^k!HpBTJmXI1d<<4A z-%Wd|g5dM2HAO3z<&_6FWr#fm12Z7sHg#cfUbhM=y*R0njDk}DnZk63BmvrnF=vps z{LrD0bUi*05X?z}h)^H^*hc`S3&x|~{fnMDCaX6Dfq+){oy##rR$qYZ-bPK4PL=im zz|5Xtcy-J&o^02S5m$2__??5yZb%39cN;%HmpM*->GQfhX4FCV%ly5~>V4^q=)-hP z`T*5T>sOfx8#Z+;!mh}sV{Ihk*LoaEEYuhfin8LeUw#sVn*lIj?&S@6Si73pHUlL_}ppF9@`Lj0f$%5 zC8JAJeL=;l0h>BRkdP?w46x7S5ajGsa|J;NudjM!2zWRLpO3&Jjs33f<7Bn=V21a0 za&d1-S8TymvEo|F)}gc3;i`+E zH$6~dw@7IoK^ECYCF*&*v}e90M1ZIgI18dhtpvs^K^RcZYPhzPtXFg*Bw#)ZJ(j%J z=(w071!i)j5n_dSj8g^o)B4e7K)%Lad|a?%af~J8&2;6ES-k>go*!+{DsUZ=%ws{? zm{bDka2|92yG~Y6($V!AW~2@2#I0Kt|#D+Is0z2#oC-XJ(WiiZ*-OkG66K@=RVvKOLo0j@_s(xvVlV*$7x(} zZV@s}gbP{Bl-d5t@h1yYv&0H7AhOKFbz|gDx4mXuBriHQ3CKIYY!g{*>%`h3l7)`7 z386sL=8p#1D3BGfCSr%UMFo_2=&NiRa_hdlwu7Pb_F;$VW{Z)8xh2z2^(*=19$j;G6 z0M3PYRQ@#@?_Q(a%a;@-S-<$aa0buV{<{vuuJ9h=)vV_5qyG7ota0(n4#b9Y!_E+K zmh)Q)f^{EJzdFQmpWlBvCX055Ec)46XFrL=P3rDvv7RYdLW3@|^h=o|j_JJtwE87W zezsjZjSSYcF3OOzj53=|ap`-U<*n>15@wTS`=ZpBo$GlGXj9oUDGg^m?@Sa-+HhG? z;!GxgWN8(a$}?hsW%0p@1O~iRW_t+>SVr5DvUqVlhxZkMgFGCO{qX8KZ58Vy;8d!C zn@L@Rr98dchg*=vwx9w7Qzil{)ehsPtaEk8BKj8SE{xm32pR=Zv8;O&W#1EyW=RzS z^xQ;HSu;NgXv;bX>1vT}oSJh^`ri3E&|kY=WRH=m6+B>q=$TuE05jjoT-Wt*Xsf=I zB{z7N&ymFVOL_Z83eZ2`MZJr1JGl|6y&q-V?J=mW9ye|{N8D?SHjGDr=Oja^2nyeD z5P;IJR?t!zvU>rFSKzl^_Zf&{Ms3aN{qCXsm{+vm$-6!)+j`iCzLvnZ;mBGDkVn!$ zmh?LVyOp`wZOyUi`i7j5#};f%?jeKrYt~~aG@s5V%A~LVia|Q33bxp;4WI1I@ai~B z@6B2-5;p_$*7?Ct1J-|6shp2wq_4oyr{Eu0>6aE~VN3yN=sxv6tB%>p0Cu&2+;Z+V zD>ZAIGZWwk3aEGXZfTjjQslRwyt$G!7a*5`Aq7BWM%)5`Exg8=z#A=B50vy3KvK3@ zR2Z)(6h!|#t1yUEN@TSaYUE0I4U+R=V`vSeHC z2VWbrAjr?c?)yMZt~$?EoMO%Mv8=RLzaA1Vp?77)NoO-|Ix+cSGH3p~v8e0St`o`Ld< zO&yXp2bS|6yPn(fT_1@nuLF7t(mev~-T&Vo@B7zgzPCeG-49l4Oa#u4ApNYI+zZC} z#iDKQ8}Iw78(R}4Sa9yM?rUI5fw?8wNR0QbQZddz`a(!#LTyA)O&wp>AI!@7K>)Gp zM>oWo<4TK3+T(12T6p)vHUSa|%qP$va*9j)S-7yO!Ht@=igB|4Qxr>I zm+-(H(LXC=KVAD%Z2IDn{&NQCAMkaT?0L{jqWV$Xba{|hkE7bB;u{FF4MyF_h=nR> z#uaOaA_tOkgmMPm+;+Y@+ep<8r62_6QEow(kw;(zZ@^?q^`=@=ve zbLux22EKNJwoKq$3*(Gnf$9SqaNQ zv>MC=f)xQ8#IZB7!uUR;5_MWWjP2w}W@}~>IbcXEvJ$6&N}T6X)Xlra#|J7IvlU}- zyeu{vToJ5xKZg|z!I!CkA%ZOa+{)1|pgHN$O9?e2_jrT2uf=n2wD!ZM3PON9wb=dF zpYOCznZ-IJ%R14_{FT)$i@g?`JP&~4W8Y`Y`~LGDoWCT|KLvn(i!j{1_7Pzawk_8c zGfNPiv1w|uXX;M(9?xD7rD!@16jaj57f?K=)Uz@f)`!;*!B;)F7%SlR(y(R)f);}o z>a4xyERjOV01(E;Ho;}%`8yBFL*|lAKH9U+^;`sRB^VuF8J5{68F0r{w-Gd?znMNuzj6nn%iPy#li7HblC8`louc0XLDotA}@GU8=@p91~Cip>gH z^~{1z5CSdvH;`w;79q8!mql7;Z?%5#S^O$el9&5rK*l%-ls0L}b5vCroc3vv*1|kz znr;nH$IficQV?&k*qucJZN}R(czXxB`*J-o)sCUG8ZzSa@_p_HJ}8|dw)W%T7bzgG z*x>PN1WpXuBqT>%ALa`fw(1B4cm~9^fezv%oQje_wmo^q+q_nsdeHko=N^drnjZ9o z7;u$Aw^bN!CLv#v=s!n*zRke-?(EN9w&60tbq)-}M73LHIlbJ}TW&a1_I=HGdCuQO zex%j?`BlfX{aQZkb_IP?eIitX3nL7=u9Lg=kl02DFhFLel;}|&+j|-Fd@7(Z+Gr<2d_4a;+V{eEIr>qg+BYACHGSA#oeor zn*#i%=Qbij>#PiaS(vD`BD?OwYPC)L|<%!XFk>h^{?Hsz;g1@|7nzm&ND90B^h zYaZ^AJ%2{x%Cq;9FI-a^j%yKNd4bT`b5#~uFk^!;vHaww3sF+-%RRgU!fiD0S8?Hs9)E@lO zqn>m%#z7;6BWXb3O7sZJ=<_@_%aHq0*8p++oxi!5YoLTjH^*RxJq)``Bn-z0+`9~& zx3LTzPSzvvb!o|n23hhE3nl4oiD-sZ>V>e!2uaF%r=SCtpXQD(NE0Lgp)B^g&w%NJ$$K4Rq%nIa4jRG4p z_NH_Rh&R2=h=Z&Avnq{jyuxfRMo>ZbV}S*qVVQ@0)xun@k!7C4F}AhWe`X3Wd3Dn{ z(rpx?s?oYWbE=tOnFS)!DvELcUCiVH7~5(UXaroZ#{~(dRXYlIDIo2G)A;mC@93|G z=?Vf6F%9fViTh9C6$ru2gENT2xxJLLe-r@yPT;!)&Y!9Gy!^TI;@Olv?#nZ`-oVds zmtehvJ=?7()ixc@2?>j>WWt8B8h5u>uMYryE(^v57lo@BLT)u+T_bQ>K4Dm`3?pE= zX|@>S!^lDRbcx5D*A}>f?Ox(sK&gg{??=Ct)+t@HF+)gkkn7|qUI9!1l#jdAk9Vys zj}W$F)7*-F!xh>udu-D+YbQ%GSsKsv-djf&VIst$Y=!TSf&A{+i+%#$`!)MKfb`zu zyc3smQHE}FfIEo|SsR7qF2S@@;I2S=spOpj(DPXNB<-haHh30z*>B((F3a96E`N_a zvKvH3odox2iMqS#5^-2j3@_S_utzfms72rUJjZ0&KiO`Z=TTdkAX@s1;&_>;&=q*<7mmnz!@Pj|BdnIb@;&G#Dooc(S{904pQ6xcPVsrZQCFm7?hv(S*= zqm?(4KwL)HYqDh4+QEANizD}~*ucy8!RG?0z_Dq4WdeBUCO>UIBue(! zn?1a_U&vl{le*@|b0&ONY(IOVM{T?>ua69%{}f8wvt0xa2zR6Yf$>wZyJ7OQXnNYX z5x_=!sCYyIwPVGduUkd&9mo2dO9tK3Z6bubH6QdG_SJmVL9)_CZ3x z$|z)7>Z*es=1~CQ@fF-6g(rXONUm9IDyDnHklZ_(I_lJ3g5S48R3th$kw z087fN37BD^LcR~J)l#)dW83Ed#Hcl!WuRU3IHz`bN%ov-5vcofiCJ7!zj!yMz7is= z&s&MDS)mf;?04?5&VWt*&&l`D`H})jj2Ar7#`_VpvVb`cMI?ZZ+xk*+trMUox|&bT zqAWfr@T9_kwrVFVQG%P{$?V~?3r=`;h;u`-Qt4Cl;GJE{mlF4n8KB=V;qEqZlh3>Z zMm~{IK!KqOJkOyRt}Vxl4ZvL;X5#yrVKAs0{ocJY-8Q|#6vAxhZl8bt+VO*|(FJSSO@ zkRzOKV0Hp1>?0Z-PmwL%#|n*R z+})ua_Xw`)-WPMs>blkkx?=LTVU2SR(x(!8Bj7U2o*M;iLzo)KLk41W(e_)d0$|Q` zD{pfJY+J$h&7dvXGSN4cJ*5FTR? z8@czG{tU9~VM*3JP$EyO(NxA+m6D5b>y^CEKI0hsjOBjCd{X)iBf+uO7gPO*bM`s5 zshb%zE`S$cU2zZ2>#Y&OM!6p_cY%eBYPJYbD%(DmMQ`2s7+EtF$)zfS`o$gvV&ME= zhvB{1?sLBzh(#ed_3TY2|28cW*I#2N+BYv5^p6#wf2h*-JHAv74Vl74L519lw%W)5 zbMjf}D{5ml40l;giUV2seG(wB-?^K;`QnW|Su@|o%Jg0s#`?+6<=G=Mqc~Fpg9YMa7x47LaLq1)adXeO_abo17Wc{0bGO8Mdsbu@eY2`J-y)knk%d+j3A!CZ1Jik4w;;nCWgw&VqzaT3pB?HJ zs1kc|V6-G%DV>{1)$zmeF0!SX+(?c!t3*`J3EcGnW9C|dSBz!b7OUSg0X24k7$J26 z)xL}+#CTrGYQ)v#q(kSu1)$7 z&Xw4oe6@62ByrCFYU~`A&sM6Z7yfIGb00bOJs8I#5_jqoKliSm7UH&MWaS)~%Gk|U z;J$)grz*)qJG*o67_GPZ?=djN?8%&g{G{C1jP$1?2kK0K%Z!6qWWZe6h*=CIS(&}c zCMxp9f{b;=QjLm+8MpG2W$S?@*xZ*cd&r@C^7}WO%ojIZ@sN6J2Tu*8Adrw0LIlvF zGJi8#K{E>mvP?be$-eBfyZ7LsjzPsH&cs{-Nkuk@YiN19LND_f#d)kGUFsY3p3ZR)j05~6w+9|lz=^O(7cbleQTHGB2d!D{WU zc-HR#cM?~H{=Riz%ia3~*vso<1L#*~&v9?|rnHL2SUN4Ob8-C80X&Mw>SVE_U)`Ej zA6BcJytrxXvoiRKMOza1?))JV_O|RqYZ-MErxB9waI#I02?LZ^llp|%<~rVIKoJB5 z5Z5rGCVT?6kn}@KCP|oM_ROMlku=|DV)f#a-XH!fS}Z3+~CBLU~e`=OWYxADGnRpM?U+ijv}l?D1OvuP6oYScg6 zw7NIjMg~k5wQ>S%7I50eg-ZFXgFFHk+ce8d^ZWg`f|VPf_n|;LHq7Y=R2n%CW5f%1 zseRTPpH*7S;A8}cs0SP5zz`|E3;I1H@|m@m1(g0Whis~#=`-(Qv52Zvcr1+cnrCI> zjO4ozSH6zpux^1W!Oy^*l6{PT5%ZoAqUYH2mD`7uKXgDxQ z2k0LPoZ~*n;6}u`P_$h`@mNqI$hME0vJgT9>0nFg>4$z*+ouC&`J|HnuzO{%Y)3n9 zYl~i{94@vC3jodt+BmTF)RjFe{vOWRBkC0$sIFTQ_)7J83xJV{|B`GrEwwhS%ud&WNSS;B zO0Do*WS5SEZStn4^8&I($sw?%^fH>mz6f;^uARxLV z3AXpCcR+a9w+BJVdPQ99Ymt?6y65FuHnsc!9noS-)k8aG(a-DUlU;hd_s1`v{_eS; zGr-2V5(26}wfh||J6?dG1=~1zN2)SjgH~4$s;pDx>Hcb+0_E(!&BWuPGW#?0Zl$ zkKl88Et=?^pGbquKRg1ciab#M*VIytRAH>W)fi2mJ9Ri#X^^$8gjE9B_a?%k0bDJ8 z9@_@#J#WE0ZU$%8x||F-lT^Bn7w}e+FqGYmLE*w85BOpRro7#3HwRI;R?jf z+&TcJLIM%Unf5oY%`?9!lP(>|5wxxLp?k&@bq`fHWz42Qc-Dn(lUKYdG!2LxXj%jU z>}$xaD4Iwmp=#Y${ml%-ohZ!P1l5DRpRb`0uJS`4`Z=;W{^qIM#=Z;T8d>*9IpzsD zoymm>NGv|>5cg=C)Xz`9Afla-NSr0Tjq2WAgHP*}iV+$Bs$(!KWYK#9G*JAGGP?tC zqyaU_x-$S}YZ)!eAU0gqw#bJ(%Gz6WoY1kkn-;dS`TQ7pB3cTJW_xpRN5@_uVO1Ir zCCnz6Ud&lr1Yr(UTKSv|{&hgf(jx%F*4Eb~u~VJ0gS@zFY$iW!6kWRALK!=W`| zFWG0nWd#Xz7W{ZmwW)kOdiHW#xvsC@bK0L)&CE4!#1o$HAG!t9gc}Vh-47il`tR+{ z?DK=o+AV$IsVaLl44=n5Y0Xtm49jOP2>l}h=r>^HyZ&$kNc4ogI*Gwig3a$RfpIm4 z%?XcN5b`xYi&w@?2Z{~fd-LYCy|RZxkne8V`_3(Gez)yP+&KVZz*cn&M!23ZoB#_nmtCEE0!KLA?XgeE>qiIQ#pw5A(@_jrXUX``nF) zf=%D0*Bv$DOmn%u>~l*QyP3|2(_;nkQ3ol570T!~^^ltdec=`e##sRNiJ~)%d%K7G zGob`7MBZ4rzMIYf&c|p7fb|4WTavkzD)u4?Ko!^#XzLi)0jQ8FkuN+;YOrbsMjAxQ z>d}4};^?bYXgQ-wRqZ*KdHl8nAF ziT3jPbOAcHOuT!6_kwS=D$#cJ;HzQ2>rOSOe`B^Uxa-b0g77E}on-8t1Zd@BfZ69? zd~UC8XV^2RyD0w-0 zcP&qSvknRVGf}uwPrLwK%kM>B`2wC95DkEHgIQ}D2(sTxZ+8oNUJ=`vMP>1bl(wU6 zH8>H{_YN=jYf&;h(ie~=`@*lA9S7|Rw?r5&P*Pur5X(VW1ojnk!HAlr0tXm-wvG4R zQ_;SpuX_;4pul}C>88E#rmHX5J=ZL$A`t?K74SRv{0}V!Z3OLYxjvu*lDZ8bN*Z8_ zeG#~6bj}>zwMGHihV4Sl%s(@G_1SIVG;M{iH3W|{qnyTtp2G0^bMfu+5ES! z0G5j-i6CI-8^YIl={?@fzLElZzGLV~KmTHX z1m?R7Si#Py)zwmtI5xRcf^Pwjor>|2NhE6U{c~av$wL6njbzhZ_avKDvZTJ2#P(w&!9{Aw^Nb=NzgBj#ZdGc2PY^RSb~twZ^ykZaMGz9XrA0c3O{)%Qa!rTK~EgL1pc^>oaigFUsne)|S(r;Ae+ z#;HYXZ)RVaz5dFFlK#8AaKraJ$Ljr@Wq^MWhQ zYZ4+$zaGF>#=#?|bL#+X=}Es<&@QPmfG58Tkn_$T?2BK2X8R{x%6P7V;ag7KLwW%V z^vwL`tN;=#W??q3}OX9~v%-Le$%yP3T|uC2QxU`MC$Zfk~{ z0&sL9Z>CGvhk&b}$G)!jV~ObTnqll$w+NiiL8!%|MMnQS?-vrNM#mBPN-Ikts{mjm zfF~%8SKB-Tj<)tZ&z5Ye4M43HO}L(fCDkg}MNHa7s`Et->uCx_YMqXbZ@Jcgq5j#ZgJArVbT!|@}>2cY7 z2T>g=z9wsbjmpoIR~SFKK4zorLJF|oIRZcBV3w=C zbt*g*{8x!kR(sOTbQ!(^b__VqfpD{2EDfTsJt}jaGs_KuUw5C%Cd%~E9w7d`pb2`pHpoa1IoVg$lYIv1YssD!&Uzgg7xSsV30e2JqF2;4_Fxu+kR0mH@WE27ulT^D9kS=U z&fj^uq~}sXAA>i?rG(rYxwpH((ub^km+d;1R5v#&2q(cWwu9qJ7J3b6PvnSCzlHdI z?Y%6U&w6DeMREny&0-()te>16Tcg=L-79Yacnt;BOsl>R;L&1>F=~ls+7~|ktva8C z{Ges+0)$GiZd`>vQXw}&NJO?`AX(>%RQsr?-dmDEx-C#WhK%?)uMfTeQF`B>?*k8Y z6;`mks?96WNF~a~Vl7FOCBzHUQ~->&;H(F*mcKKAjBZU=dP~c`+ym_svL*-G0*K<& zof+Q2-u#8x!|VGsa$l1=@--u)hn*zDUdq@%1%O_dQ9sq}d4vP!#iKNjvwrZbbUPWd z`!QP>`+oh3u|{!F@5H$*R`Y(aR(t*WmHqOszO;9?x7~wZwcWhL+Y3OyURW=O&NY3& zp%2n5=3IVv*bl5Gp+@rgu749bm`5`JeaW+$NM4~EE-K=R*oe#XUF6UixDHg`%?8mj z4)zgVWst=rAAvb*KB3x>ieYnDRff1A5+Fc2=v9E@0=OSXCGm4$(K=9m@=gcLnvVgs z2SReo-;llL%F1#qktcz7NR{OlL$UCi?y9VmtZz9MOM>T0sWBCJGv1q>f_$q9*HIDx znna;K;uZh^6QJv7bN)N<@G_(Gq1i@Kv0E3m7iUC@36R*$n_*q6<1WcEsE1N-j zPtS`gbas3=UXq!g$+~FYwA9}1qP}jr!t`wACKdxJqS$Y9XSV;&?A2emJ-m8`Z1Xip zJ*nMieg2WEd*6rt^7=Ug^jpfu?~y&f!_5H{veF2Y=lzc76j-HPEk+Tg{^9Wrf5W&h zCF@&y-CYM*^FCg^dSzez;&Xd%d-I*kYbjA-D2+Js8&&+?hf;A-n&I(YPFYOzxrf_>>!xNK=2&X^ZCfnocpC+1#{YQJ zc||#X^>fcFKi2uQUTLJ)7Q5q9<(Ngs?x@@jbSmw3wqrXzg|I}nL67u6;{4`b@=U-DBG_c&aSKqY z0966VJpkr_2BH=zzAMnzw{3tEBC`^?%Kj;(c?5p!OOo-){sq(k&|a_cE7_~*WW!}li1h1R9e0OcaUp#(d&?NBpUDe zXW87eehmR3|3t+b`iCQEjMs!vrqohU*JWq6|97*`{?hE>jXiVr@rszSYQ+YQDb50N zFW~$m0O)rhgFfu++l5K)qaDCSBDBq0D^J4^mITf+K>kEKJHoq+rkHY|N z_^7TS7E{;N^g|B#<34p|`NqL==BJ*O{2B2JSgSRZD(*BFT?@(e;PUKI{Ob5*d2i?W zcd%E(MeY3*gS8PPGcex&-AHgatG8o9RP6gv0}1o4z6!8s;%#PBUa<%174f(*TV6N@ z)dsKtbzzmZ0Mj|^XmS6q*(&%ZfjDxo-loU4>S3o~t`YGsi~D_1I6r3F#6;2q9PWe#I#q@g7`F zbq?Yxz0TT6+~v8j9PJFN`z*9e@iI_QEpx{1oY*ie6qtIV`wY@yw2a1RI8`~Kd?wqE+^TFfQc^6AZi zaXV$g%~v3X6s-GoZM5*0M91EJ>wcpvy2Yhk4**>4(VaE?IHeY`1I`92k<3`u^C zw0kQ!BQ7AUnvhjSy!q;ObbI#%rdljKSdW4d_h_77UO#n!jvFQ)>?bp`m57Ox$=t=! zhe_;rIxbw%3UG@c`BVe#eusS~ARPC+e3K&OS6_X3yha#$e?zjvD`4L5$p=}@2|brh zi}#C7zhrQbv(%B@8A`M+2rO7K)y}{pN@r}&zu)FQY}cULBn6_x-4Yo;S99QU{#*dg zjg>1iSRDHas6zW_9wKlZz@-FH91SLKc}6Sw`Tut*)1ye-x%8oR$2fuO^Agq$;%=D0 zI8$Ut_uEE*$jM`OUh_}3Un`kf??<-+IA?v|W>GfXxxa6rKRqK8*zXw-Wk8z>NeO^V zEs~UvbOB(R1;F2UdAnlLJbPkMux^Rcyw%j(MQ^8EPBIX<60 z`<36d47?Km%mt@>r`n-J0w3xTsc(vvm$c2UT#gy0U}bqTa9fG-2;rIPpV_#0FZ&I5N!0GKWxmp#qO!VaT!Vx@;x zsg*M@!ph>CATx&FG?O0KhRo+#gHcKdWa)Ycu|3o3?LZ>p7tJ9ihL&XCFa6bPn^JYG zLec|CUv;5$e(vLD9_SXi3Lri{c^s$lX=F}f)o)P3k6Aw=yGM0j>&=_b?2Wy$*08oBl*iB$ zsN)F)TEP!C1K6x=JCe970{0$a^pdL*A2LZEOV&sA?ONhYk44KMBr95X{`;u(TZdcq4`Q;no_H8S8-X1+gy{TZYW8E{_%55#K1XP|vt%SWH|u3kd*nm4k|`ER>Eo8F(#(3?(r1YxUY z1}&w}MBA!B-3lt}V!ulk8iBXCdJl2-eF5~1D4{Q9v9?xbm@Z?d-qMNU`>FKU3M%5u zwhKT!1dl?QJxdJD*i)brf5zj*7|vasZSIYy^dW)%@c<)FaFVXB`}Uh~7eI;x)w z-*N;YMpOYJf%D+?4lcAvtOtfZcN6{J#Kv%m2*8fThRT7Zf(8)cnk3?3B;DyehttA& zfn;lkWw|uO4mNNzJej@z8@JbQ{CRQ8J+RYO_oNR5!Cqd^4bcBw!23Rp!1Y6M2G6>T zPNr0m?eE@qK>=_N9~SJ@aK*8PRROr~9D%_;|NL|N>i_6Z> zZ5Twco(}0JJ5LahMJSx(zJ-!eAe$e3m{)g8<>`90c03%x@6mSc(D#Q$Fm42W z;K01orSJ)8_c$CQCLe{3j99k$s_4(u;FSPbl+9LuLjl(XOnICoN4?iv{*8ELP>Sso zJVTerhVNk|FtX~ssEl_|o)_B;h2EgQ*Q>oNm1tSIAC&V`A7^EkrU0JuPdD8c9#$@h zGI?%&=G0dlQY{`F0NYeuBC_VxmM&GKU$fUsnYm52jhhJzVrgcR_qRpb0a(_)2y{0Q zc__Qd)>krcY<$~& zZn6n~>ork;o_l%SwxCI6T-fKIe`de@4`0~h@0x}5+J4|7s##jPM{halU&!3wV1MiVqZmJOQk$=q4~ z1e{OAz%0=g5F{IX(bo*2cClB)f+fIw39gZuA-`=UW4}oJtZgLSCZf~?~m00LgrA}w^`wD1$1YM3*yyv*0H!TbWzRC?ReLiNEY7G`xasU^MUkBXpasn1 zQX&lwu3O}ZPC&)HouP7qd@mFFx$pPaBWs7!$%#cFQCeDLAl8HeFpHbT*2MQwQhm(bO_QdJ_iQCjg-in5)D%; z6$F?^pd4@7yPJBqC&yBXYXpE_?zarA4+`hURR(iQklsH8=#5I)BPD%ld6s=|__{B> z^c79MW|I&4FyB$L#|z0gC-WRMi=U+qA`7(W8Jt&bbz z))zNx?_qC#;kJ8qdj|bOm|4xOtV?q7<@J#P^yhrxd4CfD>JS@drR>hJp3I1EB^xre zNbl_5(rwN)ad*6Y!(c5nz4s*>{j$^D?!kWXtFP?o80u!$X(&MQco@fQr@nlkpeB0| zW`Ggp3_FfsFJfZiZuP3^TL$Xs**Om>AfbDF-RAiLc~vn?N(7d1@PvUQucqAK!xD4m z5&#(}&1^T5Gi>Twd*-h^(<|AW^;+=d<2xLzz_6dh<4(6*r}pmqjt>O++qhuT!Xq}( zCv7uG$EEDuN5HtrhO8WGCn0hLG0q(x^ z^RYQR2ep_yb}b0tGoW4u$KARI3LuaJ^&~60sT3YMcxC{k2Yiiz-$jrr$g~&y;Fop* zVWCFL`jsv~PS}4Nvnq)E(;_T%}BA&rQcM{P&37SUmxA$8Qkmzmdm+g-|$d7szf6bbjw6 z_+KESE0C^^W$oF|W@Ol7XqQs_apaFX+1pvU-Jgy?%@3aGXIr(t)O{AD@=I#^yq$L1 zr<)&7X3n~+zVzNF9Su~+WGgWaKtW%Da1sDF_e@fecl$)=2h5Iu)JyT>8 zvEjlLEX6?HsRKrMtd`rBX>!&F)dpEX0e-(V6O{sKX}Y?1T*pmViH&Ajk$xm_AcO{? zRsEqWK-fhH%lZSK@%4CO}wrv26PM_ZDzG0{>Y&&SP+HMGthbx`dxa{^m$p%S-@#;oDv5 z7tc@VDix_bo)c5qu|%z8yevO>T2BiJEj`ERDsaBG%|`EVAq2O0!?#me zKCc7{Df{U@8RsX4`@2o&vh?r!NSZXma9quJ2|fmrrMGXJ*6e2He{J^J7yj%9Ot<_- zRsHsLv*^0DT-ZXtygmYeo<2zbOxg2I$Cap&&!z5eJb4Nvch0pX0PJy>+> z1uQqiHSUK# z1C*$rTUoL(ki5)w)lWWWxm&RB0F)}ST=iQ6NxA;%m`~aJW;%O1wHjC>0M5pWjb4y+ zz0MecA7N0GwnRzr4g>%iN+Mw+0fe!%o!RP!^JuD$V|H#tFi??G*3Ip9`me2-eIQeU zSGo(j3?0y}NOKvwA|BiPJ`RfVtq0r4H3y=~6a=wj9Hw;7sJ)s02eU8#%I_wweAiIf z>!GiElH_}NeH;M&SuZS}|7Y%rcnrI*w*qnBa8MbOGfE)vZueMLZz$n&Ou&5v?aVkajW_fw}sP-NUJ*jAdpLKqt6m*W3(P<_Z`gn zdnA1C=GY5AAb2<_0>aO^UPe2>drfd^K0LKWO9ZgF(g2`tRCop?~9hh z{JQi|Pram_U0GXx<5Nkcld-@s1|jA0gfYwAI$!jYzd5FLdJ&K7g@y=7CxUTZf?lfL z&d-O%Z+ZC}IUzG&W7NdrvJ&`9zkiUqx1tE0T+@^afsxshJ3v;hI z!rzYfieEtMbj-5v99&g?9Op?>L)zwnR*snIc9HN&HW4LffZbUYDjPUi%~K$QW-5CG z%#bSVOe=)N5LnFSNp(}OrmJUBdo=s(uiak1c5ChS9__6v?!IArQu#Uo=BK}3`puSQHT#dn7H|gL&GPerk@Z3zYezd!O$AKvBY&m?a(x^c z1gW?rmi1V*5J|FT2it!S`{MuN_Ssi{AlB{(VsFi5N=+${+?=oA9M2?N{qp)V0CarF zS$XeGfwM>MCbLukNvOI>|MOA{Zk4tpcZ&PQ-_rM8-h}Yjf0MDmw*n+=M)sG%0AO$4 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 diff --git a/apps/dokploy/public/templates/superset.svg b/apps/dokploy/public/templates/superset.svg deleted file mode 100644 index 522c3b28a..000000000 --- a/apps/dokploy/public/templates/superset.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - Superset - - - - - - diff --git a/apps/dokploy/public/templates/trilium.png b/apps/dokploy/public/templates/trilium.png deleted file mode 100644 index f6afe82f803216b790a16658874b018ee7931447..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24381 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 diff --git a/apps/dokploy/public/templates/twenty.svg b/apps/dokploy/public/templates/twenty.svg index bad18fab3..cf5223b96 100644 --- a/apps/dokploy/public/templates/twenty.svg +++ b/apps/dokploy/public/templates/twenty.svg @@ -1,12 +1,6 @@ - - - - - - - - - - - + + + + + diff --git a/apps/dokploy/public/templates/wikijs.svg b/apps/dokploy/public/templates/wikijs.svg deleted file mode 100644 index 78073b234..000000000 --- a/apps/dokploy/public/templates/wikijs.svg +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/dokploy/reset-password.ts b/apps/dokploy/reset-password.ts index 32cab4334..43b11fdf6 100644 --- a/apps/dokploy/reset-password.ts +++ b/apps/dokploy/reset-password.ts @@ -1,8 +1,6 @@ import { findAdmin } from "@dokploy/server"; +import { updateAuthById } from "@dokploy/server"; import { generateRandomPassword } from "@dokploy/server"; -import { db } from "@dokploy/server/db"; -import { account } from "@dokploy/server/db/schema"; -import { eq } from "drizzle-orm"; (async () => { try { @@ -10,12 +8,9 @@ import { eq } from "drizzle-orm"; const result = await findAdmin(); - const update = await db - .update(account) - .set({ - password: randomPassword.hashedPassword, - }) - .where(eq(account.userId, result.userId)); + const update = await updateAuthById(result.authId, { + password: randomPassword.hashedPassword, + }); if (update) { console.log("Password reset successful"); diff --git a/apps/dokploy/server/api/root.ts b/apps/dokploy/server/api/root.ts index 8120b3199..6119ee859 100644 --- a/apps/dokploy/server/api/root.ts +++ b/apps/dokploy/server/api/root.ts @@ -20,7 +20,6 @@ import { mongoRouter } from "./routers/mongo"; import { mountRouter } from "./routers/mount"; import { mysqlRouter } from "./routers/mysql"; import { notificationRouter } from "./routers/notification"; -import { organizationRouter } from "./routers/organization"; import { portRouter } from "./routers/port"; import { postgresRouter } from "./routers/postgres"; import { previewDeploymentRouter } from "./routers/preview-deployment"; @@ -35,6 +34,7 @@ import { sshRouter } from "./routers/ssh-key"; import { stripeRouter } from "./routers/stripe"; import { swarmRouter } from "./routers/swarm"; import { userRouter } from "./routers/user"; + /** * This is the primary router for your server. * @@ -77,7 +77,6 @@ export const appRouter = createTRPCRouter({ stripe: stripeRouter, swarm: swarmRouter, ai: aiRouter, - organization: organizationRouter, }); // export type definition of API diff --git a/apps/dokploy/server/api/routers/admin.ts b/apps/dokploy/server/api/routers/admin.ts index 47bd9cd9c..696f3c796 100644 --- a/apps/dokploy/server/api/routers/admin.ts +++ b/apps/dokploy/server/api/routers/admin.ts @@ -1,59 +1,103 @@ -import { apiUpdateWebServerMonitoring } from "@/server/db/schema"; +import { db } from "@/server/db"; import { - IS_CLOUD, + apiAssignPermissions, + apiCreateUserInvitation, + apiFindOneToken, + apiRemoveUser, + apiUpdateAdmin, + users, +} from "@/server/db/schema"; +import { + createInvitation, + findAdminById, + findUserByAuthId, findUserById, - setupWebMonitoring, - updateUser, + getUserByToken, + removeUserByAuthId, + updateAdmin, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; -import { adminProcedure, createTRPCRouter } from "../trpc"; +import { eq } from "drizzle-orm"; +import { adminProcedure, createTRPCRouter, publicProcedure } from "../trpc"; export const adminRouter = createTRPCRouter({ - setupMonitoring: adminProcedure - .input(apiUpdateWebServerMonitoring) + one: adminProcedure.query(async ({ ctx }) => { + const { sshPrivateKey, ...rest } = await findAdminById(ctx.user.adminId); + return { + haveSSH: !!sshPrivateKey, + ...rest, + }; + }), + update: adminProcedure + .input(apiUpdateAdmin) + .mutation(async ({ input, ctx }) => { + if (ctx.user.rol === "user") { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not allowed to update this admin", + }); + } + const { authId } = await findAdminById(ctx.user.adminId); + return updateAdmin(authId, input); + }), + createUserInvitation: adminProcedure + .input(apiCreateUserInvitation) .mutation(async ({ input, ctx }) => { try { - if (IS_CLOUD) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "Feature disabled on cloud", - }); - } - const user = await findUserById(ctx.user.ownerId); - if (user.id !== ctx.user.ownerId) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "You are not authorized to setup the monitoring", - }); - } - - await updateUser(user.id, { - metricsConfig: { - server: { - type: "Dokploy", - refreshRate: input.metricsConfig.server.refreshRate, - port: input.metricsConfig.server.port, - token: input.metricsConfig.server.token, - cronJob: input.metricsConfig.server.cronJob, - urlCallback: input.metricsConfig.server.urlCallback, - retentionDays: input.metricsConfig.server.retentionDays, - thresholds: { - cpu: input.metricsConfig.server.thresholds.cpu, - memory: input.metricsConfig.server.thresholds.memory, - }, - }, - containers: { - refreshRate: input.metricsConfig.containers.refreshRate, - services: { - include: input.metricsConfig.containers.services.include || [], - exclude: input.metricsConfig.containers.services.exclude || [], - }, - }, - }, + await createInvitation(input, ctx.user.adminId); + } catch (error) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: + "Error creating this user\ncheck if the email is not registered", + cause: error, }); + } + }), + removeUser: adminProcedure + .input(apiRemoveUser) + .mutation(async ({ input, ctx }) => { + try { + const user = await findUserByAuthId(input.authId); - const currentServer = await setupWebMonitoring(user.id); - return currentServer; + if (user.adminId !== ctx.user.adminId) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not allowed to delete this user", + }); + } + return await removeUserByAuthId(input.authId); + } catch (error) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Error deleting this user", + cause: error, + }); + } + }), + getUserByToken: publicProcedure + .input(apiFindOneToken) + .query(async ({ input }) => { + return await getUserByToken(input.token); + }), + assignPermissions: adminProcedure + .input(apiAssignPermissions) + .mutation(async ({ input, ctx }) => { + try { + const user = await findUserById(input.userId); + + if (user.adminId !== ctx.user.adminId) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not allowed to assign permissions", + }); + } + await db + .update(users) + .set({ + ...input, + }) + .where(eq(users.userId, input.userId)); } catch (error) { throw error; } diff --git a/apps/dokploy/server/api/routers/application.ts b/apps/dokploy/server/api/routers/application.ts index e1629b4cb..13b7c80df 100644 --- a/apps/dokploy/server/api/routers/application.ts +++ b/apps/dokploy/server/api/routers/application.ts @@ -60,13 +60,8 @@ export const applicationRouter = createTRPCRouter({ .input(apiCreateApplication) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -77,7 +72,7 @@ export const applicationRouter = createTRPCRouter({ } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", @@ -85,12 +80,8 @@ export const applicationRouter = createTRPCRouter({ } const newApplication = await createApplication(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newApplication.applicationId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newApplication.applicationId); } return newApplication; } catch (error: unknown) { @@ -107,18 +98,15 @@ export const applicationRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOneApplication) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { + if (ctx.user.rol === "user") { await checkServiceAccess( - ctx.user.id, + ctx.user.authId, input.applicationId, - ctx.session.activeOrganizationId, "access", ); } const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -131,9 +119,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiReloadApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this application", @@ -158,19 +144,16 @@ export const applicationRouter = createTRPCRouter({ delete: protectedProcedure .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { + if (ctx.user.rol === "user") { await checkServiceAccess( - ctx.user.id, + ctx.user.authId, input.applicationId, - ctx.session.activeOrganizationId, "delete", ); } const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this application", @@ -201,7 +184,7 @@ export const applicationRouter = createTRPCRouter({ for (const operation of cleanupOperations) { try { await operation(); - } catch (_) {} + } catch (error) {} } return result[0]; @@ -211,7 +194,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const service = await findApplicationById(input.applicationId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this application", @@ -231,7 +214,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const service = await findApplicationById(input.applicationId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this application", @@ -252,9 +235,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to redeploy this application", @@ -287,9 +268,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariables) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -305,9 +284,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveBuildType) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this build type", @@ -328,9 +305,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveGithubProvider) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this github provider", @@ -352,9 +327,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveGitlabProvider) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this gitlab provider", @@ -378,9 +351,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveBitbucketProvider) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this bitbucket provider", @@ -402,9 +373,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveDockerProvider) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this docker provider", @@ -425,9 +394,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiSaveGitProvider) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this git provider", @@ -448,9 +415,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to mark this application as running", @@ -462,9 +427,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiUpdateApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this application", @@ -488,9 +451,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to refresh this application", @@ -505,9 +466,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this application", @@ -541,9 +500,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to clean this application", @@ -556,9 +513,7 @@ export const applicationRouter = createTRPCRouter({ .input(apiFindOneApplication) .query(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to read this application", @@ -593,7 +548,7 @@ export const applicationRouter = createTRPCRouter({ const app = await findApplicationById(input.applicationId as string); - if (app.project.organizationId !== ctx.session.activeOrganizationId) { + if (app.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this application", @@ -635,9 +590,7 @@ export const applicationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this application", @@ -657,7 +610,7 @@ export const applicationRouter = createTRPCRouter({ }), readAppMonitoring: protectedProcedure .input(apiFindMonitoringStats) - .query(async ({ input }) => { + .query(async ({ input, ctx }) => { if (IS_CLOUD) { throw new TRPCError({ code: "UNAUTHORIZED", diff --git a/apps/dokploy/server/api/routers/auth.ts b/apps/dokploy/server/api/routers/auth.ts index 2c7469c3f..f8bbfa9b7 100644 --- a/apps/dokploy/server/api/routers/auth.ts +++ b/apps/dokploy/server/api/routers/auth.ts @@ -1,326 +1,523 @@ -import { createTRPCRouter } from "../trpc"; +import { + apiCreateAdmin, + apiCreateUser, + apiFindOneAuth, + apiLogin, + apiUpdateAuth, + apiVerify2FA, + apiVerifyLogin2FA, + auth, +} from "@/server/db/schema"; +import { WEBSITE_URL } from "@/server/utils/stripe"; +import { + type Auth, + IS_CLOUD, + createAdmin, + createUser, + findAuthByEmail, + findAuthById, + generate2FASecret, + getUserByToken, + lucia, + luciaToken, + removeAdminByAuthId, + removeUserByAuthId, + sendDiscordNotification, + sendEmailNotification, + updateAuthById, + validateRequest, + verify2FA, +} from "@dokploy/server"; +import { TRPCError } from "@trpc/server"; +import * as bcrypt from "bcrypt"; +import { isBefore } from "date-fns"; +import { eq } from "drizzle-orm"; +import { nanoid } from "nanoid"; +import { z } from "zod"; +import { db } from "../../db"; +import { + adminProcedure, + createTRPCRouter, + protectedProcedure, + publicProcedure, +} from "../trpc"; export const authRouter = createTRPCRouter({ - // createAdmin: publicProcedure.mutation(async ({ input }) => { - // try { - // if (!IS_CLOUD) { - // const admin = await db.query.admins.findFirst({}); - // if (admin) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: "Admin already exists", - // }); - // } - // } - // const newAdmin = await createAdmin(input); - // if (IS_CLOUD) { - // await sendDiscordNotificationWelcome(newAdmin); - // await sendVerificationEmail(newAdmin.id); - // return { - // status: "success", - // type: "cloud", - // }; - // } - // // const session = await lucia.createSession(newAdmin.id || "", {}); - // // ctx.res.appendHeader( - // // "Set-Cookie", - // // lucia.createSessionCookie(session.id).serialize(), - // // ); - // return { - // status: "success", - // type: "selfhosted", - // }; - // } catch (error) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // // @ts-ignore - // message: `Error: ${error?.code === "23505" ? "Email already exists" : "Error creating admin"}`, - // cause: error, - // }); - // } - // }), - // createUser: publicProcedure.mutation(async ({ input }) => { - // try { - // const _token = await getUserByToken(input.token); - // // if (token.isExpired) { - // // throw new TRPCError({ - // // code: "BAD_REQUEST", - // // message: "Invalid token", - // // }); - // // } - // // const newUser = await createUser(input); - // // if (IS_CLOUD) { - // // await sendVerificationEmail(token.authId); - // // return true; - // // } - // // const session = await lucia.createSession(newUser?.authId || "", {}); - // // ctx.res.appendHeader( - // // "Set-Cookie", - // // lucia.createSessionCookie(session.id).serialize(), - // // ); - // return true; - // } catch (error) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: "Error creating the user", - // cause: error, - // }); - // } - // }), - // login: publicProcedure.mutation(async ({ input }) => { - // try { - // const auth = await findAuthByEmail(input.email); - // const correctPassword = bcrypt.compareSync( - // input.password, - // auth?.password || "", - // ); - // if (!correctPassword) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: "Credentials do not match", - // }); - // } - // if (auth?.confirmationToken && IS_CLOUD) { - // await sendVerificationEmail(auth.id); - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: - // "Email not confirmed, we have sent you a confirmation email please check your inbox.", - // }); - // } - // if (auth?.is2FAEnabled) { - // return { - // is2FAEnabled: true, - // authId: auth.id, - // }; - // } - // // const session = await lucia.createSession(auth?.id || "", {}); - // // ctx.res.appendHeader( - // // "Set-Cookie", - // // lucia.createSessionCookie(session.id).serialize(), - // // ); - // return { - // is2FAEnabled: false, - // authId: auth?.id, - // }; - // } catch (error) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: `Error: ${error instanceof Error ? error.message : "Login error"}`, - // cause: error, - // }); - // } - // }), - // get: protectedProcedure.query(async ({ ctx }) => { - // const memberResult = await db.query.member.findFirst({ - // where: and( - // eq(member.userId, ctx.user.id), - // eq(member.organizationId, ctx.session?.activeOrganizationId || ""), - // ), - // with: { - // user: true, - // }, - // }); - // return memberResult; - // }), - // logout: protectedProcedure.mutation(async ({ ctx }) => { - // const { req } = ctx; - // const { session } = await validateRequest(req); - // if (!session) return false; - // // await lucia.invalidateSession(session.id); - // // res.setHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize()); - // return true; - // }), - // update: protectedProcedure.mutation(async ({ ctx, input }) => { - // const currentAuth = await findAuthByEmail(ctx.user.email); - // if (input.currentPassword || input.password) { - // const correctPassword = bcrypt.compareSync( - // input.currentPassword || "", - // currentAuth?.password || "", - // ); - // if (!correctPassword) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: "Current password is incorrect", - // }); - // } - // } - // // const auth = await updateAuthById(ctx.user.authId, { - // // ...(input.email && { email: input.email.toLowerCase() }), - // // ...(input.password && { - // // password: bcrypt.hashSync(input.password, 10), - // // }), - // // ...(input.image && { image: input.image }), - // // }); - // return auth; - // }), - // removeSelfAccount: protectedProcedure - // .input( - // z.object({ - // password: z.string().min(1), - // }), - // ) - // .mutation(async ({ ctx, input }) => { - // if (!IS_CLOUD) { - // throw new TRPCError({ - // code: "NOT_FOUND", - // message: "This feature is only available in the cloud version", - // }); - // } - // const currentAuth = await findAuthByEmail(ctx.user.email); - // const correctPassword = bcrypt.compareSync( - // input.password, - // currentAuth?.password || "", - // ); - // if (!correctPassword) { - // throw new TRPCError({ - // code: "BAD_REQUEST", - // message: "Password is incorrect", - // }); - // } - // const { req } = ctx; - // const { session } = await validateRequest(req); - // if (!session) return false; - // // await lucia.invalidateSession(session.id); - // // res.setHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize()); - // // if (ctx.user.rol === "owner") { - // // await removeAdminByAuthId(ctx.user.authId); - // // } else { - // // await removeUserByAuthId(ctx.user.authId); - // // } - // return true; - // }), - // generateToken: protectedProcedure.mutation(async ({ ctx }) => { - // const auth = await findUserById(ctx.user.id); - // console.log(auth); - // // if (auth.token) { - // // await luciaToken.invalidateSession(auth.token); - // // } - // // const session = await luciaToken.createSession(auth?.id || "", { - // // expiresIn: 60 * 60 * 24 * 30, - // // }); - // // await updateUser(auth.id, { - // // token: session.id, - // // }); - // return auth; - // }), - // verifyToken: protectedProcedure.mutation(async () => { - // return true; - // }), - // one: adminProcedure - // .input(z.object({ userId: z.string().min(1) })) - // .query(async ({ input }) => { - // // TODO: Check if the user is admin or member - // const user = await findUserById(input.userId); - // return user; - // }), - // sendResetPasswordEmail: publicProcedure - // .input( - // z.object({ - // email: z.string().min(1).email(), - // }), - // ) - // .mutation(async ({ input }) => { - // if (!IS_CLOUD) { - // throw new TRPCError({ - // code: "NOT_FOUND", - // message: "This feature is only available in the cloud version", - // }); - // } - // const authR = await db.query.auth.findFirst({ - // where: eq(auth.email, input.email), - // }); - // if (!authR) { - // throw new TRPCError({ - // code: "NOT_FOUND", - // message: "User not found", - // }); - // } - // const token = nanoid(); - // await updateAuthById(authR.id, { - // resetPasswordToken: token, - // // Make resetPassword in 24 hours - // resetPasswordExpiresAt: new Date( - // new Date().getTime() + 24 * 60 * 60 * 1000, - // ).toISOString(), - // }); - // await sendEmailNotification( - // { - // fromAddress: process.env.SMTP_FROM_ADDRESS!, - // toAddresses: [authR.email], - // smtpServer: process.env.SMTP_SERVER!, - // smtpPort: Number(process.env.SMTP_PORT), - // username: process.env.SMTP_USERNAME!, - // password: process.env.SMTP_PASSWORD!, - // }, - // "Reset Password", - // ` - // Reset your password by clicking the link below: - // The link will expire in 24 hours. - // - // Reset Password - // - // `, - // ); - // }), + createAdmin: publicProcedure + .input(apiCreateAdmin) + .mutation(async ({ ctx, input }) => { + try { + if (!IS_CLOUD) { + const admin = await db.query.admins.findFirst({}); + if (admin) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Admin already exists", + }); + } + } + const newAdmin = await createAdmin(input); + + if (IS_CLOUD) { + await sendDiscordNotificationWelcome(newAdmin); + await sendVerificationEmail(newAdmin.id); + return { + status: "success", + type: "cloud", + }; + } + const session = await lucia.createSession(newAdmin.id || "", {}); + ctx.res.appendHeader( + "Set-Cookie", + lucia.createSessionCookie(session.id).serialize(), + ); + return { + status: "success", + type: "selfhosted", + }; + } catch (error) { + throw new TRPCError({ + code: "BAD_REQUEST", + // @ts-ignore + message: `Error: ${error?.code === "23505" ? "Email already exists" : "Error creating admin"}`, + cause: error, + }); + } + }), + createUser: publicProcedure + .input(apiCreateUser) + .mutation(async ({ ctx, input }) => { + try { + const token = await getUserByToken(input.token); + if (token.isExpired) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Invalid token", + }); + } + + const newUser = await createUser(input); + + if (IS_CLOUD) { + await sendVerificationEmail(token.authId); + return true; + } + const session = await lucia.createSession(newUser?.authId || "", {}); + ctx.res.appendHeader( + "Set-Cookie", + lucia.createSessionCookie(session.id).serialize(), + ); + return true; + } catch (error) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Error creating the user", + cause: error, + }); + } + }), + + login: publicProcedure.input(apiLogin).mutation(async ({ ctx, input }) => { + try { + const auth = await findAuthByEmail(input.email); + + const correctPassword = bcrypt.compareSync( + input.password, + auth?.password || "", + ); + + if (!correctPassword) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Credentials do not match", + }); + } + + if (auth?.confirmationToken && IS_CLOUD) { + await sendVerificationEmail(auth.id); + throw new TRPCError({ + code: "BAD_REQUEST", + message: + "Email not confirmed, we have sent you a confirmation email please check your inbox.", + }); + } + + if (auth?.is2FAEnabled) { + return { + is2FAEnabled: true, + authId: auth.id, + }; + } + + const session = await lucia.createSession(auth?.id || "", {}); + + ctx.res.appendHeader( + "Set-Cookie", + lucia.createSessionCookie(session.id).serialize(), + ); + return { + is2FAEnabled: false, + authId: auth?.id, + }; + } catch (error) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: `Error: ${error instanceof Error ? error.message : "Login error"}`, + cause: error, + }); + } + }), + + get: protectedProcedure.query(async ({ ctx }) => { + const auth = await findAuthById(ctx.user.authId); + return auth; + }), + + logout: protectedProcedure.mutation(async ({ ctx }) => { + const { req, res } = ctx; + const { session } = await validateRequest(req, res); + if (!session) return false; + + await lucia.invalidateSession(session.id); + res.setHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize()); + return true; + }), + + update: protectedProcedure + .input(apiUpdateAuth) + .mutation(async ({ ctx, input }) => { + const currentAuth = await findAuthByEmail(ctx.user.email); + + if (input.currentPassword || input.password) { + const correctPassword = bcrypt.compareSync( + input.currentPassword || "", + currentAuth?.password || "", + ); + if (!correctPassword) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Current password is incorrect", + }); + } + } + const auth = await updateAuthById(ctx.user.authId, { + ...(input.email && { email: input.email.toLowerCase() }), + ...(input.password && { + password: bcrypt.hashSync(input.password, 10), + }), + ...(input.image && { image: input.image }), + }); + + return auth; + }), + removeSelfAccount: protectedProcedure + .input( + z.object({ + password: z.string().min(1), + }), + ) + .mutation(async ({ ctx, input }) => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "This feature is only available in the cloud version", + }); + } + const currentAuth = await findAuthByEmail(ctx.user.email); + + const correctPassword = bcrypt.compareSync( + input.password, + currentAuth?.password || "", + ); + + if (!correctPassword) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Password is incorrect", + }); + } + const { req, res } = ctx; + const { session } = await validateRequest(req, res); + if (!session) return false; + + await lucia.invalidateSession(session.id); + res.setHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize()); + + if (ctx.user.rol === "admin") { + await removeAdminByAuthId(ctx.user.authId); + } else { + await removeUserByAuthId(ctx.user.authId); + } + + return true; + }), + + generateToken: protectedProcedure.mutation(async ({ ctx, input }) => { + const auth = await findAuthById(ctx.user.authId); + + if (auth.token) { + await luciaToken.invalidateSession(auth.token); + } + const session = await luciaToken.createSession(auth?.id || "", { + expiresIn: 60 * 60 * 24 * 30, + }); + + await updateAuthById(auth.id, { + token: session.id, + }); + + return auth; + }), + verifyToken: protectedProcedure.mutation(async () => { + return true; + }), + one: adminProcedure.input(apiFindOneAuth).query(async ({ input }) => { + const auth = await findAuthById(input.id); + return auth; + }), + + generate2FASecret: protectedProcedure.query(async ({ ctx }) => { + return await generate2FASecret(ctx.user.authId); + }), + verify2FASetup: protectedProcedure + .input(apiVerify2FA) + .mutation(async ({ ctx, input }) => { + const auth = await findAuthById(ctx.user.authId); + + await verify2FA(auth, input.secret, input.pin); + await updateAuthById(auth.id, { + is2FAEnabled: true, + secret: input.secret, + }); + return auth; + }), + + verifyLogin2FA: publicProcedure + .input(apiVerifyLogin2FA) + .mutation(async ({ ctx, input }) => { + const auth = await findAuthById(input.id); + + await verify2FA(auth, auth.secret || "", input.pin); + + const session = await lucia.createSession(auth.id, {}); + + ctx.res.appendHeader( + "Set-Cookie", + lucia.createSessionCookie(session.id).serialize(), + ); + + return true; + }), + disable2FA: protectedProcedure.mutation(async ({ ctx }) => { + const auth = await findAuthById(ctx.user.authId); + await updateAuthById(auth.id, { + is2FAEnabled: false, + secret: null, + }); + return auth; + }), + sendResetPasswordEmail: publicProcedure + .input( + z.object({ + email: z.string().min(1).email(), + }), + ) + .mutation(async ({ ctx, input }) => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "This feature is only available in the cloud version", + }); + } + const authR = await db.query.auth.findFirst({ + where: eq(auth.email, input.email), + }); + if (!authR) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "User not found", + }); + } + const token = nanoid(); + await updateAuthById(authR.id, { + resetPasswordToken: token, + // Make resetPassword in 24 hours + resetPasswordExpiresAt: new Date( + new Date().getTime() + 24 * 60 * 60 * 1000, + ).toISOString(), + }); + + await sendEmailNotification( + { + fromAddress: process.env.SMTP_FROM_ADDRESS!, + toAddresses: [authR.email], + smtpServer: process.env.SMTP_SERVER!, + smtpPort: Number(process.env.SMTP_PORT), + username: process.env.SMTP_USERNAME!, + password: process.env.SMTP_PASSWORD!, + }, + "Reset Password", + ` + Reset your password by clicking the link below: + The link will expire in 24 hours. + + Reset Password + + + `, + ); + }), + + resetPassword: publicProcedure + .input( + z.object({ + resetPasswordToken: z.string().min(1), + password: z.string().min(1), + }), + ) + .mutation(async ({ ctx, input }) => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "This feature is only available in the cloud version", + }); + } + const authR = await db.query.auth.findFirst({ + where: eq(auth.resetPasswordToken, input.resetPasswordToken), + }); + + if (!authR || authR.resetPasswordExpiresAt === null) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Token not found", + }); + } + + const isExpired = isBefore( + new Date(authR.resetPasswordExpiresAt), + new Date(), + ); + + if (isExpired) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Token expired", + }); + } + + await updateAuthById(authR.id, { + resetPasswordExpiresAt: null, + resetPasswordToken: null, + password: bcrypt.hashSync(input.password, 10), + }); + + return true; + }), + confirmEmail: adminProcedure + .input( + z.object({ + confirmationToken: z.string().min(1), + }), + ) + .mutation(async ({ ctx, input }) => { + if (!IS_CLOUD) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Functionality not available in cloud version", + }); + } + const authR = await db.query.auth.findFirst({ + where: eq(auth.confirmationToken, input.confirmationToken), + }); + if (!authR || authR.confirmationExpiresAt === null) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Token not found", + }); + } + if (authR.confirmationToken !== input.confirmationToken) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Confirmation Token not found", + }); + } + + const isExpired = isBefore( + new Date(authR.confirmationExpiresAt), + new Date(), + ); + + if (isExpired) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Confirmation Token expired", + }); + } + 1; + await updateAuthById(authR.id, { + confirmationToken: null, + confirmationExpiresAt: null, + }); + return true; + }), }); -// export const sendVerificationEmail = async (authId: string) => { -// const token = nanoid(); -// const result = await updateAuthById(authId, { -// confirmationToken: token, -// confirmationExpiresAt: new Date( -// new Date().getTime() + 24 * 60 * 60 * 1000, -// ).toISOString(), -// }); +export const sendVerificationEmail = async (authId: string) => { + const token = nanoid(); + const result = await updateAuthById(authId, { + confirmationToken: token, + confirmationExpiresAt: new Date( + new Date().getTime() + 24 * 60 * 60 * 1000, + ).toISOString(), + }); -// if (!result) { -// throw new TRPCError({ -// code: "BAD_REQUEST", -// message: "User not found", -// }); -// } -// await sendEmailNotification( -// { -// fromAddress: process.env.SMTP_FROM_ADDRESS || "", -// toAddresses: [result?.email], -// smtpServer: process.env.SMTP_SERVER || "", -// smtpPort: Number(process.env.SMTP_PORT), -// username: process.env.SMTP_USERNAME || "", -// password: process.env.SMTP_PASSWORD || "", -// }, -// "Confirm your email | Dokploy", -// ` -// Welcome to Dokploy! -// Please confirm your email by clicking the link below: -// -// Confirm Email -// -// `, -// ); + if (!result) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "User not found", + }); + } + await sendEmailNotification( + { + fromAddress: process.env.SMTP_FROM_ADDRESS || "", + toAddresses: [result?.email], + smtpServer: process.env.SMTP_SERVER || "", + smtpPort: Number(process.env.SMTP_PORT), + username: process.env.SMTP_USERNAME || "", + password: process.env.SMTP_PASSWORD || "", + }, + "Confirm your email | Dokploy", + ` + Welcome to Dokploy! + Please confirm your email by clicking the link below: + + Confirm Email + + `, + ); -// return true; -// }; + return true; +}; -// export const sendDiscordNotificationWelcome = async (newAdmin: Auth) => { -// await sendDiscordNotification( -// { -// webhookUrl: process.env.DISCORD_WEBHOOK_URL || "", -// }, -// { -// title: "New User Registered", -// color: 0x00ff00, -// fields: [ -// { -// name: "Email", -// value: newAdmin.email, -// inline: true, -// }, -// ], -// timestamp: newAdmin.createdAt, -// footer: { -// text: "Dokploy User Registration Notification", -// }, -// }, -// ); -// }; +export const sendDiscordNotificationWelcome = async (newAdmin: Auth) => { + await sendDiscordNotification( + { + webhookUrl: process.env.DISCORD_WEBHOOK_URL || "", + }, + { + title: "New User Registered", + color: 0x00ff00, + fields: [ + { + name: "Email", + value: newAdmin.email, + inline: true, + }, + ], + timestamp: newAdmin.createdAt, + footer: { + text: "Dokploy User Registration Notification", + }, + }, + ); +}; diff --git a/apps/dokploy/server/api/routers/backup.ts b/apps/dokploy/server/api/routers/backup.ts index 8a7a5f22f..0b8d7ab15 100644 --- a/apps/dokploy/server/api/routers/backup.ts +++ b/apps/dokploy/server/api/routers/backup.ts @@ -30,7 +30,7 @@ import { TRPCError } from "@trpc/server"; export const backupRouter = createTRPCRouter({ create: protectedProcedure .input(apiCreateBackup) - .mutation(async ({ input }) => { + .mutation(async ({ input, ctx }) => { try { const newBackup = await createBackup(input); @@ -74,14 +74,16 @@ export const backupRouter = createTRPCRouter({ }); } }), - one: protectedProcedure.input(apiFindOneBackup).query(async ({ input }) => { - const backup = await findBackupById(input.backupId); + one: protectedProcedure + .input(apiFindOneBackup) + .query(async ({ input, ctx }) => { + const backup = await findBackupById(input.backupId); - return backup; - }), + return backup; + }), update: protectedProcedure .input(apiUpdateBackup) - .mutation(async ({ input }) => { + .mutation(async ({ input, ctx }) => { try { await updateBackupById(input.backupId, input); const backup = await findBackupById(input.backupId); @@ -109,17 +111,15 @@ export const backupRouter = createTRPCRouter({ } } } catch (error) { - const message = - error instanceof Error ? error.message : "Error updating this Backup"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error updating this Backup", }); } }), remove: protectedProcedure .input(apiRemoveBackup) - .mutation(async ({ input }) => { + .mutation(async ({ input, ctx }) => { try { const value = await removeBackupById(input.backupId); if (IS_CLOUD && value) { @@ -133,11 +133,10 @@ export const backupRouter = createTRPCRouter({ } return value; } catch (error) { - const message = - error instanceof Error ? error.message : "Error deleting this Backup"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error deleting this Backup", + cause: error, }); } }), @@ -150,13 +149,11 @@ export const backupRouter = createTRPCRouter({ await runPostgresBackup(postgres, backup); return true; } catch (error) { - const message = - error instanceof Error - ? error.message - : "Error running manual Postgres backup "; + console.log(error); throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error running manual Postgres backup ", + cause: error, }); } }), diff --git a/apps/dokploy/server/api/routers/bitbucket.ts b/apps/dokploy/server/api/routers/bitbucket.ts index fa02be8d6..c66716d30 100644 --- a/apps/dokploy/server/api/routers/bitbucket.ts +++ b/apps/dokploy/server/api/routers/bitbucket.ts @@ -8,6 +8,7 @@ import { apiUpdateBitbucket, } from "@/server/db/schema"; import { + IS_CLOUD, createBitbucket, findBitbucketById, getBitbucketBranches, @@ -22,7 +23,7 @@ export const bitbucketRouter = createTRPCRouter({ .input(apiCreateBitbucket) .mutation(async ({ input, ctx }) => { try { - return await createBitbucket(input, ctx.session.activeOrganizationId); + return await createBitbucket(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -36,9 +37,10 @@ export const bitbucketRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const bitbucketProvider = await findBitbucketById(input.bitbucketId); if ( - bitbucketProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + bitbucketProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this bitbucket provider", @@ -56,11 +58,12 @@ export const bitbucketRouter = createTRPCRouter({ }, }); - result = result.filter( - (provider) => - provider.gitProvider.organizationId === - ctx.session.activeOrganizationId, - ); + if (IS_CLOUD) { + // TODO: mAyBe a rEfaCtoR 🤫 + result = result.filter( + (provider) => provider.gitProvider.adminId === ctx.user.adminId, + ); + } return result; }), @@ -69,9 +72,10 @@ export const bitbucketRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const bitbucketProvider = await findBitbucketById(input.bitbucketId); if ( - bitbucketProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + bitbucketProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this bitbucket provider", @@ -86,9 +90,10 @@ export const bitbucketRouter = createTRPCRouter({ input.bitbucketId || "", ); if ( - bitbucketProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + bitbucketProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this bitbucket provider", @@ -102,9 +107,10 @@ export const bitbucketRouter = createTRPCRouter({ try { const bitbucketProvider = await findBitbucketById(input.bitbucketId); if ( - bitbucketProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + bitbucketProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this bitbucket provider", @@ -125,9 +131,10 @@ export const bitbucketRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const bitbucketProvider = await findBitbucketById(input.bitbucketId); if ( - bitbucketProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + bitbucketProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this bitbucket provider", @@ -135,7 +142,7 @@ export const bitbucketRouter = createTRPCRouter({ } return await updateBitbucket(input.bitbucketId, { ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); }), }); diff --git a/apps/dokploy/server/api/routers/certificate.ts b/apps/dokploy/server/api/routers/certificate.ts index 3dc944ac8..0f8d6fd94 100644 --- a/apps/dokploy/server/api/routers/certificate.ts +++ b/apps/dokploy/server/api/routers/certificate.ts @@ -25,14 +25,14 @@ export const certificateRouter = createTRPCRouter({ message: "Please set a server to create a certificate", }); } - return await createCertificate(input, ctx.session.activeOrganizationId); + return await createCertificate(input, ctx.user.adminId); }), one: adminProcedure .input(apiFindCertificate) .query(async ({ input, ctx }) => { const certificates = await findCertificateById(input.certificateId); - if (certificates.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && certificates.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this certificate", @@ -44,7 +44,7 @@ export const certificateRouter = createTRPCRouter({ .input(apiFindCertificate) .mutation(async ({ input, ctx }) => { const certificates = await findCertificateById(input.certificateId); - if (certificates.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && certificates.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to delete this certificate", @@ -55,7 +55,8 @@ export const certificateRouter = createTRPCRouter({ }), all: adminProcedure.query(async ({ ctx }) => { return await db.query.certificates.findMany({ - where: eq(certificates.organizationId, ctx.session.activeOrganizationId), + // TODO: Remove this line when the cloud version is ready + ...(IS_CLOUD && { where: eq(certificates.adminId, ctx.user.adminId) }), }); }), }); diff --git a/apps/dokploy/server/api/routers/cluster.ts b/apps/dokploy/server/api/routers/cluster.ts index 0d8407576..7ded632c6 100644 --- a/apps/dokploy/server/api/routers/cluster.ts +++ b/apps/dokploy/server/api/routers/cluster.ts @@ -40,7 +40,7 @@ export const clusterRouter = createTRPCRouter({ }); } }), - addWorker: protectedProcedure.query(async () => { + addWorker: protectedProcedure.query(async ({ input }) => { if (IS_CLOUD) { return { command: "", @@ -57,7 +57,7 @@ export const clusterRouter = createTRPCRouter({ version: docker_version.Version, }; }), - addManager: protectedProcedure.query(async () => { + addManager: protectedProcedure.query(async ({ input }) => { if (IS_CLOUD) { return { command: "", diff --git a/apps/dokploy/server/api/routers/compose.ts b/apps/dokploy/server/api/routers/compose.ts index bae926d05..dab37e786 100644 --- a/apps/dokploy/server/api/routers/compose.ts +++ b/apps/dokploy/server/api/routers/compose.ts @@ -39,14 +39,13 @@ import { createComposeByTemplate, createDomain, createMount, + findAdminById, findComposeById, findDomainsByComposeId, findProjectById, findServerById, - findUserById, loadServices, randomizeComposeFile, - randomizeIsolatedDeploymentComposeFile, removeCompose, removeComposeDirectory, removeDeploymentsByComposeId, @@ -60,13 +59,8 @@ export const composeRouter = createTRPCRouter({ .input(apiCreateCompose) .mutation(async ({ ctx, input }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -76,7 +70,7 @@ export const composeRouter = createTRPCRouter({ }); } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", @@ -84,12 +78,8 @@ export const composeRouter = createTRPCRouter({ } const newService = await createCompose(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newService.composeId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newService.composeId); } return newService; @@ -101,17 +91,12 @@ export const composeRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindCompose) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.composeId, - ctx.session.activeOrganizationId, - "access", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.composeId, "access"); } const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -124,7 +109,7 @@ export const composeRouter = createTRPCRouter({ .input(apiUpdateCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this compose", @@ -135,20 +120,12 @@ export const composeRouter = createTRPCRouter({ delete: protectedProcedure .input(apiDeleteCompose) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.composeId, - ctx.session.activeOrganizationId, - "delete", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.composeId, "delete"); } const composeResult = await findComposeById(input.composeId); - if ( - composeResult.project.organizationId !== - ctx.session.activeOrganizationId - ) { + if (composeResult.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this compose", @@ -170,7 +147,7 @@ export const composeRouter = createTRPCRouter({ for (const operation of cleanupOperations) { try { await operation(); - } catch (_) {} + } catch (error) {} } return result[0]; @@ -179,7 +156,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to clean this compose", @@ -192,7 +169,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFetchServices) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to load this compose", @@ -206,9 +183,7 @@ export const composeRouter = createTRPCRouter({ try { const compose = await findComposeById(input.composeId); - if ( - compose.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to fetch this compose", @@ -233,7 +208,7 @@ export const composeRouter = createTRPCRouter({ .input(apiRandomizeCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to randomize this compose", @@ -241,26 +216,11 @@ export const composeRouter = createTRPCRouter({ } return await randomizeComposeFile(input.composeId, input.suffix); }), - isolatedDeployment: protectedProcedure - .input(apiRandomizeCompose) - .mutation(async ({ input, ctx }) => { - const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "You are not authorized to randomize this compose", - }); - } - return await randomizeIsolatedDeploymentComposeFile( - input.composeId, - input.suffix, - ); - }), getConvertedCompose: protectedProcedure .input(apiFindCompose) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to get this compose", @@ -278,7 +238,7 @@ export const composeRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this compose", @@ -311,7 +271,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to redeploy this compose", @@ -343,7 +303,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this compose", @@ -357,7 +317,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this compose", @@ -372,7 +332,7 @@ export const composeRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to get this compose", @@ -385,7 +345,7 @@ export const composeRouter = createTRPCRouter({ .input(apiFindCompose) .mutation(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to refresh this compose", @@ -399,13 +359,8 @@ export const composeRouter = createTRPCRouter({ deployTemplate: protectedProcedure .input(apiCreateComposeByTemplate) .mutation(async ({ ctx, input }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -419,7 +374,7 @@ export const composeRouter = createTRPCRouter({ const generate = await loadTemplateModule(input.id as TemplatesKeys); - const admin = await findUserById(ctx.user.ownerId); + const admin = await findAdminById(ctx.user.adminId); let serverIp = admin.serverIp || "127.0.0.1"; const project = await findProjectById(input.projectId); @@ -444,15 +399,10 @@ export const composeRouter = createTRPCRouter({ name: input.id, sourceType: "raw", appName: `${projectName}-${generatePassword(6)}`, - isolatedDeployment: true, }); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - compose.composeId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, compose.composeId); } if (mounts && mounts?.length > 0) { @@ -496,7 +446,7 @@ export const composeRouter = createTRPCRouter({ return templatesData; }), - getTags: protectedProcedure.query(async () => { + getTags: protectedProcedure.query(async ({ input }) => { const allTags = templates.flatMap((template) => template.tags); const uniqueTags = _.uniq(allTags); return uniqueTags; diff --git a/apps/dokploy/server/api/routers/deployment.ts b/apps/dokploy/server/api/routers/deployment.ts index 8d95c1218..bf981c6d9 100644 --- a/apps/dokploy/server/api/routers/deployment.ts +++ b/apps/dokploy/server/api/routers/deployment.ts @@ -19,9 +19,7 @@ export const deploymentRouter = createTRPCRouter({ .input(apiFindAllByApplication) .query(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -34,7 +32,7 @@ export const deploymentRouter = createTRPCRouter({ .input(apiFindAllByCompose) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -46,7 +44,7 @@ export const deploymentRouter = createTRPCRouter({ .input(apiFindAllByServer) .query(async ({ input, ctx }) => { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this server", diff --git a/apps/dokploy/server/api/routers/destination.ts b/apps/dokploy/server/api/routers/destination.ts index f1d582c50..d13928be8 100644 --- a/apps/dokploy/server/api/routers/destination.ts +++ b/apps/dokploy/server/api/routers/destination.ts @@ -28,10 +28,7 @@ export const destinationRouter = createTRPCRouter({ .input(apiCreateDestination) .mutation(async ({ input, ctx }) => { try { - return await createDestintation( - input, - ctx.session.activeOrganizationId, - ); + return await createDestintation(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -87,7 +84,7 @@ export const destinationRouter = createTRPCRouter({ .input(apiFindOneDestination) .query(async ({ input, ctx }) => { const destination = await findDestinationById(input.destinationId); - if (destination.organizationId !== ctx.session.activeOrganizationId) { + if (destination.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this destination", @@ -97,7 +94,7 @@ export const destinationRouter = createTRPCRouter({ }), all: protectedProcedure.query(async ({ ctx }) => { return await db.query.destinations.findMany({ - where: eq(destinations.organizationId, ctx.session.activeOrganizationId), + where: eq(destinations.adminId, ctx.user.adminId), }); }), remove: adminProcedure @@ -106,7 +103,7 @@ export const destinationRouter = createTRPCRouter({ try { const destination = await findDestinationById(input.destinationId); - if (destination.organizationId !== ctx.session.activeOrganizationId) { + if (destination.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to delete this destination", @@ -114,7 +111,7 @@ export const destinationRouter = createTRPCRouter({ } return await removeDestinationById( input.destinationId, - ctx.session.activeOrganizationId, + ctx.user.adminId, ); } catch (error) { throw error; @@ -125,7 +122,7 @@ export const destinationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const destination = await findDestinationById(input.destinationId); - if (destination.organizationId !== ctx.session.activeOrganizationId) { + if (destination.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to update this destination", @@ -133,7 +130,7 @@ export const destinationRouter = createTRPCRouter({ } return await updateDestinationById(input.destinationId, { ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw error; diff --git a/apps/dokploy/server/api/routers/domain.ts b/apps/dokploy/server/api/routers/domain.ts index aac2a016f..f122cf86f 100644 --- a/apps/dokploy/server/api/routers/domain.ts +++ b/apps/dokploy/server/api/routers/domain.ts @@ -30,9 +30,7 @@ export const domainRouter = createTRPCRouter({ try { if (input.domainType === "compose" && input.composeId) { const compose = await findComposeById(input.composeId); - if ( - compose.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -40,10 +38,7 @@ export const domainRouter = createTRPCRouter({ } } else if (input.domainType === "application" && input.applicationId) { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== - ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -63,9 +58,7 @@ export const domainRouter = createTRPCRouter({ .input(apiFindOneApplication) .query(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -77,7 +70,7 @@ export const domainRouter = createTRPCRouter({ .input(apiFindCompose) .query(async ({ input, ctx }) => { const compose = await findComposeById(input.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -90,7 +83,7 @@ export const domainRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { return generateTraefikMeDomain( input.appName, - ctx.user.ownerId, + ctx.user.adminId, input.serverId, ); }), @@ -102,9 +95,7 @@ export const domainRouter = createTRPCRouter({ if (currentDomain.applicationId) { const newApp = await findApplicationById(currentDomain.applicationId); - if ( - newApp.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (newApp.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -112,9 +103,7 @@ export const domainRouter = createTRPCRouter({ } } else if (currentDomain.composeId) { const newCompose = await findComposeById(currentDomain.composeId); - if ( - newCompose.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (newCompose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -125,8 +114,7 @@ export const domainRouter = createTRPCRouter({ currentDomain.previewDeploymentId, ); if ( - newPreviewDeployment.application.project.organizationId !== - ctx.session.activeOrganizationId + newPreviewDeployment.application.project.adminId !== ctx.user.adminId ) { throw new TRPCError({ code: "UNAUTHORIZED", @@ -155,9 +143,7 @@ export const domainRouter = createTRPCRouter({ const domain = await findDomainById(input.domainId); if (domain.applicationId) { const application = await findApplicationById(domain.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -165,7 +151,7 @@ export const domainRouter = createTRPCRouter({ } } else if (domain.composeId) { const compose = await findComposeById(domain.composeId); - if (compose.project.organizationId !== ctx.session.activeOrganizationId) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", @@ -180,10 +166,7 @@ export const domainRouter = createTRPCRouter({ const domain = await findDomainById(input.domainId); if (domain.applicationId) { const application = await findApplicationById(domain.applicationId); - if ( - application.project.organizationId !== - ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -191,9 +174,7 @@ export const domainRouter = createTRPCRouter({ } } else if (domain.composeId) { const compose = await findComposeById(domain.composeId); - if ( - compose.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (compose.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this compose", diff --git a/apps/dokploy/server/api/routers/git-provider.ts b/apps/dokploy/server/api/routers/git-provider.ts index ed37869d5..abd933923 100644 --- a/apps/dokploy/server/api/routers/git-provider.ts +++ b/apps/dokploy/server/api/routers/git-provider.ts @@ -1,7 +1,11 @@ import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc"; import { db } from "@/server/db"; import { apiRemoveGitProvider, gitProvider } from "@/server/db/schema"; -import { findGitProviderById, removeGitProvider } from "@dokploy/server"; +import { + IS_CLOUD, + findGitProviderById, + removeGitProvider, +} from "@dokploy/server"; import { TRPCError } from "@trpc/server"; import { desc, eq } from "drizzle-orm"; @@ -14,7 +18,8 @@ export const gitProviderRouter = createTRPCRouter({ github: true, }, orderBy: desc(gitProvider.createdAt), - where: eq(gitProvider.organizationId, ctx.session.activeOrganizationId), + ...(IS_CLOUD && { where: eq(gitProvider.adminId, ctx.user.adminId) }), + //TODO: Remove this line when the cloud version is ready }); }), remove: protectedProcedure @@ -23,7 +28,8 @@ export const gitProviderRouter = createTRPCRouter({ try { const gitProvider = await findGitProviderById(input.gitProviderId); - if (gitProvider.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && gitProvider.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to delete this Git provider", @@ -31,13 +37,9 @@ export const gitProviderRouter = createTRPCRouter({ } return await removeGitProvider(input.gitProviderId); } catch (error) { - const message = - error instanceof Error - ? error.message - : "Error deleting this Git provider"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error deleting this Git provider", }); } }), diff --git a/apps/dokploy/server/api/routers/github.ts b/apps/dokploy/server/api/routers/github.ts index 691030e27..562225778 100644 --- a/apps/dokploy/server/api/routers/github.ts +++ b/apps/dokploy/server/api/routers/github.ts @@ -6,6 +6,7 @@ import { apiUpdateGithub, } from "@/server/db/schema"; import { + IS_CLOUD, findGithubById, getGithubBranches, getGithubRepositories, @@ -19,10 +20,8 @@ export const githubRouter = createTRPCRouter({ .input(apiFindOneGithub) .query(async ({ input, ctx }) => { const githubProvider = await findGithubById(input.githubId); - if ( - githubProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && githubProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this github provider", @@ -34,10 +33,8 @@ export const githubRouter = createTRPCRouter({ .input(apiFindOneGithub) .query(async ({ input, ctx }) => { const githubProvider = await findGithubById(input.githubId); - if ( - githubProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && githubProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this github provider", @@ -49,10 +46,7 @@ export const githubRouter = createTRPCRouter({ .input(apiFindGithubBranches) .query(async ({ input, ctx }) => { const githubProvider = await findGithubById(input.githubId || ""); - if ( - githubProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && githubProvider.gitProvider.adminId !== ctx.user.adminId) { //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", @@ -68,11 +62,12 @@ export const githubRouter = createTRPCRouter({ }, }); - result = result.filter( - (provider) => - provider.gitProvider.organizationId === - ctx.session.activeOrganizationId, - ); + if (IS_CLOUD) { + // TODO: mAyBe a rEfaCtoR 🤫 + result = result.filter( + (provider) => provider.gitProvider.adminId === ctx.user.adminId, + ); + } const filtered = result .filter((provider) => haveGithubRequirements(provider)) @@ -94,9 +89,10 @@ export const githubRouter = createTRPCRouter({ try { const githubProvider = await findGithubById(input.githubId); if ( - githubProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + githubProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this github provider", @@ -115,10 +111,8 @@ export const githubRouter = createTRPCRouter({ .input(apiUpdateGithub) .mutation(async ({ input, ctx }) => { const githubProvider = await findGithubById(input.githubId); - if ( - githubProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && githubProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this github provider", @@ -126,7 +120,7 @@ export const githubRouter = createTRPCRouter({ } await updateGitProvider(input.gitProviderId, { name: input.name, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); }), }); diff --git a/apps/dokploy/server/api/routers/gitlab.ts b/apps/dokploy/server/api/routers/gitlab.ts index daae68a5a..6d35f4a28 100644 --- a/apps/dokploy/server/api/routers/gitlab.ts +++ b/apps/dokploy/server/api/routers/gitlab.ts @@ -9,6 +9,7 @@ import { import { db } from "@/server/db"; import { + IS_CLOUD, createGitlab, findGitlabById, getGitlabBranches, @@ -25,7 +26,7 @@ export const gitlabRouter = createTRPCRouter({ .input(apiCreateGitlab) .mutation(async ({ input, ctx }) => { try { - return await createGitlab(input, ctx.session.activeOrganizationId); + return await createGitlab(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -38,10 +39,8 @@ export const gitlabRouter = createTRPCRouter({ .input(apiFindOneGitlab) .query(async ({ input, ctx }) => { const gitlabProvider = await findGitlabById(input.gitlabId); - if ( - gitlabProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && gitlabProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this Gitlab provider", @@ -56,11 +55,12 @@ export const gitlabRouter = createTRPCRouter({ }, }); - result = result.filter( - (provider) => - provider.gitProvider.organizationId === - ctx.session.activeOrganizationId, - ); + if (IS_CLOUD) { + // TODO: mAyBe a rEfaCtoR 🤫 + result = result.filter( + (provider) => provider.gitProvider.adminId === ctx.user.adminId, + ); + } const filtered = result .filter((provider) => haveGitlabRequirements(provider)) .map((provider) => { @@ -78,10 +78,8 @@ export const gitlabRouter = createTRPCRouter({ .input(apiFindOneGitlab) .query(async ({ input, ctx }) => { const gitlabProvider = await findGitlabById(input.gitlabId); - if ( - gitlabProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && gitlabProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this Gitlab provider", @@ -94,10 +92,8 @@ export const gitlabRouter = createTRPCRouter({ .input(apiFindGitlabBranches) .query(async ({ input, ctx }) => { const gitlabProvider = await findGitlabById(input.gitlabId || ""); - if ( - gitlabProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && gitlabProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this Gitlab provider", @@ -111,9 +107,10 @@ export const gitlabRouter = createTRPCRouter({ try { const gitlabProvider = await findGitlabById(input.gitlabId || ""); if ( - gitlabProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId + IS_CLOUD && + gitlabProvider.gitProvider.adminId !== ctx.user.adminId ) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this Gitlab provider", @@ -133,10 +130,8 @@ export const gitlabRouter = createTRPCRouter({ .input(apiUpdateGitlab) .mutation(async ({ input, ctx }) => { const gitlabProvider = await findGitlabById(input.gitlabId); - if ( - gitlabProvider.gitProvider.organizationId !== - ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && gitlabProvider.gitProvider.adminId !== ctx.user.adminId) { + //TODO: Remove this line when the cloud version is ready throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this Gitlab provider", @@ -145,7 +140,7 @@ export const gitlabRouter = createTRPCRouter({ if (input.name) { await updateGitProvider(input.gitProviderId, { name: input.name, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); await updateGitlab(input.gitlabId, { diff --git a/apps/dokploy/server/api/routers/mariadb.ts b/apps/dokploy/server/api/routers/mariadb.ts index be0ffd39a..09f4d6757 100644 --- a/apps/dokploy/server/api/routers/mariadb.ts +++ b/apps/dokploy/server/api/routers/mariadb.ts @@ -9,7 +9,6 @@ import { apiSaveExternalPortMariaDB, apiUpdateMariaDB, } from "@/server/db/schema"; -import { cancelJobs } from "@/server/utils/backup"; import { IS_CLOUD, addNewService, @@ -17,9 +16,9 @@ import { createMariadb, createMount, deployMariadb, - findBackupsByDbId, findMariadbById, findProjectById, + findServerById, removeMariadbById, removeService, startService, @@ -36,13 +35,8 @@ export const mariadbRouter = createTRPCRouter({ .input(apiCreateMariaDB) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -53,19 +47,15 @@ export const mariadbRouter = createTRPCRouter({ } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", }); } const newMariadb = await createMariadb(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newMariadb.mariadbId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newMariadb.mariadbId); } await createMount({ @@ -87,16 +77,11 @@ export const mariadbRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOneMariaDB) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.mariadbId, - ctx.session.activeOrganizationId, - "access", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.mariadbId, "access"); } const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this Mariadb", @@ -109,7 +94,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiFindOneMariaDB) .mutation(async ({ input, ctx }) => { const service = await findMariadbById(input.mariadbId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this Mariadb", @@ -146,7 +131,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiSaveExternalPortMariaDB) .mutation(async ({ input, ctx }) => { const mongo = await findMariadbById(input.mariadbId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -162,7 +147,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiDeployMariaDB) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Mariadb", @@ -183,7 +168,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiDeployMariaDB) .subscription(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Mariadb", @@ -200,7 +185,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiChangeMariaDBStatus) .mutation(async ({ input, ctx }) => { const mongo = await findMariadbById(input.mariadbId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this Mariadb status", @@ -214,34 +199,27 @@ export const mariadbRouter = createTRPCRouter({ remove: protectedProcedure .input(apiFindOneMariaDB) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.mariadbId, - ctx.session.activeOrganizationId, - "delete", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.mariadbId, "delete"); } const mongo = await findMariadbById(input.mariadbId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this Mariadb", }); } - const backups = await findBackupsByDbId(input.mariadbId, "mariadb"); const cleanupOperations = [ async () => await removeService(mongo?.appName, mongo.serverId), - async () => await cancelJobs(backups), async () => await removeMariadbById(input.mariadbId), ]; for (const operation of cleanupOperations) { try { await operation(); - } catch (_) {} + } catch (error) {} } return mongo; @@ -250,7 +228,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesMariaDB) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -273,7 +251,7 @@ export const mariadbRouter = createTRPCRouter({ .input(apiResetMariadb) .mutation(async ({ input, ctx }) => { const mariadb = await findMariadbById(input.mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this Mariadb", @@ -303,7 +281,7 @@ export const mariadbRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { mariadbId, ...rest } = input; const mariadb = await findMariadbById(mariadbId); - if (mariadb.project.organizationId !== ctx.session.activeOrganizationId) { + if (mariadb.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this Mariadb", diff --git a/apps/dokploy/server/api/routers/mongo.ts b/apps/dokploy/server/api/routers/mongo.ts index 1c3ba6bb7..b114b8d87 100644 --- a/apps/dokploy/server/api/routers/mongo.ts +++ b/apps/dokploy/server/api/routers/mongo.ts @@ -9,7 +9,6 @@ import { apiSaveExternalPortMongo, apiUpdateMongo, } from "@/server/db/schema"; -import { cancelJobs } from "@/server/utils/backup"; import { IS_CLOUD, addNewService, @@ -17,7 +16,6 @@ import { createMongo, createMount, deployMongo, - findBackupsByDbId, findMongoById, findProjectById, removeMongoById, @@ -36,13 +34,8 @@ export const mongoRouter = createTRPCRouter({ .input(apiCreateMongo) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -53,19 +46,15 @@ export const mongoRouter = createTRPCRouter({ } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", }); } const newMongo = await createMongo(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newMongo.mongoId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newMongo.mongoId); } await createMount({ @@ -91,17 +80,12 @@ export const mongoRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOneMongo) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.mongoId, - ctx.session.activeOrganizationId, - "access", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.mongoId, "access"); } const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this mongo", @@ -115,7 +99,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const service = await findMongoById(input.mongoId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this mongo", @@ -138,7 +122,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this mongo", @@ -160,7 +144,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiSaveExternalPortMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -176,7 +160,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiDeployMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this mongo", @@ -196,7 +180,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiDeployMongo) .subscription(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this mongo", @@ -213,7 +197,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiChangeMongoStatus) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this mongo status", @@ -228,7 +212,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiResetMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this mongo", @@ -256,35 +240,28 @@ export const mongoRouter = createTRPCRouter({ remove: protectedProcedure .input(apiFindOneMongo) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.mongoId, - ctx.session.activeOrganizationId, - "delete", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.mongoId, "delete"); } const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this mongo", }); } - const backups = await findBackupsByDbId(input.mongoId, "mongo"); const cleanupOperations = [ async () => await removeService(mongo?.appName, mongo.serverId), - async () => await cancelJobs(backups), async () => await removeMongoById(input.mongoId), ]; for (const operation of cleanupOperations) { try { await operation(); - } catch (_) {} + } catch (error) {} } return mongo; @@ -293,7 +270,7 @@ export const mongoRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesMongo) .mutation(async ({ input, ctx }) => { const mongo = await findMongoById(input.mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -317,7 +294,7 @@ export const mongoRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { mongoId, ...rest } = input; const mongo = await findMongoById(mongoId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this mongo", diff --git a/apps/dokploy/server/api/routers/mysql.ts b/apps/dokploy/server/api/routers/mysql.ts index 594403f24..44d2537aa 100644 --- a/apps/dokploy/server/api/routers/mysql.ts +++ b/apps/dokploy/server/api/routers/mysql.ts @@ -12,7 +12,6 @@ import { import { TRPCError } from "@trpc/server"; -import { cancelJobs } from "@/server/utils/backup"; import { IS_CLOUD, addNewService, @@ -20,7 +19,6 @@ import { createMount, createMysql, deployMySql, - findBackupsByDbId, findMySqlById, findProjectById, removeMySqlById, @@ -38,13 +36,8 @@ export const mysqlRouter = createTRPCRouter({ .input(apiCreateMySql) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -55,7 +48,7 @@ export const mysqlRouter = createTRPCRouter({ } 1; const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", @@ -63,12 +56,8 @@ export const mysqlRouter = createTRPCRouter({ } const newMysql = await createMysql(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newMysql.mysqlId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newMysql.mysqlId); } await createMount({ @@ -94,16 +83,11 @@ export const mysqlRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOneMySql) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.mysqlId, - ctx.session.activeOrganizationId, - "access", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.mysqlId, "access"); } const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this MySQL", @@ -116,7 +100,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiFindOneMySql) .mutation(async ({ input, ctx }) => { const service = await findMySqlById(input.mysqlId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this MySQL", @@ -138,7 +122,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiFindOneMySql) .mutation(async ({ input, ctx }) => { const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this MySQL", @@ -159,7 +143,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiSaveExternalPortMySql) .mutation(async ({ input, ctx }) => { const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -175,7 +159,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiDeployMySql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this MySQL", @@ -195,7 +179,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiDeployMySql) .subscription(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this MySQL", @@ -212,7 +196,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiChangeMySqlStatus) .mutation(async ({ input, ctx }) => { const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this MySQL status", @@ -227,7 +211,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiResetMysql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this MySQL", @@ -254,33 +238,26 @@ export const mysqlRouter = createTRPCRouter({ remove: protectedProcedure .input(apiFindOneMySql) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.mysqlId, - ctx.session.activeOrganizationId, - "delete", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.mysqlId, "delete"); } const mongo = await findMySqlById(input.mysqlId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this MySQL", }); } - const backups = await findBackupsByDbId(input.mysqlId, "mysql"); const cleanupOperations = [ async () => await removeService(mongo?.appName, mongo.serverId), - async () => await cancelJobs(backups), async () => await removeMySqlById(input.mysqlId), ]; for (const operation of cleanupOperations) { try { await operation(); - } catch (_) {} + } catch (error) {} } return mongo; @@ -289,7 +266,7 @@ export const mysqlRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesMySql) .mutation(async ({ input, ctx }) => { const mysql = await findMySqlById(input.mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -313,7 +290,7 @@ export const mysqlRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { mysqlId, ...rest } = input; const mysql = await findMySqlById(mysqlId); - if (mysql.project.organizationId !== ctx.session.activeOrganizationId) { + if (mysql.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this MySQL", diff --git a/apps/dokploy/server/api/routers/notification.ts b/apps/dokploy/server/api/routers/notification.ts index 23283d971..2eafc66d2 100644 --- a/apps/dokploy/server/api/routers/notification.ts +++ b/apps/dokploy/server/api/routers/notification.ts @@ -23,8 +23,6 @@ import { apiUpdateSlack, apiUpdateTelegram, notifications, - server, - users_temp, } from "@/server/db/schema"; import { IS_CLOUD, @@ -38,7 +36,6 @@ import { sendDiscordNotification, sendEmailNotification, sendGotifyNotification, - sendServerThresholdNotifications, sendSlackNotification, sendTelegramNotification, updateDiscordNotification, @@ -48,18 +45,15 @@ import { updateTelegramNotification, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; -import { desc, eq, sql } from "drizzle-orm"; -import { z } from "zod"; +import { desc, eq } from "drizzle-orm"; +// TODO: Uncomment the validations when is cloud ready export const notificationRouter = createTRPCRouter({ createSlack: adminProcedure .input(apiCreateSlack) .mutation(async ({ input, ctx }) => { try { - return await createSlackNotification( - input, - ctx.session.activeOrganizationId, - ); + return await createSlackNotification(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -73,7 +67,8 @@ export const notificationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const notification = await findNotificationById(input.notificationId); - if (notification.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this notification", @@ -81,7 +76,7 @@ export const notificationRouter = createTRPCRouter({ } return await updateSlackNotification({ ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw error; @@ -108,10 +103,7 @@ export const notificationRouter = createTRPCRouter({ .input(apiCreateTelegram) .mutation(async ({ input, ctx }) => { try { - return await createTelegramNotification( - input, - ctx.session.activeOrganizationId, - ); + return await createTelegramNotification(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -126,7 +118,8 @@ export const notificationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const notification = await findNotificationById(input.notificationId); - if (notification.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this notification", @@ -134,7 +127,7 @@ export const notificationRouter = createTRPCRouter({ } return await updateTelegramNotification({ ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw new TRPCError({ @@ -162,10 +155,7 @@ export const notificationRouter = createTRPCRouter({ .input(apiCreateDiscord) .mutation(async ({ input, ctx }) => { try { - return await createDiscordNotification( - input, - ctx.session.activeOrganizationId, - ); + return await createDiscordNotification(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -180,7 +170,8 @@ export const notificationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const notification = await findNotificationById(input.notificationId); - if (notification.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this notification", @@ -188,7 +179,7 @@ export const notificationRouter = createTRPCRouter({ } return await updateDiscordNotification({ ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw new TRPCError({ @@ -225,10 +216,7 @@ export const notificationRouter = createTRPCRouter({ .input(apiCreateEmail) .mutation(async ({ input, ctx }) => { try { - return await createEmailNotification( - input, - ctx.session.activeOrganizationId, - ); + return await createEmailNotification(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -242,7 +230,8 @@ export const notificationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const notification = await findNotificationById(input.notificationId); - if (notification.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this notification", @@ -250,7 +239,7 @@ export const notificationRouter = createTRPCRouter({ } return await updateEmailNotification({ ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw new TRPCError({ @@ -283,7 +272,8 @@ export const notificationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const notification = await findNotificationById(input.notificationId); - if (notification.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this notification", @@ -291,13 +281,9 @@ export const notificationRouter = createTRPCRouter({ } return await removeNotificationById(input.notificationId); } catch (error) { - const message = - error instanceof Error - ? error.message - : "Error deleting this notification"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error deleting this notification", }); } }), @@ -305,7 +291,8 @@ export const notificationRouter = createTRPCRouter({ .input(apiFindOneNotification) .query(async ({ input, ctx }) => { const notification = await findNotificationById(input.notificationId); - if (notification.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this notification", @@ -323,81 +310,15 @@ export const notificationRouter = createTRPCRouter({ gotify: true, }, orderBy: desc(notifications.createdAt), - where: eq(notifications.organizationId, ctx.session.activeOrganizationId), + ...(IS_CLOUD && { where: eq(notifications.adminId, ctx.user.adminId) }), + // TODO: Remove this line when the cloud version is ready }); }), - receiveNotification: publicProcedure - .input( - z.object({ - ServerType: z.enum(["Dokploy", "Remote"]).default("Dokploy"), - Type: z.enum(["Memory", "CPU"]), - Value: z.number(), - Threshold: z.number(), - Message: z.string(), - Timestamp: z.string(), - Token: z.string(), - }), - ) - .mutation(async ({ input }) => { - try { - let organizationId = ""; - let ServerName = ""; - if (input.ServerType === "Dokploy") { - const result = await db - .select() - .from(users_temp) - .where( - sql`${users_temp.metricsConfig}::jsonb -> 'server' ->> 'token' = ${input.Token}`, - ); - - if (!result?.[0]?.id) { - throw new TRPCError({ - code: "BAD_REQUEST", - message: "Token not found", - }); - } - - organizationId = result?.[0]?.id; - ServerName = "Dokploy"; - } else { - const result = await db - .select() - .from(server) - .where( - sql`${server.metricsConfig}::jsonb -> 'server' ->> 'token' = ${input.Token}`, - ); - - if (!result?.[0]?.organizationId) { - throw new TRPCError({ - code: "BAD_REQUEST", - message: "Token not found", - }); - } - - organizationId = result?.[0]?.organizationId; - ServerName = "Remote"; - } - - await sendServerThresholdNotifications(organizationId, { - ...input, - ServerName, - }); - } catch (error) { - throw new TRPCError({ - code: "BAD_REQUEST", - message: "Error sending the notification", - cause: error, - }); - } - }), createGotify: adminProcedure .input(apiCreateGotify) .mutation(async ({ input, ctx }) => { try { - return await createGotifyNotification( - input, - ctx.session.activeOrganizationId, - ); + return await createGotifyNotification(input, ctx.user.adminId); } catch (error) { throw new TRPCError({ code: "BAD_REQUEST", @@ -411,10 +332,7 @@ export const notificationRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const notification = await findNotificationById(input.notificationId); - if ( - IS_CLOUD && - notification.organizationId !== ctx.session.activeOrganizationId - ) { + if (IS_CLOUD && notification.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this notification", @@ -422,7 +340,7 @@ export const notificationRouter = createTRPCRouter({ } return await updateGotifyNotification({ ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw error; diff --git a/apps/dokploy/server/api/routers/organization.ts b/apps/dokploy/server/api/routers/organization.ts deleted file mode 100644 index 6f7a9c67d..000000000 --- a/apps/dokploy/server/api/routers/organization.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { db } from "@/server/db"; -import { invitation, member, organization } from "@/server/db/schema"; -import { IS_CLOUD } from "@dokploy/server/index"; -import { TRPCError } from "@trpc/server"; -import { and, desc, eq, exists } from "drizzle-orm"; -import { nanoid } from "nanoid"; -import { z } from "zod"; -import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc"; -export const organizationRouter = createTRPCRouter({ - create: protectedProcedure - .input( - z.object({ - name: z.string(), - logo: z.string().optional(), - }), - ) - .mutation(async ({ ctx, input }) => { - if (ctx.user.rol !== "owner" && !IS_CLOUD) { - throw new TRPCError({ - code: "FORBIDDEN", - message: "Only the organization owner can create an organization", - }); - } - const result = await db - .insert(organization) - .values({ - ...input, - slug: nanoid(), - createdAt: new Date(), - ownerId: ctx.user.id, - }) - .returning() - .then((res) => res[0]); - - console.log("result", result); - - if (!result) { - throw new TRPCError({ - code: "INTERNAL_SERVER_ERROR", - message: "Failed to create organization", - }); - } - - await db.insert(member).values({ - organizationId: result.id, - role: "owner", - createdAt: new Date(), - userId: ctx.user.id, - }); - return result; - }), - all: protectedProcedure.query(async ({ ctx }) => { - const memberResult = await db.query.organization.findMany({ - where: (organization) => - exists( - db - .select() - .from(member) - .where( - and( - eq(member.organizationId, organization.id), - eq(member.userId, ctx.user.id), - ), - ), - ), - }); - return memberResult; - }), - one: protectedProcedure - .input( - z.object({ - organizationId: z.string(), - }), - ) - .query(async ({ input }) => { - return await db.query.organization.findFirst({ - where: eq(organization.id, input.organizationId), - }); - }), - update: protectedProcedure - .input( - z.object({ - organizationId: z.string(), - name: z.string(), - logo: z.string().optional(), - }), - ) - .mutation(async ({ ctx, input }) => { - if (ctx.user.rol !== "owner" && !IS_CLOUD) { - throw new TRPCError({ - code: "FORBIDDEN", - message: "Only the organization owner can update it", - }); - } - const result = await db - .update(organization) - .set({ - name: input.name, - logo: input.logo, - }) - .where(eq(organization.id, input.organizationId)) - .returning(); - return result[0]; - }), - delete: protectedProcedure - .input( - z.object({ - organizationId: z.string(), - }), - ) - .mutation(async ({ ctx, input }) => { - if (ctx.user.rol !== "owner" && !IS_CLOUD) { - throw new TRPCError({ - code: "FORBIDDEN", - message: "Only the organization owner can delete it", - }); - } - const org = await db.query.organization.findFirst({ - where: eq(organization.id, input.organizationId), - }); - - if (!org) { - throw new TRPCError({ - code: "NOT_FOUND", - message: "Organization not found", - }); - } - - if (org.ownerId !== ctx.user.id) { - throw new TRPCError({ - code: "FORBIDDEN", - message: "Only the organization owner can delete it", - }); - } - - const result = await db - .delete(organization) - .where(eq(organization.id, input.organizationId)); - - return result; - }), - allInvitations: adminProcedure.query(async ({ ctx }) => { - return await db.query.invitation.findMany({ - where: eq(invitation.organizationId, ctx.session.activeOrganizationId), - orderBy: [desc(invitation.status), desc(invitation.expiresAt)], - }); - }), -}); diff --git a/apps/dokploy/server/api/routers/port.ts b/apps/dokploy/server/api/routers/port.ts index 923fea573..bfbc98633 100644 --- a/apps/dokploy/server/api/routers/port.ts +++ b/apps/dokploy/server/api/routers/port.ts @@ -44,11 +44,9 @@ export const portRouter = createTRPCRouter({ try { return removePortById(input.portId); } catch (error) { - const message = - error instanceof Error ? error.message : "Error input: Deleting port"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error input: Deleting port", }); } }), @@ -58,11 +56,9 @@ export const portRouter = createTRPCRouter({ try { return updatePortById(input.portId, input); } catch (error) { - const message = - error instanceof Error ? error.message : "Error updating the port"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error updating the port", }); } }), diff --git a/apps/dokploy/server/api/routers/postgres.ts b/apps/dokploy/server/api/routers/postgres.ts index cf3221b48..7d1789433 100644 --- a/apps/dokploy/server/api/routers/postgres.ts +++ b/apps/dokploy/server/api/routers/postgres.ts @@ -1,4 +1,9 @@ -import { createTRPCRouter, protectedProcedure } from "@/server/api/trpc"; +import { EventEmitter } from "node:events"; +import { + createTRPCRouter, + protectedProcedure, + publicProcedure, +} from "@/server/api/trpc"; import { apiChangePostgresStatus, apiCreatePostgres, @@ -9,7 +14,6 @@ import { apiSaveExternalPortPostgres, apiUpdatePostgres, } from "@/server/db/schema"; -import { cancelJobs } from "@/server/utils/backup"; import { IS_CLOUD, addNewService, @@ -17,7 +21,6 @@ import { createMount, createPostgres, deployPostgres, - findBackupsByDbId, findPostgresById, findProjectById, removePostgresById, @@ -30,19 +33,17 @@ import { } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; import { observable } from "@trpc/server/observable"; +import { z } from "zod"; + +const ee = new EventEmitter(); export const postgresRouter = createTRPCRouter({ create: protectedProcedure .input(apiCreatePostgres) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -53,19 +54,15 @@ export const postgresRouter = createTRPCRouter({ } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", }); } const newPostgres = await createPostgres(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newPostgres.postgresId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newPostgres.postgresId); } await createMount({ @@ -91,19 +88,12 @@ export const postgresRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOnePostgres) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.postgresId, - ctx.session.activeOrganizationId, - "access", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.postgresId, "access"); } const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this Postgres", @@ -117,7 +107,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const service = await findPostgresById(input.postgresId); - if (service.project.organizationId !== ctx.session.activeOrganizationId) { + if (service.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this Postgres", @@ -139,9 +129,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiFindOnePostgres) .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this Postgres", @@ -163,9 +151,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -181,9 +167,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiDeployPostgres) .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Postgres", @@ -204,9 +188,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiDeployPostgres) .subscription(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Postgres", @@ -223,9 +205,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiChangePostgresStatus) .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this Postgres status", @@ -239,30 +219,20 @@ export const postgresRouter = createTRPCRouter({ remove: protectedProcedure .input(apiFindOnePostgres) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.postgresId, - ctx.session.activeOrganizationId, - "delete", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.postgresId, "delete"); } const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this Postgres", }); } - const backups = await findBackupsByDbId(input.postgresId, "postgres"); - const cleanupOperations = [ removeService(postgres.appName, postgres.serverId), - cancelJobs(backups), removePostgresById(input.postgresId), ]; @@ -274,9 +244,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesPostgres) .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", @@ -299,9 +267,7 @@ export const postgresRouter = createTRPCRouter({ .input(apiResetPostgres) .mutation(async ({ input, ctx }) => { const postgres = await findPostgresById(input.postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this Postgres", @@ -331,9 +297,7 @@ export const postgresRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { postgresId, ...rest } = input; const postgres = await findPostgresById(postgresId); - if ( - postgres.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (postgres.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this Postgres", diff --git a/apps/dokploy/server/api/routers/preview-deployment.ts b/apps/dokploy/server/api/routers/preview-deployment.ts index f833e9f95..74b8461ae 100644 --- a/apps/dokploy/server/api/routers/preview-deployment.ts +++ b/apps/dokploy/server/api/routers/preview-deployment.ts @@ -14,9 +14,7 @@ export const previewDeploymentRouter = createTRPCRouter({ .input(apiFindAllByApplication) .query(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -30,10 +28,7 @@ export const previewDeploymentRouter = createTRPCRouter({ const previewDeployment = await findPreviewDeploymentById( input.previewDeploymentId, ); - if ( - previewDeployment.application.project.organizationId !== - ctx.session.activeOrganizationId - ) { + if (previewDeployment.application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this preview deployment", @@ -48,10 +43,7 @@ export const previewDeploymentRouter = createTRPCRouter({ const previewDeployment = await findPreviewDeploymentById( input.previewDeploymentId, ); - if ( - previewDeployment.application.project.organizationId !== - ctx.session.activeOrganizationId - ) { + if (previewDeployment.application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this preview deployment", diff --git a/apps/dokploy/server/api/routers/project.ts b/apps/dokploy/server/api/routers/project.ts index 438a3f077..9c2608cca 100644 --- a/apps/dokploy/server/api/routers/project.ts +++ b/apps/dokploy/server/api/routers/project.ts @@ -15,34 +15,32 @@ import { redis, } from "@/server/db/schema"; +import { TRPCError } from "@trpc/server"; +import { and, desc, eq, sql } from "drizzle-orm"; +import type { AnyPgColumn } from "drizzle-orm/pg-core"; + import { IS_CLOUD, addNewProject, checkProjectAccess, createProject, deleteProject, - findMemberById, + findAdminById, findProjectById, - findUserById, + findUserByAuthId, updateProjectById, } from "@dokploy/server"; -import { TRPCError } from "@trpc/server"; -import { and, desc, eq, sql } from "drizzle-orm"; -import type { AnyPgColumn } from "drizzle-orm/pg-core"; + export const projectRouter = createTRPCRouter({ create: protectedProcedure .input(apiCreateProject) .mutation(async ({ ctx, input }) => { try { - if (ctx.user.rol === "member") { - await checkProjectAccess( - ctx.user.id, - "create", - ctx.session.activeOrganizationId, - ); + if (ctx.user.rol === "user") { + await checkProjectAccess(ctx.user.authId, "create"); } - const admin = await findUserById(ctx.user.ownerId); + const admin = await findAdminById(ctx.user.adminId); if (admin.serversQuantity === 0 && IS_CLOUD) { throw new TRPCError({ @@ -51,16 +49,9 @@ export const projectRouter = createTRPCRouter({ }); } - const project = await createProject( - input, - ctx.session.activeOrganizationId, - ); - if (ctx.user.rol === "member") { - await addNewProject( - ctx.user.id, - project.projectId, - ctx.session.activeOrganizationId, - ); + const project = await createProject(input, ctx.user.adminId); + if (ctx.user.rol === "user") { + await addNewProject(ctx.user.authId, project.projectId); } return project; @@ -76,23 +67,15 @@ export const projectRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOneProject) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - const { accessedServices } = await findMemberById( - ctx.user.id, - ctx.session.activeOrganizationId, - ); + if (ctx.user.rol === "user") { + const { accessedServices } = await findUserByAuthId(ctx.user.authId); - await checkProjectAccess( - ctx.user.id, - "access", - ctx.session.activeOrganizationId, - input.projectId, - ); + await checkProjectAccess(ctx.user.authId, "access", input.projectId); const project = await db.query.projects.findFirst({ where: and( eq(projects.projectId, input.projectId), - eq(projects.organizationId, ctx.session.activeOrganizationId), + eq(projects.adminId, ctx.user.adminId), ), with: { compose: { @@ -132,7 +115,7 @@ export const projectRouter = createTRPCRouter({ } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", @@ -141,11 +124,9 @@ export const projectRouter = createTRPCRouter({ return project; }), all: protectedProcedure.query(async ({ ctx }) => { - // console.log(ctx.user); - if (ctx.user.rol === "member") { - const { accessedProjects, accessedServices } = await findMemberById( - ctx.user.id, - ctx.session.activeOrganizationId, + if (ctx.user.rol === "user") { + const { accessedProjects, accessedServices } = await findUserByAuthId( + ctx.user.authId, ); if (accessedProjects.length === 0) { @@ -158,7 +139,7 @@ export const projectRouter = createTRPCRouter({ accessedProjects.map((projectId) => sql`${projectId}`), sql`, `, )})`, - eq(projects.organizationId, ctx.session.activeOrganizationId), + eq(projects.adminId, ctx.user.adminId), ), with: { applications: { @@ -212,26 +193,19 @@ export const projectRouter = createTRPCRouter({ }, }, }, - where: eq(projects.organizationId, ctx.session.activeOrganizationId), + where: eq(projects.adminId, ctx.user.adminId), orderBy: desc(projects.createdAt), }); }), - remove: protectedProcedure .input(apiRemoveProject) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkProjectAccess( - ctx.user.id, - "delete", - ctx.session.activeOrganizationId, - ); + if (ctx.user.rol === "user") { + await checkProjectAccess(ctx.user.authId, "delete"); } const currentProject = await findProjectById(input.projectId); - if ( - currentProject.organizationId !== ctx.session.activeOrganizationId - ) { + if (currentProject.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this project", @@ -249,9 +223,7 @@ export const projectRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const currentProject = await findProjectById(input.projectId); - if ( - currentProject.organizationId !== ctx.session.activeOrganizationId - ) { + if (currentProject.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this project", diff --git a/apps/dokploy/server/api/routers/redirects.ts b/apps/dokploy/server/api/routers/redirects.ts index 2d520cc42..bcd7962a6 100644 --- a/apps/dokploy/server/api/routers/redirects.ts +++ b/apps/dokploy/server/api/routers/redirects.ts @@ -18,9 +18,7 @@ export const redirectsRouter = createTRPCRouter({ .input(apiCreateRedirect) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -33,9 +31,7 @@ export const redirectsRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const redirect = await findRedirectById(input.redirectId); const application = await findApplicationById(redirect.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -48,9 +44,7 @@ export const redirectsRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const redirect = await findRedirectById(input.redirectId); const application = await findApplicationById(redirect.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -63,9 +57,7 @@ export const redirectsRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const redirect = await findRedirectById(input.redirectId); const application = await findApplicationById(redirect.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", diff --git a/apps/dokploy/server/api/routers/redis.ts b/apps/dokploy/server/api/routers/redis.ts index a80660bf5..5883e50b1 100644 --- a/apps/dokploy/server/api/routers/redis.ts +++ b/apps/dokploy/server/api/routers/redis.ts @@ -36,13 +36,8 @@ export const redisRouter = createTRPCRouter({ .input(apiCreateRedis) .mutation(async ({ input, ctx }) => { try { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.projectId, - ctx.session.activeOrganizationId, - "create", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.projectId, "create"); } if (IS_CLOUD && !input.serverId) { @@ -53,19 +48,15 @@ export const redisRouter = createTRPCRouter({ } const project = await findProjectById(input.projectId); - if (project.organizationId !== ctx.session.activeOrganizationId) { + if (project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this project", }); } const newRedis = await createRedis(input); - if (ctx.user.rol === "member") { - await addNewService( - ctx.user.id, - newRedis.redisId, - project.organizationId, - ); + if (ctx.user.rol === "user") { + await addNewService(ctx.user.authId, newRedis.redisId); } await createMount({ @@ -84,17 +75,12 @@ export const redisRouter = createTRPCRouter({ one: protectedProcedure .input(apiFindOneRedis) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.redisId, - ctx.session.activeOrganizationId, - "access", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.redisId, "access"); } const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this Redis", @@ -107,7 +93,7 @@ export const redisRouter = createTRPCRouter({ .input(apiFindOneRedis) .mutation(async ({ input, ctx }) => { const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to start this Redis", @@ -129,7 +115,7 @@ export const redisRouter = createTRPCRouter({ .input(apiResetRedis) .mutation(async ({ input, ctx }) => { const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to reload this Redis", @@ -159,7 +145,7 @@ export const redisRouter = createTRPCRouter({ .input(apiFindOneRedis) .mutation(async ({ input, ctx }) => { const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to stop this Redis", @@ -180,7 +166,7 @@ export const redisRouter = createTRPCRouter({ .input(apiSaveExternalPortRedis) .mutation(async ({ input, ctx }) => { const mongo = await findRedisById(input.redisId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this external port", @@ -196,7 +182,7 @@ export const redisRouter = createTRPCRouter({ .input(apiDeployRedis) .mutation(async ({ input, ctx }) => { const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Redis", @@ -216,7 +202,7 @@ export const redisRouter = createTRPCRouter({ .input(apiDeployRedis) .subscription(async ({ input, ctx }) => { const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to deploy this Redis", @@ -232,7 +218,7 @@ export const redisRouter = createTRPCRouter({ .input(apiChangeRedisStatus) .mutation(async ({ input, ctx }) => { const mongo = await findRedisById(input.redisId); - if (mongo.project.organizationId !== ctx.session.activeOrganizationId) { + if (mongo.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to change this Redis status", @@ -246,23 +232,19 @@ export const redisRouter = createTRPCRouter({ remove: protectedProcedure .input(apiFindOneRedis) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - await checkServiceAccess( - ctx.user.id, - input.redisId, - ctx.session.activeOrganizationId, - "delete", - ); + if (ctx.user.rol === "user") { + await checkServiceAccess(ctx.user.authId, input.redisId, "delete"); } const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this Redis", }); } + const cleanupOperations = [ async () => await removeService(redis?.appName, redis.serverId), async () => await removeRedisById(input.redisId), @@ -271,7 +253,7 @@ export const redisRouter = createTRPCRouter({ for (const operation of cleanupOperations) { try { await operation(); - } catch (_) {} + } catch (error) {} } return redis; @@ -280,7 +262,7 @@ export const redisRouter = createTRPCRouter({ .input(apiSaveEnvironmentVariablesRedis) .mutation(async ({ input, ctx }) => { const redis = await findRedisById(input.redisId); - if (redis.project.organizationId !== ctx.session.activeOrganizationId) { + if (redis.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to save this environment", diff --git a/apps/dokploy/server/api/routers/registry.ts b/apps/dokploy/server/api/routers/registry.ts index a9a6be891..f66ed4aea 100644 --- a/apps/dokploy/server/api/routers/registry.ts +++ b/apps/dokploy/server/api/routers/registry.ts @@ -1,35 +1,34 @@ -import { db } from "@/server/db"; import { apiCreateRegistry, apiFindOneRegistry, apiRemoveRegistry, apiTestRegistry, apiUpdateRegistry, - registry, } from "@/server/db/schema"; import { IS_CLOUD, createRegistry, execAsync, execAsyncRemote, + findAllRegistryByAdminId, findRegistryById, removeRegistry, updateRegistry, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; -import { eq } from "drizzle-orm"; import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc"; + export const registryRouter = createTRPCRouter({ create: adminProcedure .input(apiCreateRegistry) .mutation(async ({ ctx, input }) => { - return await createRegistry(input, ctx.session.activeOrganizationId); + return await createRegistry(input, ctx.user.adminId); }), remove: adminProcedure .input(apiRemoveRegistry) .mutation(async ({ ctx, input }) => { const registry = await findRegistryById(input.registryId); - if (registry.organizationId !== ctx.session.activeOrganizationId) { + if (registry.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to delete this registry", @@ -42,7 +41,7 @@ export const registryRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const { registryId, ...rest } = input; const registry = await findRegistryById(registryId); - if (registry.organizationId !== ctx.session.activeOrganizationId) { + if (registry.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to update this registry", @@ -62,16 +61,13 @@ export const registryRouter = createTRPCRouter({ return true; }), all: protectedProcedure.query(async ({ ctx }) => { - const registryResponse = await db.query.registry.findMany({ - where: eq(registry.organizationId, ctx.session.activeOrganizationId), - }); - return registryResponse; + return await findAllRegistryByAdminId(ctx.user.adminId); }), one: adminProcedure .input(apiFindOneRegistry) .query(async ({ input, ctx }) => { const registry = await findRegistryById(input.registryId); - if (registry.organizationId !== ctx.session.activeOrganizationId) { + if (registry.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this registry", diff --git a/apps/dokploy/server/api/routers/security.ts b/apps/dokploy/server/api/routers/security.ts index b8e70bbb0..5318a2939 100644 --- a/apps/dokploy/server/api/routers/security.ts +++ b/apps/dokploy/server/api/routers/security.ts @@ -18,9 +18,7 @@ export const securityRouter = createTRPCRouter({ .input(apiCreateSecurity) .mutation(async ({ input, ctx }) => { const application = await findApplicationById(input.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -33,9 +31,7 @@ export const securityRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const security = await findSecurityById(input.securityId); const application = await findApplicationById(security.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -48,9 +44,7 @@ export const securityRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const security = await findSecurityById(input.securityId); const application = await findApplicationById(security.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", @@ -63,9 +57,7 @@ export const securityRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { const security = await findSecurityById(input.securityId); const application = await findApplicationById(security.applicationId); - if ( - application.project.organizationId !== ctx.session.activeOrganizationId - ) { + if (application.project.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this application", diff --git a/apps/dokploy/server/api/routers/server.ts b/apps/dokploy/server/api/routers/server.ts index 1a9ebc0ac..382bb98a5 100644 --- a/apps/dokploy/server/api/routers/server.ts +++ b/apps/dokploy/server/api/routers/server.ts @@ -6,13 +6,11 @@ import { apiFindOneServer, apiRemoveServer, apiUpdateServer, - apiUpdateServerMonitoring, applications, compose, mariadb, mongo, mysql, - organization, postgres, redis, server, @@ -22,40 +20,35 @@ import { createServer, defaultCommand, deleteServer, + findAdminById, findServerById, - findServersByUserId, - findUserById, + findServersByAdminId, getPublicIpWithFallback, haveActiveServices, removeDeploymentsByServerId, serverAudit, serverSetup, serverValidate, - setupMonitoring, updateServerById, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; import { observable } from "@trpc/server/observable"; import { and, desc, eq, getTableColumns, isNotNull, sql } from "drizzle-orm"; -import { z } from "zod"; export const serverRouter = createTRPCRouter({ create: protectedProcedure .input(apiCreateServer) .mutation(async ({ ctx, input }) => { try { - const user = await findUserById(ctx.user.ownerId); - const servers = await findServersByUserId(user.id); - if (IS_CLOUD && servers.length >= user.serversQuantity) { + const admin = await findAdminById(ctx.user.adminId); + const servers = await findServersByAdminId(admin.adminId); + if (IS_CLOUD && servers.length >= admin.serversQuantity) { throw new TRPCError({ code: "BAD_REQUEST", message: "You cannot create more servers", }); } - const project = await createServer( - input, - ctx.session.activeOrganizationId, - ); + const project = await createServer(input, ctx.user.adminId); return project; } catch (error) { throw new TRPCError({ @@ -70,7 +63,7 @@ export const serverRouter = createTRPCRouter({ .input(apiFindOneServer) .query(async ({ input, ctx }) => { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this server", @@ -81,7 +74,7 @@ export const serverRouter = createTRPCRouter({ }), getDefaultCommand: protectedProcedure .input(apiFindOneServer) - .query(async () => { + .query(async ({ input, ctx }) => { return defaultCommand(); }), all: protectedProcedure.query(async ({ ctx }) => { @@ -98,37 +91,22 @@ export const serverRouter = createTRPCRouter({ .leftJoin(mongo, eq(mongo.serverId, server.serverId)) .leftJoin(mysql, eq(mysql.serverId, server.serverId)) .leftJoin(postgres, eq(postgres.serverId, server.serverId)) - .where(eq(server.organizationId, ctx.session.activeOrganizationId)) + .where(eq(server.adminId, ctx.user.adminId)) .orderBy(desc(server.createdAt)) .groupBy(server.serverId); return result; }), - count: protectedProcedure.query(async ({ ctx }) => { - const organizations = await db.query.organization.findMany({ - where: eq(organization.ownerId, ctx.user.id), - with: { - servers: true, - }, - }); - - const servers = organizations.flatMap((org) => org.servers); - - return servers.length ?? 0; - }), withSSHKey: protectedProcedure.query(async ({ ctx }) => { const result = await db.query.server.findMany({ orderBy: desc(server.createdAt), where: IS_CLOUD ? and( isNotNull(server.sshKeyId), - eq(server.organizationId, ctx.session.activeOrganizationId), + eq(server.adminId, ctx.user.adminId), eq(server.serverStatus, "active"), ) - : and( - isNotNull(server.sshKeyId), - eq(server.organizationId, ctx.session.activeOrganizationId), - ), + : and(isNotNull(server.sshKeyId), eq(server.adminId, ctx.user.adminId)), }); return result; }), @@ -137,7 +115,7 @@ export const serverRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to setup this server", @@ -162,7 +140,7 @@ export const serverRouter = createTRPCRouter({ .subscription(async ({ input, ctx }) => { try { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to setup this server", @@ -182,7 +160,7 @@ export const serverRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { try { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to validate this server", @@ -224,7 +202,7 @@ export const serverRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { try { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to validate this server", @@ -269,54 +247,12 @@ export const serverRouter = createTRPCRouter({ }); } }), - setupMonitoring: protectedProcedure - .input(apiUpdateServerMonitoring) - .mutation(async ({ input, ctx }) => { - try { - const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "You are not authorized to setup this server", - }); - } - - await updateServerById(input.serverId, { - metricsConfig: { - server: { - type: "Remote", - refreshRate: input.metricsConfig.server.refreshRate, - retentionDays: input.metricsConfig.server.retentionDays, - port: input.metricsConfig.server.port, - token: input.metricsConfig.server.token, - urlCallback: input.metricsConfig.server.urlCallback, - cronJob: input.metricsConfig.server.cronJob, - thresholds: { - cpu: input.metricsConfig.server.thresholds.cpu, - memory: input.metricsConfig.server.thresholds.memory, - }, - }, - containers: { - refreshRate: input.metricsConfig.containers.refreshRate, - services: { - include: input.metricsConfig.containers.services.include || [], - exclude: input.metricsConfig.containers.services.exclude || [], - }, - }, - }, - }); - const currentServer = await setupMonitoring(input.serverId); - return currentServer; - } catch (error) { - throw error; - } - }), remove: protectedProcedure .input(apiRemoveServer) .mutation(async ({ input, ctx }) => { try { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to delete this server", @@ -335,9 +271,12 @@ export const serverRouter = createTRPCRouter({ await deleteServer(input.serverId); if (IS_CLOUD) { - const admin = await findUserById(ctx.user.ownerId); + const admin = await findAdminById(ctx.user.adminId); - await updateServersBasedOnQuantity(admin.id, admin.serversQuantity); + await updateServersBasedOnQuantity( + admin.adminId, + admin.serversQuantity, + ); } return currentServer; @@ -350,7 +289,7 @@ export const serverRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to update this server", @@ -372,69 +311,11 @@ export const serverRouter = createTRPCRouter({ throw error; } }), - publicIp: protectedProcedure.query(async () => { + publicIp: protectedProcedure.query(async ({ ctx }) => { if (IS_CLOUD) { return ""; } const ip = await getPublicIpWithFallback(); return ip; }), - getServerMetrics: protectedProcedure - .input( - z.object({ - url: z.string(), - token: z.string(), - dataPoints: z.string(), - }), - ) - .query(async ({ input }) => { - try { - const url = new URL(input.url); - url.searchParams.append("limit", input.dataPoints); - const response = await fetch(url.toString(), { - headers: { - Authorization: `Bearer ${input.token}`, - }, - }); - if (!response.ok) { - throw new Error( - `Error ${response.status}: ${response.statusText}. Ensure the container is running and this service is included in the monitoring configuration.`, - ); - } - - const data = await response.json(); - if (!Array.isArray(data) || data.length === 0) { - throw new Error( - [ - "No monitoring data available. This could be because:", - "", - "1. You don't have setup the monitoring service, you can do in web server section.", - "2. If you already have setup the monitoring service, wait a few minutes and refresh the page.", - ].join("\n"), - ); - } - return data as { - cpu: string; - cpuModel: string; - cpuCores: number; - cpuPhysicalCores: number; - cpuSpeed: number; - os: string; - distro: string; - kernel: string; - arch: string; - memUsed: string; - memUsedGB: string; - memTotal: string; - uptime: number; - diskUsed: string; - totalDisk: string; - networkIn: string; - networkOut: string; - timestamp: string; - }[]; - } catch (error) { - throw error; - } - }), }); diff --git a/apps/dokploy/server/api/routers/settings.ts b/apps/dokploy/server/api/routers/settings.ts index fc1255fcf..449a22333 100644 --- a/apps/dokploy/server/api/routers/settings.ts +++ b/apps/dokploy/server/api/routers/settings.ts @@ -22,8 +22,9 @@ import { cleanUpUnusedVolumes, execAsync, execAsyncRemote, + findAdmin, + findAdminById, findServerById, - findUserById, getDokployImage, getDokployImageTag, getUpdateData, @@ -46,10 +47,10 @@ import { startServiceRemote, stopService, stopServiceRemote, + updateAdmin, updateLetsEncryptEmail, updateServerById, updateServerTraefik, - updateUser, writeConfig, writeMainConfig, writeTraefikConfigInPath, @@ -163,7 +164,7 @@ export const settingsRouter = createTRPCRouter({ if (IS_CLOUD) { return true; } - await updateUser(ctx.user.id, { + await updateAdmin(ctx.user.authId, { sshPrivateKey: input.sshPrivateKey, }); @@ -175,7 +176,7 @@ export const settingsRouter = createTRPCRouter({ if (IS_CLOUD) { return true; } - const user = await updateUser(ctx.user.id, { + const admin = await updateAdmin(ctx.user.authId, { host: input.host, ...(input.letsEncryptEmail && { letsEncryptEmail: input.letsEncryptEmail, @@ -183,25 +184,25 @@ export const settingsRouter = createTRPCRouter({ certificateType: input.certificateType, }); - if (!user) { + if (!admin) { throw new TRPCError({ code: "NOT_FOUND", - message: "User not found", + message: "Admin not found", }); } - updateServerTraefik(user, input.host); + updateServerTraefik(admin, input.host); if (input.letsEncryptEmail) { updateLetsEncryptEmail(input.letsEncryptEmail); } - return user; + return admin; }), cleanSSHPrivateKey: adminProcedure.mutation(async ({ ctx }) => { if (IS_CLOUD) { return true; } - await updateUser(ctx.user.id, { + await updateAdmin(ctx.user.authId, { sshPrivateKey: null, }); return true; @@ -216,7 +217,7 @@ export const settingsRouter = createTRPCRouter({ const server = await findServerById(input.serverId); - if (server.organizationId !== ctx.session?.activeOrganizationId) { + if (server.adminId !== ctx.user.adminId) { throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not authorized to access this server", @@ -245,7 +246,7 @@ export const settingsRouter = createTRPCRouter({ await cleanUpUnusedImages(server.serverId); await cleanUpDockerBuilder(server.serverId); await cleanUpSystemPrune(server.serverId); - await sendDockerCleanupNotifications(server.organizationId); + await sendDockerCleanupNotifications(server.adminId); }); } } else { @@ -261,11 +262,19 @@ export const settingsRouter = createTRPCRouter({ } } } else if (!IS_CLOUD) { - const userUpdated = await updateUser(ctx.user.id, { + const admin = await findAdminById(ctx.user.adminId); + + if (admin.adminId !== ctx.user.adminId) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not authorized to access this admin", + }); + } + const adminUpdated = await updateAdmin(ctx.user.authId, { enableDockerCleanup: input.enableDockerCleanup, }); - if (userUpdated?.enableDockerCleanup) { + if (adminUpdated?.enableDockerCleanup) { scheduleJob("docker-cleanup", "0 0 * * *", async () => { console.log( `Docker Cleanup ${new Date().toLocaleString()}] Running...`, @@ -273,9 +282,7 @@ export const settingsRouter = createTRPCRouter({ await cleanUpUnusedImages(); await cleanUpDockerBuilder(); await cleanUpSystemPrune(); - await sendDockerCleanupNotifications( - ctx.session.activeOrganizationId, - ); + await sendDockerCleanupNotifications(admin.adminId); }); } else { const currentJob = scheduledJobs["docker-cleanup"]; @@ -338,7 +345,7 @@ export const settingsRouter = createTRPCRouter({ writeConfig("middlewares", input.traefikConfig); return true; }), - getUpdateData: protectedProcedure.mutation(async () => { + getUpdateData: adminProcedure.mutation(async () => { if (IS_CLOUD) { return DEFAULT_UPDATE_DATA; } @@ -366,21 +373,18 @@ export const settingsRouter = createTRPCRouter({ return true; }), - getDokployVersion: protectedProcedure.query(() => { + getDokployVersion: adminProcedure.query(() => { return packageInfo.version; }), - getReleaseTag: protectedProcedure.query(() => { + getReleaseTag: adminProcedure.query(() => { return getDokployImageTag(); }), readDirectories: protectedProcedure .input(apiServerSchema) .query(async ({ ctx, input }) => { try { - if (ctx.user.rol === "member") { - const canAccess = await canAccessToTraefikFiles( - ctx.user.id, - ctx.session.activeOrganizationId, - ); + if (ctx.user.rol === "user") { + const canAccess = await canAccessToTraefikFiles(ctx.user.authId); if (!canAccess) { throw new TRPCError({ code: "UNAUTHORIZED" }); @@ -397,11 +401,8 @@ export const settingsRouter = createTRPCRouter({ updateTraefikFile: protectedProcedure .input(apiModifyTraefikConfig) .mutation(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - const canAccess = await canAccessToTraefikFiles( - ctx.user.id, - ctx.session.activeOrganizationId, - ); + if (ctx.user.rol === "user") { + const canAccess = await canAccessToTraefikFiles(ctx.user.authId); if (!canAccess) { throw new TRPCError({ code: "UNAUTHORIZED" }); @@ -418,11 +419,8 @@ export const settingsRouter = createTRPCRouter({ readTraefikFile: protectedProcedure .input(apiReadTraefikConfig) .query(async ({ input, ctx }) => { - if (ctx.user.rol === "member") { - const canAccess = await canAccessToTraefikFiles( - ctx.user.id, - ctx.session.activeOrganizationId, - ); + if (ctx.user.rol === "user") { + const canAccess = await canAccessToTraefikFiles(ctx.user.authId); if (!canAccess) { throw new TRPCError({ code: "UNAUTHORIZED" }); @@ -430,12 +428,12 @@ export const settingsRouter = createTRPCRouter({ } return readConfigInPath(input.path, input.serverId); }), - getIp: protectedProcedure.query(async ({ ctx }) => { + getIp: protectedProcedure.query(async () => { if (IS_CLOUD) { return true; } - const user = await findUserById(ctx.user.ownerId); - return user.serverIp; + const admin = await findAdmin(); + return admin.serverIp; }), getOpenApiDocument: protectedProcedure.query( @@ -482,28 +480,10 @@ export const settingsRouter = createTRPCRouter({ openApiDocument.info = { title: "Dokploy API", description: "Endpoints for dokploy", + // TODO: get version from package.json version: "1.0.0", }; - // Add security schemes configuration - openApiDocument.components = { - ...openApiDocument.components, - securitySchemes: { - apiKey: { - type: "apiKey", - in: "header", - name: "x-api-key", - description: "API key authentication", - }, - }, - }; - - // Apply security globally to all endpoints - openApiDocument.security = [ - { - apiKey: [], - }, - ]; return openApiDocument; }, ), @@ -675,7 +655,7 @@ export const settingsRouter = createTRPCRouter({ return true; }), - isCloud: publicProcedure.query(async () => { + isCloud: protectedProcedure.query(async () => { return IS_CLOUD; }), health: publicProcedure.query(async () => { @@ -735,12 +715,7 @@ export const settingsRouter = createTRPCRouter({ try { return await checkGPUStatus(input.serverId || ""); } catch (error) { - const message = - error instanceof Error ? error.message : "Failed to check GPU status"; - throw new TRPCError({ - code: "BAD_REQUEST", - message, - }); + throw new Error("Failed to check GPU status"); } }), updateTraefikPorts: adminProcedure diff --git a/apps/dokploy/server/api/routers/ssh-key.ts b/apps/dokploy/server/api/routers/ssh-key.ts index 4663af8f2..fe2f24f91 100644 --- a/apps/dokploy/server/api/routers/ssh-key.ts +++ b/apps/dokploy/server/api/routers/ssh-key.ts @@ -9,6 +9,7 @@ import { sshKeys, } from "@/server/db/schema"; import { + IS_CLOUD, createSshKey, findSSHKeyById, generateSSHKey, @@ -25,7 +26,7 @@ export const sshRouter = createTRPCRouter({ try { await createSshKey({ ...input, - organizationId: ctx.session.activeOrganizationId, + adminId: ctx.user.adminId, }); } catch (error) { throw new TRPCError({ @@ -40,7 +41,8 @@ export const sshRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const sshKey = await findSSHKeyById(input.sshKeyId); - if (sshKey.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && sshKey.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to delete this SSH key", @@ -57,7 +59,8 @@ export const sshRouter = createTRPCRouter({ .query(async ({ input, ctx }) => { const sshKey = await findSSHKeyById(input.sshKeyId); - if (sshKey.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && sshKey.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to access this SSH key", @@ -67,9 +70,10 @@ export const sshRouter = createTRPCRouter({ }), all: protectedProcedure.query(async ({ ctx }) => { return await db.query.sshKeys.findMany({ - where: eq(sshKeys.organizationId, ctx.session.activeOrganizationId), + ...(IS_CLOUD && { where: eq(sshKeys.adminId, ctx.user.adminId) }), orderBy: desc(sshKeys.createdAt), }); + // TODO: Remove this line when the cloud version is ready }), generate: protectedProcedure .input(apiGenerateSSHKey) @@ -81,7 +85,8 @@ export const sshRouter = createTRPCRouter({ .mutation(async ({ input, ctx }) => { try { const sshKey = await findSSHKeyById(input.sshKeyId); - if (sshKey.organizationId !== ctx.session.activeOrganizationId) { + if (IS_CLOUD && sshKey.adminId !== ctx.user.adminId) { + // TODO: Remove isCloud in the next versions of dokploy throw new TRPCError({ code: "UNAUTHORIZED", message: "You are not allowed to update this SSH key", diff --git a/apps/dokploy/server/api/routers/stripe.ts b/apps/dokploy/server/api/routers/stripe.ts index a226eeac8..7a8a537c1 100644 --- a/apps/dokploy/server/api/routers/stripe.ts +++ b/apps/dokploy/server/api/routers/stripe.ts @@ -1,9 +1,9 @@ import { WEBSITE_URL, getStripeItems } from "@/server/utils/stripe"; import { IS_CLOUD, - findServersByUserId, - findUserById, - updateUser, + findAdminById, + findServersByAdminId, + updateAdmin, } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; import Stripe from "stripe"; @@ -12,8 +12,8 @@ import { adminProcedure, createTRPCRouter } from "../trpc"; export const stripeRouter = createTRPCRouter({ getProducts: adminProcedure.query(async ({ ctx }) => { - const user = await findUserById(ctx.user.ownerId); - const stripeCustomerId = user.stripeCustomerId; + const admin = await findAdminById(ctx.user.adminId); + const stripeCustomerId = admin.stripeCustomerId; const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: "2024-09-30.acacia", @@ -56,15 +56,15 @@ export const stripeRouter = createTRPCRouter({ }); const items = getStripeItems(input.serverQuantity, input.isAnnual); - const user = await findUserById(ctx.user.id); + const admin = await findAdminById(ctx.user.adminId); - let stripeCustomerId = user.stripeCustomerId; + let stripeCustomerId = admin.stripeCustomerId; if (stripeCustomerId) { const customer = await stripe.customers.retrieve(stripeCustomerId); if (customer.deleted) { - await updateUser(user.id, { + await updateAdmin(admin.authId, { stripeCustomerId: null, }); stripeCustomerId = null; @@ -78,7 +78,7 @@ export const stripeRouter = createTRPCRouter({ customer: stripeCustomerId, }), metadata: { - adminId: user.id, + adminId: admin.adminId, }, allow_promotion_codes: true, success_url: `${WEBSITE_URL}/dashboard/settings/servers?success=true`, @@ -87,43 +87,45 @@ export const stripeRouter = createTRPCRouter({ return { sessionId: session.id }; }), - createCustomerPortalSession: adminProcedure.mutation(async ({ ctx }) => { - const user = await findUserById(ctx.user.id); + createCustomerPortalSession: adminProcedure.mutation( + async ({ ctx, input }) => { + const admin = await findAdminById(ctx.user.adminId); - if (!user.stripeCustomerId) { - throw new TRPCError({ - code: "BAD_REQUEST", - message: "Stripe Customer ID not found", - }); - } - const stripeCustomerId = user.stripeCustomerId; + if (!admin.stripeCustomerId) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Stripe Customer ID not found", + }); + } + const stripeCustomerId = admin.stripeCustomerId; - const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { - apiVersion: "2024-09-30.acacia", - }); - - try { - const session = await stripe.billingPortal.sessions.create({ - customer: stripeCustomerId, - return_url: `${WEBSITE_URL}/dashboard/settings/billing`, + const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { + apiVersion: "2024-09-30.acacia", }); - return { url: session.url }; - } catch (_) { - return { - url: "", - }; - } - }), + try { + const session = await stripe.billingPortal.sessions.create({ + customer: stripeCustomerId, + return_url: `${WEBSITE_URL}/dashboard/settings/billing`, + }); + + return { url: session.url }; + } catch (error) { + return { + url: "", + }; + } + }, + ), canCreateMoreServers: adminProcedure.query(async ({ ctx }) => { - const user = await findUserById(ctx.user.ownerId); - const servers = await findServersByUserId(user.id); + const admin = await findAdminById(ctx.user.adminId); + const servers = await findServersByAdminId(admin.adminId); if (!IS_CLOUD) { return true; } - return servers.length < user.serversQuantity; + return servers.length < admin.serversQuantity; }), }); diff --git a/apps/dokploy/server/api/routers/user.ts b/apps/dokploy/server/api/routers/user.ts index 0b740ab74..91db98261 100644 --- a/apps/dokploy/server/api/routers/user.ts +++ b/apps/dokploy/server/api/routers/user.ts @@ -1,330 +1,34 @@ -import { - IS_CLOUD, - findOrganizationById, - findUserById, - getUserByToken, - removeUserById, - updateUser, - createApiKey, -} from "@dokploy/server"; -import { db } from "@dokploy/server/db"; -import { - account, - apiAssignPermissions, - apiFindOneToken, - apiUpdateUser, - invitation, - member, - apikey, -} from "@dokploy/server/db/schema"; -import * as bcrypt from "bcrypt"; +import { apiFindOneUser, apiFindOneUserByAuth } from "@/server/db/schema"; +import { findUserByAuthId, findUserById, findUsers } from "@dokploy/server"; import { TRPCError } from "@trpc/server"; -import { and, asc, eq, gt } from "drizzle-orm"; -import { z } from "zod"; -import { - adminProcedure, - createTRPCRouter, - protectedProcedure, - publicProcedure, -} from "../trpc"; - -const apiCreateApiKey = z.object({ - name: z.string().min(1), - prefix: z.string().optional(), - expiresIn: z.number().optional(), - metadata: z.object({ - organizationId: z.string(), - }), - // Rate limiting - rateLimitEnabled: z.boolean().optional(), - rateLimitTimeWindow: z.number().optional(), - rateLimitMax: z.number().optional(), - // Request limiting - remaining: z.number().optional(), - refillAmount: z.number().optional(), - refillInterval: z.number().optional(), -}); +import { adminProcedure, createTRPCRouter, protectedProcedure } from "../trpc"; export const userRouter = createTRPCRouter({ all: adminProcedure.query(async ({ ctx }) => { - return await db.query.member.findMany({ - where: eq(member.organizationId, ctx.session.activeOrganizationId), - with: { - user: true, - }, - orderBy: [asc(member.createdAt)], - }); + return await findUsers(ctx.user.adminId); }), - one: protectedProcedure - .input( - z.object({ - userId: z.string(), - }), - ) + byAuthId: protectedProcedure + .input(apiFindOneUserByAuth) .query(async ({ input, ctx }) => { - const memberResult = await db.query.member.findFirst({ - where: and( - eq(member.userId, input.userId), - eq(member.organizationId, ctx.session?.activeOrganizationId || ""), - ), - with: { - user: true, - }, - }); - - return memberResult; - }), - get: protectedProcedure.query(async ({ ctx }) => { - const memberResult = await db.query.member.findFirst({ - where: and( - eq(member.userId, ctx.user.id), - eq(member.organizationId, ctx.session?.activeOrganizationId || ""), - ), - with: { - user: { - with: { - apiKeys: true, - }, - }, - }, - }); - - return memberResult; - }), - getServerMetrics: protectedProcedure.query(async ({ ctx }) => { - const memberResult = await db.query.member.findFirst({ - where: and( - eq(member.userId, ctx.user.id), - eq(member.organizationId, ctx.session?.activeOrganizationId || ""), - ), - with: { - user: true, - }, - }); - - return memberResult?.user; - }), - update: protectedProcedure - .input(apiUpdateUser) - .mutation(async ({ input, ctx }) => { - if (input.password || input.currentPassword) { - const currentAuth = await db.query.account.findFirst({ - where: eq(account.userId, ctx.user.id), + const user = await findUserByAuthId(input.authId); + if (user.adminId !== ctx.user.adminId) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not allowed to access this user", }); - const correctPassword = bcrypt.compareSync( - input.currentPassword || "", - currentAuth?.password || "", - ); - - if (!correctPassword) { - throw new TRPCError({ - code: "BAD_REQUEST", - message: "Current password is incorrect", - }); - } - - if (!input.password) { - throw new TRPCError({ - code: "BAD_REQUEST", - message: "New password is required", - }); - } - await db - .update(account) - .set({ - password: bcrypt.hashSync(input.password, 10), - }) - .where(eq(account.userId, ctx.user.id)); } - return await updateUser(ctx.user.id, input); + return user; }), - getUserByToken: publicProcedure - .input(apiFindOneToken) - .query(async ({ input }) => { - return await getUserByToken(input.token); - }), - getMetricsToken: protectedProcedure.query(async ({ ctx }) => { - const user = await findUserById(ctx.user.ownerId); - return { - serverIp: user.serverIp, - enabledFeatures: user.enablePaidFeatures, - metricsConfig: user?.metricsConfig, - }; - }), - remove: protectedProcedure - .input( - z.object({ - userId: z.string(), - }), - ) - .mutation(async ({ input }) => { - if (IS_CLOUD) { - return true; - } - return await removeUserById(input.userId); - }), - assignPermissions: adminProcedure - .input(apiAssignPermissions) - .mutation(async ({ input, ctx }) => { - try { - const organization = await findOrganizationById( - ctx.session?.activeOrganizationId || "", - ); - - if (organization?.ownerId !== ctx.user.ownerId) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "You are not allowed to assign permissions", - }); - } - - const { id, ...rest } = input; - - await db - .update(member) - .set({ - ...rest, - }) - .where( - and( - eq(member.userId, input.id), - eq( - member.organizationId, - ctx.session?.activeOrganizationId || "", - ), - ), - ); - } catch (error) { - throw error; - } - }), - getInvitations: protectedProcedure.query(async ({ ctx }) => { - return await db.query.invitation.findMany({ - where: and( - eq(invitation.email, ctx.user.email), - gt(invitation.expiresAt, new Date()), - eq(invitation.status, "pending"), - ), - with: { - organization: true, - }, - }); - }), - - getContainerMetrics: protectedProcedure - .input( - z.object({ - url: z.string(), - token: z.string(), - appName: z.string(), - dataPoints: z.string(), - }), - ) - .query(async ({ input }) => { - try { - if (!input.appName) { - throw new Error( - [ - "No Application Selected:", - "", - "Make Sure to select an application to monitor.", - ].join("\n"), - ); - } - const url = new URL(`${input.url}/metrics/containers`); - url.searchParams.append("limit", input.dataPoints); - url.searchParams.append("appName", input.appName); - const response = await fetch(url.toString(), { - headers: { - Authorization: `Bearer ${input.token}`, - }, + byUserId: protectedProcedure + .input(apiFindOneUser) + .query(async ({ input, ctx }) => { + const user = await findUserById(input.userId); + if (user.adminId !== ctx.user.adminId) { + throw new TRPCError({ + code: "UNAUTHORIZED", + message: "You are not allowed to access this user", }); - if (!response.ok) { - throw new Error( - `Error ${response.status}: ${response.statusText}. Please verify that the application "${input.appName}" is running and this service is included in the monitoring configuration.`, - ); - } - - const data = await response.json(); - if (!Array.isArray(data) || data.length === 0) { - throw new Error( - [ - `No monitoring data available for "${input.appName}". This could be because:`, - "", - "1. The container was recently started - wait a few minutes for data to be collected", - "2. The container is not running - verify its status", - "3. The service is not included in your monitoring configuration", - ].join("\n"), - ); - } - return data as { - containerId: string; - containerName: string; - containerImage: string; - containerLabels: string; - containerCommand: string; - containerCreated: string; - }[]; - } catch (error) { - throw error; } - }), - - generateToken: protectedProcedure.mutation(async () => { - return "token"; - }), - - deleteApiKey: protectedProcedure - .input( - z.object({ - apiKeyId: z.string(), - }), - ) - .mutation(async ({ input, ctx }) => { - try { - const apiKeyToDelete = await db.query.apikey.findFirst({ - where: eq(apikey.id, input.apiKeyId), - }); - - if (!apiKeyToDelete) { - throw new TRPCError({ - code: "NOT_FOUND", - message: "API key not found", - }); - } - - if (apiKeyToDelete.userId !== ctx.user.id) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "You are not authorized to delete this API key", - }); - } - - await db.delete(apikey).where(eq(apikey.id, input.apiKeyId)); - return true; - } catch (error) { - throw error; - } - }), - - createApiKey: protectedProcedure - .input(apiCreateApiKey) - .mutation(async ({ input, ctx }) => { - const apiKey = await createApiKey(ctx.user.id, input); - return apiKey; - }), - - checkUserOrganizations: protectedProcedure - .input( - z.object({ - userId: z.string(), - }), - ) - .query(async ({ input }) => { - const organizations = await db.query.member.findMany({ - where: eq(member.userId, input.userId), - }); - - return organizations.length; + return user; }), }); diff --git a/apps/dokploy/server/api/trpc.ts b/apps/dokploy/server/api/trpc.ts index 4c88eb22d..db4f7adfe 100644 --- a/apps/dokploy/server/api/trpc.ts +++ b/apps/dokploy/server/api/trpc.ts @@ -9,7 +9,7 @@ // import { getServerAuthSession } from "@/server/auth"; import { db } from "@/server/db"; -import { validateRequest } from "@dokploy/server/lib/auth"; +import { validateBearerToken, validateRequest } from "@dokploy/server"; import type { OpenApiMeta } from "@dokploy/trpc-openapi"; import { TRPCError, initTRPC } from "@trpc/server"; import type { CreateNextContextOptions } from "@trpc/server/adapters/next"; @@ -18,7 +18,7 @@ import { experimental_isMultipartFormDataRequest, experimental_parseMultipartFormData, } from "@trpc/server/adapters/node-http/content-type/form-data"; -import type { Session, User } from "better-auth"; +import type { Session, User } from "lucia"; import superjson from "superjson"; import { ZodError } from "zod"; /** @@ -30,8 +30,8 @@ import { ZodError } from "zod"; */ interface CreateContextOptions { - user: (User & { rol: "member" | "admin" | "owner"; ownerId: string }) | null; - session: (Session & { activeOrganizationId: string }) | null; + user: (User & { authId: string; adminId: string }) | null; + session: Session | null; req: CreateNextContextOptions["req"]; res: CreateNextContextOptions["res"]; } @@ -65,29 +65,30 @@ const createInnerTRPCContext = (opts: CreateContextOptions) => { export const createTRPCContext = async (opts: CreateNextContextOptions) => { const { req, res } = opts; - // Get from the request - const { session, user } = await validateRequest(req); + let { session, user } = await validateBearerToken(req); + + if (!session) { + const cookieResult = await validateRequest(req, res); + session = cookieResult.session; + user = cookieResult.user; + } return createInnerTRPCContext({ req, res, - // @ts-ignore - session: session - ? { - ...session, - activeOrganizationId: session.activeOrganizationId || "", - } - : null, - // @ts-ignore - user: user - ? { - ...user, - email: user.email, - rol: user.role as "owner" | "member" | "admin", - id: user.id, - ownerId: user.ownerId, - } - : null, + session: session, + ...((user && { + user: { + authId: user.id, + email: user.email, + rol: user.rol, + id: user.id, + secret: user.secret, + adminId: user.adminId, + }, + }) || { + user: null, + }), }); }; @@ -180,7 +181,7 @@ export const uploadProcedure = async (opts: any) => { }; export const cliProcedure = t.procedure.use(({ ctx, next }) => { - if (!ctx.session || !ctx.user || ctx.user.rol !== "owner") { + if (!ctx.session || !ctx.user || ctx.user.rol !== "admin") { throw new TRPCError({ code: "UNAUTHORIZED" }); } return next({ @@ -194,7 +195,7 @@ export const cliProcedure = t.procedure.use(({ ctx, next }) => { }); export const adminProcedure = t.procedure.use(({ ctx, next }) => { - if (!ctx.session || !ctx.user || ctx.user.rol !== "owner") { + if (!ctx.session || !ctx.user || ctx.user.rol !== "admin") { throw new TRPCError({ code: "UNAUTHORIZED" }); } return next({ diff --git a/apps/dokploy/server/db/seed.ts b/apps/dokploy/server/db/seed.ts index 5b3eb6c62..b79350797 100644 --- a/apps/dokploy/server/db/seed.ts +++ b/apps/dokploy/server/db/seed.ts @@ -1,10 +1,16 @@ +import bc from "bcrypt"; import { drizzle } from "drizzle-orm/postgres-js"; import postgres from "postgres"; +import { users } from "./schema"; const connectionString = process.env.DATABASE_URL!; const pg = postgres(connectionString, { max: 1 }); -const _db = drizzle(pg); +const db = drizzle(pg); + +function password(txt: string) { + return bc.hashSync(txt, 10); +} async function seed() { console.log("> Seed:", process.env.DATABASE_PATH, "\n"); diff --git a/apps/dokploy/server/utils/backup.ts b/apps/dokploy/server/utils/backup.ts index 4fc9db931..a178063fa 100644 --- a/apps/dokploy/server/utils/backup.ts +++ b/apps/dokploy/server/utils/backup.ts @@ -1,9 +1,3 @@ -import { - type BackupScheduleList, - IS_CLOUD, - removeScheduleBackup, -} from "@dokploy/server/index"; - type QueueJob = | { type: "backup"; @@ -65,19 +59,3 @@ export const updateJob = async (job: QueueJob) => { throw error; } }; - -export const cancelJobs = async (backups: BackupScheduleList) => { - for (const backup of backups) { - if (backup.enabled) { - if (IS_CLOUD) { - await removeJob({ - cronSchedule: backup.schedule, - backupId: backup.backupId, - type: "backup", - }); - } else { - removeScheduleBackup(backup.backupId); - } - } - } -}; diff --git a/apps/dokploy/server/utils/docker.ts b/apps/dokploy/server/utils/docker.ts index 3314eb62e..92008678f 100644 --- a/apps/dokploy/server/utils/docker.ts +++ b/apps/dokploy/server/utils/docker.ts @@ -6,7 +6,7 @@ export const isWSL = async () => { const { stdout } = await execAsync("uname -r"); const isWSL = stdout.includes("microsoft"); return isWSL; - } catch (_error) { + } catch (error) { return false; } }; diff --git a/apps/dokploy/server/wss/docker-container-logs.ts b/apps/dokploy/server/wss/docker-container-logs.ts index 8d08ebd46..092f39735 100644 --- a/apps/dokploy/server/wss/docker-container-logs.ts +++ b/apps/dokploy/server/wss/docker-container-logs.ts @@ -1,5 +1,5 @@ import type http from "node:http"; -import { findServerById, validateRequest } from "@dokploy/server"; +import { findServerById, validateWebSocketRequest } from "@dokploy/server"; import { spawn } from "node-pty"; import { Client } from "ssh2"; import { WebSocketServer } from "ws"; @@ -35,7 +35,7 @@ export const setupDockerContainerLogsWebSocketServer = ( const since = url.searchParams.get("since"); const serverId = url.searchParams.get("serverId"); const runType = url.searchParams.get("runType"); - const { user, session } = await validateRequest(req); + const { user, session } = await validateWebSocketRequest(req); if (!containerId) { ws.close(4000, "containerId no provided"); diff --git a/apps/dokploy/server/wss/docker-container-terminal.ts b/apps/dokploy/server/wss/docker-container-terminal.ts index 2f25edb1a..8981ccbc2 100644 --- a/apps/dokploy/server/wss/docker-container-terminal.ts +++ b/apps/dokploy/server/wss/docker-container-terminal.ts @@ -1,5 +1,5 @@ import type http from "node:http"; -import { findServerById, validateRequest } from "@dokploy/server"; +import { findServerById, validateWebSocketRequest } from "@dokploy/server"; import { spawn } from "node-pty"; import { Client } from "ssh2"; import { WebSocketServer } from "ws"; @@ -32,7 +32,7 @@ export const setupDockerContainerTerminalWebSocketServer = ( const containerId = url.searchParams.get("containerId"); const activeWay = url.searchParams.get("activeWay"); const serverId = url.searchParams.get("serverId"); - const { user, session } = await validateRequest(req); + const { user, session } = await validateWebSocketRequest(req); if (!containerId) { ws.close(4000, "containerId no provided"); @@ -50,8 +50,8 @@ export const setupDockerContainerTerminalWebSocketServer = ( throw new Error("No SSH key available for this server"); const conn = new Client(); - let _stdout = ""; - let _stderr = ""; + let stdout = ""; + let stderr = ""; conn .once("ready", () => { conn.exec( @@ -61,16 +61,16 @@ export const setupDockerContainerTerminalWebSocketServer = ( if (err) throw err; stream - .on("close", (code: number, _signal: string) => { + .on("close", (code: number, signal: string) => { ws.send(`\nContainer closed with code: ${code}\n`); conn.end(); }) .on("data", (data: string) => { - _stdout += data.toString(); + stdout += data.toString(); ws.send(data.toString()); }) .stderr.on("data", (data) => { - _stderr += data.toString(); + stderr += data.toString(); ws.send(data.toString()); console.error("Error: ", data.toString()); }); diff --git a/apps/dokploy/server/wss/docker-stats.ts b/apps/dokploy/server/wss/docker-stats.ts index 99e993dce..89d94687b 100644 --- a/apps/dokploy/server/wss/docker-stats.ts +++ b/apps/dokploy/server/wss/docker-stats.ts @@ -1,10 +1,9 @@ import type http from "node:http"; import { docker, - execAsync, getLastAdvancedStatsFile, recordAdvancedStats, - validateRequest, + validateWebSocketRequest, } from "@dokploy/server"; import { WebSocketServer } from "ws"; @@ -36,7 +35,7 @@ export const setupDockerStatsMonitoringSocketServer = ( | "application" | "stack" | "docker-compose"; - const { user, session } = await validateRequest(req); + const { user, session } = await validateWebSocketRequest(req); if (!appName) { ws.close(4000, "appName no provided"); @@ -71,16 +70,12 @@ export const setupDockerStatsMonitoringSocketServer = ( ws.close(4000, "Container not running"); return; } - const { stdout, stderr } = await execAsync( - `docker stats ${container.Id} --no-stream --format \'{"BlockIO":"{{.BlockIO}}","CPUPerc":"{{.CPUPerc}}","Container":"{{.Container}}","ID":"{{.ID}}","MemPerc":"{{.MemPerc}}","MemUsage":"{{.MemUsage}}","Name":"{{.Name}}","NetIO":"{{.NetIO}}"}\'`, - ); - if (stderr) { - console.error("Docker stats error:", stderr); - return; - } - const stat = JSON.parse(stdout); - await recordAdvancedStats(stat, appName); + const stats = await docker.getContainer(container.Id).stats({ + stream: false, + }); + + await recordAdvancedStats(stats, appName); const data = await getLastAdvancedStatsFile(appName); ws.send( diff --git a/apps/dokploy/server/wss/drawer-logs.ts b/apps/dokploy/server/wss/drawer-logs.ts index 404dfeee5..c1dec315b 100644 --- a/apps/dokploy/server/wss/drawer-logs.ts +++ b/apps/dokploy/server/wss/drawer-logs.ts @@ -1,5 +1,4 @@ import type http from "node:http"; -import { validateRequest } from "@dokploy/server/index"; import { applyWSSHandler } from "@trpc/server/adapters/ws"; import { WebSocketServer } from "ws"; import { appRouter } from "../api/root"; @@ -32,12 +31,6 @@ export const setupDrawerLogsWebSocketServer = ( }); wssTerm.on("connection", async (ws, req) => { - const _url = new URL(req.url || "", `http://${req.headers.host}`); - const { user, session } = await validateRequest(req); - - if (!user || !session) { - ws.close(); - return; - } + const url = new URL(req.url || "", `http://${req.headers.host}`); }); }; diff --git a/apps/dokploy/server/wss/listen-deployment.ts b/apps/dokploy/server/wss/listen-deployment.ts index 4a25c6f0e..df77ceb41 100644 --- a/apps/dokploy/server/wss/listen-deployment.ts +++ b/apps/dokploy/server/wss/listen-deployment.ts @@ -1,6 +1,6 @@ import { spawn } from "node:child_process"; import type http from "node:http"; -import { findServerById, validateRequest } from "@dokploy/server"; +import { findServerById, validateWebSocketRequest } from "@dokploy/server"; import { Client } from "ssh2"; import { WebSocketServer } from "ws"; @@ -29,7 +29,7 @@ export const setupDeploymentLogsWebSocketServer = ( const url = new URL(req.url || "", `http://${req.headers.host}`); const logPath = url.searchParams.get("logPath"); const serverId = url.searchParams.get("serverId"); - const { user, session } = await validateRequest(req); + const { user, session } = await validateWebSocketRequest(req); if (!logPath) { console.log("logPath no provided"); @@ -103,7 +103,7 @@ export const setupDeploymentLogsWebSocketServer = ( ws.close(); }); } - } catch (_error) { + } catch (error) { // @ts-ignore // const errorMessage = error?.message as unknown as string; // ws.send(errorMessage); diff --git a/apps/dokploy/server/wss/terminal.ts b/apps/dokploy/server/wss/terminal.ts index 094c5e157..5fa1accc2 100644 --- a/apps/dokploy/server/wss/terminal.ts +++ b/apps/dokploy/server/wss/terminal.ts @@ -1,5 +1,9 @@ import type http from "node:http"; -import { IS_CLOUD, findServerById, validateRequest } from "@dokploy/server"; +import { + IS_CLOUD, + findServerById, + validateWebSocketRequest, +} from "@dokploy/server"; import { publicIpv4, publicIpv6 } from "public-ip"; import { Client, type ConnectConfig } from "ssh2"; import { WebSocketServer } from "ws"; @@ -67,7 +71,7 @@ export const setupTerminalWebSocketServer = ( wssTerm.on("connection", async (ws, req) => { const url = new URL(req.url || "", `http://${req.headers.host}`); const serverId = url.searchParams.get("serverId"); - const { user, session } = await validateRequest(req); + const { user, session } = await validateWebSocketRequest(req); if (!user || !session || !serverId) { ws.close(); return; @@ -144,8 +148,8 @@ export const setupTerminalWebSocketServer = ( } const conn = new Client(); - let _stdout = ""; - let _stderr = ""; + let stdout = ""; + let stderr = ""; ws.send("Connecting...\n"); @@ -158,16 +162,16 @@ export const setupTerminalWebSocketServer = ( if (err) throw err; stream - .on("close", (code: number, _signal: string) => { + .on("close", (code: number, signal: string) => { ws.send(`\nContainer closed with code: ${code}\n`); conn.end(); }) .on("data", (data: string) => { - _stdout += data.toString(); + stdout += data.toString(); ws.send(data.toString()); }) .stderr.on("data", (data) => { - _stderr += data.toString(); + stderr += data.toString(); ws.send(data.toString()); console.error("Error: ", data.toString()); }); diff --git a/apps/dokploy/styles/globals.css b/apps/dokploy/styles/globals.css index 74a1d2764..7b7977b9c 100644 --- a/apps/dokploy/styles/globals.css +++ b/apps/dokploy/styles/globals.css @@ -4,7 +4,6 @@ @layer base { :root { - --terminal-paste: rgba(0, 0, 0, 0.2); --background: 0 0% 100%; --foreground: 240 10% 3.9%; @@ -52,7 +51,6 @@ } .dark { - --terminal-paste: rgba(255, 255, 255, 0.2); --background: 0 0% 0%; --foreground: 0 0% 98%; @@ -237,8 +235,3 @@ background-color: hsl(var(--muted-foreground) / 0.5); } } - -.xterm-bg-257.xterm-fg-257 { - background-color: var(--terminal-paste) !important; - color: currentColor !important; -} diff --git a/apps/dokploy/templates/activepieces/docker-compose.yml b/apps/dokploy/templates/activepieces/docker-compose.yml index a5511e7fa..e990379bc 100644 --- a/apps/dokploy/templates/activepieces/docker-compose.yml +++ b/apps/dokploy/templates/activepieces/docker-compose.yml @@ -4,7 +4,8 @@ services: activepieces: image: activepieces/activepieces:0.35.0 restart: unless-stopped - + networks: + - dokploy-network depends_on: postgres: condition: service_healthy @@ -34,7 +35,8 @@ services: postgres: image: postgres:14 restart: unless-stopped - + networks: + - dokploy-network environment: POSTGRES_DB: activepieces POSTGRES_PASSWORD: ${AP_POSTGRES_PASSWORD} @@ -50,7 +52,8 @@ services: redis: image: redis:7 restart: unless-stopped - + networks: + - dokploy-network volumes: - redis_data:/data healthcheck: diff --git a/apps/dokploy/templates/alist/docker-compose.yml b/apps/dokploy/templates/alist/docker-compose.yml deleted file mode 100644 index 9ff67c943..000000000 --- a/apps/dokploy/templates/alist/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: '3.3' -services: - alist: - image: xhofe/alist:v3.41.0 - volumes: - - alist-data:/opt/alist/data - environment: - - PUID=0 - - PGID=0 - - UMASK=022 - restart: unless-stopped - -volumes: - alist-data: \ No newline at end of file diff --git a/apps/dokploy/templates/alist/index.ts b/apps/dokploy/templates/alist/index.ts deleted file mode 100644 index 2a27f5708..000000000 --- a/apps/dokploy/templates/alist/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 5244, - serviceName: "alist", - }, - ]; - - return { - domains, - }; -} diff --git a/apps/dokploy/templates/answer/docker-compose.yml b/apps/dokploy/templates/answer/docker-compose.yml deleted file mode 100644 index 2b9fc3440..000000000 --- a/apps/dokploy/templates/answer/docker-compose.yml +++ /dev/null @@ -1,30 +0,0 @@ -services: - answer: - image: apache/answer:1.4.1 - ports: - - '80' - restart: on-failure - volumes: - - answer-data:/data - depends_on: - db: - condition: service_healthy - db: - image: postgres:16 - restart: always - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 5s - timeout: 5s - retries: 5 - - volumes: - - db-data:/var/lib/postgresql/data - environment: - POSTGRES_DB: answer - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - -volumes: - answer-data: - db-data: diff --git a/apps/dokploy/templates/answer/index.ts b/apps/dokploy/templates/answer/index.ts deleted file mode 100644 index 36d48cb36..000000000 --- a/apps/dokploy/templates/answer/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateHash, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainServiceHash = generateHash(schema.projectName); - const mainDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 9080, - serviceName: "answer", - }, - ]; - - const envs = [ - `ANSWER_HOST=http://${mainDomain}`, - `SERVICE_HASH=${mainServiceHash}`, - ]; - - const mounts: Template["mounts"] = []; - - return { - envs, - mounts, - domains, - }; -} diff --git a/apps/dokploy/templates/appsmith/index.ts b/apps/dokploy/templates/appsmith/index.ts index 73279e91b..ff744a249 100644 --- a/apps/dokploy/templates/appsmith/index.ts +++ b/apps/dokploy/templates/appsmith/index.ts @@ -7,7 +7,7 @@ import { } from "../utils"; export function generate(schema: Schema): Template { - const _mainServiceHash = generateHash(schema.projectName); + const mainServiceHash = generateHash(schema.projectName); const domains: DomainSchema[] = [ { diff --git a/apps/dokploy/templates/appwrite/docker-compose.yml b/apps/dokploy/templates/appwrite/docker-compose.yml deleted file mode 100644 index 163cb3d03..000000000 --- a/apps/dokploy/templates/appwrite/docker-compose.yml +++ /dev/null @@ -1,887 +0,0 @@ -version: "3.8" - -x-logging: &x-logging - logging: - driver: "json-file" - options: - max-file: "5" - max-size: "10m" - -services: - appwrite: - image: appwrite/appwrite:1.6.0 - container_name: appwrite - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - labels: - - traefik.enable=true - - traefik.constraint-label-stack=appwrite - volumes: - - appwrite-uploads:/storage/uploads:rw - - appwrite-cache:/storage/cache:rw - - appwrite-config:/storage/config:rw - - appwrite-certificates:/storage/certificates:rw - - appwrite-functions:/storage/functions:rw - depends_on: - - mariadb - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_LOCALE - - _APP_CONSOLE_WHITELIST_ROOT - - _APP_CONSOLE_WHITELIST_EMAILS - - _APP_CONSOLE_SESSION_ALERTS - - _APP_CONSOLE_WHITELIST_IPS - - _APP_CONSOLE_HOSTNAMES - - _APP_SYSTEM_EMAIL_NAME - - _APP_SYSTEM_EMAIL_ADDRESS - - _APP_EMAIL_SECURITY - - _APP_SYSTEM_RESPONSE_FORMAT - - _APP_OPTIONS_ABUSE - - _APP_OPTIONS_ROUTER_PROTECTION - - _APP_OPTIONS_FORCE_HTTPS - - _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS - - _APP_OPENSSL_KEY_V1 - - _APP_DOMAIN - - _APP_DOMAIN_TARGET - - _APP_DOMAIN_FUNCTIONS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_SMTP_HOST - - _APP_SMTP_PORT - - _APP_SMTP_SECURE - - _APP_SMTP_USERNAME - - _APP_SMTP_PASSWORD - - _APP_USAGE_STATS - - _APP_STORAGE_LIMIT - - _APP_STORAGE_PREVIEW_LIMIT - - _APP_STORAGE_ANTIVIRUS - - _APP_STORAGE_ANTIVIRUS_HOST - - _APP_STORAGE_ANTIVIRUS_PORT - - _APP_STORAGE_DEVICE - - _APP_STORAGE_S3_ACCESS_KEY - - _APP_STORAGE_S3_SECRET - - _APP_STORAGE_S3_REGION - - _APP_STORAGE_S3_BUCKET - - _APP_STORAGE_DO_SPACES_ACCESS_KEY - - _APP_STORAGE_DO_SPACES_SECRET - - _APP_STORAGE_DO_SPACES_REGION - - _APP_STORAGE_DO_SPACES_BUCKET - - _APP_STORAGE_BACKBLAZE_ACCESS_KEY - - _APP_STORAGE_BACKBLAZE_SECRET - - _APP_STORAGE_BACKBLAZE_REGION - - _APP_STORAGE_BACKBLAZE_BUCKET - - _APP_STORAGE_LINODE_ACCESS_KEY - - _APP_STORAGE_LINODE_SECRET - - _APP_STORAGE_LINODE_REGION - - _APP_STORAGE_LINODE_BUCKET - - _APP_STORAGE_WASABI_ACCESS_KEY - - _APP_STORAGE_WASABI_SECRET - - _APP_STORAGE_WASABI_REGION - - _APP_STORAGE_WASABI_BUCKET - - _APP_FUNCTIONS_SIZE_LIMIT - - _APP_FUNCTIONS_TIMEOUT - - _APP_FUNCTIONS_BUILD_TIMEOUT - - _APP_FUNCTIONS_CPUS - - _APP_FUNCTIONS_MEMORY - - _APP_FUNCTIONS_RUNTIMES - - _APP_EXECUTOR_SECRET - - _APP_EXECUTOR_HOST - - _APP_LOGGING_CONFIG - - _APP_MAINTENANCE_INTERVAL - - _APP_MAINTENANCE_DELAY - - _APP_MAINTENANCE_RETENTION_EXECUTION - - _APP_MAINTENANCE_RETENTION_CACHE - - _APP_MAINTENANCE_RETENTION_ABUSE - - _APP_MAINTENANCE_RETENTION_AUDIT - - _APP_MAINTENANCE_RETENTION_USAGE_HOURLY - - _APP_MAINTENANCE_RETENTION_SCHEDULES - - _APP_SMS_PROVIDER - - _APP_SMS_FROM - - _APP_GRAPHQL_MAX_BATCH_SIZE - - _APP_GRAPHQL_MAX_COMPLEXITY - - _APP_GRAPHQL_MAX_DEPTH - - _APP_VCS_GITHUB_APP_NAME - - _APP_VCS_GITHUB_PRIVATE_KEY - - _APP_VCS_GITHUB_APP_ID - - _APP_VCS_GITHUB_WEBHOOK_SECRET - - _APP_VCS_GITHUB_CLIENT_SECRET - - _APP_VCS_GITHUB_CLIENT_ID - - _APP_MIGRATIONS_FIREBASE_CLIENT_ID - - _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET - - _APP_ASSISTANT_OPENAI_API_KEY - - appwrite-console: - image: appwrite/console:5.0.12 - container_name: appwrite-console - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - labels: - - "traefik.enable=true" - - "traefik.constraint-label-stack=appwrite" - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_LOCALE - - _APP_CONSOLE_WHITELIST_ROOT - - _APP_CONSOLE_WHITELIST_EMAILS - - _APP_CONSOLE_SESSION_ALERTS - - _APP_CONSOLE_WHITELIST_IPS - - _APP_CONSOLE_HOSTNAMES - - _APP_SYSTEM_EMAIL_NAME - - _APP_SYSTEM_EMAIL_ADDRESS - - _APP_EMAIL_SECURITY - - _APP_SYSTEM_RESPONSE_FORMAT - - _APP_OPTIONS_ABUSE - - _APP_OPTIONS_ROUTER_PROTECTION - - _APP_OPTIONS_FORCE_HTTPS - - _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS - - _APP_OPENSSL_KEY_V1 - - _APP_DOMAIN - - _APP_DOMAIN_TARGET - - _APP_DOMAIN_FUNCTIONS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_SMTP_HOST - - _APP_SMTP_PORT - - _APP_SMTP_SECURE - - _APP_SMTP_USERNAME - - _APP_SMTP_PASSWORD - - _APP_USAGE_STATS - - _APP_STORAGE_LIMIT - - _APP_STORAGE_PREVIEW_LIMIT - - _APP_STORAGE_ANTIVIRUS - - _APP_STORAGE_ANTIVIRUS_HOST - - _APP_STORAGE_ANTIVIRUS_PORT - - _APP_STORAGE_DEVICE - - _APP_STORAGE_S3_ACCESS_KEY - - _APP_STORAGE_S3_SECRET - - _APP_STORAGE_S3_REGION - - _APP_STORAGE_S3_BUCKET - - _APP_STORAGE_DO_SPACES_ACCESS_KEY - - _APP_STORAGE_DO_SPACES_SECRET - - _APP_STORAGE_DO_SPACES_REGION - - _APP_STORAGE_DO_SPACES_BUCKET - - _APP_STORAGE_BACKBLAZE_ACCESS_KEY - - _APP_STORAGE_BACKBLAZE_SECRET - - _APP_STORAGE_BACKBLAZE_REGION - - _APP_STORAGE_BACKBLAZE_BUCKET - - _APP_STORAGE_LINODE_ACCESS_KEY - - _APP_STORAGE_LINODE_SECRET - - _APP_STORAGE_LINODE_REGION - - _APP_STORAGE_LINODE_BUCKET - - _APP_STORAGE_WASABI_ACCESS_KEY - - _APP_STORAGE_WASABI_SECRET - - _APP_STORAGE_WASABI_REGION - - _APP_STORAGE_WASABI_BUCKET - - appwrite-realtime: - image: appwrite/appwrite:1.6.0 - entrypoint: realtime - container_name: appwrite-realtime - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - mariadb - - redis - labels: - - "traefik.enable=true" - - "traefik.constraint-label-stack=appwrite" - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPTIONS_ABUSE - - _APP_OPTIONS_ROUTER_PROTECTION - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_USAGE_STATS - - _APP_LOGGING_CONFIG - - appwrite-worker-audits: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-audits - <<: *x-logging - container_name: appwrite-worker-audits - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_LOGGING_CONFIG - - appwrite-worker-webhooks: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-webhooks - <<: *x-logging - container_name: appwrite-worker-webhooks - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_EMAIL_SECURITY - - _APP_SYSTEM_SECURITY_EMAIL_ADDRESS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_LOGGING_CONFIG - - appwrite-worker-deletes: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-deletes - <<: *x-logging - container_name: appwrite-worker-deletes - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - volumes: - - appwrite-uploads:/storage/uploads:rw - - appwrite-cache:/storage/cache:rw - - appwrite-functions:/storage/functions:rw - - appwrite-builds:/storage/builds:rw - - appwrite-certificates:/storage/certificates:rw - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_STORAGE_DEVICE - - _APP_STORAGE_S3_ACCESS_KEY - - _APP_STORAGE_S3_SECRET - - _APP_STORAGE_S3_REGION - - _APP_STORAGE_S3_BUCKET - - _APP_STORAGE_DO_SPACES_ACCESS_KEY - - _APP_STORAGE_DO_SPACES_SECRET - - _APP_STORAGE_DO_SPACES_REGION - - _APP_STORAGE_DO_SPACES_BUCKET - - _APP_STORAGE_BACKBLAZE_ACCESS_KEY - - _APP_STORAGE_BACKBLAZE_SECRET - - _APP_STORAGE_BACKBLAZE_REGION - - _APP_STORAGE_BACKBLAZE_BUCKET - - _APP_STORAGE_LINODE_ACCESS_KEY - - _APP_STORAGE_LINODE_SECRET - - _APP_STORAGE_LINODE_REGION - - _APP_STORAGE_LINODE_BUCKET - - _APP_STORAGE_WASABI_ACCESS_KEY - - _APP_STORAGE_WASABI_SECRET - - _APP_STORAGE_WASABI_REGION - - _APP_STORAGE_WASABI_BUCKET - - _APP_LOGGING_CONFIG - - _APP_EXECUTOR_SECRET - - _APP_EXECUTOR_HOST - - _APP_MAINTENANCE_RETENTION_ABUSE - - _APP_MAINTENANCE_RETENTION_AUDIT - - _APP_MAINTENANCE_RETENTION_EXECUTION - - appwrite-worker-databases: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-databases - <<: *x-logging - container_name: appwrite-worker-databases - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_LOGGING_CONFIG - - appwrite-worker-builds: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-builds - <<: *x-logging - container_name: appwrite-worker-builds - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - volumes: - - appwrite-functions:/storage/functions:rw - - appwrite-builds:/storage/builds:rw - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_EXECUTOR_SECRET - - _APP_EXECUTOR_HOST - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_LOGGING_CONFIG - - _APP_VCS_GITHUB_APP_NAME - - _APP_VCS_GITHUB_PRIVATE_KEY - - _APP_VCS_GITHUB_APP_ID - - _APP_FUNCTIONS_TIMEOUT - - _APP_FUNCTIONS_BUILD_TIMEOUT - - _APP_FUNCTIONS_CPUS - - _APP_FUNCTIONS_MEMORY - - _APP_FUNCTIONS_SIZE_LIMIT - - _APP_OPTIONS_FORCE_HTTPS - - _APP_OPTIONS_FUNCTIONS_FORCE_HTTPS - - _APP_DOMAIN - - _APP_STORAGE_DEVICE - - _APP_STORAGE_S3_ACCESS_KEY - - _APP_STORAGE_S3_SECRET - - _APP_STORAGE_S3_REGION - - _APP_STORAGE_S3_BUCKET - - _APP_STORAGE_DO_SPACES_ACCESS_KEY - - _APP_STORAGE_DO_SPACES_SECRET - - _APP_STORAGE_DO_SPACES_REGION - - _APP_STORAGE_DO_SPACES_BUCKET - - _APP_STORAGE_BACKBLAZE_ACCESS_KEY - - _APP_STORAGE_BACKBLAZE_SECRET - - _APP_STORAGE_BACKBLAZE_REGION - - _APP_STORAGE_BACKBLAZE_BUCKET - - _APP_STORAGE_LINODE_ACCESS_KEY - - _APP_STORAGE_LINODE_SECRET - - _APP_STORAGE_LINODE_REGION - - _APP_STORAGE_LINODE_BUCKET - - _APP_STORAGE_WASABI_ACCESS_KEY - - _APP_STORAGE_WASABI_SECRET - - _APP_STORAGE_WASABI_REGION - - _APP_STORAGE_WASABI_BUCKET - - appwrite-worker-certificates: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-certificates - <<: *x-logging - container_name: appwrite-worker-certificates - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - volumes: - - appwrite-config:/storage/config:rw - - appwrite-certificates:/storage/certificates:rw - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DOMAIN - - _APP_DOMAIN_TARGET - - _APP_DOMAIN_FUNCTIONS - - _APP_EMAIL_CERTIFICATES - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_LOGGING_CONFIG - - appwrite-worker-functions: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-functions - <<: *x-logging - container_name: appwrite-worker-functions - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - - openruntimes-executor - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DOMAIN - - _APP_OPTIONS_FORCE_HTTPS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_FUNCTIONS_TIMEOUT - - _APP_FUNCTIONS_BUILD_TIMEOUT - - _APP_FUNCTIONS_CPUS - - _APP_FUNCTIONS_MEMORY - - _APP_EXECUTOR_SECRET - - _APP_EXECUTOR_HOST - - _APP_USAGE_STATS - - _APP_DOCKER_HUB_USERNAME - - _APP_DOCKER_HUB_PASSWORD - - _APP_LOGGING_CONFIG - - appwrite-worker-mails: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-mails - <<: *x-logging - container_name: appwrite-worker-mails - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_SYSTEM_EMAIL_NAME - - _APP_SYSTEM_EMAIL_ADDRESS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_SMTP_HOST - - _APP_SMTP_PORT - - _APP_SMTP_SECURE - - _APP_SMTP_USERNAME - - _APP_SMTP_PASSWORD - - _APP_LOGGING_CONFIG - - appwrite-worker-messaging: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-messaging - container_name: appwrite-worker-messaging - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - volumes: - - appwrite-uploads:/storage/uploads:rw - depends_on: - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_LOGGING_CONFIG - - _APP_SMS_FROM - - _APP_SMS_PROVIDER - - _APP_STORAGE_DEVICE - - _APP_STORAGE_S3_ACCESS_KEY - - _APP_STORAGE_S3_SECRET - - _APP_STORAGE_S3_REGION - - _APP_STORAGE_S3_BUCKET - - _APP_STORAGE_DO_SPACES_ACCESS_KEY - - _APP_STORAGE_DO_SPACES_SECRET - - _APP_STORAGE_DO_SPACES_REGION - - _APP_STORAGE_DO_SPACES_BUCKET - - _APP_STORAGE_BACKBLAZE_ACCESS_KEY - - _APP_STORAGE_BACKBLAZE_SECRET - - _APP_STORAGE_BACKBLAZE_REGION - - _APP_STORAGE_BACKBLAZE_BUCKET - - _APP_STORAGE_LINODE_ACCESS_KEY - - _APP_STORAGE_LINODE_SECRET - - _APP_STORAGE_LINODE_REGION - - _APP_STORAGE_LINODE_BUCKET - - _APP_STORAGE_WASABI_ACCESS_KEY - - _APP_STORAGE_WASABI_SECRET - - _APP_STORAGE_WASABI_REGION - - _APP_STORAGE_WASABI_BUCKET - - appwrite-worker-migrations: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-migrations - <<: *x-logging - container_name: appwrite-worker-migrations - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DOMAIN - - _APP_DOMAIN_TARGET - - _APP_EMAIL_SECURITY - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_LOGGING_CONFIG - - _APP_MIGRATIONS_FIREBASE_CLIENT_ID - - _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET - - appwrite-task-maintenance: - image: appwrite/appwrite:1.6.0 - entrypoint: maintenance - <<: *x-logging - container_name: appwrite-task-maintenance - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_DOMAIN - - _APP_DOMAIN_TARGET - - _APP_DOMAIN_FUNCTIONS - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_MAINTENANCE_INTERVAL - - _APP_MAINTENANCE_RETENTION_EXECUTION - - _APP_MAINTENANCE_RETENTION_CACHE - - _APP_MAINTENANCE_RETENTION_ABUSE - - _APP_MAINTENANCE_RETENTION_AUDIT - - _APP_MAINTENANCE_RETENTION_USAGE_HOURLY - - _APP_MAINTENANCE_RETENTION_SCHEDULES - - appwrite-worker-usage: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-usage - container_name: appwrite-worker-usage - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_USAGE_STATS - - _APP_LOGGING_CONFIG - - _APP_USAGE_AGGREGATION_INTERVAL - - appwrite-worker-usage-dump: - image: appwrite/appwrite:1.6.0 - entrypoint: worker-usage-dump - container_name: appwrite-worker-usage-dump - <<: *x-logging - networks: - - dokploy-network - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_USAGE_STATS - - _APP_LOGGING_CONFIG - - _APP_USAGE_AGGREGATION_INTERVAL - - appwrite-task-scheduler-functions: - image: appwrite/appwrite:1.6.0 - entrypoint: schedule-functions - container_name: appwrite-task-scheduler-functions - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - mariadb - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - appwrite-task-scheduler-executions: - image: appwrite/appwrite:1.6.0 - entrypoint: schedule-executions - container_name: appwrite-task-scheduler-executions - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - mariadb - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - appwrite-task-scheduler-messages: - image: appwrite/appwrite:1.6.0 - entrypoint: schedule-messages - container_name: appwrite-task-scheduler-messages - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - depends_on: - - mariadb - - redis - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - appwrite-assistant: - image: appwrite/assistant:0.4.0 - container_name: appwrite-assistant - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - environment: - - _APP_ASSISTANT_OPENAI_API_KEY - - openruntimes-executor: - container_name: openruntimes-executor - hostname: exc1 - <<: *x-logging - restart: unless-stopped - stop_signal: SIGINT - image: openruntimes/executor:0.6.11 - networks: - - dokploy-network - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - appwrite-builds:/storage/builds:rw - - appwrite-functions:/storage/functions:rw - - /tmp:/tmp:rw - environment: - - OPR_EXECUTOR_INACTIVE_TRESHOLD=$_APP_FUNCTIONS_INACTIVE_THRESHOLD - - OPR_EXECUTOR_MAINTENANCE_INTERVAL=$_APP_FUNCTIONS_MAINTENANCE_INTERVAL - - OPR_EXECUTOR_NETWORK=$_APP_FUNCTIONS_RUNTIMES_NETWORK - - OPR_EXECUTOR_DOCKER_HUB_USERNAME=$_APP_DOCKER_HUB_USERNAME - - OPR_EXECUTOR_DOCKER_HUB_PASSWORD=$_APP_DOCKER_HUB_PASSWORD - - OPR_EXECUTOR_ENV=$_APP_ENV - - OPR_EXECUTOR_RUNTIMES=$_APP_FUNCTIONS_RUNTIMES - - OPR_EXECUTOR_SECRET=$_APP_EXECUTOR_SECRET - - OPR_EXECUTOR_LOGGING_CONFIG=$_APP_LOGGING_CONFIG - - OPR_EXECUTOR_STORAGE_DEVICE=$_APP_STORAGE_DEVICE - - OPR_EXECUTOR_STORAGE_S3_ACCESS_KEY=$_APP_STORAGE_S3_ACCESS_KEY - - OPR_EXECUTOR_STORAGE_S3_SECRET=$_APP_STORAGE_S3_SECRET - - OPR_EXECUTOR_STORAGE_S3_REGION=$_APP_STORAGE_S3_REGION - - OPR_EXECUTOR_STORAGE_S3_BUCKET=$_APP_STORAGE_S3_BUCKET - - OPR_EXECUTOR_STORAGE_DO_SPACES_ACCESS_KEY=$_APP_STORAGE_DO_SPACES_ACCESS_KEY - - OPR_EXECUTOR_STORAGE_DO_SPACES_SECRET=$_APP_STORAGE_DO_SPACES_SECRET - - OPR_EXECUTOR_STORAGE_DO_SPACES_REGION=$_APP_STORAGE_DO_SPACES_REGION - - OPR_EXECUTOR_STORAGE_DO_SPACES_BUCKET=$_APP_STORAGE_DO_SPACES_BUCKET - - OPR_EXECUTOR_STORAGE_BACKBLAZE_ACCESS_KEY=$_APP_STORAGE_BACKBLAZE_ACCESS_KEY - - OPR_EXECUTOR_STORAGE_BACKBLAZE_SECRET=$_APP_STORAGE_BACKBLAZE_SECRET - - OPR_EXECUTOR_STORAGE_BACKBLAZE_REGION=$_APP_STORAGE_BACKBLAZE_REGION - - OPR_EXECUTOR_STORAGE_BACKBLAZE_BUCKET=$_APP_STORAGE_BACKBLAZE_BUCKET - - OPR_EXECUTOR_STORAGE_LINODE_ACCESS_KEY=$_APP_STORAGE_LINODE_ACCESS_KEY - - OPR_EXECUTOR_STORAGE_LINODE_SECRET=$_APP_STORAGE_LINODE_SECRET - - OPR_EXECUTOR_STORAGE_LINODE_REGION=$_APP_STORAGE_LINODE_REGION - - OPR_EXECUTOR_STORAGE_LINODE_BUCKET=$_APP_STORAGE_LINODE_BUCKET - - OPR_EXECUTOR_STORAGE_WASABI_ACCESS_KEY=$_APP_STORAGE_WASABI_ACCESS_KEY - - OPR_EXECUTOR_STORAGE_WASABI_SECRET=$_APP_STORAGE_WASABI_SECRET - - OPR_EXECUTOR_STORAGE_WASABI_REGION=$_APP_STORAGE_WASABI_REGION - - OPR_EXECUTOR_STORAGE_WASABI_BUCKET=$_APP_STORAGE_WASABI_BUCKET - - mariadb: - image: mariadb:10.11 - container_name: appwrite-mariadb - <<: *x-logging - restart: unless-stopped - networks: - - dokploy-network - volumes: - - appwrite-mariadb:/var/lib/mysql:rw - environment: - - MYSQL_ROOT_PASSWORD=${_APP_DB_ROOT_PASS} - - MYSQL_DATABASE=${_APP_DB_SCHEMA} - - MYSQL_USER=${_APP_DB_USER} - - MYSQL_PASSWORD=${_APP_DB_PASS} - - MARIADB_AUTO_UPGRADE=1 - command: "mysqld --innodb-flush-method=fsync" - - redis: - image: redis:7.2.4-alpine - container_name: appwrite-redis - <<: *x-logging - restart: unless-stopped - command: > - redis-server - --maxmemory 512mb - --maxmemory-policy allkeys-lru - --maxmemory-samples 5 - networks: - - dokploy-network - volumes: - - appwrite-redis:/data:rw - -# Uncomment and configure if ClamAV is needed -# clamav: -# image: appwrite/clamav:1.2.0 -# container_name: appwrite-clamav -# restart: unless-stopped -# networks: -# - dokploy-network -# volumes: -# - appwrite-uploads:/storage/uploads - -volumes: - appwrite-mariadb: - appwrite-redis: - appwrite-cache: - appwrite-uploads: - appwrite-certificates: - appwrite-functions: - appwrite-builds: - appwrite-config: - -networks: - dokploy-network: - external: true diff --git a/apps/dokploy/templates/appwrite/index.ts b/apps/dokploy/templates/appwrite/index.ts deleted file mode 100644 index 4e671324f..000000000 --- a/apps/dokploy/templates/appwrite/index.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { host: mainDomain, port: 80, serviceName: "appwrite", path: "/" }, - { - host: mainDomain, - port: 80, - serviceName: "appwrite-console", - path: "/console", - }, - { - host: mainDomain, - port: 80, - serviceName: "appwrite-realtime", - path: "/v1/realtime", - }, - ]; - - const envs = [ - "_APP_ENV=production", - "_APP_LOCALE=en", - "_APP_OPTIONS_ABUSE=enabled", - "_APP_OPTIONS_FORCE_HTTPS=disabled", - "_APP_OPTIONS_FUNCTIONS_FORCE_HTTPS=disabled", - "_APP_OPTIONS_ROUTER_PROTECTION=disabled", - "_APP_OPENSSL_KEY_V1=your-secret-key", - `_APP_DOMAIN=${mainDomain}`, - `_APP_DOMAIN_FUNCTIONS=${mainDomain}`, - `_APP_DOMAIN_TARGET=${mainDomain}`, - "_APP_CONSOLE_WHITELIST_ROOT=enabled", - "_APP_CONSOLE_WHITELIST_EMAILS=", - "_APP_CONSOLE_WHITELIST_IPS=", - "_APP_CONSOLE_HOSTNAMES=", - "_APP_SYSTEM_EMAIL_NAME=Appwrite", - "_APP_SYSTEM_EMAIL_ADDRESS=noreply@appwrite.io", - "_APP_SYSTEM_TEAM_EMAIL=team@appwrite.io", - "_APP_SYSTEM_RESPONSE_FORMAT=", - "_APP_SYSTEM_SECURITY_EMAIL_ADDRESS=certs@appwrite.io", - "_APP_EMAIL_SECURITY=", - "_APP_EMAIL_CERTIFICATES=", - "_APP_USAGE_STATS=enabled", - "_APP_LOGGING_PROVIDER=", - "_APP_LOGGING_CONFIG=", - "_APP_USAGE_AGGREGATION_INTERVAL=30", - "_APP_USAGE_TIMESERIES_INTERVAL=30", - "_APP_USAGE_DATABASE_INTERVAL=900", - "_APP_WORKER_PER_CORE=6", - "_APP_CONSOLE_SESSION_ALERTS=disabled", - "_APP_REDIS_HOST=redis", - "_APP_REDIS_PORT=6379", - "_APP_REDIS_USER=", - "_APP_REDIS_PASS=", - "_APP_DB_HOST=mariadb", - "_APP_DB_PORT=3306", - "_APP_DB_SCHEMA=appwrite", - "_APP_DB_USER=user", - "_APP_DB_PASS=password", - "_APP_DB_ROOT_PASS=rootsecretpassword", - "_APP_INFLUXDB_HOST=influxdb", - "_APP_INFLUXDB_PORT=8086", - "_APP_STATSD_HOST=telegraf", - "_APP_STATSD_PORT=8125", - "_APP_SMTP_HOST=", - "_APP_SMTP_PORT=", - "_APP_SMTP_SECURE=", - "_APP_SMTP_USERNAME=", - "_APP_SMTP_PASSWORD=", - "_APP_SMS_PROVIDER=", - "_APP_SMS_FROM=", - "_APP_STORAGE_LIMIT=30000000", - "_APP_STORAGE_PREVIEW_LIMIT=20000000", - "_APP_STORAGE_ANTIVIRUS=disabled", - "_APP_STORAGE_ANTIVIRUS_HOST=clamav", - "_APP_STORAGE_ANTIVIRUS_PORT=3310", - "_APP_STORAGE_DEVICE=local", - "_APP_STORAGE_S3_ACCESS_KEY=", - "_APP_STORAGE_S3_SECRET=", - "_APP_STORAGE_S3_REGION=us-east-1", - "_APP_STORAGE_S3_BUCKET=", - "_APP_STORAGE_DO_SPACES_ACCESS_KEY=", - "_APP_STORAGE_DO_SPACES_SECRET=", - "_APP_STORAGE_DO_SPACES_REGION=us-east-1", - "_APP_STORAGE_DO_SPACES_BUCKET=", - "_APP_STORAGE_BACKBLAZE_ACCESS_KEY=", - "_APP_STORAGE_BACKBLAZE_SECRET=", - "_APP_STORAGE_BACKBLAZE_REGION=us-west-004", - "_APP_STORAGE_BACKBLAZE_BUCKET=", - "_APP_STORAGE_LINODE_ACCESS_KEY=", - "_APP_STORAGE_LINODE_SECRET=", - "_APP_STORAGE_LINODE_REGION=eu-central-1", - "_APP_STORAGE_LINODE_BUCKET=", - "_APP_STORAGE_WASABI_ACCESS_KEY=", - "_APP_STORAGE_WASABI_SECRET=", - "_APP_STORAGE_WASABI_REGION=eu-central-1", - "_APP_STORAGE_WASABI_BUCKET=", - "_APP_FUNCTIONS_SIZE_LIMIT=30000000", - "_APP_FUNCTIONS_BUILD_SIZE_LIMIT=2000000000", - "_APP_FUNCTIONS_TIMEOUT=900", - "_APP_FUNCTIONS_BUILD_TIMEOUT=900", - "_APP_FUNCTIONS_CONTAINERS=10", - "_APP_FUNCTIONS_CPUS=0", - "_APP_FUNCTIONS_MEMORY=0", - "_APP_FUNCTIONS_MEMORY_SWAP=0", - "_APP_FUNCTIONS_RUNTIMES=node-16.0,php-8.0,python-3.9,ruby-3.0", - "_APP_EXECUTOR_SECRET=your-secret-key", - "_APP_EXECUTOR_HOST=http://exc1/v1", - "_APP_EXECUTOR_RUNTIME_NETWORK=appwrite_runtimes", - "_APP_FUNCTIONS_ENVS=node-16.0,php-7.4,python-3.9,ruby-3.0", - "_APP_FUNCTIONS_INACTIVE_THRESHOLD=60", - "DOCKERHUB_PULL_USERNAME=", - "DOCKERHUB_PULL_PASSWORD=", - "DOCKERHUB_PULL_EMAIL=", - "OPEN_RUNTIMES_NETWORK=appwrite_runtimes", - "_APP_FUNCTIONS_RUNTIMES_NETWORK=runtimes", - "_APP_DOCKER_HUB_USERNAME=", - "_APP_DOCKER_HUB_PASSWORD=", - "_APP_FUNCTIONS_MAINTENANCE_INTERVAL=3600", - "_APP_VCS_GITHUB_APP_NAME=", - "_APP_VCS_GITHUB_PRIVATE_KEY=", - "_APP_VCS_GITHUB_APP_ID=", - "_APP_VCS_GITHUB_CLIENT_ID=", - "_APP_VCS_GITHUB_CLIENT_SECRET=", - "_APP_VCS_GITHUB_WEBHOOK_SECRET=", - "_APP_MAINTENANCE_INTERVAL=86400", - "_APP_MAINTENANCE_DELAY=0", - "_APP_MAINTENANCE_RETENTION_CACHE=2592000", - "_APP_MAINTENANCE_RETENTION_EXECUTION=1209600", - "_APP_MAINTENANCE_RETENTION_AUDIT=1209600", - "_APP_MAINTENANCE_RETENTION_ABUSE=86400", - "_APP_MAINTENANCE_RETENTION_USAGE_HOURLY=8640000", - "_APP_MAINTENANCE_RETENTION_SCHEDULES=86400", - "_APP_GRAPHQL_MAX_BATCH_SIZE=10", - "_APP_GRAPHQL_MAX_COMPLEXITY=250", - "_APP_GRAPHQL_MAX_DEPTH=3", - "_APP_MIGRATIONS_FIREBASE_CLIENT_ID=", - "_APP_MIGRATIONS_FIREBASE_CLIENT_SECRET=", - "_APP_ASSISTANT_OPENAI_API_KEY=", - ]; - - return { - domains, - envs, - mounts: [], - }; -} diff --git a/apps/dokploy/templates/aptabase/docker-compose.yml b/apps/dokploy/templates/aptabase/docker-compose.yml index dfde1caef..934fd1eea 100644 --- a/apps/dokploy/templates/aptabase/docker-compose.yml +++ b/apps/dokploy/templates/aptabase/docker-compose.yml @@ -7,7 +7,8 @@ services: environment: POSTGRES_USER: aptabase POSTGRES_PASSWORD: sTr0NGp4ssw0rd - + networks: + - dokploy-network healthcheck: test: ["CMD-SHELL", "pg_isready -U aptabase"] interval: 10s @@ -26,7 +27,8 @@ services: nofile: soft: 262144 hard: 262144 - + networks: + - dokploy-network healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8123 || exit 1"] interval: 10s diff --git a/apps/dokploy/templates/blender/index.ts b/apps/dokploy/templates/blender/index.ts index 79508bed5..84e527554 100644 --- a/apps/dokploy/templates/blender/index.ts +++ b/apps/dokploy/templates/blender/index.ts @@ -7,7 +7,7 @@ import { } from "../utils"; export function generate(schema: Schema): Template { - const _mainServiceHash = generateHash(schema.projectName); + const mainServiceHash = generateHash(schema.projectName); const mainDomain = generateRandomDomain(schema); const domains: DomainSchema[] = [ diff --git a/apps/dokploy/templates/budibase/docker-compose.yml b/apps/dokploy/templates/budibase/docker-compose.yml index d1d6744af..3f82de3e9 100644 --- a/apps/dokploy/templates/budibase/docker-compose.yml +++ b/apps/dokploy/templates/budibase/docker-compose.yml @@ -2,7 +2,8 @@ services: apps: image: budibase.docker.scarf.sh/budibase/apps:3.2.25 restart: unless-stopped - + networks: + - dokploy-network environment: SELF_HOSTED: 1 LOG_LEVEL: info @@ -42,7 +43,8 @@ services: worker: image: budibase.docker.scarf.sh/budibase/worker:3.2.25 restart: unless-stopped - + networks: + - dokploy-network environment: SELF_HOSTED: 1 LOG_LEVEL: info @@ -81,7 +83,8 @@ services: minio: image: minio/minio:RELEASE.2024-11-07T00-52-20Z restart: unless-stopped - + networks: + - dokploy-network volumes: - 'minio_data:/data' environment: @@ -101,7 +104,8 @@ services: proxy: image: budibase/proxy:3.2.25 restart: unless-stopped - + networks: + - dokploy-network environment: PROXY_RATE_LIMIT_WEBHOOKS_PER_SECOND: 10 PROXY_RATE_LIMIT_API_PER_SECOND: 20 @@ -133,7 +137,8 @@ services: couchdb: image: budibase/couchdb:v3.3.3 restart: unless-stopped - + networks: + - dokploy-network environment: COUCHDB_USER: budibase COUCHDB_PASSWORD: ${BB_COUCHDB_PASSWORD} @@ -152,7 +157,8 @@ services: - 'couchdb3_data:/opt/couchdb/data' redis: image: redis:7.2-alpine - + networks: + - dokploy-network restart: unless-stopped command: 'redis-server --requirepass "${BB_REDIS_PASSWORD}"' volumes: @@ -170,7 +176,8 @@ services: start_period: 10s watchtower: restart: unless-stopped - + networks: + - dokploy-network image: containrrr/watchtower:1.7.1 volumes: - '/var/run/docker.sock:/var/run/docker.sock' diff --git a/apps/dokploy/templates/calcom/docker-compose.yml b/apps/dokploy/templates/calcom/docker-compose.yml index a309a1da4..7a1d8c92a 100644 --- a/apps/dokploy/templates/calcom/docker-compose.yml +++ b/apps/dokploy/templates/calcom/docker-compose.yml @@ -1,7 +1,8 @@ services: postgres: image: postgres:16-alpine - + networks: + - dokploy-network volumes: - calcom-data:/var/lib/postgresql/data environment: diff --git a/apps/dokploy/templates/chatwoot/docker-compose.yml b/apps/dokploy/templates/chatwoot/docker-compose.yml index b24ca0b56..8b762e36e 100644 --- a/apps/dokploy/templates/chatwoot/docker-compose.yml +++ b/apps/dokploy/templates/chatwoot/docker-compose.yml @@ -51,7 +51,8 @@ services: restart: always volumes: - chatwoot-postgres-data:/var/lib/postgresql/data - + networks: + - dokploy-network environment: - POSTGRES_DB=${POSTGRES_DATABASE} - POSTGRES_USER=${POSTGRES_USERNAME} @@ -62,7 +63,8 @@ services: restart: always volumes: - chatwoot-redis-data:/data - + networks: + - dokploy-network networks: dokploy-network: diff --git a/apps/dokploy/templates/checkmate/docker-compose.yml b/apps/dokploy/templates/checkmate/docker-compose.yml index 7a5fc8984..dc83a28f6 100644 --- a/apps/dokploy/templates/checkmate/docker-compose.yml +++ b/apps/dokploy/templates/checkmate/docker-compose.yml @@ -9,7 +9,8 @@ services: - 443 depends_on: - server - + networks: + - dokploy-network server: image: bluewaveuptime/uptime_server:latest restart: always @@ -21,7 +22,8 @@ services: environment: - DB_CONNECTION_STRING=mongodb://mongodb:27017/uptime_db - REDIS_HOST=redis - + networks: + - dokploy-network # volumes: # - /var/run/docker.sock:/var/run/docker.sock:ro redis: @@ -31,7 +33,8 @@ services: - 6379 volumes: - ../files/redis/data:/data - + networks: + - dokploy-network mongodb: image: bluewaveuptime/uptime_database_mongo:latest restart: always @@ -40,3 +43,5 @@ services: command: ["mongod", "--quiet"] ports: - 27017 + networks: + - dokploy-network \ No newline at end of file diff --git a/apps/dokploy/templates/cloudflared/index.ts b/apps/dokploy/templates/cloudflared/index.ts index 93ea091c6..661fa31d0 100644 --- a/apps/dokploy/templates/cloudflared/index.ts +++ b/apps/dokploy/templates/cloudflared/index.ts @@ -1,6 +1,6 @@ import type { Schema, Template } from "../utils"; -export function generate(_schema: Schema): Template { +export function generate(schema: Schema): Template { const envs = [`CLOUDFLARE_TUNNEL_TOKEN=""`]; return { diff --git a/apps/dokploy/templates/coder/docker-compose.yml b/apps/dokploy/templates/coder/docker-compose.yml index 875c7ae81..27bb14bd2 100644 --- a/apps/dokploy/templates/coder/docker-compose.yml +++ b/apps/dokploy/templates/coder/docker-compose.yml @@ -1,7 +1,8 @@ services: coder: image: ghcr.io/coder/coder:v2.15.3 - + networks: + - dokploy-network volumes: - /var/run/docker.sock:/var/run/docker.sock group_add: @@ -16,7 +17,8 @@ services: db: image: postgres:17 - + networks: + - dokploy-network environment: - POSTGRES_PASSWORD - POSTGRES_USER diff --git a/apps/dokploy/templates/convex/docker-compose.yml b/apps/dokploy/templates/convex/docker-compose.yml deleted file mode 100644 index 12e2b5ada..000000000 --- a/apps/dokploy/templates/convex/docker-compose.yml +++ /dev/null @@ -1,37 +0,0 @@ -services: - backend: - image: ghcr.io/get-convex/convex-backend:6c974d219776b753cd23d26f4a296629ff7c2cad - ports: - - "${PORT:-3210}:3210" - - "${SITE_PROXY_PORT:-3211}:3211" - volumes: - - data:/convex/data - environment: - - INSTANCE_NAME=${INSTANCE_NAME:-} - - INSTANCE_SECRET=${INSTANCE_SECRET:-} - - CONVEX_RELEASE_VERSION_DEV=${CONVEX_RELEASE_VERSION_DEV:-} - - ACTIONS_USER_TIMEOUT_SECS=${ACTIONS_USER_TIMEOUT_SECS:-} - - CONVEX_CLOUD_ORIGIN=${CONVEX_CLOUD_ORIGIN:-http://127.0.0.1:3210} - - CONVEX_SITE_ORIGIN=${CONVEX_SITE_ORIGIN:-http://127.0.0.1:3211} - - DATABASE_URL=${DATABASE_URL:-} - - DISABLE_BEACON=${DISABLE_BEACON:-} - - REDACT_LOGS_TO_CLIENT=${REDACT_LOGS_TO_CLIENT:-} - - RUST_LOG=${RUST_LOG:-info} - - RUST_BACKTRACE=${RUST_BACKTRACE:-} - healthcheck: - test: curl -f http://localhost:3210/version - interval: 5s - start_period: 5s - - dashboard: - image: ghcr.io/get-convex/convex-dashboard:4499dd4fd7f2148687a7774599c613d052950f46 - ports: - - "${DASHBOARD_PORT:-6791}:6791" - environment: - - NEXT_PUBLIC_DEPLOYMENT_URL=${NEXT_PUBLIC_DEPLOYMENT_URL:-http://127.0.0.1:3210} - depends_on: - backend: - condition: service_healthy - -volumes: - data: diff --git a/apps/dokploy/templates/convex/index.ts b/apps/dokploy/templates/convex/index.ts deleted file mode 100644 index badfe7320..000000000 --- a/apps/dokploy/templates/convex/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const dashboardDomain = generateRandomDomain(schema); - const backendDomain = generateRandomDomain(schema); - const actionsDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: dashboardDomain, - port: 6791, - serviceName: "dashboard", - }, - { - host: backendDomain, - port: 3210, - serviceName: "backend", - }, - { - host: actionsDomain, - port: 3211, - serviceName: "backend", - }, - ]; - - const envs = [ - `NEXT_PUBLIC_DEPLOYMENT_URL=http://${backendDomain}`, - `CONVEX_CLOUD_ORIGIN=http://${backendDomain}`, - `CONVEX_SITE_ORIGIN=http://${actionsDomain}`, - ]; - - return { envs, domains }; -} diff --git a/apps/dokploy/templates/directus/docker-compose.yml b/apps/dokploy/templates/directus/docker-compose.yml index 52e64baf6..20f1b45d0 100644 --- a/apps/dokploy/templates/directus/docker-compose.yml +++ b/apps/dokploy/templates/directus/docker-compose.yml @@ -3,7 +3,8 @@ services: image: postgis/postgis:13-master volumes: - directus_database:/var/lib/postgresql/data - + networks: + - dokploy-network environment: POSTGRES_USER: "directus" POSTGRES_PASSWORD: ${DATABASE_PASSWORD} @@ -25,7 +26,8 @@ services: retries: 5 start_interval: 5s start_period: 30s - + networks: + - dokploy-network directus: image: directus/directus:11.0.2 diff --git a/apps/dokploy/templates/discord-tickets/docker-compose.yml b/apps/dokploy/templates/discord-tickets/docker-compose.yml index f797a77b0..e6e41288d 100644 --- a/apps/dokploy/templates/discord-tickets/docker-compose.yml +++ b/apps/dokploy/templates/discord-tickets/docker-compose.yml @@ -4,7 +4,8 @@ services: tickets-postgres: image: mysql:8 restart: unless-stopped - + networks: + - dokploy-network volumes: - tickets-mysql-data:/var/lib/mysql environment: @@ -24,7 +25,8 @@ services: tickets-postgres: condition: service_healthy restart: unless-stopped - + networks: + - dokploy-network volumes: - tickets-app-data:/home/container/user - /etc/timezone:/etc/timezone:ro diff --git a/apps/dokploy/templates/discourse/docker-compose.yml b/apps/dokploy/templates/discourse/docker-compose.yml index 2b938b855..ce6106be5 100644 --- a/apps/dokploy/templates/discourse/docker-compose.yml +++ b/apps/dokploy/templates/discourse/docker-compose.yml @@ -3,7 +3,8 @@ version: '3.7' services: discourse-db: image: docker.io/bitnami/postgresql:17 - + networks: + - dokploy-network volumes: - discourse-postgresql-data:/bitnami/postgresql environment: @@ -19,7 +20,8 @@ services: discourse-redis: image: docker.io/bitnami/redis:7.4 - + networks: + - dokploy-network volumes: - discourse-redis-data:/bitnami/redis environment: @@ -33,7 +35,8 @@ services: discourse-app: image: docker.io/bitnami/discourse:3.3.2 - + networks: + - dokploy-network volumes: - discourse-data:/bitnami/discourse depends_on: @@ -60,7 +63,8 @@ services: discourse-sidekiq: image: docker.io/bitnami/discourse:3.3.2 - + networks: + - dokploy-network volumes: - discourse-sidekiq-data:/bitnami/discourse depends_on: diff --git a/apps/dokploy/templates/docmost/docker-compose.yml b/apps/dokploy/templates/docmost/docker-compose.yml index b5995594b..a6ebbd4f4 100644 --- a/apps/dokploy/templates/docmost/docker-compose.yml +++ b/apps/dokploy/templates/docmost/docker-compose.yml @@ -12,7 +12,8 @@ services: - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public - REDIS_URL=redis://redis:6379 restart: unless-stopped - + networks: + - dokploy-network volumes: - docmost:/app/data/storage @@ -23,14 +24,16 @@ services: - POSTGRES_USER - POSTGRES_PASSWORD restart: unless-stopped - + networks: + - dokploy-network volumes: - db_docmost_data:/var/lib/postgresql/data redis: image: redis:7.2-alpine restart: unless-stopped - + networks: + - dokploy-network volumes: - redis_docmost_data:/data diff --git a/apps/dokploy/templates/documenso/docker-compose.yml b/apps/dokploy/templates/documenso/docker-compose.yml index 9b8e8ed87..562fe4987 100644 --- a/apps/dokploy/templates/documenso/docker-compose.yml +++ b/apps/dokploy/templates/documenso/docker-compose.yml @@ -2,7 +2,8 @@ version: "3.8" services: postgres: image: postgres:16 - + networks: + - dokploy-network volumes: - documenso-data:/var/lib/postgresql/data environment: diff --git a/apps/dokploy/templates/drawio/docker-compose.yml b/apps/dokploy/templates/drawio/docker-compose.yml index a7d7b578d..1712363f3 100644 --- a/apps/dokploy/templates/drawio/docker-compose.yml +++ b/apps/dokploy/templates/drawio/docker-compose.yml @@ -4,14 +4,16 @@ services: image: plantuml/plantuml-server ports: - "8080" - + networks: + - dokploy-network volumes: - fonts_volume:/usr/share/fonts/drawio image-export: image: jgraph/export-server ports: - "8000" - + networks: + - dokploy-network volumes: - fonts_volume:/usr/share/fonts/drawio environment: @@ -26,7 +28,8 @@ services: depends_on: - plantuml-server - image-export - + networks: + - dokploy-network environment: RAWIO_SELF_CONTAINED: 1 DRAWIO_USE_HTTP: 1 diff --git a/apps/dokploy/templates/drawio/index.ts b/apps/dokploy/templates/drawio/index.ts index 701283c8d..e3c57c5a5 100644 --- a/apps/dokploy/templates/drawio/index.ts +++ b/apps/dokploy/templates/drawio/index.ts @@ -8,7 +8,7 @@ import { export function generate(schema: Schema): Template { const mainDomain = generateRandomDomain(schema); - const _secretKeyBase = generateBase64(64); + const secretKeyBase = generateBase64(64); const domains: DomainSchema[] = [ { diff --git a/apps/dokploy/templates/erpnext/docker-compose.yml b/apps/dokploy/templates/erpnext/docker-compose.yml deleted file mode 100644 index 28cd8f6ab..000000000 --- a/apps/dokploy/templates/erpnext/docker-compose.yml +++ /dev/null @@ -1,354 +0,0 @@ -x-custom-image: &custom_image - image: ${IMAGE_NAME:-docker.io/frappe/erpnext}:${VERSION:-version-15} - pull_policy: ${PULL_POLICY:-always} - deploy: - restart_policy: - condition: always - -services: - backend: - <<: *custom_image - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - '0.0.0.0:8000' - interval: 2s - timeout: 10s - retries: 30 - - frontend: - <<: *custom_image - command: - - nginx-entrypoint.sh - depends_on: - backend: - condition: service_started - required: true - websocket: - condition: service_started - required: true - environment: - BACKEND: backend:8000 - FRAPPE_SITE_NAME_HEADER: ${FRAPPE_SITE_NAME_HEADER:-$$host} - SOCKETIO: websocket:9000 - UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1 - UPSTREAM_REAL_IP_HEADER: X-Forwarded-For - UPSTREAM_REAL_IP_RECURSIVE: "off" - volumes: - - sites:/home/frappe/frappe-bench/sites - - networks: - - bench-network - - healthcheck: - test: - - CMD - - wait-for-it - - '0.0.0.0:8080' - interval: 2s - timeout: 30s - retries: 30 - - queue-default: - <<: *custom_image - command: - - bench - - worker - - --queue - - default - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - depends_on: - configurator: - condition: service_completed_successfully - required: true - - queue-long: - <<: *custom_image - command: - - bench - - worker - - --queue - - long - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - depends_on: - configurator: - condition: service_completed_successfully - required: true - - queue-short: - <<: *custom_image - command: - - bench - - worker - - --queue - - short - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - depends_on: - configurator: - condition: service_completed_successfully - required: true - - scheduler: - <<: *custom_image - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - command: - - bench - - schedule - depends_on: - configurator: - condition: service_completed_successfully - required: true - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - websocket: - <<: *custom_image - healthcheck: - test: - - CMD - - wait-for-it - - '0.0.0.0:9000' - interval: 2s - timeout: 10s - retries: 30 - command: - - node - - /home/frappe/frappe-bench/apps/frappe/socketio.js - depends_on: - configurator: - condition: service_completed_successfully - required: true - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - configurator: - <<: *custom_image - deploy: - mode: replicated - replicas: ${CONFIGURE:-0} - restart_policy: - condition: none - entrypoint: ["bash", "-c"] - command: - - > - [[ $${REGENERATE_APPS_TXT} == "1" ]] && ls -1 apps > sites/apps.txt; - [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && exit 0; - bench set-config -g db_host $$DB_HOST; - bench set-config -gp db_port $$DB_PORT; - bench set-config -g redis_cache "redis://$$REDIS_CACHE"; - bench set-config -g redis_queue "redis://$$REDIS_QUEUE"; - bench set-config -g redis_socketio "redis://$$REDIS_QUEUE"; - bench set-config -gp socketio_port $$SOCKETIO_PORT; - environment: - DB_HOST: "${DB_HOST:-db}" - DB_PORT: "3306" - REDIS_CACHE: redis-cache:6379 - REDIS_QUEUE: redis-queue:6379 - SOCKETIO_PORT: "9000" - REGENERATE_APPS_TXT: "${REGENERATE_APPS_TXT:-0}" - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - create-site: - <<: *custom_image - deploy: - mode: replicated - replicas: ${CREATE_SITE:-0} - restart_policy: - condition: none - entrypoint: ["bash", "-c"] - command: - - > - wait-for-it -t 120 $$DB_HOST:$$DB_PORT; - wait-for-it -t 120 redis-cache:6379; - wait-for-it -t 120 redis-queue:6379; - export start=`date +%s`; - until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \ - [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \ - [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]]; - do - echo "Waiting for sites/common_site_config.json to be created"; - sleep 5; - if (( `date +%s`-start > 120 )); then - echo "could not find sites/common_site_config.json with required keys"; - exit 1 - fi - done; - echo "sites/common_site_config.json found"; - [[ -d "sites/${SITE_NAME}" ]] && echo "${SITE_NAME} already exists" && exit 0; - bench new-site --mariadb-user-host-login-scope='%' --admin-password=$${ADMIN_PASSWORD} --db-root-username=root --db-root-password=$${DB_ROOT_PASSWORD} $${INSTALL_APP_ARGS} $${SITE_NAME}; - volumes: - - sites:/home/frappe/frappe-bench/sites - environment: - SITE_NAME: ${SITE_NAME} - ADMIN_PASSWORD: ${ADMIN_PASSWORD} - DB_HOST: ${DB_HOST:-db} - DB_PORT: "${DB_PORT:-3306}" - DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - INSTALL_APP_ARGS: ${INSTALL_APP_ARGS} - networks: - - bench-network - - migration: - <<: *custom_image - deploy: - mode: replicated - replicas: ${MIGRATE:-0} - restart_policy: - condition: none - entrypoint: ["bash", "-c"] - command: - - > - curl -f http://${SITE_NAME}:8080/api/method/ping || echo "Site busy" && exit 0; - bench --site all set-config -p maintenance_mode 1; - bench --site all set-config -p pause_scheduler 1; - bench --site all migrate; - bench --site all set-config -p maintenance_mode 0; - bench --site all set-config -p pause_scheduler 0; - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - db: - image: mariadb:10.6 - deploy: - mode: replicated - replicas: ${ENABLE_DB:-0} - restart_policy: - condition: always - healthcheck: - test: mysqladmin ping -h localhost --password=${DB_ROOT_PASSWORD} - interval: 1s - retries: 20 - command: - - --character-set-server=utf8mb4 - - --collation-server=utf8mb4_unicode_ci - - --skip-character-set-client-handshake - - --skip-innodb-read-only-compressed - environment: - - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - volumes: - - db-data:/var/lib/mysql - networks: - - bench-network - - redis-cache: - deploy: - restart_policy: - condition: always - image: redis:6.2-alpine - volumes: - - redis-cache-data:/data - networks: - - bench-network - healthcheck: - test: - - CMD - - redis-cli - - ping - interval: 5s - timeout: 5s - retries: 3 - - redis-queue: - deploy: - restart_policy: - condition: always - image: redis:6.2-alpine - volumes: - - redis-queue-data:/data - networks: - - bench-network - healthcheck: - test: - - CMD - - redis-cli - - ping - interval: 5s - timeout: 5s - retries: 3 - - redis-socketio: - deploy: - restart_policy: - condition: always - image: redis:6.2-alpine - volumes: - - redis-socketio-data:/data - networks: - - bench-network - healthcheck: - test: - - CMD - - redis-cli - - ping - interval: 5s - timeout: 5s - retries: 3 - -volumes: - db-data: - redis-cache-data: - redis-queue-data: - redis-socketio-data: - sites: - driver_opts: - type: "${SITE_VOLUME_TYPE}" - o: "${SITE_VOLUME_OPTS}" - device: "${SITE_VOLUME_DEV}" - -networks: - bench-network: \ No newline at end of file diff --git a/apps/dokploy/templates/erpnext/index.ts b/apps/dokploy/templates/erpnext/index.ts deleted file mode 100644 index 5b7543b91..000000000 --- a/apps/dokploy/templates/erpnext/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const dbRootPassword = generatePassword(32); - const adminPassword = generatePassword(32); - const mainDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 8080, - serviceName: "frontend", - }, - ]; - - const envs = [ - `SITE_NAME=${mainDomain}`, - `ADMIN_PASSWORD=${adminPassword}`, - `DB_ROOT_PASSWORD=${dbRootPassword}`, - "MIGRATE=1", - "ENABLE_DB=1", - "DB_HOST=db", - "CREATE_SITE=1", - "CONFIGURE=1", - "REGENERATE_APPS_TXT=1", - "INSTALL_APP_ARGS=--install-app erpnext", - "IMAGE_NAME=docker.io/frappe/erpnext", - "VERSION=version-15", - "FRAPPE_SITE_NAME_HEADER=", - ]; - - return { envs, domains }; -} diff --git a/apps/dokploy/templates/evolutionapi/docker-compose.yml b/apps/dokploy/templates/evolutionapi/docker-compose.yml deleted file mode 100644 index d4803de1c..000000000 --- a/apps/dokploy/templates/evolutionapi/docker-compose.yml +++ /dev/null @@ -1,58 +0,0 @@ -services: - evolution-api: - image: atendai/evolution-api:v2.1.2 - restart: always - volumes: - - evolution-instances:/evolution/instances - - environment: - - SERVER_URL=${SERVER_URL} - - AUTHENTICATION_TYPE=${AUTHENTICATION_TYPE} - - AUTHENTICATION_API_KEY=${AUTHENTICATION_API_KEY} - - AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=${AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES} - - LANGUAGE=${LANGUAGE} - - CONFIG_SESSION_PHONE_CLIENT=${CONFIG_SESSION_PHONE_CLIENT} - - CONFIG_SESSION_PHONE_NAME=${CONFIG_SESSION_PHONE_NAME} - - TELEMETRY=${TELEMETRY} - - TELEMETRY_URL=${TELEMETRY_URL} - - DATABASE_ENABLED=${DATABASE_ENABLED} - - DATABASE_PROVIDER=${DATABASE_PROVIDER} - - DATABASE_CONNECTION_URI=${DATABASE_CONNECTION_URI} - - DATABASE_SAVE_DATA_INSTANCE=${DATABASE_SAVE_DATA_INSTANCE} - - DATABASE_SAVE_DATA_NEW_MESSAGE=${DATABASE_SAVE_DATA_NEW_MESSAGE} - - DATABASE_SAVE_MESSAGE_UPDATE=${DATABASE_SAVE_MESSAGE_UPDATE} - - DATABASE_SAVE_DATA_CONTACTS=${DATABASE_SAVE_DATA_CONTACTS} - - DATABASE_SAVE_DATA_CHATS=${DATABASE_SAVE_DATA_CHATS} - - DATABASE_SAVE_DATA_LABELS=${DATABASE_SAVE_DATA_LABELS} - - DATABASE_SAVE_DATA_HISTORIC=${DATABASE_SAVE_DATA_HISTORIC} - - CACHE_REDIS_ENABLED=${CACHE_REDIS_ENABLED} - - CACHE_REDIS_URI=${CACHE_REDIS_URI} - - CACHE_REDIS_PREFIX_KEY=${CACHE_REDIS_PREFIX_KEY} - - CACHE_REDIS_SAVE_INSTANCES=${CACHE_REDIS_SAVE_INSTANCES} - - evolution-postgres: - image: postgres:16-alpine - restart: always - volumes: - - evolution-postgres-data:/var/lib/postgresql/data - - environment: - - POSTGRES_DB=${POSTGRES_DATABASE} - - POSTGRES_USER=${POSTGRES_USERNAME} - - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - - evolution-redis: - image: redis:alpine - restart: always - volumes: - - evolution-redis-data:/data - - -networks: - dokploy-network: - external: true - -volumes: - evolution-instances: - evolution-postgres-data: - evolution-redis-data: \ No newline at end of file diff --git a/apps/dokploy/templates/evolutionapi/index.ts b/apps/dokploy/templates/evolutionapi/index.ts deleted file mode 100644 index 6ca7a3b60..000000000 --- a/apps/dokploy/templates/evolutionapi/index.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateBase64, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const apiKey = generateBase64(64); - const postgresPassword = generatePassword(); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 8080, - serviceName: "evolution-api", - }, - ]; - - const envs = [ - `SERVER_URL=https://${mainDomain}`, - "AUTHENTICATION_TYPE=apikey", - `AUTHENTICATION_API_KEY=${apiKey}`, - "AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true", - - "LANGUAGE=en", - "CONFIG_SESSION_PHONE_CLIENT=Evolution API", - "CONFIG_SESSION_PHONE_NAME=Chrome", - "TELEMETRY=false", - "TELEMETRY_URL=", - - "POSTGRES_DATABASE=evolution", - "POSTGRES_USERNAME=postgresql", - `POSTGRES_PASSWORD=${postgresPassword}`, - "DATABASE_ENABLED=true", - "DATABASE_PROVIDER=postgresql", - `DATABASE_CONNECTION_URI=postgres://postgresql:${postgresPassword}@evolution-postgres:5432/evolution`, - "DATABASE_SAVE_DATA_INSTANCE=true", - "DATABASE_SAVE_DATA_NEW_MESSAGE=true", - "DATABASE_SAVE_MESSAGE_UPDATE=true", - "DATABASE_SAVE_DATA_CONTACTS=true", - "DATABASE_SAVE_DATA_CHATS=true", - "DATABASE_SAVE_DATA_LABELS=true", - "DATABASE_SAVE_DATA_HISTORIC=true", - - "CACHE_REDIS_ENABLED=true", - "CACHE_REDIS_URI=redis://evolution-redis:6379", - "CACHE_REDIS_PREFIX_KEY=evolution", - "CACHE_REDIS_SAVE_INSTANCES=true", - ]; - - return { - domains, - envs, - }; -} diff --git a/apps/dokploy/templates/excalidraw/docker-compose.yml b/apps/dokploy/templates/excalidraw/docker-compose.yml index 3cf2fb1d1..8743434b6 100644 --- a/apps/dokploy/templates/excalidraw/docker-compose.yml +++ b/apps/dokploy/templates/excalidraw/docker-compose.yml @@ -2,5 +2,6 @@ version: "3.8" services: excalidraw: - + networks: + - dokploy-network image: excalidraw/excalidraw:latest diff --git a/apps/dokploy/templates/excalidraw/index.ts b/apps/dokploy/templates/excalidraw/index.ts index 7f73f395f..13a43c440 100644 --- a/apps/dokploy/templates/excalidraw/index.ts +++ b/apps/dokploy/templates/excalidraw/index.ts @@ -2,6 +2,7 @@ import { type DomainSchema, type Schema, type Template, + generateHash, generateRandomDomain, } from "../utils"; diff --git a/apps/dokploy/templates/formbricks/docker-compose.yml b/apps/dokploy/templates/formbricks/docker-compose.yml deleted file mode 100644 index ad1dcbcff..000000000 --- a/apps/dokploy/templates/formbricks/docker-compose.yml +++ /dev/null @@ -1,37 +0,0 @@ -x-environment: &environment - environment: - WEBAPP_URL: ${WEBAPP_URL} - NEXTAUTH_URL: ${NEXTAUTH_URL} - DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" - NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} - ENCRYPTION_KEY: ${ENCRYPTION_KEY} - CRON_SECRET: ${CRON_SECRET} - EMAIL_VERIFICATION_DISABLED: 1 - PASSWORD_RESET_DISABLED: 1 - S3_FORCE_PATH_STYLE: 0 - -services: - postgres: - restart: always - image: pgvector/pgvector:pg17 - volumes: - - postgres:/var/lib/postgresql/data - environment: - - POSTGRES_PASSWORD=postgres - - - formbricks: - restart: always - image: ghcr.io/formbricks/formbricks:v3.1.3 - depends_on: - - postgres - ports: - - 3000 - volumes: - - ../files/uploads:/home/nextjs/apps/web/uploads/ - <<: *environment - -volumes: - postgres: - driver: local - uploads: diff --git a/apps/dokploy/templates/formbricks/index.ts b/apps/dokploy/templates/formbricks/index.ts deleted file mode 100644 index fc179f497..000000000 --- a/apps/dokploy/templates/formbricks/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateBase64, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const secretBase = generateBase64(64); - const encryptionKey = generateBase64(48); - const cronSecret = generateBase64(32); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 3000, - serviceName: "formbricks", - }, - ]; - - const envs = [ - `WEBAPP_URL=http://${mainDomain}`, - `NEXTAUTH_URL=http://${mainDomain}`, - `NEXTAUTH_SECRET=${secretBase}`, - `ENCRYPTION_KEY=${encryptionKey}`, - `CRON_SECRET=${cronSecret}`, - ]; - - const mounts: Template["mounts"] = []; - - return { - envs, - mounts, - domains, - }; -} diff --git a/apps/dokploy/templates/frappe-hr/docker-compose.yml b/apps/dokploy/templates/frappe-hr/docker-compose.yml deleted file mode 100644 index a7ce9b262..000000000 --- a/apps/dokploy/templates/frappe-hr/docker-compose.yml +++ /dev/null @@ -1,354 +0,0 @@ -x-custom-image: &custom_image - image: ${IMAGE_NAME:-ghcr.io/frappe/hrms}:${VERSION:-version-15} - pull_policy: ${PULL_POLICY:-always} - deploy: - restart_policy: - condition: always - -services: - backend: - <<: *custom_image - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - '0.0.0.0:8000' - interval: 2s - timeout: 10s - retries: 30 - - frontend: - <<: *custom_image - command: - - nginx-entrypoint.sh - depends_on: - backend: - condition: service_started - required: true - websocket: - condition: service_started - required: true - environment: - BACKEND: backend:8000 - FRAPPE_SITE_NAME_HEADER: ${FRAPPE_SITE_NAME_HEADER:-$$host} - SOCKETIO: websocket:9000 - UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1 - UPSTREAM_REAL_IP_HEADER: X-Forwarded-For - UPSTREAM_REAL_IP_RECURSIVE: "off" - volumes: - - sites:/home/frappe/frappe-bench/sites - - networks: - - bench-network - - healthcheck: - test: - - CMD - - wait-for-it - - '0.0.0.0:8080' - interval: 2s - timeout: 30s - retries: 30 - - queue-default: - <<: *custom_image - command: - - bench - - worker - - --queue - - default - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - depends_on: - configurator: - condition: service_completed_successfully - required: true - - queue-long: - <<: *custom_image - command: - - bench - - worker - - --queue - - long - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - depends_on: - configurator: - condition: service_completed_successfully - required: true - - queue-short: - <<: *custom_image - command: - - bench - - worker - - --queue - - short - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - depends_on: - configurator: - condition: service_completed_successfully - required: true - - scheduler: - <<: *custom_image - healthcheck: - test: - - CMD - - wait-for-it - - 'redis-queue:6379' - interval: 2s - timeout: 10s - retries: 30 - command: - - bench - - schedule - depends_on: - configurator: - condition: service_completed_successfully - required: true - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - websocket: - <<: *custom_image - healthcheck: - test: - - CMD - - wait-for-it - - '0.0.0.0:9000' - interval: 2s - timeout: 10s - retries: 30 - command: - - node - - /home/frappe/frappe-bench/apps/frappe/socketio.js - depends_on: - configurator: - condition: service_completed_successfully - required: true - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - configurator: - <<: *custom_image - deploy: - mode: replicated - replicas: ${CONFIGURE:-0} - restart_policy: - condition: none - entrypoint: ["bash", "-c"] - command: - - > - [[ $${REGENERATE_APPS_TXT} == "1" ]] && ls -1 apps > sites/apps.txt; - [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && exit 0; - bench set-config -g db_host $$DB_HOST; - bench set-config -gp db_port $$DB_PORT; - bench set-config -g redis_cache "redis://$$REDIS_CACHE"; - bench set-config -g redis_queue "redis://$$REDIS_QUEUE"; - bench set-config -g redis_socketio "redis://$$REDIS_QUEUE"; - bench set-config -gp socketio_port $$SOCKETIO_PORT; - environment: - DB_HOST: "${DB_HOST:-db}" - DB_PORT: "3306" - REDIS_CACHE: redis-cache:6379 - REDIS_QUEUE: redis-queue:6379 - SOCKETIO_PORT: "9000" - REGENERATE_APPS_TXT: "${REGENERATE_APPS_TXT:-0}" - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - create-site: - <<: *custom_image - deploy: - mode: replicated - replicas: ${CREATE_SITE:-0} - restart_policy: - condition: none - entrypoint: ["bash", "-c"] - command: - - > - wait-for-it -t 120 $$DB_HOST:$$DB_PORT; - wait-for-it -t 120 redis-cache:6379; - wait-for-it -t 120 redis-queue:6379; - export start=`date +%s`; - until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \ - [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \ - [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]]; - do - echo "Waiting for sites/common_site_config.json to be created"; - sleep 5; - if (( `date +%s`-start > 120 )); then - echo "could not find sites/common_site_config.json with required keys"; - exit 1 - fi - done; - echo "sites/common_site_config.json found"; - [[ -d "sites/${SITE_NAME}" ]] && echo "${SITE_NAME} already exists" && exit 0; - bench new-site --mariadb-user-host-login-scope='%' --admin-password=$${ADMIN_PASSWORD} --db-root-username=root --db-root-password=$${DB_ROOT_PASSWORD} $${INSTALL_APP_ARGS} $${SITE_NAME}; - volumes: - - sites:/home/frappe/frappe-bench/sites - environment: - SITE_NAME: ${SITE_NAME} - ADMIN_PASSWORD: ${ADMIN_PASSWORD} - DB_HOST: ${DB_HOST:-db} - DB_PORT: "${DB_PORT:-3306}" - DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - INSTALL_APP_ARGS: ${INSTALL_APP_ARGS} - networks: - - bench-network - - migration: - <<: *custom_image - deploy: - mode: replicated - replicas: ${MIGRATE:-0} - restart_policy: - condition: none - entrypoint: ["bash", "-c"] - command: - - > - curl -f http://${SITE_NAME}:8080/api/method/ping || echo "Site busy" && exit 0; - bench --site all set-config -p maintenance_mode 1; - bench --site all set-config -p pause_scheduler 1; - bench --site all migrate; - bench --site all set-config -p maintenance_mode 0; - bench --site all set-config -p pause_scheduler 0; - volumes: - - sites:/home/frappe/frappe-bench/sites - networks: - - bench-network - - db: - image: mariadb:10.6 - deploy: - mode: replicated - replicas: ${ENABLE_DB:-0} - restart_policy: - condition: always - healthcheck: - test: mysqladmin ping -h localhost --password=${DB_ROOT_PASSWORD} - interval: 1s - retries: 20 - command: - - --character-set-server=utf8mb4 - - --collation-server=utf8mb4_unicode_ci - - --skip-character-set-client-handshake - - --skip-innodb-read-only-compressed - environment: - - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD} - volumes: - - db-data:/var/lib/mysql - networks: - - bench-network - - redis-cache: - deploy: - restart_policy: - condition: always - image: redis:6.2-alpine - volumes: - - redis-cache-data:/data - networks: - - bench-network - healthcheck: - test: - - CMD - - redis-cli - - ping - interval: 5s - timeout: 5s - retries: 3 - - redis-queue: - deploy: - restart_policy: - condition: always - image: redis:6.2-alpine - volumes: - - redis-queue-data:/data - networks: - - bench-network - healthcheck: - test: - - CMD - - redis-cli - - ping - interval: 5s - timeout: 5s - retries: 3 - - redis-socketio: - deploy: - restart_policy: - condition: always - image: redis:6.2-alpine - volumes: - - redis-socketio-data:/data - networks: - - bench-network - healthcheck: - test: - - CMD - - redis-cli - - ping - interval: 5s - timeout: 5s - retries: 3 - -volumes: - db-data: - redis-cache-data: - redis-queue-data: - redis-socketio-data: - sites: - driver_opts: - type: "${SITE_VOLUME_TYPE}" - o: "${SITE_VOLUME_OPTS}" - device: "${SITE_VOLUME_DEV}" - -networks: - bench-network: \ No newline at end of file diff --git a/apps/dokploy/templates/frappe-hr/index.ts b/apps/dokploy/templates/frappe-hr/index.ts deleted file mode 100644 index 1e6b94745..000000000 --- a/apps/dokploy/templates/frappe-hr/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const dbRootPassword = generatePassword(32); - const adminPassword = generatePassword(32); - const mainDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 8080, - serviceName: "frontend", - }, - ]; - - const envs = [ - `SITE_NAME=${mainDomain}`, - `ADMIN_PASSWORD=${adminPassword}`, - `DB_ROOT_PASSWORD=${dbRootPassword}`, - "MIGRATE=1", - "ENABLE_DB=1", - "DB_HOST=db", - "CREATE_SITE=1", - "CONFIGURE=1", - "REGENERATE_APPS_TXT=1", - "INSTALL_APP_ARGS=--install-app hrms", - "IMAGE_NAME=ghcr.io/frappe/hrms", - "VERSION=version-15", - "FRAPPE_SITE_NAME_HEADER=", - ]; - - return { envs, domains }; -} diff --git a/apps/dokploy/templates/ghost/docker-compose.yml b/apps/dokploy/templates/ghost/docker-compose.yml index 33c47f7f8..288c59e54 100644 --- a/apps/dokploy/templates/ghost/docker-compose.yml +++ b/apps/dokploy/templates/ghost/docker-compose.yml @@ -17,7 +17,8 @@ services: db: image: mysql:8.0 restart: always - + networks: + - dokploy-network environment: MYSQL_ROOT_PASSWORD: example volumes: diff --git a/apps/dokploy/templates/ghost/index.ts b/apps/dokploy/templates/ghost/index.ts index 052b7c6bb..1a88c3629 100644 --- a/apps/dokploy/templates/ghost/index.ts +++ b/apps/dokploy/templates/ghost/index.ts @@ -2,6 +2,7 @@ import { type DomainSchema, type Schema, type Template, + generateHash, generateRandomDomain, } from "../utils"; diff --git a/apps/dokploy/templates/gitea/docker-compose.yml b/apps/dokploy/templates/gitea/docker-compose.yml index 5127224cd..72e0754e2 100644 --- a/apps/dokploy/templates/gitea/docker-compose.yml +++ b/apps/dokploy/templates/gitea/docker-compose.yml @@ -11,7 +11,8 @@ services: - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always - + networks: + - dokploy-network volumes: - gitea_server:/data - /etc/timezone:/etc/timezone:ro @@ -26,7 +27,8 @@ services: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea - POSTGRES_DB=gitea - + networks: + - dokploy-network volumes: - gitea_db:/var/lib/postgresql/data diff --git a/apps/dokploy/templates/glance/docker-compose.yml b/apps/dokploy/templates/glance/docker-compose.yml deleted file mode 100644 index ace8bc940..000000000 --- a/apps/dokploy/templates/glance/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - glance: - image: glanceapp/glance - volumes: - - ../files/app/config/:/app/config - - ../files/app/assets:/app/assets - # Optionally, also mount docker socket if you want to use the docker containers widget - # - /var/run/docker.sock:/var/run/docker.sock:ro - ports: - - 8080 - env_file: .env \ No newline at end of file diff --git a/apps/dokploy/templates/glance/index.ts b/apps/dokploy/templates/glance/index.ts deleted file mode 100644 index a0ab1b676..000000000 --- a/apps/dokploy/templates/glance/index.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 8080, - serviceName: "glance", - }, - ]; - - const mounts: Template["mounts"] = [ - { - filePath: "/app/config/glance.yml", - content: ` -branding: - hide-footer: true - logo-text: P - -pages: - - name: Home - columns: - - size: small - widgets: - - type: calendar - - - type: releases - show-source-icon: true - repositories: - - Dokploy/dokploy - - n8n-io/n8n - - Budibase/budibase - - home-assistant/core - - tidbyt/pixlet - - - type: twitch-channels - channels: - - nmplol - - extraemily - - qtcinderella - - ludwig - - timthetatman - - mizkif - - - size: full - widgets: - - type: hacker-news - - - type: videos - style: grid-cards - channels: - - UC3GzdWYwUYI1ACxuP9Nm-eg - - UCGbg3DjQdcqWwqOLHpYHXIg - - UC24RSoLcjiNZbQcT54j5l7Q - limit: 3 - - - type: rss - limit: 10 - collapse-after: 3 - cache: 3h - feeds: - - url: https://daringfireball.net/feeds/main - title: Daring Fireball - - - size: small - widgets: - - type: weather - location: Gansevoort, New York, United States - show-area-name: false - units: imperial - hour-format: 12h - - - type: markets - markets: - - symbol: SPY - name: S&P 500 - - symbol: VOO - name: Vanguard - - symbol: BTC-USD - name: Bitcoin - - symbol: ETH-USD - name: Etherium - - symbol: NVDA - name: NVIDIA - - symbol: AAPL - name: Apple - - symbol: MSFT - name: Microsoft - - symbol: GOOGL - name: Google - - symbol: AMD - name: AMD - - symbol: TSLA - name: Tesla`, - }, - ]; - - return { - domains, - mounts, - }; -} diff --git a/apps/dokploy/templates/glitchtip/docker-compose.yml b/apps/dokploy/templates/glitchtip/docker-compose.yml index f47742f01..e45c76627 100644 --- a/apps/dokploy/templates/glitchtip/docker-compose.yml +++ b/apps/dokploy/templates/glitchtip/docker-compose.yml @@ -20,11 +20,13 @@ services: restart: unless-stopped volumes: - pg-data:/var/lib/postgresql/data - + networks: + - dokploy-network redis: image: redis restart: unless-stopped - + networks: + - dokploy-network web: image: glitchtip/glitchtip:v4.0 depends_on: *default-depends_on @@ -42,13 +44,15 @@ services: restart: unless-stopped volumes: - uploads:/code/uploads - + networks: + - dokploy-network migrate: image: glitchtip/glitchtip:v4.0 depends_on: *default-depends_on command: "./manage.py migrate" environment: *default-environment - + networks: + - dokploy-network volumes: pg-data: diff --git a/apps/dokploy/templates/glpi/docker-compose.yml b/apps/dokploy/templates/glpi/docker-compose.yml index fa732fa36..f15cdafef 100644 --- a/apps/dokploy/templates/glpi/docker-compose.yml +++ b/apps/dokploy/templates/glpi/docker-compose.yml @@ -4,7 +4,8 @@ services: restart: always volumes: - glpi-mysql-data:/var/lib/mysql - + networks: + - dokploy-network glpi-web: image: elestio/glpi:10.0.16 @@ -15,7 +16,8 @@ services: - glpi-www-data:/var/www/html/glpi environment: - TIMEZONE=Europe/Brussels - + networks: + - dokploy-network volumes: glpi-mysql-data: diff --git a/apps/dokploy/templates/hi-events/docker-compose.yml b/apps/dokploy/templates/hi-events/docker-compose.yml index cce45fecf..0ce5b7e75 100644 --- a/apps/dokploy/templates/hi-events/docker-compose.yml +++ b/apps/dokploy/templates/hi-events/docker-compose.yml @@ -28,7 +28,8 @@ services: postgres: image: elestio/postgres:16 restart: always - + networks: + - dokploy-network environment: - POSTGRES_DB - POSTGRES_USER diff --git a/apps/dokploy/templates/homarr/docker-compose.yml b/apps/dokploy/templates/homarr/docker-compose.yml deleted file mode 100644 index 876ea3f6f..000000000 --- a/apps/dokploy/templates/homarr/docker-compose.yml +++ /dev/null @@ -1,11 +0,0 @@ -services: - homarr: - image: ghcr.io/homarr-labs/homarr:latest - restart: unless-stopped - volumes: - # - /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration - - ../homarr/appdata:/appdata - environment: - - SECRET_ENCRYPTION_KEY=${SECRET_ENCRYPTION_KEY} - ports: - - 7575 diff --git a/apps/dokploy/templates/homarr/index.ts b/apps/dokploy/templates/homarr/index.ts deleted file mode 100644 index eb5a9f823..000000000 --- a/apps/dokploy/templates/homarr/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const secretKey = generatePassword(64); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 7575, - serviceName: "homarr", - }, - ]; - - const envs = [`SECRET_ENCRYPTION_KEY=${secretKey}`]; - - return { - domains, - envs, - }; -} diff --git a/apps/dokploy/templates/huly/docker-compose.yml b/apps/dokploy/templates/huly/docker-compose.yml index 639b10d2f..471ee7e9f 100644 --- a/apps/dokploy/templates/huly/docker-compose.yml +++ b/apps/dokploy/templates/huly/docker-compose.yml @@ -2,7 +2,8 @@ name: ${DOCKER_NAME} version: "3" services: nginx: - + networks: + - dokploy-network image: "nginx:1.21.3" ports: - 80 @@ -11,7 +12,8 @@ services: restart: unless-stopped mongodb: - + networks: + - dokploy-network image: "mongo:7-jammy" environment: - PUID=1000 @@ -21,7 +23,8 @@ services: restart: unless-stopped minio: - + networks: + - dokploy-network image: "minio/minio:RELEASE.2024-11-07T00-52-20Z" command: server /data --address ":9000" --console-address ":9001" volumes: @@ -29,7 +32,8 @@ services: restart: unless-stopped elastic: - + networks: + - dokploy-network image: "elasticsearch:7.14.2" command: | /bin/sh -c "./bin/elasticsearch-plugin list | grep -q ingest-attachment || yes | ./bin/elasticsearch-plugin install --silent ingest-attachment; @@ -50,7 +54,8 @@ services: restart: unless-stopped rekoni: - + networks: + - dokploy-network image: hardcoreeng/rekoni-service:${HULY_VERSION} environment: - SECRET=${SECRET} @@ -61,7 +66,8 @@ services: restart: unless-stopped transactor: - + networks: + - dokploy-network image: hardcoreeng/transactor:${HULY_VERSION} environment: - SERVER_PORT=3333 @@ -78,7 +84,8 @@ services: restart: unless-stopped collaborator: - + networks: + - dokploy-network image: hardcoreeng/collaborator:${HULY_VERSION} environment: - COLLABORATOR_PORT=3078 @@ -90,7 +97,8 @@ services: restart: unless-stopped account: - + networks: + - dokploy-network image: hardcoreeng/account:${HULY_VERSION} environment: - SERVER_PORT=3000 @@ -107,7 +115,8 @@ services: restart: unless-stopped workspace: - + networks: + - dokploy-network image: hardcoreeng/workspace:${HULY_VERSION} environment: - SERVER_SECRET=${SECRET} @@ -121,7 +130,8 @@ services: restart: unless-stopped front: - + networks: + - dokploy-network image: hardcoreeng/front:${HULY_VERSION} environment: - SERVER_PORT=8080 @@ -146,7 +156,8 @@ services: restart: unless-stopped fulltext: - + networks: + - dokploy-network image: hardcoreeng/fulltext:${HULY_VERSION} environment: - SERVER_SECRET=${SECRET} @@ -160,7 +171,8 @@ services: restart: unless-stopped stats: - + networks: + - dokploy-network image: hardcoreeng/stats:${HULY_VERSION} environment: - PORT=4900 diff --git a/apps/dokploy/templates/immich/docker-compose.yml b/apps/dokploy/templates/immich/docker-compose.yml index 743f70acf..2a9fb00be 100644 --- a/apps/dokploy/templates/immich/docker-compose.yml +++ b/apps/dokploy/templates/immich/docker-compose.yml @@ -3,7 +3,8 @@ version: "3.9" services: immich-server: image: ghcr.io/immich-app/immich-server:v1.121.0 - + networks: + - dokploy-network volumes: - immich-library:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro @@ -37,7 +38,8 @@ services: immich-machine-learning: image: ghcr.io/immich-app/immich-machine-learning:v1.121.0 - + networks: + - dokploy-network volumes: - immich-model-cache:/cache environment: @@ -53,7 +55,8 @@ services: immich-redis: image: redis:6.2-alpine - + networks: + - dokploy-network volumes: - immich-redis-data:/data healthcheck: @@ -65,7 +68,8 @@ services: immich-database: image: tensorchord/pgvecto-rs:pg14-v0.2.0 - + networks: + - dokploy-network volumes: - immich-postgres:/var/lib/postgresql/data environment: diff --git a/apps/dokploy/templates/immich/index.ts b/apps/dokploy/templates/immich/index.ts index 4beca87da..b1b11afb1 100644 --- a/apps/dokploy/templates/immich/index.ts +++ b/apps/dokploy/templates/immich/index.ts @@ -11,7 +11,7 @@ export function generate(schema: Schema): Template { const mainDomain = generateRandomDomain(schema); const dbPassword = generatePassword(); const dbUser = "immich"; - const _appSecret = generateBase64(32); + const appSecret = generateBase64(32); const domains: DomainSchema[] = [ { diff --git a/apps/dokploy/templates/infisical/docker-compose.yml b/apps/dokploy/templates/infisical/docker-compose.yml index 7566c8980..3baca9265 100644 --- a/apps/dokploy/templates/infisical/docker-compose.yml +++ b/apps/dokploy/templates/infisical/docker-compose.yml @@ -19,7 +19,8 @@ services: - SMTP_SECURE=true command: npm run migration:latest pull_policy: always - + networks: + - dokploy-network backend: restart: unless-stopped @@ -45,7 +46,8 @@ services: - SMTP_USERNAME - SMTP_PASSWORD - SMTP_SECURE=true - + networks: + - dokploy-network redis: image: redis:7.4.1 @@ -53,7 +55,8 @@ services: restart: always environment: - ALLOW_EMPTY_PASSWORD=yes - + networks: + - dokploy-network volumes: - redis_infisical_data:/data @@ -66,7 +69,8 @@ services: - POSTGRES_DB volumes: - pg_infisical_data:/var/lib/postgresql/data - + networks: + - dokploy-network healthcheck: test: "pg_isready --username=${POSTGRES_USER} && psql --username=${POSTGRES_USER} --list" interval: 5s diff --git a/apps/dokploy/templates/invoiceshelf/docker-compose.yml b/apps/dokploy/templates/invoiceshelf/docker-compose.yml index ef47f1c04..5afdd1526 100644 --- a/apps/dokploy/templates/invoiceshelf/docker-compose.yml +++ b/apps/dokploy/templates/invoiceshelf/docker-compose.yml @@ -3,7 +3,8 @@ version: "3.8" services: invoiceshelf-postgres: image: postgres:15 - + networks: + - dokploy-network volumes: - invoiceshelf-postgres-data:/var/lib/postgresql/data environment: @@ -18,7 +19,8 @@ services: invoiceshelf-app: image: invoiceshelf/invoiceshelf:latest - + networks: + - dokploy-network volumes: - invoiceshelf-app-data:/data - invoiceshelf-app-conf:/conf diff --git a/apps/dokploy/templates/kimai/docker-compose.yml b/apps/dokploy/templates/kimai/docker-compose.yml index 253ecb004..6a04b3b92 100644 --- a/apps/dokploy/templates/kimai/docker-compose.yml +++ b/apps/dokploy/templates/kimai/docker-compose.yml @@ -16,7 +16,8 @@ services: depends_on: db: condition: service_healthy - + networks: + - dokploy-network db: image: mariadb:10.11 restart: unless-stopped @@ -38,7 +39,8 @@ services: timeout: 5s retries: 5 start_period: 30s - + networks: + - dokploy-network networks: dokploy-network: diff --git a/apps/dokploy/templates/langflow/docker-compose.yml b/apps/dokploy/templates/langflow/docker-compose.yml index a96282868..75bb73dd1 100644 --- a/apps/dokploy/templates/langflow/docker-compose.yml +++ b/apps/dokploy/templates/langflow/docker-compose.yml @@ -12,7 +12,8 @@ services: # This variable defines where the logs, file storage, monitor data and secret keys are stored. volumes: - langflow-data:/app/langflow - + networks: + - dokploy-network postgres-langflow: image: postgres:16 @@ -24,7 +25,8 @@ services: - 5432 volumes: - langflow-postgres:/var/lib/postgresql/data - + networks: + - dokploy-network volumes: langflow-postgres: diff --git a/apps/dokploy/templates/linkwarden/docker-compose.yml b/apps/dokploy/templates/linkwarden/docker-compose.yml deleted file mode 100644 index 05ffb8a0a..000000000 --- a/apps/dokploy/templates/linkwarden/docker-compose.yml +++ /dev/null @@ -1,40 +0,0 @@ -services: - linkwarden: - environment: - - NEXTAUTH_SECRET - - NEXTAUTH_URL - - DATABASE_URL=postgresql://linkwarden:${POSTGRES_PASSWORD}@postgres:5432/linkwarden - restart: unless-stopped - image: ghcr.io/linkwarden/linkwarden:v2.9.3 - ports: - - 3000 - volumes: - - linkwarden-data:/data/data - depends_on: - - postgres - healthcheck: - test: curl --fail http://localhost:3000 || exit 1 - interval: 60s - retries: 2 - start_period: 60s - timeout: 15s - - postgres: - image: postgres:17-alpine - restart: unless-stopped - user: postgres - environment: - POSTGRES_USER: linkwarden - POSTGRES_DB: linkwarden - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - volumes: - - postgres-data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready"] - interval: 10s - timeout: 5s - retries: 5 - -volumes: - linkwarden-data: - postgres-data: diff --git a/apps/dokploy/templates/linkwarden/index.ts b/apps/dokploy/templates/linkwarden/index.ts deleted file mode 100644 index 860250356..000000000 --- a/apps/dokploy/templates/linkwarden/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateBase64, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const postgresPassword = generatePassword(); - const nextSecret = generateBase64(32); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 3000, - serviceName: "linkwarden", - }, - ]; - - const envs = [ - `POSTGRES_PASSWORD=${postgresPassword}`, - `NEXTAUTH_SECRET=${nextSecret}`, - `NEXTAUTH_URL=http://${mainDomain}/api/v1/auth`, - ]; - - return { - domains, - envs, - }; -} diff --git a/apps/dokploy/templates/listmonk/docker-compose.yml b/apps/dokploy/templates/listmonk/docker-compose.yml index d9da8b50e..725d0a098 100644 --- a/apps/dokploy/templates/listmonk/docker-compose.yml +++ b/apps/dokploy/templates/listmonk/docker-compose.yml @@ -1,9 +1,10 @@ services: db: - image: postgres:17-alpine + image: postgres:13 ports: - 5432 - + networks: + - dokploy-network environment: - POSTGRES_PASSWORD=listmonk - POSTGRES_USER=listmonk @@ -18,8 +19,9 @@ services: - listmonk-data:/var/lib/postgresql/data setup: - image: listmonk/listmonk:v4.1.0 - + image: listmonk/listmonk:v3.0.0 + networks: + - dokploy-network volumes: - ../files/config.toml:/listmonk/config.toml depends_on: @@ -33,7 +35,7 @@ services: app: restart: unless-stopped - image: listmonk/listmonk:v4.1.0 + image: listmonk/listmonk:v3.0.0 environment: - TZ=Etc/UTC depends_on: @@ -41,9 +43,7 @@ services: - setup volumes: - ../files/config.toml:/listmonk/config.toml - - listmonk-uploads:/listmonk/uploads volumes: - listmonk-uploads: listmonk-data: driver: local diff --git a/apps/dokploy/templates/listmonk/index.ts b/apps/dokploy/templates/listmonk/index.ts index 2a25efcaa..725659ca4 100644 --- a/apps/dokploy/templates/listmonk/index.ts +++ b/apps/dokploy/templates/listmonk/index.ts @@ -2,11 +2,13 @@ import { type DomainSchema, type Schema, type Template, + generatePassword, generateRandomDomain, } from "../utils"; export function generate(schema: Schema): Template { const randomDomain = generateRandomDomain(schema); + const adminPassword = generatePassword(32); const domains: DomainSchema[] = [ { @@ -17,7 +19,7 @@ export function generate(schema: Schema): Template { ]; const envs = [ - "# visit the page to setup your super admin user", + `# login with admin:${adminPassword}`, "# check config.toml in Advanced / Volumes for more options", ]; @@ -27,6 +29,9 @@ export function generate(schema: Schema): Template { content: `[app] address = "0.0.0.0:9000" +admin_username = "admin" +admin_password = "${adminPassword}" + [db] host = "db" port = 5432 diff --git a/apps/dokploy/templates/logto/docker-compose.yml b/apps/dokploy/templates/logto/docker-compose.yml index 6f2b920a0..e1f7c46aa 100644 --- a/apps/dokploy/templates/logto/docker-compose.yml +++ b/apps/dokploy/templates/logto/docker-compose.yml @@ -8,7 +8,8 @@ services: ports: - 3001 - 3002 - + networks: + - dokploy-network environment: TRUST_PROXY_HEADER: 1 DB_URL: postgres://logto:${LOGTO_POSTGRES_PASSWORD}@postgres:5432/logto @@ -19,7 +20,8 @@ services: postgres: image: postgres:17-alpine user: postgres - + networks: + - dokploy-network environment: POSTGRES_USER: logto POSTGRES_PASSWORD: ${LOGTO_POSTGRES_PASSWORD} diff --git a/apps/dokploy/templates/mailpit/docker-compose.yml b/apps/dokploy/templates/mailpit/docker-compose.yml deleted file mode 100644 index d0dbdb8ec..000000000 --- a/apps/dokploy/templates/mailpit/docker-compose.yml +++ /dev/null @@ -1,25 +0,0 @@ -services: - mailpit: - image: axllent/mailpit:v1.22.3 - restart: unless-stopped - ports: - - '1025:1025' - volumes: - - 'mailpit-data:/data' - environment: - - MP_SMTP_AUTH_ALLOW_INSECURE=true - - MP_MAX_MESSAGES=5000 - - MP_DATABASE=/data/mailpit.db - - MP_UI_AUTH=${MP_UI_AUTH} - - MP_SMTP_AUTH=${MP_SMTP_AUTH} - healthcheck: - test: - - CMD - - /mailpit - - readyz - interval: 5s - timeout: 20s - retries: 10 - -volumes: - mailpit-data: \ No newline at end of file diff --git a/apps/dokploy/templates/mailpit/index.ts b/apps/dokploy/templates/mailpit/index.ts deleted file mode 100644 index 25f18f7e6..000000000 --- a/apps/dokploy/templates/mailpit/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateBase64, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const domains: DomainSchema[] = [ - { - host: generateRandomDomain(schema), - port: 8025, - serviceName: "mailpit", - }, - ]; - - const defaultPassword = generatePassword(); - - const envs = [ - "# Uncomment below if you want basic auth on UI and SMTP", - `#MP_UI_AUTH=mailpit:${defaultPassword}`, - `#MP_SMTP_AUTH=mailpit:${defaultPassword}`, - ]; - - return { - domains, - envs, - }; -} diff --git a/apps/dokploy/templates/maybe/docker-compose.yml b/apps/dokploy/templates/maybe/docker-compose.yml deleted file mode 100644 index db529e0a7..000000000 --- a/apps/dokploy/templates/maybe/docker-compose.yml +++ /dev/null @@ -1,36 +0,0 @@ -services: - app: - image: ghcr.io/maybe-finance/maybe:sha-68c570eed8810fd59b5b33cca51bbad5eabb4cb4 - restart: unless-stopped - volumes: - - ../files/uploads:/app/uploads - environment: - DATABASE_URL: postgresql://maybe:maybe@db:5432/maybe - SECRET_KEY_BASE: ${SECRET_KEY_BASE} - SELF_HOSTED: true - SYNTH_API_KEY: ${SYNTH_API_KEY} - RAILS_FORCE_SSL: "false" - RAILS_ASSUME_SSL: "false" - GOOD_JOB_EXECUTION_MODE: async - depends_on: - db: - condition: service_healthy - - db: - image: postgres:16 - restart: always - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 5s - timeout: 5s - retries: 5 - - volumes: - - db-data:/var/lib/postgresql/data - environment: - POSTGRES_DB: maybe - POSTGRES_USER: maybe - POSTGRES_PASSWORD: maybe - -volumes: - db-data: diff --git a/apps/dokploy/templates/maybe/index.ts b/apps/dokploy/templates/maybe/index.ts deleted file mode 100644 index 5eaf7a811..000000000 --- a/apps/dokploy/templates/maybe/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateBase64, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const secretKeyBase = generateBase64(64); - const synthApiKey = generateBase64(32); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 3000, - serviceName: "app", - }, - ]; - - const envs = [ - `SECRET_KEY_BASE=${secretKeyBase}`, - "SELF_HOSTED=true", - `SYNTH_API_KEY=${synthApiKey}`, - "RAILS_FORCE_SSL=false", - "RAILS_ASSUME_SSL=false", - "GOOD_JOB_EXECUTION_MODE=async", - ]; - - const mounts: Template["mounts"] = [ - { - filePath: "./uploads", - content: "This is where user uploads will be stored", - }, - ]; - - return { - envs, - mounts, - domains, - }; -} diff --git a/apps/dokploy/templates/metabase/docker-compose.yml b/apps/dokploy/templates/metabase/docker-compose.yml index 43a03987d..4dca4d015 100644 --- a/apps/dokploy/templates/metabase/docker-compose.yml +++ b/apps/dokploy/templates/metabase/docker-compose.yml @@ -22,4 +22,5 @@ services: POSTGRES_USER: metabase POSTGRES_DB: metabaseappdb POSTGRES_PASSWORD: mysecretpassword - + networks: + - dokploy-network diff --git a/apps/dokploy/templates/nextcloud-aio/docker-compose.yml b/apps/dokploy/templates/nextcloud-aio/docker-compose.yml index 1e6d00fe3..e8381d2b0 100644 --- a/apps/dokploy/templates/nextcloud-aio/docker-compose.yml +++ b/apps/dokploy/templates/nextcloud-aio/docker-compose.yml @@ -2,7 +2,8 @@ services: nextcloud: image: nextcloud:30.0.2 restart: always - + networks: + - dokploy-network ports: - 80 volumes: @@ -18,7 +19,8 @@ services: nextcloud_db: image: mariadb restart: always - + networks: + - dokploy-network volumes: - nextcloud_db_data:/var/lib/mysql environment: diff --git a/apps/dokploy/templates/nocodb/docker-compose.yml b/apps/dokploy/templates/nocodb/docker-compose.yml index 7c4fd1e95..3d5c9ee7a 100644 --- a/apps/dokploy/templates/nocodb/docker-compose.yml +++ b/apps/dokploy/templates/nocodb/docker-compose.yml @@ -13,7 +13,8 @@ services: root_db: image: postgres:17 restart: always - + networks: + - dokploy-network environment: POSTGRES_DB: root_db POSTGRES_PASSWORD: password diff --git a/apps/dokploy/templates/odoo/docker-compose.yml b/apps/dokploy/templates/odoo/docker-compose.yml index 7c1c7d3ce..80b34f0c0 100644 --- a/apps/dokploy/templates/odoo/docker-compose.yml +++ b/apps/dokploy/templates/odoo/docker-compose.yml @@ -15,7 +15,8 @@ services: db: image: postgres:13 - + networks: + - dokploy-network environment: - POSTGRES_DB=postgres - POSTGRES_USER=odoo diff --git a/apps/dokploy/templates/open-webui/docker-compose.yml b/apps/dokploy/templates/open-webui/docker-compose.yml index ee179721a..d396dacc0 100644 --- a/apps/dokploy/templates/open-webui/docker-compose.yml +++ b/apps/dokploy/templates/open-webui/docker-compose.yml @@ -3,7 +3,8 @@ services: ollama: volumes: - ollama:/root/.ollama - + networks: + - dokploy-network pull_policy: always tty: true restart: unless-stopped diff --git a/apps/dokploy/templates/outline/docker-compose.yml b/apps/dokploy/templates/outline/docker-compose.yml deleted file mode 100644 index aaf98ac0b..000000000 --- a/apps/dokploy/templates/outline/docker-compose.yml +++ /dev/null @@ -1,57 +0,0 @@ -services: - outline: - image: outlinewiki/outline:0.82.0 - restart: always - depends_on: - - postgres - - redis - - dex - ports: - - 3000 - environment: - NODE_ENV: production - URL: ${URL} - FORCE_HTTPS: 'false' - SECRET_KEY: ${SECRET_KEY} - UTILS_SECRET: ${UTILS_SECRET} - DATABASE_URL: postgres://outline:${POSTGRES_PASSWORD}@postgres:5432/outline - PGSSLMODE: disable - REDIS_URL: redis://redis:6379 - OIDC_CLIENT_ID: outline - OIDC_CLIENT_SECRET: ${CLIENT_SECRET} - OIDC_AUTH_URI: ${DEX_URL}/auth - OIDC_TOKEN_URI: ${DEX_URL}/token - OIDC_USERINFO_URI: ${DEX_URL}/userinfo - - dex: - image: ghcr.io/dexidp/dex:v2.37.0 - restart: always - volumes: - - ../files/etc/dex/config.yaml:/etc/dex/config.yaml - command: - - dex - - serve - - /etc/dex/config.yaml - ports: - - 5556 - - postgres: - image: postgres:15 - restart: always - environment: - POSTGRES_DB: outline - POSTGRES_USER: outline - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - volumes: - - postgres_data-test-outline-khufpx:/var/lib/postgresql/data - - redis: - image: redis:latest - restart: always - command: redis-server --appendonly yes - volumes: - - redis_data-test-outline-khufpx:/data - -volumes: - postgres_data-test-outline-khufpx: - redis_data-test-outline-khufpx: \ No newline at end of file diff --git a/apps/dokploy/templates/outline/index.ts b/apps/dokploy/templates/outline/index.ts deleted file mode 100644 index 8431e5687..000000000 --- a/apps/dokploy/templates/outline/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateBase64, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - const dexDomain = generateRandomDomain(schema); - const SECRET_KEY = generateBase64(32); - const UTILS_SECRET = generateBase64(32); - const CLIENT_SECRET = generateBase64(32); - const POSTGRES_PASSWORD = generatePassword(); - - const mainURL = `http://${mainDomain}`; - const dexURL = `http://${dexDomain}`; - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 3000, - serviceName: "outline", - }, - { - host: dexDomain, - port: 5556, - serviceName: "dex", - }, - ]; - - const mounts: Template["mounts"] = [ - { - filePath: "/etc/dex/config.yaml", - content: `issuer: ${dexURL} - -web: - http: 0.0.0.0:5556 - -storage: - type: memory - -enablePasswordDB: true - -frontend: - issuer: Outline - -logger: - level: debug - -staticPasswords: - - email: "admin@example.com" - # bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2) - hash: "$2y$10$jsRWHw54uxTUIfhjgUrB9u8HSzPk7TUuQri9sXZrKzRXcScvwYor." - username: "admin" - userID: "1" - - -oauth2: - skipApprovalScreen: true - alwaysShowLoginScreen: false - passwordConnector: local - -staticClients: - - id: "outline" - redirectURIs: - - ${mainURL}/auth/oidc.callback - name: "Outline" - secret: "${CLIENT_SECRET}"`, - }, - ]; - - const envs = [ - `URL=${mainURL}`, - `DEX_URL=${dexURL}`, - `DOMAIN_NAME=${mainDomain}`, - `POSTGRES_PASSWORD=${POSTGRES_PASSWORD}`, - `SECRET_KEY=${SECRET_KEY}`, - `UTILS_SECRET=${UTILS_SECRET}`, - `CLIENT_SECRET=${CLIENT_SECRET}`, - ]; - - return { - domains, - envs, - mounts, - }; -} diff --git a/apps/dokploy/templates/penpot/docker-compose.yml b/apps/dokploy/templates/penpot/docker-compose.yml index 3e0efe915..55abdb53d 100644 --- a/apps/dokploy/templates/penpot/docker-compose.yml +++ b/apps/dokploy/templates/penpot/docker-compose.yml @@ -46,7 +46,8 @@ services: - penpot-backend - penpot-exporter - + networks: + - dokploy-network environment: PENPOT_FLAGS: disable-email-verification enable-smtp enable-prepl-server disable-secure-session-cookies @@ -62,7 +63,8 @@ services: - penpot-postgres - penpot-redis - + networks: + - dokploy-network ## Configuration envronment variables for the backend ## container. @@ -141,7 +143,8 @@ services: penpot-exporter: image: "penpotapp/exporter:2.3.2" restart: always - + networks: + - dokploy-network environment: # Don't touch it; this uses an internal docker network to @@ -159,7 +162,8 @@ services: volumes: - penpot_postgres_v15:/var/lib/postgresql/data - + networks: + - dokploy-network environment: - POSTGRES_INITDB_ARGS=--data-checksums @@ -170,7 +174,8 @@ services: penpot-redis: image: redis:7.2 restart: always - + networks: + - dokploy-network ## A mailcatch service, used as temporal SMTP server. You can access via HTTP to the ## port 1080 for read all emails the penpot platform has sent. Should be only used as a @@ -183,7 +188,8 @@ services: - '1025' ports: - 1080 - + networks: + - dokploy-network ## Example configuration of MiniIO (S3 compatible object storage service); If you don't ## have preference, then just use filesystem, this is here just for the completeness. diff --git a/apps/dokploy/templates/penpot/index.ts b/apps/dokploy/templates/penpot/index.ts index a3e90e8ae..f657c698f 100644 --- a/apps/dokploy/templates/penpot/index.ts +++ b/apps/dokploy/templates/penpot/index.ts @@ -2,6 +2,8 @@ import { type DomainSchema, type Schema, type Template, + generateBase64, + generatePassword, generateRandomDomain, } from "../utils"; diff --git a/apps/dokploy/templates/peppermint/docker-compose.yml b/apps/dokploy/templates/peppermint/docker-compose.yml index 06fb46c66..305c5eb97 100644 --- a/apps/dokploy/templates/peppermint/docker-compose.yml +++ b/apps/dokploy/templates/peppermint/docker-compose.yml @@ -4,7 +4,8 @@ services: peppermint-postgres: image: postgres:latest restart: always - + networks: + - dokploy-network volumes: - peppermint-postgres-data:/var/lib/postgresql/data environment: @@ -20,7 +21,8 @@ services: peppermint-app: image: pepperlabs/peppermint:latest restart: always - + networks: + - dokploy-network depends_on: peppermint-postgres: condition: service_healthy diff --git a/apps/dokploy/templates/photoprism/docker-compose.yml b/apps/dokploy/templates/photoprism/docker-compose.yml index 56793dbd3..285f2ff86 100644 --- a/apps/dokploy/templates/photoprism/docker-compose.yml +++ b/apps/dokploy/templates/photoprism/docker-compose.yml @@ -7,7 +7,8 @@ services: security_opt: - seccomp:unconfined - apparmor:unconfined - + networks: + - dokploy-network environment: PHOTOPRISM_ADMIN_USER: "admin" PHOTOPRISM_ADMIN_PASSWORD: ${ADMIN_PASSWORD} @@ -56,7 +57,8 @@ services: image: mariadb:11 restart: unless-stopped stop_grace_period: 5s - + networks: + - dokploy-network security_opt: - seccomp:unconfined - apparmor:unconfined diff --git a/apps/dokploy/templates/photoprism/index.ts b/apps/dokploy/templates/photoprism/index.ts index 4a103a624..d20ac29c8 100644 --- a/apps/dokploy/templates/photoprism/index.ts +++ b/apps/dokploy/templates/photoprism/index.ts @@ -2,6 +2,7 @@ import { type DomainSchema, type Schema, type Template, + generateHash, generatePassword, generateRandomDomain, } from "../utils"; diff --git a/apps/dokploy/templates/phpmyadmin/docker-compose.yml b/apps/dokploy/templates/phpmyadmin/docker-compose.yml index 91674e87c..1f775f09a 100644 --- a/apps/dokploy/templates/phpmyadmin/docker-compose.yml +++ b/apps/dokploy/templates/phpmyadmin/docker-compose.yml @@ -10,7 +10,8 @@ services: MYSQL_PASSWORD: ${MYSQL_PASSWORD} volumes: - db_data:/var/lib/mysql - + networks: + - dokploy-network phpmyadmin: image: phpmyadmin/phpmyadmin:5.2.1 diff --git a/apps/dokploy/templates/plausible/docker-compose.yml b/apps/dokploy/templates/plausible/docker-compose.yml index ad483ecf6..bb267f65c 100644 --- a/apps/dokploy/templates/plausible/docker-compose.yml +++ b/apps/dokploy/templates/plausible/docker-compose.yml @@ -1,8 +1,10 @@ +version: "3.8" services: plausible_db: image: postgres:16-alpine restart: always - + networks: + - dokploy-network volumes: - db-data:/var/lib/postgresql/data environment: @@ -11,7 +13,8 @@ services: plausible_events_db: image: clickhouse/clickhouse-server:24.3.3.102-alpine restart: always - + networks: + - dokploy-network volumes: - event-data:/var/lib/clickhouse - event-logs:/var/log/clickhouse-server @@ -23,7 +26,7 @@ services: hard: 262144 plausible: - image: ghcr.io/plausible/community-edition:v2.1.5 + image: ghcr.io/plausible/community-edition:v2.1.4 restart: always command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run" depends_on: diff --git a/apps/dokploy/templates/pocket-id/docker-compose.yml b/apps/dokploy/templates/pocket-id/docker-compose.yml deleted file mode 100644 index f93851430..000000000 --- a/apps/dokploy/templates/pocket-id/docker-compose.yml +++ /dev/null @@ -1,21 +0,0 @@ -services: - pocket-id: - image: ghcr.io/pocket-id/pocket-id:v0.35.1 - restart: unless-stopped - environment: - - PUBLIC_UI_CONFIG_DISABLED - - PUBLIC_APP_URL - - TRUST_PROXY - ports: - - 80 - volumes: - - pocket-id-data:/app/backend/data - healthcheck: - test: "curl -f http://localhost/health" - interval: 1m30s - timeout: 5s - retries: 2 - start_period: 10s - -volumes: - pocket-id-data: diff --git a/apps/dokploy/templates/pocket-id/index.ts b/apps/dokploy/templates/pocket-id/index.ts deleted file mode 100644 index 9a9faa2a3..000000000 --- a/apps/dokploy/templates/pocket-id/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mainDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: mainDomain, - port: 80, - serviceName: "pocket-id", - }, - ]; - - const envs = [ - "PUBLIC_UI_CONFIG_DISABLED=false", - `PUBLIC_APP_URL=http://${mainDomain}`, - "TRUST_PROXY=true", - ]; - - return { - domains, - envs, - }; -} diff --git a/apps/dokploy/templates/portainer/docker-compose.yml b/apps/dokploy/templates/portainer/docker-compose.yml index 19e67a3e5..fa4fe4103 100644 --- a/apps/dokploy/templates/portainer/docker-compose.yml +++ b/apps/dokploy/templates/portainer/docker-compose.yml @@ -6,7 +6,8 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/volumes:/var/lib/docker/volumes - + networks: + - dokploy-network deploy: mode: global diff --git a/apps/dokploy/templates/postiz/docker-compose.yml b/apps/dokploy/templates/postiz/docker-compose.yml index cd06e7952..f842c92d9 100644 --- a/apps/dokploy/templates/postiz/docker-compose.yml +++ b/apps/dokploy/templates/postiz/docker-compose.yml @@ -4,7 +4,8 @@ services: postiz-app: image: ghcr.io/gitroomhq/postiz-app:latest restart: always - + networks: + - dokploy-network environment: MAIN_URL: "https://${POSTIZ_HOST}" FRONTEND_URL: "https://${POSTIZ_HOST}" @@ -29,7 +30,8 @@ services: postiz-postgres: image: postgres:17-alpine restart: always - + networks: + - dokploy-network environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USER} @@ -45,7 +47,8 @@ services: postiz-redis: image: redis:7.2 restart: always - + networks: + - dokploy-network healthcheck: test: redis-cli ping interval: 10s diff --git a/apps/dokploy/templates/registry/docker-compose.yml b/apps/dokploy/templates/registry/docker-compose.yml deleted file mode 100644 index 08c5c3688..000000000 --- a/apps/dokploy/templates/registry/docker-compose.yml +++ /dev/null @@ -1,19 +0,0 @@ -services: - registry: - restart: always - image: registry:2 - ports: - - 5000 - volumes: - - ../files/auth/registry.password:/auth/registry.password - - registry-data:/var/lib/registry - environment: - REGISTRY_STORAGE_DELETE_ENABLED: true - REGISTRY_HEALTH_STORAGEDRIVER_ENABLED: false - REGISTRY_HTTP_SECRET: ${REGISTRY_HTTP_SECRET} - REGISTRY_AUTH: htpasswd - REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm - REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password - -volumes: - registry-data: \ No newline at end of file diff --git a/apps/dokploy/templates/registry/index.ts b/apps/dokploy/templates/registry/index.ts deleted file mode 100644 index 81965e6e2..000000000 --- a/apps/dokploy/templates/registry/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const domains: DomainSchema[] = [ - { - host: generateRandomDomain(schema), - port: 5000, - serviceName: "registry", - }, - ]; - - const registryHttpSecret = generatePassword(30); - - const envs = [`REGISTRY_HTTP_SECRET=${registryHttpSecret}`]; - - const mounts: Template["mounts"] = [ - { - filePath: "/auth/registry.password", - content: - "# from: docker run --rm --entrypoint htpasswd httpd:2 -Bbn docker password\ndocker:$2y$10$qWZoWev/u5PV7WneFoRAMuoGpRcAQOgUuIIdLnU7pJXogrBSY23/2\n", - }, - ]; - - return { - domains, - envs, - mounts, - }; -} diff --git a/apps/dokploy/templates/rocketchat/docker-compose.yml b/apps/dokploy/templates/rocketchat/docker-compose.yml index 5119f5a4e..751bd845c 100644 --- a/apps/dokploy/templates/rocketchat/docker-compose.yml +++ b/apps/dokploy/templates/rocketchat/docker-compose.yml @@ -28,7 +28,8 @@ services: MONGODB_ADVERTISED_HOSTNAME: mongodb MONGODB_ENABLE_JOURNAL: true ALLOW_EMPTY_PASSWORD: yes - + networks: + - dokploy-network volumes: mongodb_data: { driver: local } diff --git a/apps/dokploy/templates/roundcube/docker-compose.yml b/apps/dokploy/templates/roundcube/docker-compose.yml index e5ba4a8b1..440f907dd 100644 --- a/apps/dokploy/templates/roundcube/docker-compose.yml +++ b/apps/dokploy/templates/roundcube/docker-compose.yml @@ -9,7 +9,8 @@ services: - ROUNDCUBEMAIL_SKIN=elastic - ROUNDCUBEMAIL_DEFAULT_HOST=${DEFAULT_HOST} - ROUNDCUBEMAIL_SMTP_SERVER=${SMTP_SERVER} - + networks: + - dokploy-network networks: dokploy-network: diff --git a/apps/dokploy/templates/ryot/docker-compose.yml b/apps/dokploy/templates/ryot/docker-compose.yml index 09a727071..1fcd80ed1 100644 --- a/apps/dokploy/templates/ryot/docker-compose.yml +++ b/apps/dokploy/templates/ryot/docker-compose.yml @@ -3,7 +3,8 @@ version: '3.7' services: ryot-app: image: ignisda/ryot:v7.10 - + networks: + - dokploy-network environment: - DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@ryot-db:5432/postgres - SERVER_ADMIN_ACCESS_TOKEN=${ADMIN_ACCESS_TOKEN} @@ -18,7 +19,8 @@ services: ryot-db: image: postgres:16-alpine - + networks: + - dokploy-network volumes: - ryot-postgres-data:/var/lib/postgresql/data environment: diff --git a/apps/dokploy/templates/shlink/docker-compose.yml b/apps/dokploy/templates/shlink/docker-compose.yml deleted file mode 100644 index 6d15a26d8..000000000 --- a/apps/dokploy/templates/shlink/docker-compose.yml +++ /dev/null @@ -1,29 +0,0 @@ -services: - shlink: - image: shlinkio/shlink:stable - environment: - - INITIAL_API_KEY=${INITIAL_API_KEY} - - DEFAULT_DOMAIN=${DEFAULT_DOMAIN} - # Note: you should also update SHLINK_SERVER_URL in the shlink-web service. - - IS_HTTPS_ENABLED=false - volumes: - - shlink-data:/etc/shlink/data - healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:8080/rest/v3/health"] - interval: 30s - timeout: 10s - retries: 3 - shlink-web: - image: shlinkio/shlink-web-client - environment: - - SHLINK_SERVER_API_KEY=${INITIAL_API_KEY} - # Note: if you've set IS_HTTPS_ENABLED=true, change http to https. - - SHLINK_SERVER_URL=http://${DEFAULT_DOMAIN} - healthcheck: - test: ["CMD", "curl", "-f", "http://127.0.0.1:8080"] - interval: 30s - timeout: 10s - retries: 3 - -volumes: - shlink-data: diff --git a/apps/dokploy/templates/shlink/index.ts b/apps/dokploy/templates/shlink/index.ts deleted file mode 100644 index 1e456e1c2..000000000 --- a/apps/dokploy/templates/shlink/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const defaultDomain = generateRandomDomain(schema); - const initialApiKey = generatePassword(30); - - const domains: DomainSchema[] = [ - { - host: `web-${defaultDomain}`, - port: 8080, - serviceName: "shlink-web", - }, - { - host: defaultDomain, - port: 8080, - serviceName: "shlink", - }, - ]; - - const envs = [ - `INITIAL_API_KEY=${initialApiKey}`, - `DEFAULT_DOMAIN=${defaultDomain}`, - ]; - - return { - envs, - domains, - }; -} diff --git a/apps/dokploy/templates/slash/docker-compose.yml b/apps/dokploy/templates/slash/docker-compose.yml index ee6cdf895..75afc4783 100644 --- a/apps/dokploy/templates/slash/docker-compose.yml +++ b/apps/dokploy/templates/slash/docker-compose.yml @@ -3,7 +3,8 @@ version: "3.8" services: slash-app: image: yourselfhosted/slash:latest - + networks: + - dokploy-network volumes: - slash-app-data:/var/opt/slash environment: @@ -16,7 +17,8 @@ services: slash-postgres: image: postgres:16-alpine - + networks: + - dokploy-network volumes: - slash-postgres-data:/var/lib/postgresql/data environment: diff --git a/apps/dokploy/templates/spacedrive/docker-compose.yml b/apps/dokploy/templates/spacedrive/docker-compose.yml deleted file mode 100644 index b98d55abf..000000000 --- a/apps/dokploy/templates/spacedrive/docker-compose.yml +++ /dev/null @@ -1,9 +0,0 @@ -services: - server: - image: ghcr.io/spacedriveapp/spacedrive/server:latest - ports: - - 8080 - environment: - - SD_AUTH=${SD_USERNAME}:${SD_PASSWORD} - volumes: - - /var/spacedrive:/var/spacedrive diff --git a/apps/dokploy/templates/spacedrive/index.ts b/apps/dokploy/templates/spacedrive/index.ts deleted file mode 100644 index 15db4b198..000000000 --- a/apps/dokploy/templates/spacedrive/index.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const randomDomain = generateRandomDomain(schema); - const secretKey = generatePassword(); - const randomUsername = "admin"; // Default username - - const domains: DomainSchema[] = [ - { - host: randomDomain, - port: 8080, - serviceName: "server", - }, - ]; - - const envs = [`SD_USERNAME=${randomUsername}`, `SD_PASSWORD=${secretKey}`]; - - return { - envs, - domains, - }; -} diff --git a/apps/dokploy/templates/supabase/docker-compose.yml b/apps/dokploy/templates/supabase/docker-compose.yml index 89339736f..e1e187fde 100644 --- a/apps/dokploy/templates/supabase/docker-compose.yml +++ b/apps/dokploy/templates/supabase/docker-compose.yml @@ -11,7 +11,8 @@ services: studio: container_name: supabase-studio image: supabase/studio:20240729-ce42139 - + networks: + - dokploy-network restart: unless-stopped healthcheck: test: @@ -52,7 +53,8 @@ services: container_name: supabase-kong image: kong:2.8.1 restart: unless-stopped - + networks: + - dokploy-network # https://unix.stackexchange.com/a/294837 entrypoint: bash -c 'eval "echo \"$$(cat ~/temp.yml)\"" > ~/kong.yml && /docker-entrypoint.sh kong docker-start' #ports: @@ -83,7 +85,8 @@ services: auth: container_name: supabase-auth image: supabase/gotrue:v2.158.1 - + networks: + - dokploy-network depends_on: db: # Disable this if you are using an external Postgres database @@ -154,7 +157,8 @@ services: rest: container_name: supabase-rest image: postgrest/postgrest:v12.2.0 - + networks: + - dokploy-network depends_on: db: # Disable this if you are using an external Postgres database @@ -176,7 +180,8 @@ services: # This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain container_name: realtime-dev.supabase-realtime image: supabase/realtime:v2.30.23 - + networks: + - dokploy-network depends_on: db: # Disable this if you are using an external Postgres database @@ -221,7 +226,8 @@ services: storage: container_name: supabase-storage image: supabase/storage-api:v1.0.6 - + networks: + - dokploy-network depends_on: db: # Disable this if you are using an external Postgres database @@ -265,7 +271,8 @@ services: imgproxy: container_name: supabase-imgproxy image: darthsim/imgproxy:v3.8.0 - + networks: + - dokploy-network healthcheck: test: ["CMD", "imgproxy", "health"] timeout: 5s @@ -282,7 +289,8 @@ services: meta: container_name: supabase-meta image: supabase/postgres-meta:v0.83.2 - + networks: + - dokploy-network depends_on: db: # Disable this if you are using an external Postgres database @@ -302,7 +310,8 @@ services: container_name: supabase-edge-functions image: supabase/edge-runtime:v1.56.0 restart: unless-stopped - + networks: + - dokploy-network depends_on: analytics: condition: service_healthy @@ -324,7 +333,8 @@ services: analytics: container_name: supabase-analytics image: supabase/logflare:1.4.0 - + networks: + - dokploy-network healthcheck: test: ["CMD", "curl", "http://localhost:4000/health"] timeout: 5s @@ -370,7 +380,8 @@ services: db: container_name: supabase-db image: supabase/postgres:15.1.1.78 - + networks: + - dokploy-network healthcheck: test: pg_isready -U postgres -h localhost interval: 5s @@ -419,7 +430,8 @@ services: vector: container_name: supabase-vector image: timberio/vector:0.28.1-alpine - + networks: + - dokploy-network healthcheck: test: [ diff --git a/apps/dokploy/templates/superset/docker-compose.yml b/apps/dokploy/templates/superset/docker-compose.yml deleted file mode 100644 index b73bf55e5..000000000 --- a/apps/dokploy/templates/superset/docker-compose.yml +++ /dev/null @@ -1,87 +0,0 @@ -# This is an UNOFFICIAL production docker image build for Superset: -# - https://github.com/amancevice/docker-superset - - -# ## SETUP INSTRUCTIONS -# -# After deploying this image, you will need to run one of the two -# commands below in a terminal within the superset container: -# $ superset-demo # Initialise database + load demo charts/datasets -# $ superset-init # Initialise database only -# -# You will be prompted to enter the credentials for the admin user. - - -# ## NETWORK INSTRUCTIONS -# -# If you want to connect superset with other internal databases managed by -# Dokploy (on dokploy-network) using internal hostnames, you will need to -# uncomment the `networks` section, both for the superset container and -# at the very bottom of this docker-compose template. -# -# Note that the `superset` service name/hostname will not be unique on the -# global `dokploy-network`. If you plan to: -# -# 1. deploy a second instance of superset on dokploy-network, and -# 2. have other containers on dokploy-network utilise the second instance's -# Superset API (https://superset.apache.org/docs/api) -# -# Please change the service name of the second instance. - -services: - superset: - image: amancevice/superset - restart: always - #networks: - # - dokploy-network - depends_on: - - superset_postgres - - superset_redis - volumes: - # This superset_config.py can be edited in Dokploy's UI Advanced -> Volume Mount - - ../files/superset/superset_config.py:/etc/superset/superset_config.py - environment: - SECRET_KEY: ${SECRET_KEY} - MAPBOX_API_KEY: ${MAPBOX_API_KEY} - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: ${POSTGRES_DB} - REDIS_PASSWORD: ${REDIS_PASSWORD} - # Ensure the hosts matches your service names below. - POSTGRES_HOST: superset_postgres - REDIS_HOST: superset_redis - - superset_postgres: - image: postgres - restart: always - environment: - POSTGRES_USER: ${POSTGRES_USER} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_DB: ${POSTGRES_DB} - volumes: - - superset_postgres_data:/var/lib/postgresql/data - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 30s - timeout: 10s - retries: 3 - -superset_redis: - image: redis - restart: always - volumes: - - superset_redis_data:/data - command: redis-server --requirepass ${REDIS_PASSWORD} - healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 30s - timeout: 10s - retries: 3 - -#networks: -# dokploy-network: -# external: true - -volumes: - superset_postgres_data: - superset_redis_data: diff --git a/apps/dokploy/templates/superset/index.ts b/apps/dokploy/templates/superset/index.ts deleted file mode 100644 index 954fc9710..000000000 --- a/apps/dokploy/templates/superset/index.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generatePassword, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const mapboxApiKey = ""; - const secretKey = generatePassword(30); - const postgresDb = "superset"; - const postgresUser = "superset"; - const postgresPassword = generatePassword(30); - const redisPassword = generatePassword(30); - - const domains: DomainSchema[] = [ - { - host: generateRandomDomain(schema), - port: 8088, - serviceName: "superset", - }, - ]; - - const envs = [ - `SECRET_KEY=${secretKey}`, - `MAPBOX_API_KEY=${mapboxApiKey}`, - `POSTGRES_DB=${postgresDb}`, - `POSTGRES_USER=${postgresUser}`, - `POSTGRES_PASSWORD=${postgresPassword}`, - `REDIS_PASSWORD=${redisPassword}`, - ]; - - const mounts: Template["mounts"] = [ - { - filePath: "./superset/superset_config.py", - content: ` -""" -For more configuration options, see: -- https://superset.apache.org/docs/configuration/configuring-superset -""" - -import os - -SECRET_KEY = os.getenv("SECRET_KEY") -MAPBOX_API_KEY = os.getenv("MAPBOX_API_KEY", "") - -CACHE_CONFIG = { - "CACHE_TYPE": "RedisCache", - "CACHE_DEFAULT_TIMEOUT": 300, - "CACHE_KEY_PREFIX": "superset_", - "CACHE_REDIS_HOST": "redis", - "CACHE_REDIS_PORT": 6379, - "CACHE_REDIS_DB": 1, - "CACHE_REDIS_URL": f"redis://:{os.getenv('REDIS_PASSWORD')}@{os.getenv('REDIS_HOST')}:6379/1", -} - -FILTER_STATE_CACHE_CONFIG = {**CACHE_CONFIG, "CACHE_KEY_PREFIX": "superset_filter_"} -EXPLORE_FORM_DATA_CACHE_CONFIG = {**CACHE_CONFIG, "CACHE_KEY_PREFIX": "superset_explore_form_"} - -SQLALCHEMY_TRACK_MODIFICATIONS = True -SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{os.getenv('POSTGRES_USER')}:{os.getenv('POSTGRES_PASSWORD')}@{os.getenv('POSTGRES_HOST')}:5432/{os.getenv('POSTGRES_DB')}" - -# Uncomment if you want to load example data (using "superset load_examples") at the -# same location as your metadata postgresql instance. Otherwise, the default sqlite -# will be used, which will not persist in volume when restarting superset by default. -#SQLALCHEMY_EXAMPLES_URI = SQLALCHEMY_DATABASE_URI - `.trim(), - }, - ]; - - return { - envs, - domains, - mounts, - }; -} diff --git a/apps/dokploy/templates/teable/docker-compose.yml b/apps/dokploy/templates/teable/docker-compose.yml index 386e37738..b96b677c0 100644 --- a/apps/dokploy/templates/teable/docker-compose.yml +++ b/apps/dokploy/templates/teable/docker-compose.yml @@ -2,7 +2,7 @@ version: "3.9" services: teable: - image: ghcr.io/teableio/teable:latest + image: ghcr.io/teableio/teable:1.3.1-alpha-build.460 restart: always volumes: - teable-data:/app/.assets @@ -41,7 +41,8 @@ services: - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - + networks: + - dokploy-network healthcheck: test: [ @@ -57,7 +58,8 @@ services: environment: - TZ=${TIMEZONE} - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} - + networks: + - dokploy-network depends_on: teable-db: condition: service_healthy diff --git a/apps/dokploy/templates/templates.ts b/apps/dokploy/templates/templates.ts index d39465a8e..9531eb7ae 100644 --- a/apps/dokploy/templates/templates.ts +++ b/apps/dokploy/templates/templates.ts @@ -1,37 +1,6 @@ import type { TemplateData } from "./types/templates-data.type"; export const templates: TemplateData[] = [ - { - id: "appwrite", - name: "Appwrite", - version: "1.6.0", - description: - "Appwrite is an end-to-end backend server for Web, Mobile, Native, or Backend apps. Appwrite abstracts the complexity and repetitiveness required to build a modern backend API from scratch and allows you to build secure apps faster.\n" + - "Using Appwrite, you can easily integrate your app with user authentication and multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, Cloud Functions, messaging, and more services.", - links: { - github: "https://github.com/appwrite/appwrite", - website: "https://appwrite.io/", - docs: "https://appwrite.io/docs", - }, - logo: "appwrite.svg", - tags: ["database", "firebase", "postgres"], - load: () => import("./appwrite/index").then((m) => m.generate), - }, - { - id: "outline", - name: "Outline", - version: "0.82.0", - description: - "Outline is a self-hosted knowledge base and documentation platform that allows you to build and manage your own knowledge base applications.", - links: { - github: "https://github.com/outline/outline", - website: "https://getoutline.com/", - docs: "https://docs.getoutline.com/s/guide", - }, - logo: "outline.png", - load: () => import("./outline/index").then((m) => m.generate), - tags: ["documentation", "knowledge-base", "self-hosted"], - }, { id: "supabase", name: "SupaBase", @@ -65,7 +34,7 @@ export const templates: TemplateData[] = [ { id: "plausible", name: "Plausible", - version: "v2.1.5", + version: "v2.1.4", description: "Plausible is a open source, self-hosted web analytics platform that lets you track website traffic and user behavior.", logo: "plausible.svg", @@ -201,7 +170,7 @@ export const templates: TemplateData[] = [ { id: "wordpress", name: "Wordpress", - version: "6.7.1", + version: "5.8.3", description: "Wordpress is a free and open source content management system (CMS) for publishing and managing websites.", logo: "wordpress.png", @@ -393,21 +362,6 @@ export const templates: TemplateData[] = [ tags: ["chat"], load: () => import("./open-webui/index").then((m) => m.generate), }, - { - id: "mailpit", - name: "Mailpit", - version: "v1.22.3", - description: - "Mailpit is a tiny, self-contained, and secure email & SMTP testing tool with API for developers.", - logo: "mailpit.svg", - links: { - github: "https://github.com/axllent/mailpit", - website: "https://mailpit.axllent.org/", - docs: "https://mailpit.axllent.org/docs/", - }, - tags: ["email", "smtp"], - load: () => import("./mailpit/index").then((m) => m.generate), - }, { id: "listmonk", name: "Listmonk", @@ -441,7 +395,7 @@ export const templates: TemplateData[] = [ { id: "umami", name: "Umami", - version: "v2.16.1", + version: "v2.14.0", description: "Umami is a simple, fast, privacy-focused alternative to Google Analytics.", logo: "umami.png", @@ -584,7 +538,7 @@ export const templates: TemplateData[] = [ website: "https://filebrowser.org/", docs: "https://filebrowser.org/", }, - tags: ["file-manager", "storage"], + tags: ["file", "manager"], load: () => import("./filebrowser/index").then((m) => m.generate), }, { @@ -677,21 +631,6 @@ export const templates: TemplateData[] = [ tags: ["open-source"], load: () => import("./vaultwarden/index").then((m) => m.generate), }, - { - id: "linkwarden", - name: "Linkwarden", - version: "2.9.3", - description: - "Self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.", - logo: "linkwarden.png", - links: { - github: "https://github.com/linkwarden/linkwarden", - website: "https://linkwarden.app/", - docs: "https://docs.linkwarden.app/", - }, - tags: ["bookmarks", "link-sharing"], - load: () => import("./linkwarden/index").then((m) => m.generate), - }, { id: "hi-events", name: "Hi.events", @@ -895,7 +834,7 @@ export const templates: TemplateData[] = [ website: "https://nextcloud.com/", docs: "https://docs.nextcloud.com/", }, - tags: ["file-manager", "sync"], + tags: ["file", "sync"], load: () => import("./nextcloud-aio/index").then((m) => m.generate), }, { @@ -1123,21 +1062,6 @@ export const templates: TemplateData[] = [ tags: ["identity", "auth"], load: () => import("./logto/index").then((m) => m.generate), }, - { - id: "pocket-id", - name: "Pocket ID", - version: "0.35.1", - description: - "A simple and easy-to-use OIDC provider that allows users to authenticate with their passkeys to your services.", - logo: "pocket-id.svg", - links: { - github: "https://github.com/pocket-id/pocket-id", - website: "https://pocket-id.org/", - docs: "https://pocket-id.org/docs", - }, - tags: ["identity", "auth"], - load: () => import("./pocket-id/index").then((m) => m.generate), - }, { id: "penpot", name: "Penpot", @@ -1150,7 +1074,7 @@ export const templates: TemplateData[] = [ website: "https://penpot.app/", docs: "https://docs.penpot.app/", }, - tags: ["design", "collaboration"], + tags: ["desing", "collaboration"], load: () => import("./penpot/index").then((m) => m.generate), }, { @@ -1171,9 +1095,9 @@ export const templates: TemplateData[] = [ { id: "unsend", name: "Unsend", - version: "v1.3.2", + version: "v1.2.4", description: "Open source alternative to Resend,Sendgrid, Postmark etc. ", - logo: "unsend.png", + logo: "unsend.png", // we defined the name and the extension of the logo links: { github: "https://github.com/unsend-dev/unsend", website: "https://unsend.dev/", @@ -1315,21 +1239,6 @@ export const templates: TemplateData[] = [ tags: ["matrix", "communication"], load: () => import("./conduit/index").then((m) => m.generate), }, - { - id: "evolutionapi", - name: "Evolution API", - version: "v2.1.2", - description: - "Evolution API is a robust platform dedicated to empowering small businesses with limited resources, going beyond a simple messaging solution via WhatsApp.", - logo: "evolutionapi.png", - links: { - github: "https://github.com/EvolutionAPI/evolution-api", - docs: "https://doc.evolution-api.com/v2/en/get-started/introduction", - website: "https://evolution-api.com/opensource-whatsapp-api/", - }, - tags: ["api", "whatsapp", "messaging"], - load: () => import("./evolutionapi/index").then((m) => m.generate), - }, { id: "conduwuit", name: "Conduwuit", @@ -1367,11 +1276,11 @@ export const templates: TemplateData[] = [ version: "latest", description: "CouchDB is a document-oriented NoSQL database that excels at replication and horizontal scaling.", - logo: "couchdb.png", + logo: "couchdb.png", // we defined the name and the extension of the logo links: { - github: "https://github.com/apache/couchdb", - website: "https://couchdb.apache.org/", - docs: "https://docs.couchdb.org/en/stable/", + github: "lorem", + website: "lorem", + docs: "lorem", }, tags: ["database", "storage"], load: () => import("./couchdb/index").then((m) => m.generate), @@ -1389,233 +1298,4 @@ export const templates: TemplateData[] = [ tags: ["developer", "tools"], load: () => import("./it-tools/index").then((m) => m.generate), }, - { - id: "superset", - name: "Superset (Unofficial)", - version: "latest", - description: "Data visualization and data exploration platform.", - logo: "superset.svg", - links: { - github: "https://github.com/amancevice/docker-superset", - website: "https://superset.apache.org", - docs: "https://superset.apache.org/docs/intro", - }, - tags: ["analytics", "bi", "dashboard", "database", "sql"], - load: () => import("./superset/index").then((m) => m.generate), - }, - { - id: "glance", - name: "Glance", - version: "latest", - description: - "A self-hosted dashboard that puts all your feeds in one place. Features RSS feeds, weather, bookmarks, site monitoring, and more in a minimal, fast interface.", - logo: "glance.png", - links: { - github: "https://github.com/glanceapp/glance", - docs: "https://github.com/glanceapp/glance/blob/main/docs/configuration.md", - }, - tags: ["dashboard", "monitoring", "widgets", "rss"], - load: () => import("./glance/index").then((m) => m.generate), - }, - { - id: "homarr", - name: "Homarr", - version: "latest", - description: - "A sleek, modern dashboard that puts all your apps and services in one place with Docker integration.", - logo: "homarr.png", - links: { - github: "https://github.com/homarr-labs/homarr", - docs: "https://homarr.dev/docs/getting-started/installation/docker", - website: "https://homarr.dev/", - }, - tags: ["dashboard", "monitoring"], - load: () => import("./homarr/index").then((m) => m.generate), - }, - { - id: "erpnext", - name: "ERPNext", - version: "version-15", - description: "100% Open Source and highly customizable ERP software.", - logo: "erpnext.svg", - links: { - github: "https://github.com/frappe/erpnext", - docs: "https://docs.frappe.io/erpnext", - website: "https://erpnext.com", - }, - tags: [ - "erp", - "accounts", - "manufacturing", - "retail", - "sales", - "pos", - "hrms", - ], - load: () => import("./erpnext/index").then((m) => m.generate), - }, - { - id: "maybe", - name: "Maybe", - version: "latest", - description: - "Maybe is a self-hosted finance tracking application designed to simplify budgeting and expenses.", - logo: "maybe.svg", - links: { - github: "https://github.com/maybe-finance/maybe", - website: "https://maybe.finance/", - docs: "https://docs.maybe.finance/", - }, - tags: ["finance", "self-hosted"], - load: () => import("./maybe/index").then((m) => m.generate), - }, - { - id: "spacedrive", - name: "Spacedrive", - version: "latest", - description: - "Spacedrive is a cross-platform file manager. It connects your devices together to help you organize files from anywhere. powered by a virtual distributed filesystem (VDFS) written in Rust. Organize files across many devices in one place.", - links: { - github: "https://github.com/spacedriveapp/spacedrive", - website: "https://spacedrive.com/", - docs: "https://www.spacedrive.com/docs/product/getting-started/introduction", - }, - logo: "spacedrive.png", - tags: ["file-manager", "vdfs", "storage"], - load: () => import("./spacedrive/index").then((m) => m.generate), - }, - { - id: "registry", - name: "Docker Registry", - version: "2", - description: - "Distribution implementation for storing and distributing of Docker container images and artifacts.", - links: { - github: "https://github.com/distribution/distribution", - website: "https://hub.docker.com/_/registry", - docs: "https://distribution.github.io/distribution/", - }, - logo: "registry.png", - tags: ["registry", "docker", "self-hosted"], - load: () => import("./registry/index").then((m) => m.generate), - }, - { - id: "alist", - name: "AList", - version: "v3.41.0", - description: - "🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs.", - logo: "alist.svg", - links: { - github: "https://github.com/AlistGo/alist", - website: "https://alist.nn.ci", - docs: "https://alist.nn.ci/guide/install/docker.html", - }, - tags: ["file", "webdav", "storage"], - load: () => import("./alist/index").then((m) => m.generate), - }, - { - id: "answer", - name: "Answer", - version: "v1.4.1", - description: - "Answer is an open-source Q&A platform for building a self-hosted question-and-answer service.", - logo: "answer.png", - links: { - github: "https://github.com/apache/answer", - website: "https://answer.apache.org/", - docs: "https://answer.apache.org/docs", - }, - tags: ["q&a", "self-hosted"], - load: () => import("./answer/index").then((m) => m.generate), - }, - { - id: "shlink", - name: "Shlink", - version: "stable", - description: - "URL shortener that can be used to serve shortened URLs under your own domain.", - logo: "shlink.svg", - links: { - github: "https://github.com/shlinkio/shlink", - website: "https://shlink.io", - docs: "https://shlink.io/documentation", - }, - tags: ["sharing", "shortener", "url"], - load: () => import("./shlink/index").then((m) => m.generate), - }, - { - id: "frappe-hr", - name: "Frappe HR", - version: "version-15", - description: - "Feature rich HR & Payroll software. 100% FOSS and customizable.", - logo: "frappe-hr.svg", - links: { - github: "https://github.com/frappe/hrms", - docs: "https://docs.frappe.io/hr", - website: "https://frappe.io/hr", - }, - tags: ["hrms", "payroll", "leaves", "expenses", "attendance", "performace"], - load: () => import("./frappe-hr/index").then((m) => m.generate), - }, - { - id: "formbricks", - name: "Formbricks", - version: "v3.1.3", - description: - "Formbricks is an open-source survey and form platform for collecting user data.", - logo: "formbricks.png", - links: { - github: "https://github.com/formbricks/formbricks", - website: "https://formbricks.com/", - docs: "https://formbricks.com/docs", - }, - tags: ["forms", "analytics"], - load: () => import("./formbricks/index").then((m) => m.generate), - }, - { - id: "trilium", - name: "Trilium", - description: - "Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases.", - logo: "trilium.png", - version: "latest", - links: { - github: "https://github.com/zadam/trilium", - website: "https://github.com/zadam/trilium", - docs: "https://github.com/zadam/trilium/wiki/", - }, - tags: ["self-hosted", "productivity", "personal-use"], - load: () => import("./trilium/index").then((m) => m.generate), - }, - { - id: "convex", - name: "Convex", - version: "latest", - description: - "Convex is an open-source reactive database designed to make life easy for web app developers.", - logo: "convex.svg", - links: { - github: "https://github.com/get-convex/convex", - website: "https://www.convex.dev/", - docs: "https://www.convex.dev/docs", - }, - tags: ["backend", "database", "api"], - load: () => import("./convex/index").then((m) => m.generate), - }, - { - id: "wikijs", - name: "Wiki.js", - version: "2.5", - description: "The most powerful and extensible open source Wiki software.", - logo: "wikijs.svg", - links: { - github: "https://github.com/requarks/wiki", - website: "https://js.wiki/", - docs: "https://docs.requarks.io/", - }, - tags: ["knowledge-base", "self-hosted", "documentation"], - load: () => import("./wikijs/index").then((m) => m.generate), - }, ]; diff --git a/apps/dokploy/templates/triggerdotdev/index.ts b/apps/dokploy/templates/triggerdotdev/index.ts index c11c708b5..7b894acba 100644 --- a/apps/dokploy/templates/triggerdotdev/index.ts +++ b/apps/dokploy/templates/triggerdotdev/index.ts @@ -1,3 +1,4 @@ +import { Secrets } from "@/components/ui/secrets"; import { type DomainSchema, type Schema, diff --git a/apps/dokploy/templates/trilium/docker-compose.yml b/apps/dokploy/templates/trilium/docker-compose.yml deleted file mode 100644 index f549d8204..000000000 --- a/apps/dokploy/templates/trilium/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -services: - trilium: - image: zadam/trilium:latest - ports: - - 8080 - networks: - - dokploy-network - restart: always - volumes: - - /root/trilium-backups:/home/node/trilium-data/backup - -networks: - dokploy-network: - external: true diff --git a/apps/dokploy/templates/trilium/index.ts b/apps/dokploy/templates/trilium/index.ts deleted file mode 100644 index acac98413..000000000 --- a/apps/dokploy/templates/trilium/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const triliumDomain = generateRandomDomain(schema); - - const domains: DomainSchema[] = [ - { - host: triliumDomain, - port: 8080, - serviceName: "trilium", - }, - ]; - - return { - domains, - }; -} diff --git a/apps/dokploy/templates/twenty/docker-compose.yml b/apps/dokploy/templates/twenty/docker-compose.yml index 800e9a724..34c70aeb3 100644 --- a/apps/dokploy/templates/twenty/docker-compose.yml +++ b/apps/dokploy/templates/twenty/docker-compose.yml @@ -4,7 +4,8 @@ services: twenty-change-vol-ownership: image: ubuntu user: root - + networks: + - dokploy-network volumes: - twenty-server-local-data:/tmp/server-local-data - twenty-docker-data:/tmp/docker-data @@ -15,7 +16,8 @@ services: twenty-server: image: twentycrm/twenty:latest - + networks: + - dokploy-network volumes: - twenty-server-local-data:/app/packages/twenty-server/${STORAGE_LOCAL_PATH:-.local-storage} - twenty-docker-data:/app/docker-data @@ -43,7 +45,8 @@ services: twenty-worker: image: twentycrm/twenty:latest - + networks: + - dokploy-network command: ["yarn", "worker:prod"] environment: PG_DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@twenty-postgres:5432/twenty @@ -62,7 +65,8 @@ services: twenty-postgres: image: postgres:16-alpine - + networks: + - dokploy-network volumes: - twenty-postgres-data:/var/lib/postgresql/data environment: @@ -78,7 +82,8 @@ services: twenty-redis: image: redis:latest - + networks: + - dokploy-network volumes: - twenty-redis-data:/data healthcheck: diff --git a/apps/dokploy/templates/typebot/docker-compose.yml b/apps/dokploy/templates/typebot/docker-compose.yml index 7881bd8f6..739793fe2 100644 --- a/apps/dokploy/templates/typebot/docker-compose.yml +++ b/apps/dokploy/templates/typebot/docker-compose.yml @@ -13,7 +13,8 @@ services: POSTGRES_USER: typebot POSTGRES_DB: typebot POSTGRES_PASSWORD: typebot - + networks: + - dokploy-network typebot-builder: image: baptistearno/typebot-builder:2.27 diff --git a/apps/dokploy/templates/umami/docker-compose.yml b/apps/dokploy/templates/umami/docker-compose.yml index 26efd337c..191c4803d 100644 --- a/apps/dokploy/templates/umami/docker-compose.yml +++ b/apps/dokploy/templates/umami/docker-compose.yml @@ -1,6 +1,6 @@ services: umami: - image: ghcr.io/umami-software/umami:postgresql-v2.16.1 + image: ghcr.io/umami-software/umami:postgresql-v2.14.0 restart: always healthcheck: test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] @@ -22,7 +22,8 @@ services: interval: 5s timeout: 5s retries: 5 - + networks: + - dokploy-network volumes: - db-data:/var/lib/postgresql/data environment: diff --git a/apps/dokploy/templates/unifi/docker-compose.yml b/apps/dokploy/templates/unifi/docker-compose.yml index cf0102c00..ee531f67a 100644 --- a/apps/dokploy/templates/unifi/docker-compose.yml +++ b/apps/dokploy/templates/unifi/docker-compose.yml @@ -29,7 +29,8 @@ services: restart: unless-stopped depends_on: - unifi-db - + networks: + - dokploy-network unifi-db: image: mongo:4.4 @@ -39,7 +40,8 @@ services: ports: - 27017 restart: unless-stopped - + networks: + - dokploy-network networks: dokploy-network: diff --git a/apps/dokploy/templates/unifi/index.ts b/apps/dokploy/templates/unifi/index.ts index ea67b0fae..975ce63d9 100644 --- a/apps/dokploy/templates/unifi/index.ts +++ b/apps/dokploy/templates/unifi/index.ts @@ -1,6 +1,6 @@ import type { Schema, Template } from "../utils"; -export function generate(_schema: Schema): Template { +export function generate(schema: Schema): Template { const mounts: Template["mounts"] = [ { filePath: "init-mongo.sh", diff --git a/apps/dokploy/templates/unsend/docker-compose.yml b/apps/dokploy/templates/unsend/docker-compose.yml index 93e802951..cdf02de6c 100644 --- a/apps/dokploy/templates/unsend/docker-compose.yml +++ b/apps/dokploy/templates/unsend/docker-compose.yml @@ -3,7 +3,8 @@ name: unsend-prod services: unsend-db-prod: image: postgres:16 - + networks: + - dokploy-network restart: always environment: - POSTGRES_USER=${POSTGRES_USER:?err} @@ -21,7 +22,8 @@ services: unsend-redis-prod: image: redis:7 - + networks: + - dokploy-network restart: always # ports: # - "6379:6379" @@ -31,7 +33,8 @@ services: unsend-storage-prod: image: minio/minio:RELEASE.2024-11-07T00-52-20Z - + networks: + - dokploy-network ports: - 9002 - 9001 @@ -44,7 +47,9 @@ services: command: -c 'mkdir -p /data/unsend && minio server /data --console-address ":9001" --address ":9002"' unsend: - image: unsend/unsend:v1.3.2 + image: unsend/unsend:v1.2.4 + networks: + - dokploy-network restart: always ports: - ${PORT:-3000} diff --git a/apps/dokploy/templates/unsend/index.ts b/apps/dokploy/templates/unsend/index.ts index dcc80f66e..1c4c9c715 100644 --- a/apps/dokploy/templates/unsend/index.ts +++ b/apps/dokploy/templates/unsend/index.ts @@ -3,6 +3,7 @@ import { type Schema, type Template, generateBase64, + generateHash, generateRandomDomain, } from "../utils"; diff --git a/apps/dokploy/templates/utils/index.ts b/apps/dokploy/templates/utils/index.ts index 941afc806..b5369b916 100644 --- a/apps/dokploy/templates/utils/index.ts +++ b/apps/dokploy/templates/utils/index.ts @@ -12,9 +12,7 @@ export interface Schema { projectName: string; } -export type DomainSchema = Pick & { - path?: string; -}; +export type DomainSchema = Pick; export interface Template { envs?: string[]; diff --git a/apps/dokploy/templates/wikijs/docker-compose.yml b/apps/dokploy/templates/wikijs/docker-compose.yml deleted file mode 100644 index 6b21423d1..000000000 --- a/apps/dokploy/templates/wikijs/docker-compose.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: '3.5' -services: - wiki: - image: ghcr.io/requarks/wiki:2.5 - restart: unless-stopped - environment: - - DB_TYPE - - DB_HOST - - DB_PORT - - DB_USER - - DB_PASS - - DB_NAME - depends_on: - - db - labels: - - traefik.enable=true - - traefik.constraint-label-stack=wikijs - db: - image: postgres:14 - restart: unless-stopped - environment: - - POSTGRES_USER - - POSTGRES_PASSWORD - - POSTGRES_DB - volumes: - - wiki-db-data:/var/lib/postgresql/data -networks: - dokploy-network: - external: true -volumes: - wiki-db-data: diff --git a/apps/dokploy/templates/wikijs/index.ts b/apps/dokploy/templates/wikijs/index.ts deleted file mode 100644 index ff6c234de..000000000 --- a/apps/dokploy/templates/wikijs/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - type DomainSchema, - type Schema, - type Template, - generateRandomDomain, -} from "../utils"; - -export function generate(schema: Schema): Template { - const domains: DomainSchema[] = [ - { - host: generateRandomDomain(schema), - port: 3000, - serviceName: "wiki", - }, - ]; - - const envs = [ - "# Database Setup", - "POSTGRES_USER=wikijs", - "POSTGRES_PASSWORD=wikijsrocks", - "POSTGRES_DB=wiki", - "# WikiJS Database Connection", - "DB_TYPE=postgres", - "DB_HOST=db", - "DB_PORT=5432", - "DB_USER=wikijs", - "DB_PASS=wikijsrocks", - "DB_NAME=wiki", - ]; - - return { - domains, - envs, - }; -} diff --git a/apps/dokploy/templates/windmill/docker-compose.yml b/apps/dokploy/templates/windmill/docker-compose.yml index 9e91fa0ab..de91ee55f 100644 --- a/apps/dokploy/templates/windmill/docker-compose.yml +++ b/apps/dokploy/templates/windmill/docker-compose.yml @@ -7,7 +7,8 @@ services: restart: unless-stopped volumes: - windmill-postgres-data:/var/lib/postgresql/data - + networks: + - dokploy-network environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: windmill @@ -19,7 +20,8 @@ services: windmill-server: image: ghcr.io/windmill-labs/windmill:main - + networks: + - dokploy-network restart: unless-stopped environment: - DATABASE_URL=${DATABASE_URL} @@ -40,7 +42,8 @@ services: cpus: "1" memory: 2048M restart: unless-stopped - + networks: + - dokploy-network environment: - DATABASE_URL=${DATABASE_URL} - MODE=worker @@ -62,7 +65,8 @@ services: cpus: "0.1" memory: 128M restart: unless-stopped - + networks: + - dokploy-network environment: - DATABASE_URL=${DATABASE_URL} - MODE=worker @@ -78,14 +82,16 @@ services: windmill-lsp: image: ghcr.io/windmill-labs/windmill-lsp:latest restart: unless-stopped - + networks: + - dokploy-network volumes: - windmill-lsp-cache:/root/.cache windmill-caddy: image: ghcr.io/windmill-labs/caddy-l4:latest restart: unless-stopped - + networks: + - dokploy-network volumes: - ../files/Caddyfile:/etc/caddy/Caddyfile environment: diff --git a/apps/dokploy/templates/wordpress/docker-compose.yml b/apps/dokploy/templates/wordpress/docker-compose.yml index f2fc4d9a5..7647859d8 100644 --- a/apps/dokploy/templates/wordpress/docker-compose.yml +++ b/apps/dokploy/templates/wordpress/docker-compose.yml @@ -12,6 +12,8 @@ services: db: image: mysql:5.7.34 + networks: + - dokploy-network environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser diff --git a/apps/dokploy/templates/yourls/docker-compose.yml b/apps/dokploy/templates/yourls/docker-compose.yml index f4aa16e35..ff2e14d93 100644 --- a/apps/dokploy/templates/yourls/docker-compose.yml +++ b/apps/dokploy/templates/yourls/docker-compose.yml @@ -3,7 +3,8 @@ version: '3.7' services: yourls-app: image: yourls:1.9.2 - + networks: + - dokploy-network environment: YOURLS_SITE: https://${YOURLS_HOST} YOURLS_USER: ${YOURLS_ADMIN_USER} @@ -21,7 +22,8 @@ services: yourls-mysql: image: mysql:5.7 - + networks: + - dokploy-network environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: yourls diff --git a/apps/dokploy/templates/zipline/docker-compose.yml b/apps/dokploy/templates/zipline/docker-compose.yml index e29132df0..808b0b89a 100644 --- a/apps/dokploy/templates/zipline/docker-compose.yml +++ b/apps/dokploy/templates/zipline/docker-compose.yml @@ -2,7 +2,8 @@ version: "3" services: postgres: image: postgres:15 - + networks: + - dokploy-network restart: unless-stopped environment: - POSTGRES_USER=postgres diff --git a/apps/monitoring/.gitignore b/apps/monitoring/.gitignore deleted file mode 100644 index b3532fce9..000000000 --- a/apps/monitoring/.gitignore +++ /dev/null @@ -1 +0,0 @@ -monitoring.db \ No newline at end of file diff --git a/apps/monitoring/LICENSE.md b/apps/monitoring/LICENSE.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/monitoring/README.md b/apps/monitoring/README.md deleted file mode 100644 index 3d0e1fa61..000000000 --- a/apps/monitoring/README.md +++ /dev/null @@ -1,154 +0,0 @@ -# Dokploy Monitoring (Go Version) - -Application that powers Dokploy's monitoring service. - -You can use it for monitoring any external service. - -## Requirements - -- Go 1.21 - -## Configuration - -Create a `.env` file in the root of the project with the following content: - -```shell -METRICS_CONFIG='{ - "server": { - "refreshRate": 25, - "port": 3001, - "type": "Remote | Dokploy", - "token": "metrics", - "urlCallback": "http://localhost:3000/api/trpc/notification.receiveNotification", - "retentionDays": 7, - "cronJob": "0 0 * * *", - "thresholds": { - "cpu": 0, - "memory": 0 - } - }, - "containers": { - "refreshRate": 25, - "services": { - "include": ["testing-elasticsearch-14649e"], - "exclude": [] - } - } -}' -``` - -## Installation - -```bash -go mod download -``` - -## Execution - -```bash -go run main.go -``` - -## Endpoints - -- `GET /health` - Check service health status (no authentication required) -- `GET /metrics?limit=` - Get server metrics (default limit: 50) -- `GET /metrics/containers?limit=&appName=` - Get container metrics for a specific application (default limit: 50) - -## Features - -### Server - -- CPU Usage (%) -- Memory Usage (%) -- Disk -- Network -- CPU Model -- Operating System -- Kernel -- Architecture -- Threads - -Example response: - -| Field | Value | -| ------------------ | --------------------------- | -| timestamp | 2025-01-19T21:44:54.232164Z | -| cpu | 24.57% | -| cpu_model | Apple M1 Pro | -| cpu_cores | 8 | -| cpu_physical_cores | 1 | -| cpu_speed | 3228.0 MHz | -| os | darwin | -| distro | darwin | -| kernel | 23.4.0 | -| arch | arm64 | -| mem_used | 81.91% | -| mem_used_gb | 13.11 GB | -| mem_total | 16.0 GB | -| uptime | 752232s | -| disk_used | 89.34% | -| total_disk | 460.43 GB | -| network_in | 54.78 MB | -| network_out | 31.72 MB | - -### Containers - -Compatible with all Docker container types (standalone containers, Docker Compose, and Docker Swarm stacks). Note: When monitoring Docker Compose or Swarm stacks, use the `--p` flag to properly identify all services within the stack. - -Example response: - -| Field | Value | -| -------------- | ------------------------------------- | -| id | 1 | -| timestamp | 2025-01-19T22:16:30.796129Z | -| container_id | 7428f5a49039 | -| container_name | testing-elasticsearch-14649e-kibana-1 | - -Metrics JSON: - -```json -{ - "timestamp": "2025-01-19T22:16:30.796129Z", - "CPU": 83.76, - "Memory": { - "percentage": 0.03, - "used": 2.262, - "total": 7.654, - "usedUnit": "MB", - "totalUnit": "GB" - }, - "Network": { - "input": 306, - "output": 0, - "inputUnit": "B", - "outputUnit": "B" - }, - "BlockIO": { - "read": 28.7, - "write": 0, - "readUnit": "kB", - "writeUnit": "B" - }, - "Container": "7428f5a49039", - "ID": "7428f5a49039", - "Name": "testing-elasticsearch-14649e-kibana-1" -} -``` - -## Notifications - -Dokploy uses a callback URL to send notifications when metrics exceed configured thresholds. Notifications are sent via POST request in the following format: - -Note: Setting a threshold to 0 disables notifications for that metric. - -```typescript -interface Notification { - Type: "Memory" | "CPU"; - Value: number; - Threshold: number; - Message: string; - Timestamp: string; - Token: string; -} -``` diff --git a/apps/monitoring/config/metrics.go b/apps/monitoring/config/metrics.go deleted file mode 100644 index 568b2d065..000000000 --- a/apps/monitoring/config/metrics.go +++ /dev/null @@ -1,57 +0,0 @@ -package config - -import ( - "encoding/json" - "log" - "os" - "sync" -) - -type Config struct { - Server struct { - ServerType string `json:"type"` - RefreshRate int `json:"refreshRate"` - Port int `json:"port"` - Token string `json:"token"` - UrlCallback string `json:"urlCallback"` - CronJob string `json:"cronJob"` - RetentionDays int `json:"retentionDays"` - Thresholds struct { - CPU int `json:"cpu"` - Memory int `json:"memory"` - } `json:"thresholds"` - } `json:"server"` - Containers struct { - RefreshRate int `json:"refreshRate"` - Services struct { - Include []string `json:"include"` - Exclude []string `json:"exclude"` - } `json:"services"` - } `json:"containers"` -} - -var ( - config *Config - configOnce sync.Once -) - -func GetMetricsConfig() *Config { - configOnce.Do(func() { - configJSON := os.Getenv("METRICS_CONFIG") - if configJSON == "" { - log.Fatal("METRICS_CONFIG environment variable is required") - } - - config = &Config{} - if err := json.Unmarshal([]byte(configJSON), config); err != nil { - log.Fatalf("Error parsing METRICS_CONFIG: %v", err) - } - - // Validate required fields - if config.Server.Token == "" || config.Server.UrlCallback == "" { - log.Fatal("token and urlCallback are required in the configuration") - } - }) - - return config -} diff --git a/apps/monitoring/containers/config.go b/apps/monitoring/containers/config.go deleted file mode 100644 index a974bbe3f..000000000 --- a/apps/monitoring/containers/config.go +++ /dev/null @@ -1,61 +0,0 @@ -package containers - -import ( - "strings" - - "github.com/mauriciogm/dokploy/apps/monitoring/config" -) - -var monitorConfig *MonitoringConfig - -func LoadConfig() error { - cfg := config.GetMetricsConfig() - monitorConfig = &MonitoringConfig{ - IncludeServices: make([]string, len(cfg.Containers.Services.Include)), - ExcludeServices: make([]string, len(cfg.Containers.Services.Exclude)), - } - - // Convert Include services - for i, svc := range cfg.Containers.Services.Include { - monitorConfig.IncludeServices[i] = svc - } - - // Convert Exclude services - for i, appName := range cfg.Containers.Services.Exclude { - monitorConfig.ExcludeServices[i] = appName - } - - return nil -} - -func ShouldMonitorContainer(containerName string) bool { - if monitorConfig == nil { - return false - } - - for _, excluded := range monitorConfig.ExcludeServices { - if strings.Contains(containerName, excluded) { - return false - } - } - - if len(monitorConfig.IncludeServices) > 0 { - for _, included := range monitorConfig.IncludeServices { - if strings.Contains(containerName, included) { - return true - } - } - return false - } - - return true -} - -func GetServiceName(containerName string) string { - name := strings.TrimPrefix(containerName, "/") - parts := strings.Split(name, "-") - if len(parts) > 1 { - return strings.Join(parts[:len(parts)-1], "-") - } - return name -} diff --git a/apps/monitoring/containers/monitor.go b/apps/monitoring/containers/monitor.go deleted file mode 100644 index ff658642a..000000000 --- a/apps/monitoring/containers/monitor.go +++ /dev/null @@ -1,270 +0,0 @@ -package containers - -import ( - "encoding/json" - "fmt" - "log" - "os/exec" - "strconv" - "strings" - "sync" - "time" - - "github.com/mauriciogm/dokploy/apps/monitoring/config" - "github.com/mauriciogm/dokploy/apps/monitoring/database" -) - -type ContainerMonitor struct { - db *database.DB - isRunning bool - mu sync.Mutex - stopChan chan struct{} -} - -func NewContainerMonitor(db *database.DB) (*ContainerMonitor, error) { - if err := db.InitContainerMetricsTable(); err != nil { - return nil, fmt.Errorf("failed to initialize container metrics table: %v", err) - } - - return &ContainerMonitor{ - db: db, - stopChan: make(chan struct{}), - }, nil -} - -func (cm *ContainerMonitor) Start() error { - if err := LoadConfig(); err != nil { - return fmt.Errorf("error loading config: %v", err) - } - - // Check if there are services to monitor - if len(monitorConfig.IncludeServices) == 0 { - log.Printf("No services to monitor. Skipping container metrics collection") - return nil - } - - metricsConfig := config.GetMetricsConfig() - refreshRate := metricsConfig.Containers.RefreshRate - if refreshRate == 0 { - refreshRate = 60 // default refresh rate - } - duration := time.Duration(refreshRate) * time.Second - - // log.Printf("Container metrics collection will run every %d seconds for services: %v", refreshRate, monitorConfig.IncludeServices) - - ticker := time.NewTicker(duration) - go func() { - for { - select { - case <-ticker.C: - // Check again in case the configuration has changed - if len(monitorConfig.IncludeServices) == 0 { - log.Printf("No services to monitor. Stopping metrics collection") - ticker.Stop() - return - } - cm.collectMetrics() - case <-cm.stopChan: - ticker.Stop() - return - } - } - }() - - return nil -} - -func (cm *ContainerMonitor) Stop() { - close(cm.stopChan) -} - -func (cm *ContainerMonitor) collectMetrics() { - cm.mu.Lock() - if cm.isRunning { - cm.mu.Unlock() - log.Println("Previous collection still running, skipping...") - return - } - cm.isRunning = true - cm.mu.Unlock() - - defer func() { - cm.mu.Lock() - cm.isRunning = false - cm.mu.Unlock() - }() - - cmd := exec.Command("docker", "stats", "--no-stream", "--format", - `{"BlockIO":"{{.BlockIO}}","CPUPerc":"{{.CPUPerc}}","ID":"{{.ID}}","MemPerc":"{{.MemPerc}}","MemUsage":"{{.MemUsage}}","Name":"{{.Name}}","NetIO":"{{.NetIO}}"}`) - - output, err := cmd.CombinedOutput() - - // log.Printf("Output: %s", string(output)) - if err != nil { - log.Printf("Error getting docker stats: %v", err) - return - } - - lines := string(output) - if lines == "" { - return - } - - seenServices := make(map[string]bool) - for _, line := range strings.Split(lines, "\n") { - if line == "" { - continue - } - - var container Container - if err := json.Unmarshal([]byte(line), &container); err != nil { - log.Printf("Error parsing container data: %v", err) - continue - } - - if !ShouldMonitorContainer(container.Name) { - continue - } - - serviceName := GetServiceName(container.Name) - - if seenServices[serviceName] { - continue - } - - seenServices[serviceName] = true - - // log.Printf("Container: %+v", container) - - // Process metrics - metric := processContainerMetrics(container) - - // log.Printf("Saving metrics for %s: %+v", serviceName, metric) - - if err := cm.db.SaveContainerMetric(metric); err != nil { - log.Printf("Error saving metrics for %s: %v", serviceName, err) - } - } -} - -func processContainerMetrics(container Container) *database.ContainerMetric { - - // Process CPU - cpu, _ := strconv.ParseFloat(strings.TrimSuffix(container.CPUPerc, "%"), 64) - - // Process Memory - memPerc, _ := strconv.ParseFloat(strings.TrimSuffix(container.MemPerc, "%"), 64) - memParts := strings.Split(container.MemUsage, " / ") - - var usedValue, totalValue float64 - var usedUnit, totalUnit string - - if len(memParts) == 2 { - // Process used memory - usedParts := strings.Fields(memParts[0]) - if len(usedParts) > 0 { - usedValue, _ = strconv.ParseFloat(strings.TrimRight(usedParts[0], "MiBGiB"), 64) - usedUnit = strings.TrimLeft(usedParts[0], "0123456789.") - // Convert MiB to MB and GiB to GB - if usedUnit == "MiB" { - usedUnit = "MB" - } else if usedUnit == "GiB" { - usedUnit = "GB" - } - } - - // Process total memory - totalParts := strings.Fields(memParts[1]) - if len(totalParts) > 0 { - totalValue, _ = strconv.ParseFloat(strings.TrimRight(totalParts[0], "MiBGiB"), 64) - totalUnit = strings.TrimLeft(totalParts[0], "0123456789.") - // Convert MiB to MB and GiB to GB - if totalUnit == "MiB" { - totalUnit = "MB" - } else if totalUnit == "GiB" { - totalUnit = "GB" - } - } - } - - // Process Network I/O - netParts := strings.Split(container.NetIO, " / ") - - var netInValue, netOutValue float64 - var netInUnit, netOutUnit string - - if len(netParts) == 2 { - // Process input - inParts := strings.Fields(netParts[0]) - if len(inParts) > 0 { - netInValue, _ = strconv.ParseFloat(strings.TrimRight(inParts[0], "kMGTB"), 64) - netInUnit = strings.TrimLeft(inParts[0], "0123456789.") - } - - // Process output - outParts := strings.Fields(netParts[1]) - if len(outParts) > 0 { - netOutValue, _ = strconv.ParseFloat(strings.TrimRight(outParts[0], "kMGTB"), 64) - netOutUnit = strings.TrimLeft(outParts[0], "0123456789.") - } - } - - // Process Block I/O - blockParts := strings.Split(container.BlockIO, " / ") - - var blockReadValue, blockWriteValue float64 - var blockReadUnit, blockWriteUnit string - - if len(blockParts) == 2 { - // Process read - readParts := strings.Fields(blockParts[0]) - if len(readParts) > 0 { - blockReadValue, _ = strconv.ParseFloat(strings.TrimRight(readParts[0], "kMGTB"), 64) - blockReadUnit = strings.TrimLeft(readParts[0], "0123456789.") - } - - // Process write - writeParts := strings.Fields(blockParts[1]) - if len(writeParts) > 0 { - blockWriteValue, _ = strconv.ParseFloat(strings.TrimRight(writeParts[0], "kMGTB"), 64) - blockWriteUnit = strings.TrimLeft(writeParts[0], "0123456789.") - } - } - - return &database.ContainerMetric{ - Timestamp: time.Now().UTC().Format(time.RFC3339Nano), - CPU: cpu, - Memory: database.MemoryMetric{ - Percentage: memPerc, - Used: usedValue, - Total: totalValue, - UsedUnit: usedUnit, - TotalUnit: totalUnit, - }, - Network: database.NetworkMetric{ - Input: netInValue, - Output: netOutValue, - InputUnit: netInUnit, - OutputUnit: netOutUnit, - }, - BlockIO: database.BlockIOMetric{ - Read: blockReadValue, - Write: blockWriteValue, - ReadUnit: blockReadUnit, - WriteUnit: blockWriteUnit, - }, - Container: container.ID, - ID: container.ID, - Name: container.Name, - } -} - -func parseValue(value string) (float64, string) { - parts := strings.Fields(value) - if len(parts) < 1 { - return 0, "B" - } - v, _ := strconv.ParseFloat(parts[0], 64) - unit := strings.TrimLeft(value, "0123456789.") - return v, unit -} diff --git a/apps/monitoring/containers/types.go b/apps/monitoring/containers/types.go deleted file mode 100644 index c1d1c110e..000000000 --- a/apps/monitoring/containers/types.go +++ /dev/null @@ -1,48 +0,0 @@ -package containers - -type Container struct { - BlockIO string `json:"BlockIO"` - CPUPerc string `json:"CPUPerc"` - ID string `json:"ID"` - MemPerc string `json:"MemPerc"` - MemUsage string `json:"MemUsage"` - Name string `json:"Name"` - NetIO string `json:"NetIO"` -} - -type ContainerMetric struct { - Timestamp string `json:"timestamp"` - CPU float64 `json:"CPU"` - Memory MemoryMetric `json:"Memory"` - Network NetworkMetric `json:"Network"` - BlockIO BlockIOMetric `json:"BlockIO"` - Container string `json:"Container"` - ID string `json:"ID"` - Name string `json:"Name"` -} - -type MemoryMetric struct { - Percentage float64 `json:"percentage"` - Used float64 `json:"used"` - Total float64 `json:"total"` - Unit string `json:"unit"` -} - -type NetworkMetric struct { - Input float64 `json:"input"` - Output float64 `json:"output"` - InputUnit string `json:"inputUnit"` - OutputUnit string `json:"outputUnit"` -} - -type BlockIOMetric struct { - Read float64 `json:"read"` - Write float64 `json:"write"` - ReadUnit string `json:"readUnit"` - WriteUnit string `json:"writeUnit"` -} - -type MonitoringConfig struct { - IncludeServices []string `json:"includeServices"` - ExcludeServices []string `json:"excludeServices"` -} diff --git a/apps/monitoring/database/cleanup.go b/apps/monitoring/database/cleanup.go deleted file mode 100644 index 9ab0bd26d..000000000 --- a/apps/monitoring/database/cleanup.go +++ /dev/null @@ -1,52 +0,0 @@ -package database - -import ( - "database/sql" - "log" - "time" - - "github.com/robfig/cron/v3" -) - -// CleanupMetrics deletes metrics older than the retention period -func CleanupMetrics(db *sql.DB, retentionDays int) error { - cutoffDate := time.Now().AddDate(0, 0, -retentionDays) - cutoffDateStr := cutoffDate.UTC().Format(time.RFC3339Nano) - - containerQuery := `DELETE FROM container_metrics WHERE timestamp < ?` - _, err := db.Exec(containerQuery, cutoffDateStr) - if err != nil { - return err - } - - serverQuery := `DELETE FROM server_metrics WHERE timestamp < ?` - _, err = db.Exec(serverQuery, cutoffDateStr) - if err != nil { - return err - } - - log.Printf("Metrics deleted (older than %d days)", retentionDays) - log.Printf("Cutoff date for both tables: %s", cutoffDateStr) - return nil -} - -// StartMetricsCleanup starts a cron job to periodically clean up metrics -func StartMetricsCleanup(db *sql.DB, retentionDays int, cronExpression string) (*cron.Cron, error) { - c := cron.New() - - _, err := c.AddFunc(cronExpression, func() { - if err := CleanupMetrics(db, retentionDays); err != nil { - log.Printf("Error during metrics cleanup: %v", err) - } - }) - - if err != nil { - return nil, err - } - - c.Start() - log.Printf("Started metrics cleanup job (retention: %d days, cron: %s)", - retentionDays, cronExpression) - - return c, nil -} diff --git a/apps/monitoring/database/containers.go b/apps/monitoring/database/containers.go deleted file mode 100644 index 568ad12e5..000000000 --- a/apps/monitoring/database/containers.go +++ /dev/null @@ -1,160 +0,0 @@ -package database - -import ( - "encoding/json" - "fmt" - "strings" -) - -func (db *DB) InitContainerMetricsTable() error { - _, err := db.Exec(` - CREATE TABLE IF NOT EXISTS container_metrics ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - timestamp TEXT NOT NULL, - container_id TEXT NOT NULL, - container_name TEXT NOT NULL, - metrics_json TEXT NOT NULL - ) - `) - if err != nil { - return fmt.Errorf("error creating container_metrics table: %v", err) - } - - // Crear índices para mejorar el rendimiento - _, err = db.Exec(`CREATE INDEX IF NOT EXISTS idx_container_metrics_timestamp ON container_metrics(timestamp)`) - if err != nil { - return fmt.Errorf("error creating timestamp index: %v", err) - } - - _, err = db.Exec(`CREATE INDEX IF NOT EXISTS idx_container_metrics_name ON container_metrics(container_name)`) - if err != nil { - return fmt.Errorf("error creating name index: %v", err) - } - - return nil -} - -func (db *DB) SaveContainerMetric(metric *ContainerMetric) error { - metricsJSON, err := json.Marshal(metric) - if err != nil { - return fmt.Errorf("error marshaling metrics: %v", err) - } - - _, err = db.Exec(` - INSERT INTO container_metrics (timestamp, container_id, container_name, metrics_json) - VALUES (?, ?, ?, ?) - `, metric.Timestamp, metric.ID, metric.Name, string(metricsJSON)) - return err -} - -func (db *DB) GetLastNContainerMetrics(containerName string, limit int) ([]ContainerMetric, error) { - name := strings.TrimPrefix(containerName, "/") - parts := strings.Split(name, "-") - if len(parts) > 1 { - containerName = strings.Join(parts[:len(parts)-1], "-") - } - - query := ` - WITH recent_metrics AS ( - SELECT metrics_json - FROM container_metrics - WHERE container_name LIKE ? || '%' - ORDER BY timestamp DESC - LIMIT ? - ) - SELECT metrics_json FROM recent_metrics ORDER BY json_extract(metrics_json, '$.timestamp') ASC - ` - rows, err := db.Query(query, containerName, limit) - if err != nil { - return nil, err - } - defer rows.Close() - - var metrics []ContainerMetric - for rows.Next() { - var metricsJSON string - err := rows.Scan(&metricsJSON) - if err != nil { - return nil, err - } - - var metric ContainerMetric - if err := json.Unmarshal([]byte(metricsJSON), &metric); err != nil { - return nil, err - } - metrics = append(metrics, metric) - } - return metrics, nil -} - -func (db *DB) GetAllMetricsContainer(containerName string) ([]ContainerMetric, error) { - name := strings.TrimPrefix(containerName, "/") - parts := strings.Split(name, "-") - if len(parts) > 1 { - containerName = strings.Join(parts[:len(parts)-1], "-") - } - - query := ` - WITH recent_metrics AS ( - SELECT metrics_json - FROM container_metrics - WHERE container_name LIKE ? || '%' - ORDER BY timestamp DESC - ) - SELECT metrics_json FROM recent_metrics ORDER BY json_extract(metrics_json, '$.timestamp') ASC - ` - rows, err := db.Query(query, containerName) - if err != nil { - return nil, err - } - defer rows.Close() - - var metrics []ContainerMetric - for rows.Next() { - var metricsJSON string - err := rows.Scan(&metricsJSON) - if err != nil { - return nil, err - } - - var metric ContainerMetric - if err := json.Unmarshal([]byte(metricsJSON), &metric); err != nil { - return nil, err - } - metrics = append(metrics, metric) - } - return metrics, nil -} - -type ContainerMetric struct { - Timestamp string `json:"timestamp"` - CPU float64 `json:"CPU"` - Memory MemoryMetric `json:"Memory"` - Network NetworkMetric `json:"Network"` - BlockIO BlockIOMetric `json:"BlockIO"` - Container string `json:"Container"` - ID string `json:"ID"` - Name string `json:"Name"` -} - -type MemoryMetric struct { - Percentage float64 `json:"percentage"` - Used float64 `json:"used"` - Total float64 `json:"total"` - UsedUnit string `json:"usedUnit"` - TotalUnit string `json:"totalUnit"` -} - -type NetworkMetric struct { - Input float64 `json:"input"` - Output float64 `json:"output"` - InputUnit string `json:"inputUnit"` - OutputUnit string `json:"outputUnit"` -} - -type BlockIOMetric struct { - Read float64 `json:"read"` - Write float64 `json:"write"` - ReadUnit string `json:"readUnit"` - WriteUnit string `json:"writeUnit"` -} diff --git a/apps/monitoring/database/db.go b/apps/monitoring/database/db.go deleted file mode 100644 index 689564fc5..000000000 --- a/apps/monitoring/database/db.go +++ /dev/null @@ -1,47 +0,0 @@ -package database - -import ( - "database/sql" - - _ "github.com/mattn/go-sqlite3" -) - -type DB struct { - *sql.DB -} - -func InitDB() (*DB, error) { - db, err := sql.Open("sqlite3", "./monitoring.db") - if err != nil { - return nil, err - } - - // Create metrics table if it doesn't exist - _, err = db.Exec(` - CREATE TABLE IF NOT EXISTS server_metrics ( - timestamp TEXT PRIMARY KEY, - cpu REAL, - cpu_model TEXT, - cpu_cores INTEGER, - cpu_physical_cores INTEGER, - cpu_speed REAL, - os TEXT, - distro TEXT, - kernel TEXT, - arch TEXT, - mem_used REAL, - mem_used_gb REAL, - mem_total REAL, - uptime INTEGER, - disk_used REAL, - total_disk REAL, - network_in REAL, - network_out REAL - ) - `) - if err != nil { - return nil, err - } - - return &DB{db}, nil -} diff --git a/apps/monitoring/database/server.go b/apps/monitoring/database/server.go deleted file mode 100644 index 64d22e3df..000000000 --- a/apps/monitoring/database/server.go +++ /dev/null @@ -1,115 +0,0 @@ -package database - -import ( - "time" - - _ "github.com/mattn/go-sqlite3" -) - -type ServerMetric struct { - Timestamp string `json:"timestamp"` - CPU float64 `json:"cpu"` - CPUModel string `json:"cpuModel"` - CPUCores int32 `json:"cpuCores"` - CPUPhysicalCores int32 `json:"cpuPhysicalCores"` - CPUSpeed float64 `json:"cpuSpeed"` - OS string `json:"os"` - Distro string `json:"distro"` - Kernel string `json:"kernel"` - Arch string `json:"arch"` - MemUsed float64 `json:"memUsed"` - MemUsedGB float64 `json:"memUsedGB"` - MemTotal float64 `json:"memTotal"` - Uptime uint64 `json:"uptime"` - DiskUsed float64 `json:"diskUsed"` - TotalDisk float64 `json:"totalDisk"` - NetworkIn float64 `json:"networkIn"` - NetworkOut float64 `json:"networkOut"` -} - -func (db *DB) SaveMetric(metric ServerMetric) error { - if metric.Timestamp == "" { - metric.Timestamp = time.Now().UTC().Format(time.RFC3339Nano) - } - - _, err := db.Exec(` - INSERT INTO server_metrics (timestamp, cpu, cpu_model, cpu_cores, cpu_physical_cores, cpu_speed, os, distro, kernel, arch, mem_used, mem_used_gb, mem_total, uptime, disk_used, total_disk, network_in, network_out) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `, metric.Timestamp, metric.CPU, metric.CPUModel, metric.CPUCores, metric.CPUPhysicalCores, metric.CPUSpeed, metric.OS, metric.Distro, metric.Kernel, metric.Arch, metric.MemUsed, metric.MemUsedGB, metric.MemTotal, metric.Uptime, metric.DiskUsed, metric.TotalDisk, metric.NetworkIn, metric.NetworkOut) - return err -} - -func (db *DB) GetMetricsInRange(start, end time.Time) ([]ServerMetric, error) { - rows, err := db.Query(` - SELECT timestamp, cpu, cpu_model, cpu_cores, cpu_physical_cores, cpu_speed, os, distro, kernel, arch, mem_used, mem_used_gb, mem_total, uptime, disk_used, total_disk, network_in, network_out - FROM server_metrics - WHERE timestamp BETWEEN ? AND ? - ORDER BY timestamp ASC - `, start.UTC().Format(time.RFC3339Nano), end.UTC().Format(time.RFC3339Nano)) - if err != nil { - return nil, err - } - defer rows.Close() - - var metrics []ServerMetric - for rows.Next() { - var m ServerMetric - err := rows.Scan(&m.Timestamp, &m.CPU, &m.CPUModel, &m.CPUCores, &m.CPUPhysicalCores, &m.CPUSpeed, &m.OS, &m.Distro, &m.Kernel, &m.Arch, &m.MemUsed, &m.MemUsedGB, &m.MemTotal, &m.Uptime, &m.DiskUsed, &m.TotalDisk, &m.NetworkIn, &m.NetworkOut) - if err != nil { - return nil, err - } - metrics = append(metrics, m) - } - return metrics, nil -} - -func (db *DB) GetLastNMetrics(n int) ([]ServerMetric, error) { - rows, err := db.Query(` - WITH recent_metrics AS ( - SELECT timestamp, cpu, cpu_model, cpu_cores, cpu_physical_cores, cpu_speed, os, distro, kernel, arch, mem_used, mem_used_gb, mem_total, uptime, disk_used, total_disk, network_in, network_out - FROM server_metrics - ORDER BY timestamp DESC - LIMIT ? - ) - SELECT * FROM recent_metrics - ORDER BY timestamp ASC - `, n) - if err != nil { - return nil, err - } - defer rows.Close() - - var metrics []ServerMetric - for rows.Next() { - var m ServerMetric - err := rows.Scan(&m.Timestamp, &m.CPU, &m.CPUModel, &m.CPUCores, &m.CPUPhysicalCores, &m.CPUSpeed, &m.OS, &m.Distro, &m.Kernel, &m.Arch, &m.MemUsed, &m.MemUsedGB, &m.MemTotal, &m.Uptime, &m.DiskUsed, &m.TotalDisk, &m.NetworkIn, &m.NetworkOut) - if err != nil { - return nil, err - } - metrics = append(metrics, m) - } - return metrics, nil -} - -func (db *DB) GetAllMetrics() ([]ServerMetric, error) { - rows, err := db.Query(` - SELECT timestamp, cpu, cpu_model, cpu_cores, cpu_physical_cores, cpu_speed, os, distro, kernel, arch, mem_used, mem_used_gb, mem_total, uptime, disk_used, total_disk, network_in, network_out - FROM server_metrics - ORDER BY timestamp ASC - `) - if err != nil { - return nil, err - } - defer rows.Close() - - var metrics []ServerMetric - for rows.Next() { - var m ServerMetric - err := rows.Scan(&m.Timestamp, &m.CPU, &m.CPUModel, &m.CPUCores, &m.CPUPhysicalCores, &m.CPUSpeed, &m.OS, &m.Distro, &m.Kernel, &m.Arch, &m.MemUsed, &m.MemUsedGB, &m.MemTotal, &m.Uptime, &m.DiskUsed, &m.TotalDisk, &m.NetworkIn, &m.NetworkOut) - if err != nil { - return nil, err - } - metrics = append(metrics, m) - } - return metrics, nil -} diff --git a/apps/monitoring/go.mod b/apps/monitoring/go.mod deleted file mode 100644 index 2c1590b45..000000000 --- a/apps/monitoring/go.mod +++ /dev/null @@ -1,34 +0,0 @@ -module github.com/mauriciogm/dokploy/apps/monitoring - -go 1.20 - -require ( - github.com/gofiber/fiber/v2 v2.52.6 - github.com/joho/godotenv v1.5.1 - github.com/mattn/go-sqlite3 v1.14.24 - github.com/shirou/gopsutil/v3 v3.24.5 -) - -require ( - github.com/andybalholm/brotli v1.1.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/klauspost/compress v1.17.9 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/rivo/uniseg v0.2.0 // indirect - github.com/robfig/cron/v3 v3.0.1 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/tklauser/go-sysconf v0.3.14 // indirect - github.com/tklauser/numcpus v0.8.0 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.51.0 // indirect - github.com/valyala/tcplisten v1.0.0 // indirect - github.com/yusufpapurcu/wmi v1.2.4 // indirect - golang.org/x/sys v0.28.0 // indirect -) - -replace github.com/mauriciogm/dokploy/apps/monitoring => ./ diff --git a/apps/monitoring/go.sum b/apps/monitoring/go.sum deleted file mode 100644 index 7a4c9db82..000000000 --- a/apps/monitoring/go.sum +++ /dev/null @@ -1,61 +0,0 @@ -github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= -github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/gofiber/fiber/v2 v2.52.6 h1:Rfp+ILPiYSvvVuIPvxrBns+HJp8qGLDnLJawAu27XVI= -github.com/gofiber/fiber/v2 v2.52.6/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= -github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= -github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= -github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= -github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI= -github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU= -github.com/tklauser/go-sysconf v0.3.14/go.mod h1:1ym4lWMLUOhuBOPGtRcJm7tEGX4SCYNEEEtghGG/8uY= -github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYgY= -github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= -github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= -github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= -github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zcalusic/sysinfo v1.1.3 h1:u/AVENkuoikKuIZ4sUEJ6iibpmQP6YpGD8SSMCrqAF0= -github.com/zcalusic/sysinfo v1.1.3/go.mod h1:NX+qYnWGtJVPV0yWldff9uppNKU4h40hJIRPf/pGLv4= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/apps/monitoring/main.go b/apps/monitoring/main.go deleted file mode 100644 index 432ccd24e..000000000 --- a/apps/monitoring/main.go +++ /dev/null @@ -1,164 +0,0 @@ -package main - -import ( - "log" - "os" - "strconv" - "time" - - "github.com/gofiber/fiber/v2" - "github.com/gofiber/fiber/v2/middleware/cors" - "github.com/joho/godotenv" - "github.com/mauriciogm/dokploy/apps/monitoring/config" - "github.com/mauriciogm/dokploy/apps/monitoring/containers" - "github.com/mauriciogm/dokploy/apps/monitoring/database" - "github.com/mauriciogm/dokploy/apps/monitoring/middleware" - "github.com/mauriciogm/dokploy/apps/monitoring/monitoring" -) - -func main() { - godotenv.Load() - - // Get configuration - cfg := config.GetMetricsConfig() - token := cfg.Server.Token - METRICS_URL_CALLBACK := cfg.Server.UrlCallback - log.Printf("Environment variables:") - log.Printf("METRICS_CONFIG: %s", os.Getenv("METRICS_CONFIG")) - - if token == "" || METRICS_URL_CALLBACK == "" { - log.Fatal("token and urlCallback are required in the configuration") - } - - db, err := database.InitDB() - if err != nil { - log.Fatal(err) - } - - // Iniciar el sistema de limpieza de métricas - cleanupCron, err := database.StartMetricsCleanup(db.DB, cfg.Server.RetentionDays, cfg.Server.CronJob) - if err != nil { - log.Fatalf("Error starting metrics cleanup system: %v", err) - } - defer cleanupCron.Stop() - - app := fiber.New() - - app.Use(cors.New(cors.Config{ - AllowOrigins: "*", - AllowHeaders: "Origin, Content-Type, Accept, Authorization", - })) - - app.Get("/health", func(c *fiber.Ctx) error { - return c.JSON(fiber.Map{ - "status": "ok", - }) - }) - - app.Use(func(c *fiber.Ctx) error { - if c.Path() == "/health" { - return c.Next() - } - return middleware.AuthMiddleware()(c) - }) - - app.Get("/metrics", func(c *fiber.Ctx) error { - limit := c.Query("limit", "50") - - var metrics []monitoring.SystemMetrics - if limit == "all" { - dbMetrics, err := db.GetAllMetrics() - if err != nil { - return c.Status(500).JSON(fiber.Map{ - "error": "Failed to fetch metrics", - }) - } - for _, m := range dbMetrics { - metrics = append(metrics, monitoring.ConvertToSystemMetrics(m)) - } - } else { - n, err := strconv.Atoi(limit) - if err != nil { - n = 50 - } - dbMetrics, err := db.GetLastNMetrics(n) - if err != nil { - return c.Status(500).JSON(fiber.Map{ - "error": "Failed to fetch metrics", - }) - } - for _, m := range dbMetrics { - metrics = append(metrics, monitoring.ConvertToSystemMetrics(m)) - } - } - - return c.JSON(metrics) - }) - - containerMonitor, err := containers.NewContainerMonitor(db) - if err != nil { - log.Fatalf("Failed to create container monitor: %v", err) - } - if err := containerMonitor.Start(); err != nil { - log.Fatalf("Failed to start container monitor: %v", err) - } - defer containerMonitor.Stop() - - app.Get("/metrics/containers", func(c *fiber.Ctx) error { - limit := c.Query("limit", "50") - appName := c.Query("appName", "") - - if appName == "" { - return c.JSON([]database.ContainerMetric{}) - } - - var metrics []database.ContainerMetric - var err error - - if limit == "all" { - metrics, err = db.GetAllMetricsContainer(appName) - } else { - limitNum, parseErr := strconv.Atoi(limit) - if parseErr != nil { - limitNum = 50 - } - metrics, err = db.GetLastNContainerMetrics(appName, limitNum) - } - - if err != nil { - return c.Status(500).JSON(fiber.Map{ - "error": "Error getting container metrics: " + err.Error(), - }) - } - - return c.JSON(metrics) - }) - - go func() { - refreshRate := cfg.Server.RefreshRate - duration := time.Duration(refreshRate) * time.Second - - log.Printf("Refreshing server metrics every %v", duration) - ticker := time.NewTicker(duration) - defer ticker.Stop() - - for range ticker.C { - metrics := monitoring.GetServerMetrics() - if err := db.SaveMetric(metrics); err != nil { - log.Printf("Error saving metrics: %v", err) - } - - if err := monitoring.CheckThresholds(metrics); err != nil { - log.Printf("Error checking thresholds: %v", err) - } - } - }() - - port := cfg.Server.Port - if port == 0 { - port = 3001 - } - - log.Printf("Server starting on port %d", port) - log.Fatal(app.Listen(":" + strconv.Itoa(port))) -} diff --git a/apps/monitoring/middleware/auth.go b/apps/monitoring/middleware/auth.go deleted file mode 100644 index 95448213a..000000000 --- a/apps/monitoring/middleware/auth.go +++ /dev/null @@ -1,39 +0,0 @@ -package middleware - -import ( - "strings" - - "github.com/gofiber/fiber/v2" - "github.com/mauriciogm/dokploy/apps/monitoring/config" -) - -func AuthMiddleware() fiber.Handler { - return func(c *fiber.Ctx) error { - expectedToken := config.GetMetricsConfig().Server.Token - - authHeader := c.Get("Authorization") - if authHeader == "" { - return c.Status(401).JSON(fiber.Map{ - "error": "Authorization header is required", - }) - } - - // Check if the header starts with "Bearer " - if !strings.HasPrefix(authHeader, "Bearer ") { - return c.Status(401).JSON(fiber.Map{ - "error": "Invalid authorization format. Use 'Bearer TOKEN'", - }) - } - - // Extract the token - token := strings.TrimPrefix(authHeader, "Bearer ") - - if token != expectedToken { - return c.Status(401).JSON(fiber.Map{ - "error": "Invalid token", - }) - } - - return c.Next() - } -} diff --git a/apps/monitoring/monitoring/monitor.go b/apps/monitoring/monitoring/monitor.go deleted file mode 100644 index 0beb4320f..000000000 --- a/apps/monitoring/monitoring/monitor.go +++ /dev/null @@ -1,261 +0,0 @@ -package monitoring - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "os/exec" - "runtime" - "strings" - "time" - - "github.com/shirou/gopsutil/v3/cpu" - "github.com/shirou/gopsutil/v3/disk" - "github.com/shirou/gopsutil/v3/host" - "github.com/shirou/gopsutil/v3/mem" - "github.com/shirou/gopsutil/v3/net" - - "github.com/mauriciogm/dokploy/apps/monitoring/config" - "github.com/mauriciogm/dokploy/apps/monitoring/database" -) - -type SystemMetrics struct { - CPU string `json:"cpu"` - CPUModel string `json:"cpuModel"` - CPUCores int32 `json:"cpuCores"` - CPUPhysicalCores int32 `json:"cpuPhysicalCores"` - CPUSpeed float64 `json:"cpuSpeed"` - OS string `json:"os"` - Distro string `json:"distro"` - Kernel string `json:"kernel"` - Arch string `json:"arch"` - MemUsed string `json:"memUsed"` - MemUsedGB string `json:"memUsedGB"` - MemTotal string `json:"memTotal"` - Uptime uint64 `json:"uptime"` - DiskUsed string `json:"diskUsed"` - TotalDisk string `json:"totalDisk"` - NetworkIn string `json:"networkIn"` - NetworkOut string `json:"networkOut"` - Timestamp string `json:"timestamp"` -} - -type AlertPayload struct { - ServerType string `json:"ServerType"` - Type string `json:"Type"` - Value float64 `json:"Value"` - Threshold float64 `json:"Threshold"` - Message string `json:"Message"` - Timestamp string `json:"Timestamp"` - Token string `json:"Token"` -} - -func getRealOS() string { - if content, err := os.ReadFile("/etc/os-release"); err == nil { - lines := strings.Split(string(content), "\n") - var id, name, version string - for _, line := range lines { - if strings.HasPrefix(line, "PRETTY_NAME=") { - return strings.Trim(strings.TrimPrefix(line, "PRETTY_NAME="), "\"") - } else if strings.HasPrefix(line, "NAME=") { - name = strings.Trim(strings.TrimPrefix(line, "NAME="), "\"") - } else if strings.HasPrefix(line, "VERSION=") { - version = strings.Trim(strings.TrimPrefix(line, "VERSION="), "\"") - } else if strings.HasPrefix(line, "ID=") { - id = strings.Trim(strings.TrimPrefix(line, "ID="), "\"") - } - } - if name != "" && version != "" { - return fmt.Sprintf("%s %s", name, version) - } - if name != "" { - return name - } - if id != "" { - return id - } - } - - if content, err := os.ReadFile("/etc/system-release"); err == nil { - text := strings.ToLower(string(content)) - switch { - case strings.Contains(text, "red hat"): - return "rhel" - case strings.Contains(text, "centos"): - return "centos" - case strings.Contains(text, "fedora"): - return "fedora" - } - } - - cmd := exec.Command("uname", "-a") - if output, err := cmd.Output(); err == nil { - osInfo := strings.ToLower(string(output)) - switch { - case strings.Contains(osInfo, "debian"): - return "debian" - case strings.Contains(osInfo, "ubuntu"): - return "ubuntu" - case strings.Contains(osInfo, "centos"): - return "centos" - case strings.Contains(osInfo, "fedora"): - return "fedora" - case strings.Contains(osInfo, "red hat"): - return "rhel" - case strings.Contains(osInfo, "arch"): - return "arch" - case strings.Contains(osInfo, "darwin"): - return "darwin" - } - } - - return runtime.GOOS -} - -func GetServerMetrics() database.ServerMetric { - v, _ := mem.VirtualMemory() - c, _ := cpu.Percent(0, false) - cpuInfo, _ := cpu.Info() - diskInfo, _ := disk.Usage("/") - netInfo, _ := net.IOCounters(false) - hostInfo, _ := host.Info() - distro := getRealOS() - - cpuModel := "" - if len(cpuInfo) > 0 { - cpuModel = fmt.Sprintf("%s %s", cpuInfo[0].VendorID, cpuInfo[0].ModelName) - } - - memTotalGB := float64(v.Total) / 1024 / 1024 / 1024 - memUsedGB := float64(v.Used) / 1024 / 1024 / 1024 - memUsedPercent := (memUsedGB / memTotalGB) * 100 - - var networkIn, networkOut float64 - if len(netInfo) > 0 { - networkIn = float64(netInfo[0].BytesRecv) / 1024 / 1024 - networkOut = float64(netInfo[0].BytesSent) / 1024 / 1024 - } - return database.ServerMetric{ - Timestamp: time.Now().UTC().Format(time.RFC3339Nano), - CPU: c[0], - CPUModel: cpuModel, - CPUCores: int32(runtime.NumCPU()), - CPUPhysicalCores: int32(len(cpuInfo)), - CPUSpeed: float64(cpuInfo[0].Mhz), - OS: getRealOS(), - Distro: distro, - Kernel: hostInfo.KernelVersion, - Arch: hostInfo.KernelArch, - MemUsed: memUsedPercent, - MemUsedGB: memUsedGB, - MemTotal: memTotalGB, - Uptime: hostInfo.Uptime, - DiskUsed: float64(diskInfo.UsedPercent), - TotalDisk: float64(diskInfo.Total) / 1024 / 1024 / 1024, - NetworkIn: networkIn, - NetworkOut: networkOut, - } -} - -func ConvertToSystemMetrics(metric database.ServerMetric) SystemMetrics { - return SystemMetrics{ - CPU: fmt.Sprintf("%.2f", metric.CPU), - CPUModel: metric.CPUModel, - CPUCores: metric.CPUCores, - CPUPhysicalCores: metric.CPUPhysicalCores, - CPUSpeed: metric.CPUSpeed, - OS: metric.OS, - Distro: metric.Distro, - Kernel: metric.Kernel, - Arch: metric.Arch, - MemUsed: fmt.Sprintf("%.2f", metric.MemUsed), - MemUsedGB: fmt.Sprintf("%.2f", metric.MemUsedGB), - MemTotal: fmt.Sprintf("%.2f", metric.MemTotal), - Uptime: metric.Uptime, - DiskUsed: fmt.Sprintf("%.2f", metric.DiskUsed), - TotalDisk: fmt.Sprintf("%.2f", metric.TotalDisk), - NetworkIn: fmt.Sprintf("%.2f", metric.NetworkIn), - NetworkOut: fmt.Sprintf("%.2f", metric.NetworkOut), - Timestamp: metric.Timestamp, - } -} - -func CheckThresholds(metrics database.ServerMetric) error { - cfg := config.GetMetricsConfig() - cpuThreshold := float64(cfg.Server.Thresholds.CPU) - memThreshold := float64(cfg.Server.Thresholds.Memory) - callbackURL := cfg.Server.UrlCallback - metricsToken := cfg.Server.Token - - // log.Printf("CPU threshold: %.2f%%", cpuThreshold) - // log.Printf("Current CPU usage: %.2f%%", metrics.CPU) - // log.Printf("Memory threshold: %.2f%%", memThreshold) - // log.Printf("Callback URL: %s", callbackURL) - // log.Printf("Metrics token: %s", metricsToken) - - if cpuThreshold == 0 && memThreshold == 0 { - return nil - } - - if cpuThreshold > 0 && metrics.CPU > cpuThreshold { - alert := AlertPayload{ - ServerType: cfg.Server.ServerType, - Type: "CPU", - Value: metrics.CPU, - Threshold: cpuThreshold, - Message: fmt.Sprintf("CPU usage (%.2f%%) exceeded threshold (%.2f%%)", metrics.CPU, cpuThreshold), - Timestamp: metrics.Timestamp, - Token: metricsToken, - } - if err := sendAlert(callbackURL, alert); err != nil { - return fmt.Errorf("failed to send CPU alert: %v", err) - } - } - - if memThreshold > 0 && metrics.MemUsed > memThreshold { - alert := AlertPayload{ - ServerType: cfg.Server.ServerType, - Type: "Memory", - Value: metrics.MemUsed, - Threshold: memThreshold, - Message: fmt.Sprintf("Memory usage (%.2f%%) exceeded threshold (%.2f%%)", metrics.MemUsed, memThreshold), - Timestamp: metrics.Timestamp, - Token: metricsToken, - } - if err := sendAlert(callbackURL, alert); err != nil { - return fmt.Errorf("failed to send memory alert: %v", err) - } - } - - return nil -} - -func sendAlert(callbackURL string, payload AlertPayload) error { - if callbackURL == "" { - return fmt.Errorf("callback URL is not set") - } - wrappedPayload := map[string]interface{}{ - "json": payload, - } - - jsonData, err := json.Marshal(wrappedPayload) - if err != nil { - return fmt.Errorf("failed to marshal alert payload: %v", err) - } - - resp, err := http.Post(callbackURL, "application/json", bytes.NewBuffer(jsonData)) - if err != nil { - return fmt.Errorf("failed to send POST request: %v", err) - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - bodyBytes, _ := io.ReadAll(resp.Body) - return fmt.Errorf("received non-OK response status: %s, body: %s", resp.Status, string(bodyBytes)) - } - - return nil -} diff --git a/apps/schedules/package.json b/apps/schedules/package.json index 0a869fb07..dd6818d1f 100644 --- a/apps/schedules/package.json +++ b/apps/schedules/package.json @@ -8,7 +8,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "drizzle-orm": "^0.39.1", + "drizzle-orm": "^0.30.8", "ioredis": "5.4.1", "bullmq": "5.4.2", "@hono/zod-validator": "0.3.0", diff --git a/apps/schedules/tsconfig.json b/apps/schedules/tsconfig.json index 3d4adb168..3c0b02bc0 100644 --- a/apps/schedules/tsconfig.json +++ b/apps/schedules/tsconfig.json @@ -7,8 +7,7 @@ "skipLibCheck": true, "outDir": "dist", "jsx": "react-jsx", - "jsxImportSource": "hono/jsx", - "declaration": false + "jsxImportSource": "hono/jsx" }, "exclude": ["node_modules", "dist"] } diff --git a/biome.json b/biome.json index cf677ec40..f5a6c2328 100644 --- a/biome.json +++ b/biome.json @@ -24,10 +24,7 @@ }, "correctness": { "useExhaustiveDependencies": "off", - "noUnsafeOptionalChaining": "off", - "noUnusedImports": "error", - "noUnusedFunctionParameters": "error", - "noUnusedVariables": "error" + "noUnsafeOptionalChaining": "off" }, "style": { "noNonNullAssertion": "off" diff --git a/lefthook.yml b/lefthook.yml index 3f5a6d09f..1a491cd8a 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -37,9 +37,9 @@ commit-msg: commands: commitlint: - # run: "npx commitlint --edit $1" + run: "npx commitlint --edit $1" pre-commit: commands: check: - # run: "pnpm check" + run: "pnpm check" diff --git a/packages/server/auth-schema.ts b/packages/server/auth-schema.ts deleted file mode 100644 index a58290467..000000000 --- a/packages/server/auth-schema.ts +++ /dev/null @@ -1,133 +0,0 @@ -// import { -// pgTable, -// text, -// integer, -// timestamp, -// boolean, -// } from "drizzle-orm/pg-core"; - -// export const users_temp = pgTable("users_temp", { -// id: text("id").primaryKey(), -// name: text("name").notNull(), -// email: text("email").notNull().unique(), -// emailVerified: boolean("email_verified").notNull(), -// image: text("image"), -// createdAt: timestamp("created_at").notNull(), -// updatedAt: timestamp("updated_at").notNull(), -// twoFactorEnabled: boolean("two_factor_enabled"), -// role: text("role"), -// ownerId: text("owner_id"), -// }); - -// export const session = pgTable("session", { -// id: text("id").primaryKey(), -// expiresAt: timestamp("expires_at").notNull(), -// token: text("token").notNull().unique(), -// createdAt: timestamp("created_at").notNull(), -// updatedAt: timestamp("updated_at").notNull(), -// ipAddress: text("ip_address"), -// userAgent: text("user_agent"), -// userId: text("user_id") -// .notNull() -// .references(() => users_temp.id, { onDelete: "cascade" }), -// activeOrganizationId: text("active_organization_id"), -// }); - -// export const account = pgTable("account", { -// id: text("id").primaryKey(), -// accountId: text("account_id").notNull(), -// providerId: text("provider_id").notNull(), -// userId: text("user_id") -// .notNull() -// .references(() => users_temp.id, { onDelete: "cascade" }), -// accessToken: text("access_token"), -// refreshToken: text("refresh_token"), -// idToken: text("id_token"), -// accessTokenExpiresAt: timestamp("access_token_expires_at"), -// refreshTokenExpiresAt: timestamp("refresh_token_expires_at"), -// scope: text("scope"), -// password: text("password"), -// createdAt: timestamp("created_at").notNull(), -// updatedAt: timestamp("updated_at").notNull(), -// }); - -// export const verification = pgTable("verification", { -// id: text("id").primaryKey(), -// identifier: text("identifier").notNull(), -// value: text("value").notNull(), -// expiresAt: timestamp("expires_at").notNull(), -// createdAt: timestamp("created_at"), -// updatedAt: timestamp("updated_at"), -// }); - -// export const apikey = pgTable("apikey", { -// id: text("id").primaryKey(), -// name: text("name"), -// start: text("start"), -// prefix: text("prefix"), -// key: text("key").notNull(), -// userId: text("user_id") -// .notNull() -// .references(() => user.id, { onDelete: "cascade" }), -// refillInterval: integer("refill_interval"), -// refillAmount: integer("refill_amount"), -// lastRefillAt: timestamp("last_refill_at"), -// enabled: boolean("enabled"), -// rateLimitEnabled: boolean("rate_limit_enabled"), -// rateLimitTimeWindow: integer("rate_limit_time_window"), -// rateLimitMax: integer("rate_limit_max"), -// requestCount: integer("request_count"), -// remaining: integer("remaining"), -// lastRequest: timestamp("last_request"), -// expiresAt: timestamp("expires_at"), -// createdAt: timestamp("created_at").notNull(), -// updatedAt: timestamp("updated_at").notNull(), -// permissions: text("permissions"), -// metadata: text("metadata"), -// }); - -// export const twoFactor = pgTable("two_factor", { -// id: text("id").primaryKey(), -// secret: text("secret").notNull(), -// backupCodes: text("backup_codes").notNull(), -// userId: text("user_id") -// .notNull() -// .references(() => user.id, { onDelete: "cascade" }), -// }); - -// export const organization = pgTable("organization", { -// id: text("id").primaryKey(), -// name: text("name").notNull(), -// slug: text("slug").unique(), -// logo: text("logo"), -// createdAt: timestamp("created_at").notNull(), -// metadata: text("metadata"), -// }); - -// export const member = pgTable("member", { -// id: text("id").primaryKey(), -// organizationId: text("organization_id") -// .notNull() -// .references(() => organization.id, { onDelete: "cascade" }), -// userId: text("user_id") -// .notNull() -// .references(() => user.id, { onDelete: "cascade" }), -// role: text("role").notNull(), -// teamId: text("team_id"), -// createdAt: timestamp("created_at").notNull(), -// }); - -// export const invitation = pgTable("invitation", { -// id: text("id").primaryKey(), -// organizationId: text("organization_id") -// .notNull() -// .references(() => organization.id, { onDelete: "cascade" }), -// email: text("email").notNull(), -// role: text("role"), -// teamId: text("team_id"), -// status: text("status").notNull(), -// expiresAt: timestamp("expires_at").notNull(), -// inviterId: text("inviter_id") -// .notNull() -// .references(() => user.id, { onDelete: "cascade" }), -// }); diff --git a/packages/server/package.json b/packages/server/package.json index 3265c95cf..a57ff65e3 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -35,11 +35,6 @@ "@ai-sdk/mistral": "^1.0.6", "@ai-sdk/openai": "^1.0.12", "@ai-sdk/openai-compatible": "^0.0.13", - "@better-auth/utils":"0.2.3", - "@oslojs/encoding":"1.1.0", - "@oslojs/crypto":"1.0.1", - "drizzle-dbml-generator":"0.10.0", - "better-auth":"1.2.0", "@faker-js/faker": "^8.4.1", "@lucia-auth/adapter-drizzle": "1.0.7", "@octokit/auth-app": "^6.0.4", @@ -53,7 +48,7 @@ "date-fns": "3.6.0", "dockerode": "4.0.2", "dotenv": "16.4.5", - "drizzle-orm": "^0.39.1", + "drizzle-orm": "^0.30.8", "drizzle-zod": "0.5.1", "hi-base32": "^0.5.1", "js-yaml": "4.1.0", @@ -93,7 +88,7 @@ "@types/react-dom": "^18.2.15", "@types/ssh2": "1.15.1", "@types/ws": "8.5.10", - "drizzle-kit": "^0.30.4", + "drizzle-kit": "^0.21.1", "esbuild": "0.20.2", "esbuild-plugin-alias": "0.2.1", "postcss": "^8.4.31", diff --git a/packages/server/src/auth/auth.ts b/packages/server/src/auth/auth.ts new file mode 100644 index 000000000..ab340d0af --- /dev/null +++ b/packages/server/src/auth/auth.ts @@ -0,0 +1,117 @@ +import type { IncomingMessage, ServerResponse } from "node:http"; +import { findAdminByAuthId } from "@dokploy/server/services/admin"; +import { findUserByAuthId } from "@dokploy/server/services/user"; +import { DrizzlePostgreSQLAdapter } from "@lucia-auth/adapter-drizzle"; +import { TimeSpan } from "lucia"; +import { Lucia } from "lucia/dist/core.js"; +import type { Session, User } from "lucia/dist/core.js"; +import { db } from "../db"; +import { type DatabaseUser, auth, sessionTable } from "../db/schema"; + +export const adapter = new DrizzlePostgreSQLAdapter(db, sessionTable, auth); + +export const lucia = new Lucia(adapter, { + sessionCookie: { + attributes: { + secure: false, + }, + }, + sessionExpiresIn: new TimeSpan(1, "d"), + getUserAttributes: (attributes) => { + return { + email: attributes.email, + rol: attributes.rol, + secret: attributes.secret !== null, + adminId: attributes.adminId, + }; + }, +}); + +declare module "lucia" { + interface Register { + Lucia: typeof lucia; + DatabaseUserAttributes: Omit & { + authId: string; + adminId: string; + }; + } +} + +export type ReturnValidateToken = Promise<{ + user: (User & { authId: string; adminId: string }) | null; + session: Session | null; +}>; + +export async function validateRequest( + req: IncomingMessage, + res: ServerResponse, +): ReturnValidateToken { + const sessionId = lucia.readSessionCookie(req.headers.cookie ?? ""); + + if (!sessionId) { + return { + user: null, + session: null, + }; + } + const result = await lucia.validateSession(sessionId); + if (result?.session?.fresh) { + res.appendHeader( + "Set-Cookie", + lucia.createSessionCookie(result.session.id).serialize(), + ); + } + if (!result.session) { + res.appendHeader( + "Set-Cookie", + lucia.createBlankSessionCookie().serialize(), + ); + } + if (result.user) { + try { + if (result.user?.rol === "admin") { + const admin = await findAdminByAuthId(result.user.id); + result.user.adminId = admin.adminId; + } else if (result.user?.rol === "user") { + const userResult = await findUserByAuthId(result.user.id); + result.user.adminId = userResult.adminId; + } + } catch (error) { + return { + user: null, + session: null, + }; + } + } + + return { + session: result.session, + ...((result.user && { + user: { + authId: result.user.id, + email: result.user.email, + rol: result.user.rol, + id: result.user.id, + secret: result.user.secret, + adminId: result.user.adminId, + }, + }) || { + user: null, + }), + }; +} + +export async function validateWebSocketRequest( + req: IncomingMessage, +): Promise<{ user: User; session: Session } | { user: null; session: null }> { + const sessionId = lucia.readSessionCookie(req.headers.cookie ?? ""); + + if (!sessionId) { + return { + user: null, + session: null, + }; + } + const result = await lucia.validateSession(sessionId); + return result; +} diff --git a/packages/server/src/auth/token.ts b/packages/server/src/auth/token.ts new file mode 100644 index 000000000..f29d4dbdd --- /dev/null +++ b/packages/server/src/auth/token.ts @@ -0,0 +1,99 @@ +import type { IncomingMessage } from "node:http"; +import { TimeSpan } from "lucia"; +import { Lucia } from "lucia/dist/core.js"; +import { findAdminByAuthId } from "../services/admin"; +import { findUserByAuthId } from "../services/user"; +import { type ReturnValidateToken, adapter } from "./auth"; + +export const luciaToken = new Lucia(adapter, { + sessionCookie: { + attributes: { + secure: false, + }, + }, + sessionExpiresIn: new TimeSpan(365, "d"), + getUserAttributes: (attributes) => { + return { + email: attributes.email, + rol: attributes.rol, + secret: attributes.secret !== null, + }; + }, +}); + +export const validateBearerToken = async ( + req: IncomingMessage, +): ReturnValidateToken => { + const authorizationHeader = req.headers.authorization; + const sessionId = luciaToken.readBearerToken(authorizationHeader ?? ""); + if (!sessionId) { + return { + user: null, + session: null, + }; + } + const result = await luciaToken.validateSession(sessionId); + + if (result.user) { + if (result.user?.rol === "admin") { + const admin = await findAdminByAuthId(result.user.id); + result.user.adminId = admin.adminId; + } else if (result.user?.rol === "user") { + const userResult = await findUserByAuthId(result.user.id); + result.user.adminId = userResult.adminId; + } + } + return { + session: result.session, + ...((result.user && { + user: { + adminId: result.user.adminId, + authId: result.user.id, + email: result.user.email, + rol: result.user.rol, + id: result.user.id, + secret: result.user.secret, + }, + }) || { + user: null, + }), + }; +}; + +export const validateBearerTokenAPI = async ( + authorizationHeader: string, +): ReturnValidateToken => { + const sessionId = luciaToken.readBearerToken(authorizationHeader ?? ""); + if (!sessionId) { + return { + user: null, + session: null, + }; + } + const result = await luciaToken.validateSession(sessionId); + + if (result.user) { + if (result.user?.rol === "admin") { + const admin = await findAdminByAuthId(result.user.id); + result.user.adminId = admin.adminId; + } else if (result.user?.rol === "user") { + const userResult = await findUserByAuthId(result.user.id); + result.user.adminId = userResult.adminId; + } + } + return { + session: result.session, + ...((result.user && { + user: { + adminId: result.user.adminId, + authId: result.user.id, + email: result.user.email, + rol: result.user.rol, + id: result.user.id, + secret: result.user.secret, + }, + }) || { + user: null, + }), + }; +}; diff --git a/packages/server/src/db/schema/account.ts b/packages/server/src/db/schema/account.ts deleted file mode 100644 index 8291ea4d6..000000000 --- a/packages/server/src/db/schema/account.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { relations, sql } from "drizzle-orm"; -import { - boolean, - integer, - pgTable, - text, - timestamp, -} from "drizzle-orm/pg-core"; -import { nanoid } from "nanoid"; -import { projects } from "./project"; -import { server } from "./server"; -import { users_temp } from "./user"; - -export const account = pgTable("account", { - id: text("id") - .primaryKey() - .$defaultFn(() => nanoid()), - accountId: text("account_id") - .notNull() - .$defaultFn(() => nanoid()), - providerId: text("provider_id").notNull(), - userId: text("user_id") - .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), - accessToken: text("access_token"), - refreshToken: text("refresh_token"), - idToken: text("id_token"), - accessTokenExpiresAt: timestamp("access_token_expires_at"), - refreshTokenExpiresAt: timestamp("refresh_token_expires_at"), - scope: text("scope"), - password: text("password"), - is2FAEnabled: boolean("is2FAEnabled").notNull().default(false), - createdAt: timestamp("created_at").notNull(), - updatedAt: timestamp("updated_at").notNull(), - resetPasswordToken: text("resetPasswordToken"), - resetPasswordExpiresAt: text("resetPasswordExpiresAt"), - confirmationToken: text("confirmationToken"), - confirmationExpiresAt: text("confirmationExpiresAt"), -}); - -export const accountRelations = relations(account, ({ one }) => ({ - user: one(users_temp, { - fields: [account.userId], - references: [users_temp.id], - }), -})); - -export const verification = pgTable("verification", { - id: text("id").primaryKey(), - identifier: text("identifier").notNull(), - value: text("value").notNull(), - expiresAt: timestamp("expires_at").notNull(), - createdAt: timestamp("created_at"), - updatedAt: timestamp("updated_at"), -}); - -export const organization = pgTable("organization", { - id: text("id") - .primaryKey() - .$defaultFn(() => nanoid()), - name: text("name").notNull(), - slug: text("slug").unique(), - logo: text("logo"), - createdAt: timestamp("created_at").notNull(), - metadata: text("metadata"), - ownerId: text("owner_id") - .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), -}); - -export const organizationRelations = relations( - organization, - ({ one, many }) => ({ - owner: one(users_temp, { - fields: [organization.ownerId], - references: [users_temp.id], - }), - servers: many(server), - projects: many(projects), - members: many(member), - }), -); - -export const member = pgTable("member", { - id: text("id") - .primaryKey() - .$defaultFn(() => nanoid()), - organizationId: text("organization_id") - .notNull() - .references(() => organization.id, { onDelete: "cascade" }), - userId: text("user_id") - .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), - role: text("role").notNull().$type<"owner" | "member" | "admin">(), - createdAt: timestamp("created_at").notNull(), - teamId: text("team_id"), - // Permissions - canCreateProjects: boolean("canCreateProjects").notNull().default(false), - canAccessToSSHKeys: boolean("canAccessToSSHKeys").notNull().default(false), - canCreateServices: boolean("canCreateServices").notNull().default(false), - canDeleteProjects: boolean("canDeleteProjects").notNull().default(false), - canDeleteServices: boolean("canDeleteServices").notNull().default(false), - canAccessToDocker: boolean("canAccessToDocker").notNull().default(false), - canAccessToAPI: boolean("canAccessToAPI").notNull().default(false), - canAccessToGitProviders: boolean("canAccessToGitProviders") - .notNull() - .default(false), - canAccessToTraefikFiles: boolean("canAccessToTraefikFiles") - .notNull() - .default(false), - accessedProjects: text("accesedProjects") - .array() - .notNull() - .default(sql`ARRAY[]::text[]`), - accessedServices: text("accesedServices") - .array() - .notNull() - .default(sql`ARRAY[]::text[]`), -}); - -export const memberRelations = relations(member, ({ one }) => ({ - organization: one(organization, { - fields: [member.organizationId], - references: [organization.id], - }), - user: one(users_temp, { - fields: [member.userId], - references: [users_temp.id], - }), -})); - -export const invitation = pgTable("invitation", { - id: text("id").primaryKey(), - organizationId: text("organization_id") - .notNull() - .references(() => organization.id, { onDelete: "cascade" }), - email: text("email").notNull(), - role: text("role").$type<"owner" | "member" | "admin">(), - status: text("status").notNull(), - expiresAt: timestamp("expires_at").notNull(), - inviterId: text("inviter_id") - .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), - teamId: text("team_id"), -}); - -export const invitationRelations = relations(invitation, ({ one }) => ({ - organization: one(organization, { - fields: [invitation.organizationId], - references: [organization.id], - }), -})); - -export const twoFactor = pgTable("two_factor", { - id: text("id").primaryKey(), - secret: text("secret").notNull(), - backupCodes: text("backup_codes").notNull(), - userId: text("user_id") - .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), -}); - -export const apikey = pgTable("apikey", { - id: text("id").primaryKey(), - name: text("name"), - start: text("start"), - prefix: text("prefix"), - key: text("key").notNull(), - userId: text("user_id") - .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), - refillInterval: integer("refill_interval"), - refillAmount: integer("refill_amount"), - lastRefillAt: timestamp("last_refill_at"), - enabled: boolean("enabled"), - rateLimitEnabled: boolean("rate_limit_enabled"), - rateLimitTimeWindow: integer("rate_limit_time_window"), - rateLimitMax: integer("rate_limit_max"), - requestCount: integer("request_count"), - remaining: integer("remaining"), - lastRequest: timestamp("last_request"), - expiresAt: timestamp("expires_at"), - createdAt: timestamp("created_at").notNull(), - updatedAt: timestamp("updated_at").notNull(), - permissions: text("permissions"), - metadata: text("metadata"), -}); - -export const apikeyRelations = relations(apikey, ({ one }) => ({ - user: one(users_temp, { - fields: [apikey.userId], - references: [users_temp.id], - }), -})); diff --git a/packages/server/src/db/schema/admin.ts b/packages/server/src/db/schema/admin.ts new file mode 100644 index 000000000..f5b46fdd4 --- /dev/null +++ b/packages/server/src/db/schema/admin.ts @@ -0,0 +1,121 @@ +import { relations } from "drizzle-orm"; +import { boolean, integer, pgTable, text } from "drizzle-orm/pg-core"; +import { createInsertSchema } from "drizzle-zod"; +import { nanoid } from "nanoid"; +import { z } from "zod"; +import { ai } from "./ai"; +import { auth } from "./auth"; +import { certificates } from "./certificate"; +import { registry } from "./registry"; +import { certificateType } from "./shared"; +import { sshKeys } from "./ssh-key"; +import { users } from "./user"; + +export const admins = pgTable("admin", { + adminId: text("adminId") + .notNull() + .primaryKey() + .$defaultFn(() => nanoid()), + serverIp: text("serverIp"), + certificateType: certificateType("certificateType").notNull().default("none"), + host: text("host"), + letsEncryptEmail: text("letsEncryptEmail"), + sshPrivateKey: text("sshPrivateKey"), + enableDockerCleanup: boolean("enableDockerCleanup").notNull().default(false), + enableLogRotation: boolean("enableLogRotation").notNull().default(false), + authId: text("authId") + .notNull() + .references(() => auth.id, { onDelete: "cascade" }), + createdAt: text("createdAt") + .notNull() + .$defaultFn(() => new Date().toISOString()), + stripeCustomerId: text("stripeCustomerId"), + stripeSubscriptionId: text("stripeSubscriptionId"), + serversQuantity: integer("serversQuantity").notNull().default(0), +}); + +export const adminsRelations = relations(admins, ({ one, many }) => ({ + auth: one(auth, { + fields: [admins.authId], + references: [auth.id], + }), + users: many(users), + registry: many(registry), + sshKeys: many(sshKeys), + certificates: many(certificates), + ai: many(ai), +})); + +const createSchema = createInsertSchema(admins, { + adminId: z.string(), + enableDockerCleanup: z.boolean().optional(), + sshPrivateKey: z.string().optional(), + certificateType: z.enum(["letsencrypt", "none"]).default("none"), + serverIp: z.string().optional(), + letsEncryptEmail: z.string().optional(), +}); + +export const apiUpdateAdmin = createSchema.partial(); + +export const apiSaveSSHKey = createSchema + .pick({ + sshPrivateKey: true, + }) + .required(); + +export const apiAssignDomain = createSchema + .pick({ + host: true, + certificateType: true, + letsEncryptEmail: true, + }) + .required() + .partial({ + letsEncryptEmail: true, + }); + +export const apiUpdateDockerCleanup = createSchema + .pick({ + enableDockerCleanup: true, + }) + .required() + .extend({ + serverId: z.string().optional(), + }); + +export const apiTraefikConfig = z.object({ + traefikConfig: z.string().min(1), +}); + +export const apiModifyTraefikConfig = z.object({ + path: z.string().min(1), + traefikConfig: z.string().min(1), + serverId: z.string().optional(), +}); +export const apiReadTraefikConfig = z.object({ + path: z.string().min(1), + serverId: z.string().optional(), +}); + +export const apiEnableDashboard = z.object({ + enableDashboard: z.boolean().optional(), + serverId: z.string().optional(), +}); + +export const apiServerSchema = z + .object({ + serverId: z.string().optional(), + }) + .optional(); + +export const apiReadStatsLogs = z.object({ + page: z + .object({ + pageIndex: z.number(), + pageSize: z.number(), + }) + .optional(), + status: z.string().array().optional(), + search: z.string().optional(), + sort: z.object({ id: z.string(), desc: z.boolean() }).optional(), +}); diff --git a/packages/server/src/db/schema/application.ts b/packages/server/src/db/schema/application.ts index e670e2e24..2437f59d6 100644 --- a/packages/server/src/db/schema/application.ts +++ b/packages/server/src/db/schema/application.ts @@ -44,6 +44,7 @@ export const buildType = pgEnum("buildType", [ "static", ]); +// TODO: refactor this types export interface HealthCheckSwarm { Test?: string[] | undefined; Interval?: number | undefined; diff --git a/packages/server/src/db/schema/auth.ts b/packages/server/src/db/schema/auth.ts new file mode 100644 index 000000000..3e16c68ee --- /dev/null +++ b/packages/server/src/db/schema/auth.ts @@ -0,0 +1,130 @@ +import { getRandomValues } from "node:crypto"; +import { relations } from "drizzle-orm"; +import { boolean, pgEnum, pgTable, text } from "drizzle-orm/pg-core"; +import { createInsertSchema } from "drizzle-zod"; +import { nanoid } from "nanoid"; +import { z } from "zod"; +import { admins } from "./admin"; +import { users } from "./user"; + +const randomImages = [ + "/avatars/avatar-1.png", + "/avatars/avatar-2.png", + "/avatars/avatar-3.png", + "/avatars/avatar-4.png", + "/avatars/avatar-5.png", + "/avatars/avatar-6.png", + "/avatars/avatar-7.png", + "/avatars/avatar-8.png", + "/avatars/avatar-9.png", + "/avatars/avatar-10.png", + "/avatars/avatar-11.png", + "/avatars/avatar-12.png", +]; + +const generateRandomImage = () => { + return ( + randomImages[ + // @ts-ignore + getRandomValues(new Uint32Array(1))[0] % randomImages.length + ] || "/avatars/avatar-1.png" + ); +}; +export type DatabaseUser = typeof auth.$inferSelect; +export const roles = pgEnum("Roles", ["admin", "user"]); + +export const auth = pgTable("auth", { + id: text("id") + .notNull() + .primaryKey() + .$defaultFn(() => nanoid()), + email: text("email").notNull().unique(), + password: text("password").notNull(), + rol: roles("rol").notNull(), + image: text("image").$defaultFn(() => generateRandomImage()), + secret: text("secret"), + token: text("token"), + is2FAEnabled: boolean("is2FAEnabled").notNull().default(false), + createdAt: text("createdAt") + .notNull() + .$defaultFn(() => new Date().toISOString()), + resetPasswordToken: text("resetPasswordToken"), + resetPasswordExpiresAt: text("resetPasswordExpiresAt"), + confirmationToken: text("confirmationToken"), + confirmationExpiresAt: text("confirmationExpiresAt"), +}); + +export const authRelations = relations(auth, ({ many }) => ({ + admins: many(admins), + users: many(users), +})); +const createSchema = createInsertSchema(auth, { + email: z.string().email(), + password: z.string().min(8), + rol: z.enum(["admin", "user"]), + image: z.string().optional(), +}); + +export const apiCreateAdmin = createSchema.pick({ + email: true, + password: true, +}); + +export const apiCreateUser = createSchema + .pick({ + password: true, + id: true, + token: true, + }) + .required() + .extend({ + token: z.string().min(1), + }); + +export const apiLogin = createSchema + .pick({ + email: true, + password: true, + }) + .required(); + +export const apiUpdateAuth = createSchema.partial().extend({ + email: z.string().nullable(), + password: z.string().nullable(), + image: z.string().optional(), + currentPassword: z.string().nullable(), +}); + +export const apiUpdateAuthByAdmin = createSchema.partial().extend({ + email: z.string().nullable(), + password: z.string().nullable(), + image: z.string().optional(), + id: z.string().min(1), +}); + +export const apiFindOneAuth = createSchema + .pick({ + id: true, + }) + .required(); + +export const apiVerify2FA = createSchema + .extend({ + pin: z.string().min(6), + secret: z.string().min(1), + }) + .pick({ + pin: true, + secret: true, + }) + .required(); + +export const apiVerifyLogin2FA = createSchema + .extend({ + pin: z.string().min(6), + }) + .pick({ + pin: true, + id: true, + }) + .required(); diff --git a/packages/server/src/db/schema/bitbucket.ts b/packages/server/src/db/schema/bitbucket.ts index 0311202d7..393cb1e7d 100644 --- a/packages/server/src/db/schema/bitbucket.ts +++ b/packages/server/src/db/schema/bitbucket.ts @@ -61,5 +61,5 @@ export const apiUpdateBitbucket = createSchema.extend({ name: z.string().min(1), bitbucketUsername: z.string().optional(), bitbucketWorkspaceName: z.string().optional(), - organizationId: z.string().optional(), + adminId: z.string().optional(), }); diff --git a/packages/server/src/db/schema/certificate.ts b/packages/server/src/db/schema/certificate.ts index bf72f7db3..1df61be86 100644 --- a/packages/server/src/db/schema/certificate.ts +++ b/packages/server/src/db/schema/certificate.ts @@ -3,7 +3,7 @@ import { boolean, pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; +import { admins } from "./admin"; import { server } from "./server"; import { generateAppName } from "./utils"; @@ -20,24 +20,27 @@ export const certificates = pgTable("certificate", { .$defaultFn(() => generateAppName("certificate")) .unique(), autoRenew: boolean("autoRenew"), - organizationId: text("organizationId") - .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + adminId: text("adminId").references(() => admins.adminId, { + onDelete: "cascade", + }), serverId: text("serverId").references(() => server.serverId, { onDelete: "cascade", }), }); -export const certificatesRelations = relations(certificates, ({ one }) => ({ - server: one(server, { - fields: [certificates.serverId], - references: [server.serverId], +export const certificatesRelations = relations( + certificates, + ({ one, many }) => ({ + server: one(server, { + fields: [certificates.serverId], + references: [server.serverId], + }), + admin: one(admins, { + fields: [certificates.adminId], + references: [admins.adminId], + }), }), - organization: one(organization, { - fields: [certificates.organizationId], - references: [organization.id], - }), -})); +); export const apiCreateCertificate = createInsertSchema(certificates, { name: z.string().min(1), diff --git a/packages/server/src/db/schema/compose.ts b/packages/server/src/db/schema/compose.ts index ca8344eec..e0c4863b5 100644 --- a/packages/server/src/db/schema/compose.ts +++ b/packages/server/src/db/schema/compose.ts @@ -69,7 +69,6 @@ export const compose = pgTable("compose", { composePath: text("composePath").notNull().default("./docker-compose.yml"), suffix: text("suffix").notNull().default(""), randomize: boolean("randomize").notNull().default(false), - isolatedDeployment: boolean("isolatedDeployment").notNull().default(false), composeStatus: applicationStatus("composeStatus").notNull().default("idle"), projectId: text("projectId") .notNull() diff --git a/packages/server/src/db/schema/dbml.ts b/packages/server/src/db/schema/dbml.ts deleted file mode 100644 index 72a758146..000000000 --- a/packages/server/src/db/schema/dbml.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { pgGenerate } from "drizzle-dbml-generator"; // Using Postgres for this example -import * as schema from "./index"; - -const out = "./schema.dbml"; -const relational = true; - -pgGenerate({ schema, out, relational }); diff --git a/packages/server/src/db/schema/deployment.ts b/packages/server/src/db/schema/deployment.ts index 4dfed76b6..ccaf64661 100644 --- a/packages/server/src/db/schema/deployment.ts +++ b/packages/server/src/db/schema/deployment.ts @@ -1,4 +1,4 @@ -import { relations } from "drizzle-orm"; +import { is, relations } from "drizzle-orm"; import { type AnyPgColumn, boolean, @@ -47,7 +47,6 @@ export const deployments = pgTable("deployment", { createdAt: text("createdAt") .notNull() .$defaultFn(() => new Date().toISOString()), - errorMessage: text("errorMessage"), }); export const deploymentsRelations = relations(deployments, ({ one }) => ({ diff --git a/packages/server/src/db/schema/destination.ts b/packages/server/src/db/schema/destination.ts index 0aeb14902..7d7be6141 100644 --- a/packages/server/src/db/schema/destination.ts +++ b/packages/server/src/db/schema/destination.ts @@ -3,7 +3,7 @@ import { pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; +import { admins } from "./admin"; import { backups } from "./backups"; export const destinations = pgTable("destination", { @@ -17,19 +17,20 @@ export const destinations = pgTable("destination", { secretAccessKey: text("secretAccessKey").notNull(), bucket: text("bucket").notNull(), region: text("region").notNull(), + // maybe it can be null endpoint: text("endpoint").notNull(), - organizationId: text("organizationId") + adminId: text("adminId") .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + .references(() => admins.adminId, { onDelete: "cascade" }), }); export const destinationsRelations = relations( destinations, ({ many, one }) => ({ backups: many(backups), - organization: one(organization, { - fields: [destinations.organizationId], - references: [organization.id], + admin: one(admins, { + fields: [destinations.adminId], + references: [admins.adminId], }), }), ); diff --git a/packages/server/src/db/schema/git-provider.ts b/packages/server/src/db/schema/git-provider.ts index 922307376..dbbfc183b 100644 --- a/packages/server/src/db/schema/git-provider.ts +++ b/packages/server/src/db/schema/git-provider.ts @@ -3,7 +3,7 @@ import { pgEnum, pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; +import { admins } from "./admin"; import { bitbucket } from "./bitbucket"; import { github } from "./github"; import { gitlab } from "./gitlab"; @@ -24,12 +24,12 @@ export const gitProvider = pgTable("git_provider", { createdAt: text("createdAt") .notNull() .$defaultFn(() => new Date().toISOString()), - organizationId: text("organizationId") - .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + adminId: text("adminId").references(() => admins.adminId, { + onDelete: "cascade", + }), }); -export const gitProviderRelations = relations(gitProvider, ({ one }) => ({ +export const gitProviderRelations = relations(gitProvider, ({ one, many }) => ({ github: one(github, { fields: [gitProvider.gitProviderId], references: [github.gitProviderId], @@ -42,9 +42,9 @@ export const gitProviderRelations = relations(gitProvider, ({ one }) => ({ fields: [gitProvider.gitProviderId], references: [bitbucket.gitProviderId], }), - organization: one(organization, { - fields: [gitProvider.organizationId], - references: [organization.id], + admin: one(admins, { + fields: [gitProvider.adminId], + references: [admins.adminId], }), })); diff --git a/packages/server/src/db/schema/index.ts b/packages/server/src/db/schema/index.ts index 0b453facc..6d335632b 100644 --- a/packages/server/src/db/schema/index.ts +++ b/packages/server/src/db/schema/index.ts @@ -1,6 +1,8 @@ export * from "./application"; export * from "./postgres"; export * from "./user"; +export * from "./admin"; +export * from "./auth"; export * from "./project"; export * from "./domain"; export * from "./mariadb"; @@ -29,4 +31,3 @@ export * from "./server"; export * from "./utils"; export * from "./preview-deployments"; export * from "./ai"; -export * from "./account"; diff --git a/packages/server/src/db/schema/notification.ts b/packages/server/src/db/schema/notification.ts index 1c8a2d8f3..12c7698e2 100644 --- a/packages/server/src/db/schema/notification.ts +++ b/packages/server/src/db/schema/notification.ts @@ -3,7 +3,7 @@ import { boolean, integer, pgEnum, pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; +import { admins } from "./admin"; export const notificationType = pgEnum("notificationType", [ "slack", @@ -24,7 +24,6 @@ export const notifications = pgTable("notification", { databaseBackup: boolean("databaseBackup").notNull().default(false), dokployRestart: boolean("dokployRestart").notNull().default(false), dockerCleanup: boolean("dockerCleanup").notNull().default(false), - serverThreshold: boolean("serverThreshold").notNull().default(false), notificationType: notificationType("notificationType").notNull(), createdAt: text("createdAt") .notNull() @@ -44,9 +43,9 @@ export const notifications = pgTable("notification", { gotifyId: text("gotifyId").references(() => gotify.gotifyId, { onDelete: "cascade", }), - organizationId: text("organizationId") - .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + adminId: text("adminId").references(() => admins.adminId, { + onDelete: "cascade", + }), }); export const slack = pgTable("slack", { @@ -65,7 +64,6 @@ export const telegram = pgTable("telegram", { .$defaultFn(() => nanoid()), botToken: text("botToken").notNull(), chatId: text("chatId").notNull(), - messageThreadId: text("messageThreadId"), }); export const discord = pgTable("discord", { @@ -122,9 +120,9 @@ export const notificationsRelations = relations(notifications, ({ one }) => ({ fields: [notifications.gotifyId], references: [gotify.gotifyId], }), - organization: one(organization, { - fields: [notifications.organizationId], - references: [organization.id], + admin: one(admins, { + fields: [notifications.adminId], + references: [admins.adminId], }), })); @@ -138,7 +136,6 @@ export const apiCreateSlack = notificationsSchema name: true, appDeploy: true, dockerCleanup: true, - serverThreshold: true, }) .extend({ webhookUrl: z.string().min(1), @@ -149,7 +146,7 @@ export const apiCreateSlack = notificationsSchema export const apiUpdateSlack = apiCreateSlack.partial().extend({ notificationId: z.string().min(1), slackId: z.string(), - organizationId: z.string().optional(), + adminId: z.string().optional(), }); export const apiTestSlackConnection = apiCreateSlack.pick({ @@ -165,25 +162,22 @@ export const apiCreateTelegram = notificationsSchema name: true, appDeploy: true, dockerCleanup: true, - serverThreshold: true, }) .extend({ botToken: z.string().min(1), chatId: z.string().min(1), - messageThreadId: z.string(), }) .required(); export const apiUpdateTelegram = apiCreateTelegram.partial().extend({ notificationId: z.string().min(1), telegramId: z.string().min(1), - organizationId: z.string().optional(), + adminId: z.string().optional(), }); export const apiTestTelegramConnection = apiCreateTelegram.pick({ botToken: true, chatId: true, - messageThreadId: true, }); export const apiCreateDiscord = notificationsSchema @@ -194,7 +188,6 @@ export const apiCreateDiscord = notificationsSchema name: true, appDeploy: true, dockerCleanup: true, - serverThreshold: true, }) .extend({ webhookUrl: z.string().min(1), @@ -205,7 +198,7 @@ export const apiCreateDiscord = notificationsSchema export const apiUpdateDiscord = apiCreateDiscord.partial().extend({ notificationId: z.string().min(1), discordId: z.string().min(1), - organizationId: z.string().optional(), + adminId: z.string().optional(), }); export const apiTestDiscordConnection = apiCreateDiscord @@ -224,7 +217,6 @@ export const apiCreateEmail = notificationsSchema name: true, appDeploy: true, dockerCleanup: true, - serverThreshold: true, }) .extend({ smtpServer: z.string().min(1), @@ -239,7 +231,7 @@ export const apiCreateEmail = notificationsSchema export const apiUpdateEmail = apiCreateEmail.partial().extend({ notificationId: z.string().min(1), emailId: z.string().min(1), - organizationId: z.string().optional(), + adminId: z.string().optional(), }); export const apiTestEmailConnection = apiCreateEmail.pick({ @@ -271,7 +263,7 @@ export const apiCreateGotify = notificationsSchema export const apiUpdateGotify = apiCreateGotify.partial().extend({ notificationId: z.string().min(1), gotifyId: z.string().min(1), - organizationId: z.string().optional(), + adminId: z.string().optional(), }); export const apiTestGotifyConnection = apiCreateGotify diff --git a/packages/server/src/db/schema/project.ts b/packages/server/src/db/schema/project.ts index deeba4aca..7ed140d6f 100644 --- a/packages/server/src/db/schema/project.ts +++ b/packages/server/src/db/schema/project.ts @@ -1,9 +1,10 @@ import { relations } from "drizzle-orm"; + import { pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; +import { admins } from "./admin"; import { applications } from "./application"; import { compose } from "./compose"; import { mariadb } from "./mariadb"; @@ -22,10 +23,9 @@ export const projects = pgTable("project", { createdAt: text("createdAt") .notNull() .$defaultFn(() => new Date().toISOString()), - - organizationId: text("organizationId") + adminId: text("adminId") .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + .references(() => admins.adminId, { onDelete: "cascade" }), env: text("env").notNull().default(""), }); @@ -37,9 +37,9 @@ export const projectRelations = relations(projects, ({ many, one }) => ({ mongo: many(mongo), redis: many(redis), compose: many(compose), - organization: one(organization, { - fields: [projects.organizationId], - references: [organization.id], + admin: one(admins, { + fields: [projects.adminId], + references: [admins.adminId], }), })); diff --git a/packages/server/src/db/schema/registry.ts b/packages/server/src/db/schema/registry.ts index b18747095..20544a587 100644 --- a/packages/server/src/db/schema/registry.ts +++ b/packages/server/src/db/schema/registry.ts @@ -3,7 +3,7 @@ import { pgEnum, pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; +import { admins } from "./admin"; import { applications } from "./application"; /** * This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same @@ -27,12 +27,16 @@ export const registry = pgTable("registry", { .notNull() .$defaultFn(() => new Date().toISOString()), registryType: registryType("selfHosted").notNull().default("cloud"), - organizationId: text("organizationId") + adminId: text("adminId") .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + .references(() => admins.adminId, { onDelete: "cascade" }), }); -export const registryRelations = relations(registry, ({ many }) => ({ +export const registryRelations = relations(registry, ({ one, many }) => ({ + admin: one(admins, { + fields: [registry.adminId], + references: [admins.adminId], + }), applications: many(applications), })); @@ -41,7 +45,7 @@ const createSchema = createInsertSchema(registry, { username: z.string().min(1), password: z.string().min(1), registryUrl: z.string(), - organizationId: z.string().min(1), + adminId: z.string().min(1), registryId: z.string().min(1), registryType: z.enum(["cloud"]), imagePrefix: z.string().nullable().optional(), diff --git a/packages/server/src/db/schema/schema.dbml b/packages/server/src/db/schema/schema.dbml deleted file mode 100644 index ce2b5abca..000000000 --- a/packages/server/src/db/schema/schema.dbml +++ /dev/null @@ -1,872 +0,0 @@ -enum applicationStatus { - idle - running - done - error -} - -enum buildType { - dockerfile - heroku_buildpacks - paketo_buildpacks - nixpacks - static -} - -enum certificateType { - letsencrypt - none -} - -enum composeType { - "docker-compose" - stack -} - -enum databaseType { - postgres - mariadb - mysql - mongo -} - -enum deploymentStatus { - running - done - error -} - -enum domainType { - compose - application - preview -} - -enum gitProviderType { - github - gitlab - bitbucket -} - -enum mountType { - bind - volume - file -} - -enum notificationType { - slack - telegram - discord - email - gotify -} - -enum protocolType { - tcp - udp -} - -enum RegistryType { - selfHosted - cloud -} - -enum Roles { - admin - user -} - -enum serverStatus { - active - inactive -} - -enum serviceType { - application - postgres - mysql - mariadb - mongo - redis - compose -} - -enum sourceType { - docker - git - github - gitlab - bitbucket - drop -} - -enum sourceTypeCompose { - git - github - gitlab - bitbucket - raw -} - -table account { - id text [pk, not null] - account_id text [not null] - provider_id text [not null] - user_id text [not null] - access_token text - refresh_token text - id_token text - access_token_expires_at timestamp - refresh_token_expires_at timestamp - scope text - password text - is2FAEnabled boolean [not null, default: false] - created_at timestamp [not null] - updated_at timestamp [not null] - resetPasswordToken text - resetPasswordExpiresAt text - confirmationToken text - confirmationExpiresAt text -} - -table admin { -} - -table application { - applicationId text [pk, not null] - name text [not null] - appName text [not null, unique] - description text - env text - previewEnv text - previewBuildArgs text - previewWildcard text - previewPort integer [default: 3000] - previewHttps boolean [not null, default: false] - previewPath text [default: '/'] - certificateType certificateType [not null, default: 'none'] - previewLimit integer [default: 3] - isPreviewDeploymentsActive boolean [default: false] - buildArgs text - memoryReservation text - memoryLimit text - cpuReservation text - cpuLimit text - title text - enabled boolean - subtitle text - command text - refreshToken text - sourceType sourceType [not null, default: 'github'] - repository text - owner text - branch text - buildPath text [default: '/'] - autoDeploy boolean - gitlabProjectId integer - gitlabRepository text - gitlabOwner text - gitlabBranch text - gitlabBuildPath text [default: '/'] - gitlabPathNamespace text - bitbucketRepository text - bitbucketOwner text - bitbucketBranch text - bitbucketBuildPath text [default: '/'] - username text - password text - dockerImage text - registryUrl text - customGitUrl text - customGitBranch text - customGitBuildPath text - customGitSSHKeyId text - dockerfile text - dockerContextPath text - dockerBuildStage text - dropBuildPath text - healthCheckSwarm json - restartPolicySwarm json - placementSwarm json - updateConfigSwarm json - rollbackConfigSwarm json - modeSwarm json - labelsSwarm json - networkSwarm json - replicas integer [not null, default: 1] - applicationStatus applicationStatus [not null, default: 'idle'] - buildType buildType [not null, default: 'nixpacks'] - herokuVersion text [default: '24'] - publishDirectory text - createdAt text [not null] - registryId text - projectId text [not null] - githubId text - gitlabId text - bitbucketId text - serverId text -} - -table auth { - id text [pk, not null] - email text [not null, unique] - password text [not null] - rol Roles [not null] - image text - secret text - token text - is2FAEnabled boolean [not null, default: false] - createdAt text [not null] - resetPasswordToken text - resetPasswordExpiresAt text - confirmationToken text - confirmationExpiresAt text -} - -table backup { - backupId text [pk, not null] - schedule text [not null] - enabled boolean - database text [not null] - prefix text [not null] - destinationId text [not null] - databaseType databaseType [not null] - postgresId text - mariadbId text - mysqlId text - mongoId text -} - -table bitbucket { - bitbucketId text [pk, not null] - bitbucketUsername text - appPassword text - bitbucketWorkspaceName text - gitProviderId text [not null] -} - -table certificate { - certificateId text [pk, not null] - name text [not null] - certificateData text [not null] - privateKey text [not null] - certificatePath text [not null, unique] - autoRenew boolean - userId text - serverId text -} - -table compose { - composeId text [pk, not null] - name text [not null] - appName text [not null] - description text - env text - composeFile text [not null, default: ''] - refreshToken text - sourceType sourceTypeCompose [not null, default: 'github'] - composeType composeType [not null, default: 'docker-compose'] - repository text - owner text - branch text - autoDeploy boolean - gitlabProjectId integer - gitlabRepository text - gitlabOwner text - gitlabBranch text - gitlabPathNamespace text - bitbucketRepository text - bitbucketOwner text - bitbucketBranch text - customGitUrl text - customGitBranch text - customGitSSHKeyId text - command text [not null, default: ''] - composePath text [not null, default: './docker-compose.yml'] - suffix text [not null, default: ''] - randomize boolean [not null, default: false] - isolatedDeployment boolean [not null, default: false] - composeStatus applicationStatus [not null, default: 'idle'] - projectId text [not null] - createdAt text [not null] - githubId text - gitlabId text - bitbucketId text - serverId text -} - -table deployment { - deploymentId text [pk, not null] - title text [not null] - description text - status deploymentStatus [default: 'running'] - logPath text [not null] - applicationId text - composeId text - serverId text - isPreviewDeployment boolean [default: false] - previewDeploymentId text - createdAt text [not null] - errorMessage text -} - -table destination { - destinationId text [pk, not null] - name text [not null] - provider text - accessKey text [not null] - secretAccessKey text [not null] - bucket text [not null] - region text [not null] - endpoint text [not null] - userId text [not null] -} - -table discord { - discordId text [pk, not null] - webhookUrl text [not null] - decoration boolean -} - -table domain { - domainId text [pk, not null] - host text [not null] - https boolean [not null, default: false] - port integer [default: 3000] - path text [default: '/'] - serviceName text - domainType domainType [default: 'application'] - uniqueConfigKey serial [not null, increment] - createdAt text [not null] - composeId text - applicationId text - previewDeploymentId text - certificateType certificateType [not null, default: 'none'] -} - -table email { - emailId text [pk, not null] - smtpServer text [not null] - smtpPort integer [not null] - username text [not null] - password text [not null] - fromAddress text [not null] - toAddress text[] [not null] -} - -table git_provider { - gitProviderId text [pk, not null] - name text [not null] - providerType gitProviderType [not null, default: 'github'] - createdAt text [not null] - userId text -} - -table github { - githubId text [pk, not null] - githubAppName text - githubAppId integer - githubClientId text - githubClientSecret text - githubInstallationId text - githubPrivateKey text - githubWebhookSecret text - gitProviderId text [not null] -} - -table gitlab { - gitlabId text [pk, not null] - gitlabUrl text [not null, default: 'https://gitlab.com'] - application_id text - redirect_uri text - secret text - access_token text - refresh_token text - group_name text - expires_at integer - gitProviderId text [not null] -} - -table gotify { - gotifyId text [pk, not null] - serverUrl text [not null] - appToken text [not null] - priority integer [not null, default: 5] - decoration boolean -} - -table invitation { - id text [pk, not null] - organization_id text [not null] - email text [not null] - role text - status text [not null] - expires_at timestamp [not null] - inviter_id text [not null] -} - -table mariadb { - mariadbId text [pk, not null] - name text [not null] - appName text [not null, unique] - description text - databaseName text [not null] - databaseUser text [not null] - databasePassword text [not null] - rootPassword text [not null] - dockerImage text [not null] - command text - env text - memoryReservation text - memoryLimit text - cpuReservation text - cpuLimit text - externalPort integer - applicationStatus applicationStatus [not null, default: 'idle'] - createdAt text [not null] - projectId text [not null] - serverId text -} - -table member { - id text [pk, not null] - organization_id text [not null] - user_id text [not null] - role text [not null] - created_at timestamp [not null] -} - -table mongo { - mongoId text [pk, not null] - name text [not null] - appName text [not null, unique] - description text - databaseUser text [not null] - databasePassword text [not null] - dockerImage text [not null] - command text - env text - memoryReservation text - memoryLimit text - cpuReservation text - cpuLimit text - externalPort integer - applicationStatus applicationStatus [not null, default: 'idle'] - createdAt text [not null] - projectId text [not null] - serverId text - replicaSets boolean [default: false] -} - -table mount { - mountId text [pk, not null] - type mountType [not null] - hostPath text - volumeName text - filePath text - content text - serviceType serviceType [not null, default: 'application'] - mountPath text [not null] - applicationId text - postgresId text - mariadbId text - mongoId text - mysqlId text - redisId text - composeId text -} - -table mysql { - mysqlId text [pk, not null] - name text [not null] - appName text [not null, unique] - description text - databaseName text [not null] - databaseUser text [not null] - databasePassword text [not null] - rootPassword text [not null] - dockerImage text [not null] - command text - env text - memoryReservation text - memoryLimit text - cpuReservation text - cpuLimit text - externalPort integer - applicationStatus applicationStatus [not null, default: 'idle'] - createdAt text [not null] - projectId text [not null] - serverId text -} - -table notification { - notificationId text [pk, not null] - name text [not null] - appDeploy boolean [not null, default: false] - appBuildError boolean [not null, default: false] - databaseBackup boolean [not null, default: false] - dokployRestart boolean [not null, default: false] - dockerCleanup boolean [not null, default: false] - serverThreshold boolean [not null, default: false] - notificationType notificationType [not null] - createdAt text [not null] - slackId text - telegramId text - discordId text - emailId text - gotifyId text - userId text -} - -table organization { - id text [pk, not null] - name text [not null] - slug text [unique] - logo text - created_at timestamp [not null] - metadata text - owner_id text [not null] -} - -table port { - portId text [pk, not null] - publishedPort integer [not null] - targetPort integer [not null] - protocol protocolType [not null] - applicationId text [not null] -} - -table postgres { - postgresId text [pk, not null] - name text [not null] - appName text [not null, unique] - databaseName text [not null] - databaseUser text [not null] - databasePassword text [not null] - description text - dockerImage text [not null] - command text - env text - memoryReservation text - externalPort integer - memoryLimit text - cpuReservation text - cpuLimit text - applicationStatus applicationStatus [not null, default: 'idle'] - createdAt text [not null] - projectId text [not null] - serverId text -} - -table preview_deployments { - previewDeploymentId text [pk, not null] - branch text [not null] - pullRequestId text [not null] - pullRequestNumber text [not null] - pullRequestURL text [not null] - pullRequestTitle text [not null] - pullRequestCommentId text [not null] - previewStatus applicationStatus [not null, default: 'idle'] - appName text [not null, unique] - applicationId text [not null] - domainId text - createdAt text [not null] - expiresAt text -} - -table project { - projectId text [pk, not null] - name text [not null] - description text - createdAt text [not null] - userId text [not null] - env text [not null, default: ''] -} - -table redirect { - redirectId text [pk, not null] - regex text [not null] - replacement text [not null] - permanent boolean [not null, default: false] - uniqueConfigKey serial [not null, increment] - createdAt text [not null] - applicationId text [not null] -} - -table redis { - redisId text [pk, not null] - name text [not null] - appName text [not null, unique] - description text - password text [not null] - dockerImage text [not null] - command text - env text - memoryReservation text - memoryLimit text - cpuReservation text - cpuLimit text - externalPort integer - createdAt text [not null] - applicationStatus applicationStatus [not null, default: 'idle'] - projectId text [not null] - serverId text -} - -table registry { - registryId text [pk, not null] - registryName text [not null] - imagePrefix text - username text [not null] - password text [not null] - registryUrl text [not null, default: ''] - createdAt text [not null] - selfHosted RegistryType [not null, default: 'cloud'] - userId text [not null] -} - -table security { - securityId text [pk, not null] - username text [not null] - password text [not null] - createdAt text [not null] - applicationId text [not null] - - indexes { - (username, applicationId) [name: 'security_username_applicationId_unique', unique] - } -} - -table server { - serverId text [pk, not null] - name text [not null] - description text - ipAddress text [not null] - port integer [not null] - username text [not null, default: 'root'] - appName text [not null] - enableDockerCleanup boolean [not null, default: false] - createdAt text [not null] - userId text [not null] - serverStatus serverStatus [not null, default: 'active'] - command text [not null, default: ''] - sshKeyId text - metricsConfig jsonb [not null, default: `{"server":{"type":"Remote","refreshRate":60,"port":4500,"token":"","urlCallback":"","cronJob":"","retentionDays":2,"thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":60,"services":{"include":[],"exclude":[]}}}`] -} - -table session { - id text [pk, not null] - expires_at timestamp [not null] - token text [not null, unique] - created_at timestamp [not null] - updated_at timestamp [not null] - ip_address text - user_agent text - user_id text [not null] - impersonated_by text - active_organization_id text -} - -table slack { - slackId text [pk, not null] - webhookUrl text [not null] - channel text -} - -table "ssh-key" { - sshKeyId text [pk, not null] - privateKey text [not null, default: ''] - publicKey text [not null] - name text [not null] - description text - createdAt text [not null] - lastUsedAt text - userId text -} - -table telegram { - telegramId text [pk, not null] - botToken text [not null] - chatId text [not null] -} - -table user { - id text [pk, not null] - name text [not null, default: ''] - token text [not null] - isRegistered boolean [not null, default: false] - expirationDate text [not null] - createdAt text [not null] - canCreateProjects boolean [not null, default: false] - canAccessToSSHKeys boolean [not null, default: false] - canCreateServices boolean [not null, default: false] - canDeleteProjects boolean [not null, default: false] - canDeleteServices boolean [not null, default: false] - canAccessToDocker boolean [not null, default: false] - canAccessToAPI boolean [not null, default: false] - canAccessToGitProviders boolean [not null, default: false] - canAccessToTraefikFiles boolean [not null, default: false] - accesedProjects text[] [not null, default: `ARRAY[]::text[]`] - accesedServices text[] [not null, default: `ARRAY[]::text[]`] - email text [not null, unique] - email_verified boolean [not null] - image text - role text - banned boolean - ban_reason text - ban_expires timestamp - updated_at timestamp [not null] - serverIp text - certificateType certificateType [not null, default: 'none'] - host text - letsEncryptEmail text - sshPrivateKey text - enableDockerCleanup boolean [not null, default: false] - enableLogRotation boolean [not null, default: false] - enablePaidFeatures boolean [not null, default: false] - metricsConfig jsonb [not null, default: `{"server":{"type":"Dokploy","refreshRate":60,"port":4500,"token":"","retentionDays":2,"cronJob":"","urlCallback":"","thresholds":{"cpu":0,"memory":0}},"containers":{"refreshRate":60,"services":{"include":[],"exclude":[]}}}`] - cleanupCacheApplications boolean [not null, default: false] - cleanupCacheOnPreviews boolean [not null, default: false] - cleanupCacheOnCompose boolean [not null, default: false] - stripeCustomerId text - stripeSubscriptionId text - serversQuantity integer [not null, default: 0] -} - -table verification { - id text [pk, not null] - identifier text [not null] - value text [not null] - expires_at timestamp [not null] - created_at timestamp - updated_at timestamp -} - -ref: mount.applicationId > application.applicationId - -ref: mount.postgresId > postgres.postgresId - -ref: mount.mariadbId > mariadb.mariadbId - -ref: mount.mongoId > mongo.mongoId - -ref: mount.mysqlId > mysql.mysqlId - -ref: mount.redisId > redis.redisId - -ref: mount.composeId > compose.composeId - -ref: application.projectId > project.projectId - -ref: application.customGitSSHKeyId > "ssh-key".sshKeyId - -ref: application.registryId > registry.registryId - -ref: application.githubId - github.githubId - -ref: application.gitlabId - gitlab.gitlabId - -ref: application.bitbucketId - bitbucket.bitbucketId - -ref: application.serverId > server.serverId - -ref: backup.destinationId > destination.destinationId - -ref: backup.postgresId > postgres.postgresId - -ref: backup.mariadbId > mariadb.mariadbId - -ref: backup.mysqlId > mysql.mysqlId - -ref: backup.mongoId > mongo.mongoId - -ref: git_provider.gitProviderId - bitbucket.gitProviderId - -ref: certificate.serverId > server.serverId - -ref: certificate.userId - user.id - -ref: compose.projectId > project.projectId - -ref: compose.customGitSSHKeyId > "ssh-key".sshKeyId - -ref: compose.githubId - github.githubId - -ref: compose.gitlabId - gitlab.gitlabId - -ref: compose.bitbucketId - bitbucket.bitbucketId - -ref: compose.serverId > server.serverId - -ref: deployment.applicationId > application.applicationId - -ref: deployment.composeId > compose.composeId - -ref: deployment.serverId > server.serverId - -ref: deployment.previewDeploymentId > preview_deployments.previewDeploymentId - -ref: destination.userId - user.id - -ref: domain.applicationId > application.applicationId - -ref: domain.composeId > compose.composeId - -ref: preview_deployments.domainId - domain.domainId - -ref: github.gitProviderId - git_provider.gitProviderId - -ref: gitlab.gitProviderId - git_provider.gitProviderId - -ref: git_provider.userId - user.id - -ref: mariadb.projectId > project.projectId - -ref: mariadb.serverId > server.serverId - -ref: mongo.projectId > project.projectId - -ref: mongo.serverId > server.serverId - -ref: mysql.projectId > project.projectId - -ref: mysql.serverId > server.serverId - -ref: notification.slackId - slack.slackId - -ref: notification.telegramId - telegram.telegramId - -ref: notification.discordId - discord.discordId - -ref: notification.emailId - email.emailId - -ref: notification.gotifyId - gotify.gotifyId - -ref: notification.userId - user.id - -ref: port.applicationId > application.applicationId - -ref: postgres.projectId > project.projectId - -ref: postgres.serverId > server.serverId - -ref: preview_deployments.applicationId > application.applicationId - -ref: project.userId - user.id - -ref: redirect.applicationId > application.applicationId - -ref: redis.projectId > project.projectId - -ref: redis.serverId > server.serverId - -ref: registry.userId - user.id - -ref: security.applicationId > application.applicationId - -ref: server.userId - user.id - -ref: server.sshKeyId > "ssh-key".sshKeyId - -ref: "ssh-key".userId - user.id \ No newline at end of file diff --git a/packages/server/src/db/schema/server.ts b/packages/server/src/db/schema/server.ts index 26bb46326..a9c8da6ef 100644 --- a/packages/server/src/db/schema/server.ts +++ b/packages/server/src/db/schema/server.ts @@ -1,16 +1,10 @@ import { relations } from "drizzle-orm"; -import { - boolean, - integer, - jsonb, - pgEnum, - pgTable, - text, -} from "drizzle-orm/pg-core"; +import { boolean, integer, pgEnum, pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { organization } from "./account"; + +import { admins } from "./admin"; import { applications } from "./application"; import { certificates } from "./certificate"; import { compose } from "./compose"; @@ -39,64 +33,24 @@ export const server = pgTable("server", { .notNull() .$defaultFn(() => generateAppName("server")), enableDockerCleanup: boolean("enableDockerCleanup").notNull().default(false), - createdAt: text("createdAt").notNull(), - organizationId: text("organizationId") + createdAt: text("createdAt") .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + .$defaultFn(() => new Date().toISOString()), + adminId: text("adminId") + .notNull() + .references(() => admins.adminId, { onDelete: "cascade" }), serverStatus: serverStatus("serverStatus").notNull().default("active"), command: text("command").notNull().default(""), sshKeyId: text("sshKeyId").references(() => sshKeys.sshKeyId, { onDelete: "set null", }), - metricsConfig: jsonb("metricsConfig") - .$type<{ - server: { - type: "Dokploy" | "Remote"; - refreshRate: number; - port: number; - token: string; - urlCallback: string; - retentionDays: number; - cronJob: string; - thresholds: { - cpu: number; - memory: number; - }; - }; - containers: { - refreshRate: number; - services: { - include: string[]; - exclude: string[]; - }; - }; - }>() - .notNull() - .default({ - server: { - type: "Remote", - refreshRate: 60, - port: 4500, - token: "", - urlCallback: "", - cronJob: "", - retentionDays: 2, - thresholds: { - cpu: 0, - memory: 0, - }, - }, - containers: { - refreshRate: 60, - services: { - include: [], - exclude: [], - }, - }, - }), }); export const serverRelations = relations(server, ({ one, many }) => ({ + admin: one(admins, { + fields: [server.adminId], + references: [admins.adminId], + }), deployments: many(deployments), sshKey: one(sshKeys, { fields: [server.sshKeyId], @@ -110,10 +64,6 @@ export const serverRelations = relations(server, ({ one, many }) => ({ mysql: many(mysql), postgres: many(postgres), certificates: many(certificates), - organization: one(organization, { - fields: [server.organizationId], - references: [organization.id], - }), })); const createSchema = createInsertSchema(server, { @@ -159,34 +109,3 @@ export const apiUpdateServer = createSchema .extend({ command: z.string().optional(), }); - -export const apiUpdateServerMonitoring = createSchema - .pick({ - serverId: true, - }) - .required() - .extend({ - metricsConfig: z - .object({ - server: z.object({ - refreshRate: z.number().min(2), - port: z.number().min(1), - token: z.string(), - urlCallback: z.string().url(), - retentionDays: z.number().min(1), - cronJob: z.string().min(1), - thresholds: z.object({ - cpu: z.number().min(0), - memory: z.number().min(0), - }), - }), - containers: z.object({ - refreshRate: z.number().min(2), - services: z.object({ - include: z.array(z.string()).optional(), - exclude: z.array(z.string()).optional(), - }), - }), - }) - .required(), - }); diff --git a/packages/server/src/db/schema/session.ts b/packages/server/src/db/schema/session.ts index f7c12dae0..1b6d8cc17 100644 --- a/packages/server/src/db/schema/session.ts +++ b/packages/server/src/db/schema/session.ts @@ -1,18 +1,13 @@ import { pgTable, text, timestamp } from "drizzle-orm/pg-core"; -import { users_temp } from "./user"; +import { auth } from "./auth"; -// OLD TABLE -export const session = pgTable("session_temp", { +export const sessionTable = pgTable("session", { id: text("id").primaryKey(), - expiresAt: timestamp("expires_at").notNull(), - token: text("token").notNull().unique(), - createdAt: timestamp("created_at").notNull(), - updatedAt: timestamp("updated_at").notNull(), - ipAddress: text("ip_address"), - userAgent: text("user_agent"), userId: text("user_id") .notNull() - .references(() => users_temp.id, { onDelete: "cascade" }), - impersonatedBy: text("impersonated_by"), - activeOrganizationId: text("active_organization_id"), + .references(() => auth.id, { onDelete: "cascade" }), + expiresAt: timestamp("expires_at", { + withTimezone: true, + mode: "date", + }).notNull(), }); diff --git a/packages/server/src/db/schema/source.ts b/packages/server/src/db/schema/source.ts new file mode 100644 index 000000000..6618ced77 --- /dev/null +++ b/packages/server/src/db/schema/source.ts @@ -0,0 +1,27 @@ +import { pgTable, text } from "drizzle-orm/pg-core"; +import { createInsertSchema } from "drizzle-zod"; +import { nanoid } from "nanoid"; +import { z } from "zod"; + +export const source = pgTable("project", { + projectId: text("projectId") + .notNull() + .primaryKey() + .$defaultFn(() => nanoid()), + name: text("name").notNull(), + description: text("description"), + createdAt: text("createdAt") + .notNull() + .$defaultFn(() => new Date().toISOString()), +}); + +const createSchema = createInsertSchema(source, { + name: z.string().min(1), + description: z.string(), + projectId: z.string(), +}); + +export const apiCreate = createSchema.pick({ + name: true, + description: true, +}); diff --git a/packages/server/src/db/schema/ssh-key.ts b/packages/server/src/db/schema/ssh-key.ts index 8a66d6d9d..e4842851b 100644 --- a/packages/server/src/db/schema/ssh-key.ts +++ b/packages/server/src/db/schema/ssh-key.ts @@ -3,7 +3,7 @@ import { pgTable, text } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { sshKeyCreate, sshKeyType } from "../validations"; -import { organization } from "./account"; +import { admins } from "./admin"; import { applications } from "./application"; import { compose } from "./compose"; import { server } from "./server"; @@ -21,18 +21,18 @@ export const sshKeys = pgTable("ssh-key", { .notNull() .$defaultFn(() => new Date().toISOString()), lastUsedAt: text("lastUsedAt"), - organizationId: text("organizationId") - .notNull() - .references(() => organization.id, { onDelete: "cascade" }), + adminId: text("adminId").references(() => admins.adminId, { + onDelete: "cascade", + }), }); export const sshKeysRelations = relations(sshKeys, ({ many, one }) => ({ applications: many(applications), compose: many(compose), servers: many(server), - organization: one(organization, { - fields: [sshKeys.organizationId], - references: [organization.id], + admin: one(admins, { + fields: [sshKeys.adminId], + references: [admins.adminId], }), })); @@ -48,7 +48,7 @@ export const apiCreateSshKey = createSchema description: true, privateKey: true, publicKey: true, - organizationId: true, + adminId: true, }) .merge(sshKeyCreate.pick({ privateKey: true })); diff --git a/packages/server/src/db/schema/user.ts b/packages/server/src/db/schema/user.ts index 9307127a1..735898f9a 100644 --- a/packages/server/src/db/schema/user.ts +++ b/packages/server/src/db/schema/user.ts @@ -1,18 +1,10 @@ -import { relations } from "drizzle-orm"; -import { - boolean, - integer, - jsonb, - pgTable, - text, - timestamp, -} from "drizzle-orm/pg-core"; +import { relations, sql } from "drizzle-orm"; +import { boolean, pgTable, text, timestamp } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { nanoid } from "nanoid"; import { z } from "zod"; -import { account, organization, apikey } from "./account"; -import { projects } from "./project"; -import { certificateType } from "./shared"; +import { admins } from "./admin"; +import { auth } from "./auth"; /** * This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same * database instance for multiple projects. @@ -20,115 +12,75 @@ import { certificateType } from "./shared"; * @see https://orm.drizzle.team/docs/goodies#multi-project-schema */ -// OLD TABLE - -// TEMP -export const users_temp = pgTable("user_temp", { - id: text("id") +export const users = pgTable("user", { + userId: text("userId") .notNull() .primaryKey() .$defaultFn(() => nanoid()), - name: text("name").notNull().default(""), + + token: text("token").notNull(), isRegistered: boolean("isRegistered").notNull().default(false), - expirationDate: text("expirationDate") + expirationDate: timestamp("expirationDate", { + precision: 3, + mode: "string", + }).notNull(), + createdAt: text("createdAt") .notNull() .$defaultFn(() => new Date().toISOString()), - createdAt2: text("createdAt") - .notNull() - .$defaultFn(() => new Date().toISOString()), - createdAt: timestamp("created_at").defaultNow(), - // Auth - twoFactorEnabled: boolean("two_factor_enabled"), - email: text("email").notNull().unique(), - emailVerified: boolean("email_verified").notNull(), - image: text("image"), - banned: boolean("banned"), - banReason: text("ban_reason"), - banExpires: timestamp("ban_expires"), - updatedAt: timestamp("updated_at").notNull(), - // Admin - serverIp: text("serverIp"), - certificateType: certificateType("certificateType").notNull().default("none"), - host: text("host"), - letsEncryptEmail: text("letsEncryptEmail"), - sshPrivateKey: text("sshPrivateKey"), - enableDockerCleanup: boolean("enableDockerCleanup").notNull().default(false), - enableLogRotation: boolean("enableLogRotation").notNull().default(false), - // Metrics - enablePaidFeatures: boolean("enablePaidFeatures").notNull().default(false), - metricsConfig: jsonb("metricsConfig") - .$type<{ - server: { - type: "Dokploy" | "Remote"; - refreshRate: number; - port: number; - token: string; - urlCallback: string; - retentionDays: number; - cronJob: string; - thresholds: { - cpu: number; - memory: number; - }; - }; - containers: { - refreshRate: number; - services: { - include: string[]; - exclude: string[]; - }; - }; - }>() - .notNull() - .default({ - server: { - type: "Dokploy", - refreshRate: 60, - port: 4500, - token: "", - retentionDays: 2, - cronJob: "", - urlCallback: "", - thresholds: { - cpu: 0, - memory: 0, - }, - }, - containers: { - refreshRate: 60, - services: { - include: [], - exclude: [], - }, - }, - }), - cleanupCacheApplications: boolean("cleanupCacheApplications") + canCreateProjects: boolean("canCreateProjects").notNull().default(false), + canAccessToSSHKeys: boolean("canAccessToSSHKeys").notNull().default(false), + canCreateServices: boolean("canCreateServices").notNull().default(false), + canDeleteProjects: boolean("canDeleteProjects").notNull().default(false), + canDeleteServices: boolean("canDeleteServices").notNull().default(false), + canAccessToDocker: boolean("canAccessToDocker").notNull().default(false), + canAccessToAPI: boolean("canAccessToAPI").notNull().default(false), + canAccessToGitProviders: boolean("canAccessToGitProviders") .notNull() .default(false), - cleanupCacheOnPreviews: boolean("cleanupCacheOnPreviews") + canAccessToTraefikFiles: boolean("canAccessToTraefikFiles") .notNull() .default(false), - cleanupCacheOnCompose: boolean("cleanupCacheOnCompose") + accessedProjects: text("accesedProjects") + .array() .notNull() - .default(false), - stripeCustomerId: text("stripeCustomerId"), - stripeSubscriptionId: text("stripeSubscriptionId"), - serversQuantity: integer("serversQuantity").notNull().default(0), + .default(sql`ARRAY[]::text[]`), + accessedServices: text("accesedServices") + .array() + .notNull() + .default(sql`ARRAY[]::text[]`), + adminId: text("adminId") + .notNull() + .references(() => admins.adminId, { onDelete: "cascade" }), + authId: text("authId") + .notNull() + .references(() => auth.id, { onDelete: "cascade" }), }); -export const usersRelations = relations(users_temp, ({ one, many }) => ({ - account: one(account, { - fields: [users_temp.id], - references: [account.userId], +export const usersRelations = relations(users, ({ one }) => ({ + auth: one(auth, { + fields: [users.authId], + references: [auth.id], + }), + admin: one(admins, { + fields: [users.adminId], + references: [admins.adminId], }), - organizations: many(organization), - projects: many(projects), - apiKeys: many(apikey), })); -const createSchema = createInsertSchema(users_temp, { - id: z.string().min(1), +const createSchema = createInsertSchema(users, { + userId: z.string().min(1), + authId: z.string().min(1), + token: z.string().min(1), isRegistered: z.boolean().optional(), + adminId: z.string(), + accessedProjects: z.array(z.string()).optional(), + accessedServices: z.array(z.string()).optional(), + canCreateProjects: z.boolean().optional(), + canCreateServices: z.boolean().optional(), + canDeleteProjects: z.boolean().optional(), + canDeleteServices: z.boolean().optional(), + canAccessToDocker: z.boolean().optional(), + canAccessToTraefikFiles: z.boolean().optional(), }); export const apiCreateUserInvitation = createSchema.pick({}).extend({ @@ -137,172 +89,41 @@ export const apiCreateUserInvitation = createSchema.pick({}).extend({ export const apiRemoveUser = createSchema .pick({ - id: true, + authId: true, }) .required(); export const apiFindOneToken = createSchema - .pick({}) - .required() - .extend({ - token: z.string().min(1), - }); + .pick({ + token: true, + }) + .required(); export const apiAssignPermissions = createSchema .pick({ - id: true, - // canCreateProjects: true, - // canCreateServices: true, - // canDeleteProjects: true, - // canDeleteServices: true, - // accessedProjects: true, - // accessedServices: true, - // canAccessToTraefikFiles: true, - // canAccessToDocker: true, - // canAccessToAPI: true, - // canAccessToSSHKeys: true, - // canAccessToGitProviders: true, - }) - .extend({ - accessedProjects: z.array(z.string()).optional(), - accessedServices: z.array(z.string()).optional(), - canCreateProjects: z.boolean().optional(), - canCreateServices: z.boolean().optional(), - canDeleteProjects: z.boolean().optional(), - canDeleteServices: z.boolean().optional(), - canAccessToDocker: z.boolean().optional(), - canAccessToTraefikFiles: z.boolean().optional(), - canAccessToAPI: z.boolean().optional(), - canAccessToSSHKeys: z.boolean().optional(), - canAccessToGitProviders: z.boolean().optional(), + userId: true, + canCreateProjects: true, + canCreateServices: true, + canDeleteProjects: true, + canDeleteServices: true, + accessedProjects: true, + accessedServices: true, + canAccessToTraefikFiles: true, + canAccessToDocker: true, + canAccessToAPI: true, + canAccessToSSHKeys: true, + canAccessToGitProviders: true, }) .required(); export const apiFindOneUser = createSchema .pick({ - id: true, + userId: true, }) .required(); export const apiFindOneUserByAuth = createSchema .pick({ - // authId: true, + authId: true, }) .required(); -export const apiSaveSSHKey = createSchema - .pick({ - sshPrivateKey: true, - }) - .required(); - -export const apiAssignDomain = createSchema - .pick({ - host: true, - certificateType: true, - letsEncryptEmail: true, - }) - .required() - .partial({ - letsEncryptEmail: true, - }); - -export const apiUpdateDockerCleanup = createSchema - .pick({ - enableDockerCleanup: true, - }) - .required() - .extend({ - serverId: z.string().optional(), - }); - -export const apiTraefikConfig = z.object({ - traefikConfig: z.string().min(1), -}); - -export const apiModifyTraefikConfig = z.object({ - path: z.string().min(1), - traefikConfig: z.string().min(1), - serverId: z.string().optional(), -}); -export const apiReadTraefikConfig = z.object({ - path: z.string().min(1), - serverId: z.string().optional(), -}); - -export const apiEnableDashboard = z.object({ - enableDashboard: z.boolean().optional(), - serverId: z.string().optional(), -}); - -export const apiServerSchema = z - .object({ - serverId: z.string().optional(), - }) - .optional(); - -export const apiReadStatsLogs = z.object({ - page: z - .object({ - pageIndex: z.number(), - pageSize: z.number(), - }) - .optional(), - status: z.string().array().optional(), - search: z.string().optional(), - sort: z.object({ id: z.string(), desc: z.boolean() }).optional(), -}); - -export const apiUpdateWebServerMonitoring = z.object({ - metricsConfig: z - .object({ - server: z.object({ - refreshRate: z.number().min(2), - port: z.number().min(1), - token: z.string(), - urlCallback: z.string().url(), - retentionDays: z.number().min(1), - cronJob: z.string().min(1), - thresholds: z.object({ - cpu: z.number().min(0), - memory: z.number().min(0), - }), - }), - containers: z.object({ - refreshRate: z.number().min(2), - services: z.object({ - include: z.array(z.string()).optional(), - exclude: z.array(z.string()).optional(), - }), - }), - }) - .required(), -}); - -export const apiUpdateUser = createSchema.partial().extend({ - password: z.string().optional(), - currentPassword: z.string().optional(), - metricsConfig: z - .object({ - server: z.object({ - type: z.enum(["Dokploy", "Remote"]), - refreshRate: z.number(), - port: z.number(), - token: z.string(), - urlCallback: z.string(), - retentionDays: z.number(), - cronJob: z.string(), - thresholds: z.object({ - cpu: z.number(), - memory: z.number(), - }), - }), - containers: z.object({ - refreshRate: z.number(), - services: z.object({ - include: z.array(z.string()), - exclude: z.array(z.string()), - }), - }), - }) - .optional(), -}); diff --git a/packages/server/src/emails/emails/build-failed.tsx b/packages/server/src/emails/emails/build-failed.tsx index 79e7b718d..b3d999192 100644 --- a/packages/server/src/emails/emails/build-failed.tsx +++ b/packages/server/src/emails/emails/build-failed.tsx @@ -12,6 +12,7 @@ import { Tailwind, Text, } from "@react-email/components"; +import * as React from "react"; export type TemplateProps = { projectName: string; diff --git a/packages/server/src/emails/emails/build-success.tsx b/packages/server/src/emails/emails/build-success.tsx index d9e500ab9..eadf7c44b 100644 --- a/packages/server/src/emails/emails/build-success.tsx +++ b/packages/server/src/emails/emails/build-success.tsx @@ -12,6 +12,7 @@ import { Tailwind, Text, } from "@react-email/components"; +import * as React from "react"; export type TemplateProps = { projectName: string; diff --git a/packages/server/src/emails/emails/database-backup.tsx b/packages/server/src/emails/emails/database-backup.tsx index 754d4d982..2bdf944c3 100644 --- a/packages/server/src/emails/emails/database-backup.tsx +++ b/packages/server/src/emails/emails/database-backup.tsx @@ -10,6 +10,7 @@ import { Tailwind, Text, } from "@react-email/components"; +import * as React from "react"; export type TemplateProps = { projectName: string; diff --git a/packages/server/src/emails/emails/docker-cleanup.tsx b/packages/server/src/emails/emails/docker-cleanup.tsx index 985406ae0..05d93ed75 100644 --- a/packages/server/src/emails/emails/docker-cleanup.tsx +++ b/packages/server/src/emails/emails/docker-cleanup.tsx @@ -1,5 +1,6 @@ import { Body, + Button, Container, Head, Heading, @@ -10,6 +11,7 @@ import { Tailwind, Text, } from "@react-email/components"; +import * as React from "react"; export type TemplateProps = { message: string; diff --git a/packages/server/src/emails/emails/dokploy-restart.tsx b/packages/server/src/emails/emails/dokploy-restart.tsx index db4edd69c..1ad3d6004 100644 --- a/packages/server/src/emails/emails/dokploy-restart.tsx +++ b/packages/server/src/emails/emails/dokploy-restart.tsx @@ -10,6 +10,7 @@ import { Tailwind, Text, } from "@react-email/components"; +import * as React from "react"; export type TemplateProps = { date: string; diff --git a/packages/server/src/emails/emails/notion-magic-link.tsx b/packages/server/src/emails/emails/notion-magic-link.tsx index f4071ce00..b2286c340 100644 --- a/packages/server/src/emails/emails/notion-magic-link.tsx +++ b/packages/server/src/emails/emails/notion-magic-link.tsx @@ -9,6 +9,7 @@ import { Preview, Text, } from "@react-email/components"; +import * as React from "react"; interface NotionMagicLinkEmailProps { loginCode?: string; diff --git a/packages/server/src/emails/emails/plaid-verify-identity.tsx b/packages/server/src/emails/emails/plaid-verify-identity.tsx index 88cf893d7..650ab4866 100644 --- a/packages/server/src/emails/emails/plaid-verify-identity.tsx +++ b/packages/server/src/emails/emails/plaid-verify-identity.tsx @@ -9,6 +9,7 @@ import { Section, Text, } from "@react-email/components"; +import * as React from "react"; interface PlaidVerifyIdentityEmailProps { validationCode?: string; diff --git a/packages/server/src/emails/emails/stripe-welcome.tsx b/packages/server/src/emails/emails/stripe-welcome.tsx index dbf02ea0e..9377853be 100644 --- a/packages/server/src/emails/emails/stripe-welcome.tsx +++ b/packages/server/src/emails/emails/stripe-welcome.tsx @@ -11,6 +11,7 @@ import { Section, Text, } from "@react-email/components"; +import * as React from "react"; const baseUrl = process.env.VERCEL_URL!; diff --git a/packages/server/src/emails/emails/vercel-invite-user.tsx b/packages/server/src/emails/emails/vercel-invite-user.tsx index 79f50cd71..53b31987c 100644 --- a/packages/server/src/emails/emails/vercel-invite-user.tsx +++ b/packages/server/src/emails/emails/vercel-invite-user.tsx @@ -15,6 +15,7 @@ import { Tailwind, Text, } from "@react-email/components"; +import * as React from "react"; interface VercelInviteUserEmailProps { username?: string; diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index f74b8d9d0..d48e6ea8a 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -1,4 +1,7 @@ +export * from "./auth/auth"; +export * from "./auth/token"; export * from "./auth/random-password"; +// export * from "./db"; export * from "./services/admin"; export * from "./services/user"; export * from "./services/project"; @@ -27,6 +30,7 @@ export * from "./services/ssh-key"; export * from "./services/git-provider"; export * from "./services/bitbucket"; export * from "./services/github"; +export * from "./services/auth"; export * from "./services/gitlab"; export * from "./services/server"; export * from "./services/application"; @@ -35,7 +39,6 @@ export * from "./setup/config-paths"; export * from "./setup/postgres-setup"; export * from "./setup/redis-setup"; export * from "./setup/server-setup"; -export * from "./setup/monitoring-setup"; export * from "./setup/setup"; export * from "./setup/traefik-setup"; export * from "./setup/server-validate"; @@ -54,7 +57,6 @@ export * from "./utils/notifications/database-backup"; export * from "./utils/notifications/dokploy-restart"; export * from "./utils/notifications/utils"; export * from "./utils/notifications/docker-cleanup"; -export * from "./utils/notifications/server-threshold"; export * from "./utils/builders/index"; export * from "./utils/builders/compose"; @@ -69,7 +71,6 @@ export * from "./utils/builders/utils"; export * from "./utils/cluster/upload"; export * from "./utils/docker/compose"; -export * from "./utils/docker/collision"; export * from "./utils/docker/domain"; export * from "./utils/docker/utils"; export * from "./utils/docker/types"; @@ -109,10 +110,8 @@ export * from "./utils/access-log/types"; export * from "./utils/access-log/utils"; export * from "./constants/index"; -export * from "./monitoring/utils"; +export * from "./monitoring/utilts"; export * from "./db/validations/domain"; export * from "./db/validations/index"; export * from "./utils/gpu-setup"; - -export * from "./lib/auth"; diff --git a/packages/server/src/lib/auth.ts b/packages/server/src/lib/auth.ts deleted file mode 100644 index 1efa17300..000000000 --- a/packages/server/src/lib/auth.ts +++ /dev/null @@ -1,304 +0,0 @@ -import type { IncomingMessage } from "node:http"; -import * as bcrypt from "bcrypt"; -import { betterAuth } from "better-auth"; -import { drizzleAdapter } from "better-auth/adapters/drizzle"; -import { organization, twoFactor, apiKey } from "better-auth/plugins"; -import { and, desc, eq } from "drizzle-orm"; -import { db } from "../db"; -import * as schema from "../db/schema"; -import { sendEmail } from "../verification/send-verification-email"; -import { IS_CLOUD } from "../constants"; - -const { handler, api } = betterAuth({ - database: drizzleAdapter(db, { - provider: "pg", - schema: schema, - }), - logger: { - disabled: process.env.NODE_ENV === "production", - }, - appName: "Dokploy", - socialProviders: { - github: { - clientId: process.env.GITHUB_CLIENT_ID as string, - clientSecret: process.env.GITHUB_CLIENT_SECRET as string, - }, - google: { - clientId: process.env.GOOGLE_CLIENT_ID as string, - clientSecret: process.env.GOOGLE_CLIENT_SECRET as string, - }, - }, - emailVerification: { - sendOnSignUp: true, - autoSignInAfterVerification: true, - sendVerificationEmail: async ({ user, url }) => { - if (IS_CLOUD) { - await sendEmail({ - email: user.email, - subject: "Verify your email", - text: ` -

Click the link to verify your email: Verify Email

- `, - }); - } - }, - }, - emailAndPassword: { - enabled: true, - autoSignIn: !IS_CLOUD, - requireEmailVerification: IS_CLOUD, - password: { - async hash(password) { - return bcrypt.hashSync(password, 10); - }, - async verify({ hash, password }) { - return bcrypt.compareSync(password, hash); - }, - }, - sendResetPassword: async ({ user, url }) => { - await sendEmail({ - email: user.email, - subject: "Reset your password", - text: ` -

Click the link to reset your password: Reset Password

- `, - }); - }, - }, - databaseHooks: { - user: { - create: { - after: async (user) => { - const isAdminPresent = await db.query.member.findFirst({ - where: eq(schema.member.role, "owner"), - }); - - if (IS_CLOUD || !isAdminPresent) { - await db.transaction(async (tx) => { - const organization = await tx - .insert(schema.organization) - .values({ - name: "My Organization", - ownerId: user.id, - createdAt: new Date(), - }) - .returning() - .then((res) => res[0]); - - await tx.insert(schema.member).values({ - userId: user.id, - organizationId: organization?.id || "", - role: "owner", - createdAt: new Date(), - }); - }); - } - }, - }, - }, - session: { - create: { - before: async (session) => { - const member = await db.query.member.findFirst({ - where: eq(schema.member.userId, session.userId), - orderBy: desc(schema.member.createdAt), - with: { - organization: true, - }, - }); - - return { - data: { - ...session, - activeOrganizationId: member?.organization.id, - }, - }; - }, - }, - }, - }, - user: { - modelName: "users_temp", - additionalFields: { - role: { - type: "string", - // required: true, - input: false, - }, - ownerId: { - type: "string", - // required: true, - input: false, - }, - }, - }, - - plugins: [ - apiKey({ - enableMetadata: true, - }), - twoFactor(), - organization({ - async sendInvitationEmail(data, _request) { - if (IS_CLOUD) { - const host = - process.env.NODE_ENV === "development" - ? "http://localhost:3000" - : "https://dokploy.com"; - const inviteLink = `${host}/invitation?token=${data.id}`; - - await sendEmail({ - email: data.email, - subject: "Invitation to join organization", - text: ` -

You are invited to join ${data.organization.name} on Dokploy. Click the link to accept the invitation: Accept Invitation

- `, - }); - } - }, - }), - ], -}); - -export const auth = { - handler, - createApiKey: api.createApiKey, -}; - -export const validateRequest = async (request: IncomingMessage) => { - const apiKey = request.headers["x-api-key"] as string; - if (apiKey) { - try { - const { valid, key, error } = await api.verifyApiKey({ - body: { - key: apiKey, - }, - }); - - if (error) { - throw new Error(error.message || "Error verifying API key"); - } - if (!valid || !key) { - return { - session: null, - user: null, - }; - } - - const apiKeyRecord = await db.query.apikey.findFirst({ - where: eq(schema.apikey.id, key.id), - with: { - user: true, - }, - }); - - if (!apiKeyRecord) { - return { - session: null, - user: null, - }; - } - - const organizationId = JSON.parse( - apiKeyRecord.metadata || "{}", - ).organizationId; - - if (!organizationId) { - return { - session: null, - user: null, - }; - } - - const member = await db.query.member.findFirst({ - where: and( - eq(schema.member.userId, apiKeyRecord.user.id), - eq(schema.member.organizationId, organizationId), - ), - with: { - organization: true, - }, - }); - - const { - id, - name, - email, - emailVerified, - image, - createdAt, - updatedAt, - twoFactorEnabled, - } = apiKeyRecord.user; - - const mockSession = { - session: { - user: { - id: apiKeyRecord.user.id, - email: apiKeyRecord.user.email, - name: apiKeyRecord.user.name, - }, - activeOrganizationId: organizationId || "", - }, - user: { - id, - name, - email, - emailVerified, - image, - createdAt, - updatedAt, - twoFactorEnabled, - role: member?.role || "member", - ownerId: member?.organization.ownerId || apiKeyRecord.user.id, - }, - }; - - return mockSession; - } catch (error) { - console.error("Error verifying API key", error); - return { - session: null, - user: null, - }; - } - } - - // If no API key, proceed with normal session validation - const session = await api.getSession({ - headers: new Headers({ - cookie: request.headers.cookie || "", - }), - }); - - if (!session?.session || !session.user) { - return { - session: null, - user: null, - }; - } - - if (session?.user) { - const member = await db.query.member.findFirst({ - where: and( - eq(schema.member.userId, session.user.id), - eq( - schema.member.organizationId, - session.session.activeOrganizationId || "", - ), - ), - with: { - organization: true, - }, - }); - - session.user.role = member?.role || "member"; - if (member) { - session.user.ownerId = member.organization.ownerId; - } else { - session.user.ownerId = session.user.id; - } - } - - return session; -}; diff --git a/packages/server/src/monitoring/utils.ts b/packages/server/src/monitoring/utilts.ts similarity index 52% rename from packages/server/src/monitoring/utils.ts rename to packages/server/src/monitoring/utilts.ts index 147ade0ad..f67d57050 100644 --- a/packages/server/src/monitoring/utils.ts +++ b/packages/server/src/monitoring/utilts.ts @@ -1,19 +1,10 @@ import { promises } from "node:fs"; +import type Dockerode from "dockerode"; import osUtils from "node-os-utils"; import { paths } from "../constants"; -export interface Container { - BlockIO: string; - CPUPerc: string; - Container: string; - ID: string; - MemPerc: string; - MemUsage: string; - Name: string; - NetIO: string; -} export const recordAdvancedStats = async ( - stats: Container, + stats: Dockerode.ContainerStats, appName: string, ) => { const { MONITORING_PATH } = paths(); @@ -21,20 +12,29 @@ export const recordAdvancedStats = async ( await promises.mkdir(path, { recursive: true }); - await updateStatsFile(appName, "cpu", stats.CPUPerc); - await updateStatsFile(appName, "memory", { - used: stats.MemUsage.split(" ")[0], - total: stats.MemUsage.split(" ")[2], - }); + const cpuPercent = calculateCpuUsagePercent( + stats.cpu_stats, + stats.precpu_stats, + ); + const memoryStats = calculateMemoryStats(stats.memory_stats); + const blockIO = calculateBlockIO(stats.blkio_stats); + const networkUsage = calculateNetworkUsage(stats.networks); + await updateStatsFile(appName, "cpu", cpuPercent); + await updateStatsFile(appName, "memory", { + used: memoryStats.used, + free: memoryStats.free, + usedPercentage: memoryStats.usedPercentage, + total: memoryStats.total, + }); await updateStatsFile(appName, "block", { - readMb: stats.BlockIO.split(" ")[0], - writeMb: stats.BlockIO.split(" ")[2], + readMb: blockIO.readMb, + writeMb: blockIO.writeMb, }); await updateStatsFile(appName, "network", { - inputMb: stats.NetIO.split(" ")[0], - outputMb: stats.NetIO.split(" ")[2], + inputMb: networkUsage.inputMb, + outputMb: networkUsage.outputMb, }); if (appName === "dokploy") { @@ -73,7 +73,7 @@ export const readStatsFile = async ( const filePath = `${MONITORING_PATH}/${appName}/${statType}.json`; const data = await promises.readFile(filePath, "utf-8"); return JSON.parse(data); - } catch (_error) { + } catch (error) { return []; } }; @@ -108,7 +108,7 @@ export const readLastValueStatsFile = async ( const data = await promises.readFile(filePath, "utf-8"); const stats = JSON.parse(data); return stats[stats.length - 1] || null; - } catch (_error) { + } catch (error) { return null; } }; @@ -122,3 +122,77 @@ export const getLastAdvancedStatsFile = async (appName: string) => { block: await readLastValueStatsFile(appName, "block"), }; }; + +const calculateCpuUsagePercent = ( + cpu_stats: Dockerode.ContainerStats["cpu_stats"], + precpu_stats: Dockerode.ContainerStats["precpu_stats"], +) => { + const cpuDelta = + cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage; + const systemDelta = + cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage; + + const numberCpus = + cpu_stats.online_cpus || + (cpu_stats.cpu_usage.percpu_usage + ? cpu_stats.cpu_usage.percpu_usage.length + : 1); + + if (systemDelta > 0 && cpuDelta > 0) { + return (cpuDelta / systemDelta) * numberCpus * 100.0; + } + return 0; +}; + +const calculateMemoryStats = ( + memory_stats: Dockerode.ContainerStats["memory_stats"], +) => { + const usedMemory = memory_stats.usage - (memory_stats.stats.cache || 0); + const availableMemory = memory_stats.limit; + const memoryUsedPercentage = (usedMemory / availableMemory) * 100.0; + + return { + used: usedMemory, + free: availableMemory - usedMemory, + usedPercentage: memoryUsedPercentage, + total: availableMemory, + }; +}; +const calculateBlockIO = ( + blkio_stats: Dockerode.ContainerStats["blkio_stats"], +) => { + let readIO = 0; + let writeIO = 0; + if (blkio_stats?.io_service_bytes_recursive) { + for (const io of blkio_stats.io_service_bytes_recursive) { + if (io.op === "read") { + readIO += io.value; + } else if (io.op === "write") { + writeIO += io.value; + } + } + } + return { + readMb: readIO / (1024 * 1024), + writeMb: writeIO / (1024 * 1024), + }; +}; + +const calculateNetworkUsage = ( + networks: Dockerode.ContainerStats["networks"], +) => { + let totalRx = 0; + let totalTx = 0; + + const stats = Object.keys(networks); + + for (const interfaceName of stats) { + const net = networks[interfaceName]; + totalRx += net?.rx_bytes || 0; + totalTx += net?.tx_bytes || 0; + } + return { + inputMb: totalRx / (1024 * 1024), + outputMb: totalTx / (1024 * 1024), + }; +}; diff --git a/packages/server/src/services/admin.ts b/packages/server/src/services/admin.ts index 3509868be..3502395ec 100644 --- a/packages/server/src/services/admin.ts +++ b/packages/server/src/services/admin.ts @@ -1,56 +1,108 @@ +import { randomBytes } from "node:crypto"; import { db } from "@dokploy/server/db"; import { - invitation, - member, - organization, - users_temp, + admins, + type apiCreateUserInvitation, + auth, + users, } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; +import * as bcrypt from "bcrypt"; import { eq } from "drizzle-orm"; import { IS_CLOUD } from "../constants"; -export const findUserById = async (userId: string) => { - const user = await db.query.users_temp.findFirst({ - where: eq(users_temp.id, userId), - // with: { - // account: true, - // }, +export type Admin = typeof admins.$inferSelect; +export const createInvitation = async ( + input: typeof apiCreateUserInvitation._type, + adminId: string, +) => { + await db.transaction(async (tx) => { + const result = await tx + .insert(auth) + .values({ + email: input.email.toLowerCase(), + rol: "user", + password: bcrypt.hashSync("01231203012312", 10), + }) + .returning() + .then((res) => res[0]); + + if (!result) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Error creating the user", + }); + } + const expiresIn24Hours = new Date(); + expiresIn24Hours.setDate(expiresIn24Hours.getDate() + 1); + const token = randomBytes(32).toString("hex"); + await tx + .insert(users) + .values({ + adminId: adminId, + authId: result.id, + token, + expirationDate: expiresIn24Hours.toISOString(), + }) + .returning(); }); - if (!user) { - throw new TRPCError({ - code: "NOT_FOUND", - message: "User not found", - }); - } - return user; }; -export const findOrganizationById = async (organizationId: string) => { - const organizationResult = await db.query.organization.findFirst({ - where: eq(organization.id, organizationId), +export const findAdminById = async (adminId: string) => { + const admin = await db.query.admins.findFirst({ + where: eq(admins.adminId, adminId), }); - return organizationResult; + if (!admin) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Admin not found", + }); + } + return admin; +}; + +export const updateAdmin = async ( + authId: string, + adminData: Partial, +) => { + const admin = await db + .update(admins) + .set({ + ...adminData, + }) + .where(eq(admins.authId, authId)) + .returning() + .then((res) => res[0]); + + return admin; }; export const isAdminPresent = async () => { - const admin = await db.query.member.findFirst({ - where: eq(member.role, "owner"), - }); - + const admin = await db.query.admins.findFirst(); if (!admin) { return false; } return true; }; -export const findAdmin = async () => { - const admin = await db.query.member.findFirst({ - where: eq(member.role, "owner"), +export const findAdminByAuthId = async (authId: string) => { + const admin = await db.query.admins.findFirst({ + where: eq(admins.authId, authId), with: { - user: true, + users: true, }, }); + if (!admin) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Admin not found", + }); + } + return admin; +}; +export const findAdmin = async () => { + const admin = await db.query.admins.findFirst({}); if (!admin) { throw new TRPCError({ code: "NOT_FOUND", @@ -61,15 +113,14 @@ export const findAdmin = async () => { }; export const getUserByToken = async (token: string) => { - const user = await db.query.invitation.findFirst({ - where: eq(invitation.id, token), - columns: { - id: true, - email: true, - status: true, - expiresAt: true, - role: true, - inviterId: true, + const user = await db.query.users.findFirst({ + where: eq(users.token, token), + with: { + auth: { + columns: { + password: false, + }, + }, }, }); @@ -79,23 +130,34 @@ export const getUserByToken = async (token: string) => { message: "Invitation not found", }); } - - const userAlreadyExists = await db.query.users_temp.findFirst({ - where: eq(users_temp.email, user?.email || ""), - }); - - const { expiresAt, ...rest } = user; return { - ...rest, - isExpired: user.expiresAt < new Date(), - userAlreadyExists: !!userAlreadyExists, + ...user, + isExpired: user.isRegistered, }; }; -export const removeUserById = async (userId: string) => { +export const removeUserByAuthId = async (authId: string) => { await db - .delete(users_temp) - .where(eq(users_temp.id, userId)) + .delete(auth) + .where(eq(auth.id, authId)) + .returning() + .then((res) => res[0]); +}; + +export const removeAdminByAuthId = async (authId: string) => { + const admin = await findAdminByAuthId(authId); + if (!admin) return null; + + // First delete all associated users + const users = admin.users; + + for (const user of users) { + await removeUserByAuthId(user.authId); + } + // Then delete the auth record which will cascade delete the admin + return await db + .delete(auth) + .where(eq(auth.id, authId)) .returning() .then((res) => res[0]); }; @@ -106,8 +168,8 @@ export const getDokployUrl = async () => { } const admin = await findAdmin(); - if (admin.user.host) { - return `https://${admin.user.host}`; + if (admin.host) { + return `https://${admin.host}`; } - return `http://${admin.user.serverIp}:${process.env.PORT}`; + return `http://${admin.serverIp}:${process.env.PORT}`; }; diff --git a/packages/server/src/services/application.ts b/packages/server/src/services/application.ts index 425a6adbc..8de9b5ba5 100644 --- a/packages/server/src/services/application.ts +++ b/packages/server/src/services/application.ts @@ -4,8 +4,9 @@ import { type apiCreateApplication, applications, buildAppName, + cleanAppName, } from "@dokploy/server/db/schema"; -import { getAdvancedStats } from "@dokploy/server/monitoring/utils"; +import { getAdvancedStats } from "@dokploy/server/monitoring/utilts"; import { buildApplication, getBuildCommand, @@ -27,6 +28,7 @@ import { getCustomGitCloneCommand, } from "@dokploy/server/utils/providers/git"; import { + authGithub, cloneGithubRepository, getGithubCloneCommand, } from "@dokploy/server/utils/providers/github"; @@ -173,7 +175,6 @@ export const deployApplication = async ({ descriptionLog: string; }) => { const application = await findApplicationById(applicationId); - const buildLink = `${await getDokployUrl()}/dashboard/project/${application.projectId}/services/application/${application.applicationId}?tab=deployments`; const deployment = await createDeployment({ applicationId: applicationId, @@ -182,12 +183,6 @@ export const deployApplication = async ({ }); try { - // const admin = await findUserById(application.project.userId); - - // if (admin.cleanupCacheApplications) { - // await cleanupFullDocker(application?.serverId); - // } - if (application.sourceType === "github") { await cloneGithubRepository({ ...application, @@ -217,7 +212,7 @@ export const deployApplication = async ({ applicationName: application.name, applicationType: "application", buildLink, - organizationId: application.project.organizationId, + adminId: application.project.adminId, domains: application.domains, }); } catch (error) { @@ -230,7 +225,7 @@ export const deployApplication = async ({ // @ts-ignore errorMessage: error?.message || "Error building", buildLink, - organizationId: application.project.organizationId, + adminId: application.project.adminId, }); throw error; @@ -249,7 +244,6 @@ export const rebuildApplication = async ({ descriptionLog: string; }) => { const application = await findApplicationById(applicationId); - const deployment = await createDeployment({ applicationId: applicationId, title: titleLog, @@ -257,11 +251,6 @@ export const rebuildApplication = async ({ }); try { - // const admin = await findUserById(application.project.userId); - - // if (admin.cleanupCacheApplications) { - // await cleanupFullDocker(application?.serverId); - // } if (application.sourceType === "github") { await buildApplication(application, deployment.logPath); } else if (application.sourceType === "gitlab") { @@ -296,7 +285,6 @@ export const deployRemoteApplication = async ({ descriptionLog: string; }) => { const application = await findApplicationById(applicationId); - const buildLink = `${await getDokployUrl()}/dashboard/project/${application.projectId}/services/application/${application.applicationId}?tab=deployments`; const deployment = await createDeployment({ applicationId: applicationId, @@ -306,11 +294,6 @@ export const deployRemoteApplication = async ({ try { if (application.serverId) { - // const admin = await findUserById(application.project.userId); - - // if (admin.cleanupCacheApplications) { - // await cleanupFullDocker(application?.serverId); - // } let command = "set -e;"; if (application.sourceType === "github") { command += await getGithubCloneCommand({ @@ -349,7 +332,7 @@ export const deployRemoteApplication = async ({ applicationName: application.name, applicationType: "application", buildLink, - organizationId: application.project.organizationId, + adminId: application.project.adminId, domains: application.domains, }); } catch (error) { @@ -373,9 +356,17 @@ export const deployRemoteApplication = async ({ // @ts-ignore errorMessage: error?.message || "Error building", buildLink, - organizationId: application.project.organizationId, + adminId: application.project.adminId, }); + console.log( + "Error on ", + application.buildType, + "/", + application.sourceType, + error, + ); + throw error; } @@ -394,7 +385,6 @@ export const deployPreviewApplication = async ({ previewDeploymentId: string; }) => { const application = await findApplicationById(applicationId); - const deployment = await createDeploymentPreview({ title: titleLog, description: descriptionLog, @@ -448,15 +438,9 @@ export const deployPreviewApplication = async ({ body: `### Dokploy Preview Deployment\n\n${buildingComment}`, }); application.appName = previewDeployment.appName; - application.env = `${application.previewEnv}\nDOKPLOY_DEPLOY_URL=${previewDeployment?.domain}`; + application.env = application.previewEnv; application.buildArgs = application.previewBuildArgs; - // const admin = await findUserById(application.project.userId); - - // if (admin.cleanupCacheOnPreviews) { - // await cleanupFullDocker(application?.serverId); - // } - if (application.sourceType === "github") { await cloneGithubRepository({ ...application, @@ -466,6 +450,7 @@ export const deployPreviewApplication = async ({ }); await buildApplication(application, deployment.logPath); } + // 4eef09efc46009187d668cf1c25f768d0bde4f91 const successComment = getIssueComment( application.name, "success", @@ -507,7 +492,6 @@ export const deployRemotePreviewApplication = async ({ previewDeploymentId: string; }) => { const application = await findApplicationById(applicationId); - const deployment = await createDeploymentPreview({ title: titleLog, description: descriptionLog, @@ -561,21 +545,14 @@ export const deployRemotePreviewApplication = async ({ body: `### Dokploy Preview Deployment\n\n${buildingComment}`, }); application.appName = previewDeployment.appName; - application.env = `${application.previewEnv}\nDOKPLOY_DEPLOY_URL=${previewDeployment?.domain}`; + application.env = application.previewEnv; application.buildArgs = application.previewBuildArgs; if (application.serverId) { - // const admin = await findUserById(application.project.userId); - - // if (admin.cleanupCacheOnPreviews) { - // await cleanupFullDocker(application?.serverId); - // } let command = "set -e;"; if (application.sourceType === "github") { command += await getGithubCloneCommand({ ...application, - appName: previewDeployment.appName, - branch: previewDeployment.branch, serverId: application.serverId, logPath: deployment.logPath, }); @@ -625,7 +602,6 @@ export const rebuildRemoteApplication = async ({ descriptionLog: string; }) => { const application = await findApplicationById(applicationId); - const deployment = await createDeployment({ applicationId: applicationId, title: titleLog, @@ -634,11 +610,6 @@ export const rebuildRemoteApplication = async ({ try { if (application.serverId) { - // const admin = await findUserById(application.project.userId); - - // if (admin.cleanupCacheApplications) { - // await cleanupFullDocker(application?.serverId); - // } if (application.sourceType !== "docker") { let command = "set -e;"; command += getBuildCommand(application, deployment.logPath); diff --git a/packages/server/src/services/auth.ts b/packages/server/src/services/auth.ts new file mode 100644 index 000000000..65a01c412 --- /dev/null +++ b/packages/server/src/services/auth.ts @@ -0,0 +1,184 @@ +import { randomBytes } from "node:crypto"; +import { db } from "@dokploy/server/db"; +import { + admins, + type apiCreateAdmin, + type apiCreateUser, + auth, + users, +} from "@dokploy/server/db/schema"; +import { getPublicIpWithFallback } from "@dokploy/server/wss/utils"; +import { TRPCError } from "@trpc/server"; +import * as bcrypt from "bcrypt"; +import { eq } from "drizzle-orm"; +import encode from "hi-base32"; +import { TOTP } from "otpauth"; +import QRCode from "qrcode"; +import { IS_CLOUD } from "../constants"; + +export type Auth = typeof auth.$inferSelect; + +export const createAdmin = async (input: typeof apiCreateAdmin._type) => { + return await db.transaction(async (tx) => { + const hashedPassword = bcrypt.hashSync(input.password, 10); + const newAuth = await tx + .insert(auth) + .values({ + email: input.email.toLowerCase(), + password: hashedPassword, + rol: "admin", + }) + .returning() + .then((res) => res[0]); + + if (!newAuth) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Error creating the user", + }); + } + + await tx + .insert(admins) + .values({ + authId: newAuth.id, + ...(!IS_CLOUD && { + serverIp: + process.env.ADVERTISE_ADDR || (await getPublicIpWithFallback()), + }), + }) + .returning(); + + return newAuth; + }); +}; + +export const createUser = async (input: typeof apiCreateUser._type) => { + return await db.transaction(async (tx) => { + const hashedPassword = bcrypt.hashSync(input.password, 10); + const res = await tx + .update(auth) + .set({ + password: hashedPassword, + }) + .where(eq(auth.id, input.id)) + .returning() + .then((res) => res[0]); + + if (!res) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Error creating the user", + }); + } + + const user = await tx + .update(users) + .set({ + isRegistered: true, + expirationDate: undefined, + }) + .where(eq(users.token, input.token)) + .returning() + .then((res) => res[0]); + + return user; + }); +}; + +export const findAuthByEmail = async (email: string) => { + const result = await db.query.auth.findFirst({ + where: eq(auth.email, email), + }); + if (!result) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "User not found", + }); + } + return result; +}; + +export const findAuthById = async (authId: string) => { + const result = await db.query.auth.findFirst({ + where: eq(auth.id, authId), + columns: { + password: false, + }, + }); + if (!result) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "Auth not found", + }); + } + return result; +}; + +export const updateAuthById = async ( + authId: string, + authData: Partial, +) => { + const result = await db + .update(auth) + .set({ + ...authData, + }) + .where(eq(auth.id, authId)) + .returning(); + + return result[0]; +}; + +export const generate2FASecret = async (authId: string) => { + const auth = await findAuthById(authId); + + const base32_secret = generateBase32Secret(); + + const totp = new TOTP({ + issuer: "Dokploy", + label: `${auth?.email}`, + algorithm: "SHA1", + digits: 6, + secret: base32_secret, + }); + + const otpauth_url = totp.toString(); + + const qrUrl = await QRCode.toDataURL(otpauth_url); + + return { + qrCodeUrl: qrUrl, + secret: base32_secret, + }; +}; + +export const verify2FA = async ( + auth: Omit, + secret: string, + pin: string, +) => { + const totp = new TOTP({ + issuer: "Dokploy", + label: `${auth?.email}`, + algorithm: "SHA1", + digits: 6, + secret: secret, + }); + + const delta = totp.validate({ token: pin }); + + if (delta === null) { + throw new TRPCError({ + code: "BAD_REQUEST", + message: "Invalid 2FA code", + }); + } + return auth; +}; + +const generateBase32Secret = () => { + const buffer = randomBytes(15); + const base32 = encode.encode(buffer).replace(/=/g, "").substring(0, 24); + return base32; +}; diff --git a/packages/server/src/services/backup.ts b/packages/server/src/services/backup.ts index 327057869..70e37af4d 100644 --- a/packages/server/src/services/backup.ts +++ b/packages/server/src/services/backup.ts @@ -6,7 +6,7 @@ import { eq } from "drizzle-orm"; export type Backup = typeof backups.$inferSelect; export type BackupSchedule = Awaited>; -export type BackupScheduleList = Awaited>; + export const createBackup = async (input: typeof apiCreateBackup._type) => { const newBackup = await db .insert(backups) @@ -69,20 +69,3 @@ export const removeBackupById = async (backupId: string) => { return result[0]; }; - -export const findBackupsByDbId = async ( - id: string, - type: "postgres" | "mysql" | "mariadb" | "mongo", -) => { - const result = await db.query.backups.findMany({ - where: eq(backups[`${type}Id`], id), - with: { - postgres: true, - mysql: true, - mariadb: true, - mongo: true, - destination: true, - }, - }); - return result || []; -}; diff --git a/packages/server/src/services/bitbucket.ts b/packages/server/src/services/bitbucket.ts index 7b5be7d65..218071567 100644 --- a/packages/server/src/services/bitbucket.ts +++ b/packages/server/src/services/bitbucket.ts @@ -12,14 +12,14 @@ export type Bitbucket = typeof bitbucket.$inferSelect; export const createBitbucket = async ( input: typeof apiCreateBitbucket._type, - organizationId: string, + adminId: string, ) => { return await db.transaction(async (tx) => { const newGitProvider = await tx .insert(gitProvider) .values({ providerType: "bitbucket", - organizationId: organizationId, + adminId: adminId, name: input.name, }) .returning() @@ -74,12 +74,12 @@ export const updateBitbucket = async ( .where(eq(bitbucket.bitbucketId, bitbucketId)) .returning(); - if (input.name || input.organizationId) { + if (input.name || input.adminId) { await tx .update(gitProvider) .set({ name: input.name, - organizationId: input.organizationId, + adminId: input.adminId, }) .where(eq(gitProvider.gitProviderId, input.gitProviderId)) .returning(); diff --git a/packages/server/src/services/certificate.ts b/packages/server/src/services/certificate.ts index f59f1c2aa..231778621 100644 --- a/packages/server/src/services/certificate.ts +++ b/packages/server/src/services/certificate.ts @@ -33,13 +33,13 @@ export const findCertificateById = async (certificateId: string) => { export const createCertificate = async ( certificateData: z.infer, - organizationId: string, + adminId: string, ) => { const certificate = await db .insert(certificates) .values({ ...certificateData, - organizationId: organizationId, + adminId: adminId, }) .returning(); diff --git a/packages/server/src/services/compose.ts b/packages/server/src/services/compose.ts index a3ebc26ce..8561dd376 100644 --- a/packages/server/src/services/compose.ts +++ b/packages/server/src/services/compose.ts @@ -3,6 +3,7 @@ import { paths } from "@dokploy/server/constants"; import { db } from "@dokploy/server/db"; import { type apiCreateCompose, compose } from "@dokploy/server/db/schema"; import { buildAppName, cleanAppName } from "@dokploy/server/db/schema"; +import { generatePassword } from "@dokploy/server/templates/utils"; import { buildCompose, getBuildComposeCommand, @@ -205,7 +206,6 @@ export const deployCompose = async ({ descriptionLog: string; }) => { const compose = await findComposeById(composeId); - const buildLink = `${await getDokployUrl()}/dashboard/project/${ compose.projectId }/services/compose/${compose.composeId}?tab=deployments`; @@ -216,10 +216,6 @@ export const deployCompose = async ({ }); try { - // const admin = await findUserById(compose.project.userId); - // if (admin.cleanupCacheOnCompose) { - // await cleanupFullDocker(compose?.serverId); - // } if (compose.sourceType === "github") { await cloneGithubRepository({ ...compose, @@ -246,7 +242,7 @@ export const deployCompose = async ({ applicationName: compose.name, applicationType: "compose", buildLink, - organizationId: compose.project.organizationId, + adminId: compose.project.adminId, domains: compose.domains, }); } catch (error) { @@ -261,7 +257,7 @@ export const deployCompose = async ({ // @ts-ignore errorMessage: error?.message || "Error building", buildLink, - organizationId: compose.project.organizationId, + adminId: compose.project.adminId, }); throw error; } @@ -277,7 +273,6 @@ export const rebuildCompose = async ({ descriptionLog: string; }) => { const compose = await findComposeById(composeId); - const deployment = await createDeploymentCompose({ composeId: composeId, title: titleLog, @@ -285,10 +280,6 @@ export const rebuildCompose = async ({ }); try { - // const admin = await findUserById(compose.project.userId); - // if (admin.cleanupCacheOnCompose) { - // await cleanupFullDocker(compose?.serverId); - // } if (compose.serverId) { await getBuildComposeCommand(compose, deployment.logPath); } else { @@ -320,7 +311,6 @@ export const deployRemoteCompose = async ({ descriptionLog: string; }) => { const compose = await findComposeById(composeId); - const buildLink = `${await getDokployUrl()}/dashboard/project/${ compose.projectId }/services/compose/${compose.composeId}?tab=deployments`; @@ -331,10 +321,6 @@ export const deployRemoteCompose = async ({ }); try { if (compose.serverId) { - // const admin = await findUserById(compose.project.userId); - // if (admin.cleanupCacheOnCompose) { - // await cleanupFullDocker(compose?.serverId); - // } let command = "set -e;"; if (compose.sourceType === "github") { @@ -380,7 +366,7 @@ export const deployRemoteCompose = async ({ applicationName: compose.name, applicationType: "compose", buildLink, - organizationId: compose.project.organizationId, + adminId: compose.project.adminId, domains: compose.domains, }); } catch (error) { @@ -405,7 +391,7 @@ export const deployRemoteCompose = async ({ // @ts-ignore errorMessage: error?.message || "Error building", buildLink, - organizationId: compose.project.organizationId, + adminId: compose.project.adminId, }); throw error; } @@ -421,7 +407,6 @@ export const rebuildRemoteCompose = async ({ descriptionLog: string; }) => { const compose = await findComposeById(composeId); - const deployment = await createDeploymentCompose({ composeId: composeId, title: titleLog, @@ -429,10 +414,6 @@ export const rebuildRemoteCompose = async ({ }); try { - // const admin = await findUserById(compose.project.userId); - // if (admin.cleanupCacheOnCompose) { - // await cleanupFullDocker(compose?.serverId); - // } if (compose.serverId) { await getBuildComposeCommand(compose, deployment.logPath); } @@ -557,17 +538,6 @@ export const stopCompose = async (composeId: string) => { } } - if (compose.composeType === "stack") { - if (compose.serverId) { - await execAsyncRemote( - compose.serverId, - `docker stack rm ${compose.appName}`, - ); - } else { - await execAsync(`docker stack rm ${compose.appName}`); - } - } - await updateCompose(composeId, { composeStatus: "idle", }); diff --git a/packages/server/src/services/deployment.ts b/packages/server/src/services/deployment.ts index 86d6c88e8..0e55ea320 100644 --- a/packages/server/src/services/deployment.ts +++ b/packages/server/src/services/deployment.ts @@ -12,7 +12,7 @@ import { import { removeDirectoryIfExistsContent } from "@dokploy/server/utils/filesystem/directory"; import { TRPCError } from "@trpc/server"; import { format } from "date-fns"; -import { desc, eq } from "drizzle-orm"; +import { and, desc, eq, isNull } from "drizzle-orm"; import { type Application, findApplicationById, @@ -98,17 +98,6 @@ export const createDeployment = async ( } return deploymentCreate[0]; } catch (error) { - await db - .insert(deployments) - .values({ - applicationId: deployment.applicationId, - title: deployment.title || "Deployment", - status: "error", - logPath: "", - description: deployment.description || "", - errorMessage: `An error have occured: ${error instanceof Error ? error.message : error}`, - }) - .returning(); await updateApplicationStatus(application.applicationId, "error"); console.log(error); throw new TRPCError({ @@ -175,17 +164,6 @@ export const createDeploymentPreview = async ( } return deploymentCreate[0]; } catch (error) { - await db - .insert(deployments) - .values({ - previewDeploymentId: deployment.previewDeploymentId, - title: deployment.title || "Deployment", - status: "error", - logPath: "", - description: deployment.description || "", - errorMessage: `An error have occured: ${error instanceof Error ? error.message : error}`, - }) - .returning(); await updatePreviewDeployment(deployment.previewDeploymentId, { previewStatus: "error", }); @@ -248,17 +226,6 @@ echo "Initializing deployment" >> ${logFilePath}; } return deploymentCreate[0]; } catch (error) { - await db - .insert(deployments) - .values({ - composeId: deployment.composeId, - title: deployment.title || "Deployment", - status: "error", - logPath: "", - description: deployment.description || "", - errorMessage: `An error have occured: ${error instanceof Error ? error.message : error}`, - }) - .returning(); await updateCompose(compose.composeId, { composeStatus: "error", }); @@ -278,11 +245,9 @@ export const removeDeployment = async (deploymentId: string) => { .returning(); return deployment[0]; } catch (error) { - const message = - error instanceof Error ? error.message : "Error creating the deployment"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error deleting this deployment", }); } }; @@ -537,11 +502,9 @@ export const createServerDeployment = async ( } return deploymentCreate[0]; } catch (error) { - const message = - error instanceof Error ? error.message : "Error creating the deployment"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error creating the deployment", }); } }; diff --git a/packages/server/src/services/destination.ts b/packages/server/src/services/destination.ts index e66f8695a..892c93541 100644 --- a/packages/server/src/services/destination.ts +++ b/packages/server/src/services/destination.ts @@ -10,13 +10,13 @@ export type Destination = typeof destinations.$inferSelect; export const createDestintation = async ( input: typeof apiCreateDestination._type, - organizationId: string, + adminId: string, ) => { const newDestination = await db .insert(destinations) .values({ ...input, - organizationId: organizationId, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -46,14 +46,14 @@ export const findDestinationById = async (destinationId: string) => { export const removeDestinationById = async ( destinationId: string, - organizationId: string, + adminId: string, ) => { const result = await db .delete(destinations) .where( and( eq(destinations.destinationId, destinationId), - eq(destinations.organizationId, organizationId), + eq(destinations.adminId, adminId), ), ) .returning(); @@ -73,7 +73,7 @@ export const updateDestinationById = async ( .where( and( eq(destinations.destinationId, destinationId), - eq(destinations.organizationId, destinationData.organizationId || ""), + eq(destinations.adminId, destinationData.adminId || ""), ), ) .returning(); diff --git a/packages/server/src/services/docker.ts b/packages/server/src/services/docker.ts index a4a3b0b5e..b7a5c4403 100644 --- a/packages/server/src/services/docker.ts +++ b/packages/server/src/services/docker.ts @@ -58,11 +58,7 @@ export const getContainers = async (serverId?: string | null) => { serverId, }; }) - .filter( - (container) => - !container.name.includes("dokploy") || - container.name.includes("dokploy-monitoring"), - ); + .filter((container) => !container.name.includes("dokploy")); return containers; } catch (error) { @@ -98,7 +94,7 @@ export const getConfig = async ( const config = JSON.parse(stdout); return config; - } catch (_error) {} + } catch (error) {} }; export const getContainersByAppNameMatch = async ( @@ -156,7 +152,7 @@ export const getContainersByAppNameMatch = async ( }); return containers || []; - } catch (_error) {} + } catch (error) {} return []; }; @@ -214,7 +210,7 @@ export const getStackContainersByAppName = async ( }); return containers || []; - } catch (_error) {} + } catch (error) {} return []; }; @@ -274,7 +270,7 @@ export const getServiceContainersByAppName = async ( }); return containers || []; - } catch (_error) {} + } catch (error) {} return []; }; @@ -325,7 +321,7 @@ export const getContainersByAppLabel = async ( }); return containers || []; - } catch (_error) {} + } catch (error) {} return []; }; @@ -344,7 +340,7 @@ export const containerRestart = async (containerId: string) => { const config = JSON.parse(stdout); return config; - } catch (_error) {} + } catch (error) {} }; export const getSwarmNodes = async (serverId?: string) => { @@ -373,7 +369,7 @@ export const getSwarmNodes = async (serverId?: string) => { .split("\n") .map((line) => JSON.parse(line)); return nodesArray; - } catch (_error) {} + } catch (error) {} }; export const getNodeInfo = async (nodeId: string, serverId?: string) => { @@ -399,7 +395,7 @@ export const getNodeInfo = async (nodeId: string, serverId?: string) => { const nodeInfo = JSON.parse(stdout); return nodeInfo; - } catch (_error) {} + } catch (error) {} }; export const getNodeApplications = async (serverId?: string) => { @@ -431,7 +427,7 @@ export const getNodeApplications = async (serverId?: string) => { .filter((service) => !service.Name.startsWith("dokploy-")); return appArray; - } catch (_error) {} + } catch (error) {} }; export const getApplicationInfo = async ( @@ -464,5 +460,5 @@ export const getApplicationInfo = async ( .map((line) => JSON.parse(line)); return appArray; - } catch (_error) {} + } catch (error) {} }; diff --git a/packages/server/src/services/domain.ts b/packages/server/src/services/domain.ts index d2e23c06b..b99c4869d 100644 --- a/packages/server/src/services/domain.ts +++ b/packages/server/src/services/domain.ts @@ -4,7 +4,7 @@ import { manageDomain } from "@dokploy/server/utils/traefik/domain"; import { TRPCError } from "@trpc/server"; import { eq } from "drizzle-orm"; import { type apiCreateDomain, domains } from "../db/schema"; -import { findUserById } from "./admin"; +import { findAdmin, findAdminById } from "./admin"; import { findApplicationById } from "./application"; import { findServerById } from "./server"; @@ -40,7 +40,7 @@ export const createDomain = async (input: typeof apiCreateDomain._type) => { export const generateTraefikMeDomain = async ( appName: string, - userId: string, + adminId: string, serverId?: string, ) => { if (serverId) { @@ -57,7 +57,7 @@ export const generateTraefikMeDomain = async ( projectName: appName, }); } - const admin = await findUserById(userId); + const admin = await findAdminById(adminId); return generateRandomDomain({ serverIp: admin?.serverIp || "", projectName: appName, @@ -126,6 +126,7 @@ export const updateDomainById = async ( export const removeDomainById = async (domainId: string) => { await findDomainById(domainId); + // TODO: fix order const result = await db .delete(domains) .where(eq(domains.domainId, domainId)) diff --git a/packages/server/src/services/github.ts b/packages/server/src/services/github.ts index 19deb2b24..a5d9d8638 100644 --- a/packages/server/src/services/github.ts +++ b/packages/server/src/services/github.ts @@ -12,14 +12,14 @@ import { updatePreviewDeployment } from "./preview-deployment"; export type Github = typeof github.$inferSelect; export const createGithub = async ( input: typeof apiCreateGithub._type, - organizationId: string, + adminId: string, ) => { return await db.transaction(async (tx) => { const newGitProvider = await tx .insert(gitProvider) .values({ providerType: "github", - organizationId: organizationId, + adminId: adminId, name: input.name, }) .returning() @@ -119,7 +119,7 @@ export const issueCommentExists = async ({ comment_id: comment_id, }); return true; - } catch (_error) { + } catch (error) { return false; } }; diff --git a/packages/server/src/services/gitlab.ts b/packages/server/src/services/gitlab.ts index fdca2775e..8e1362c94 100644 --- a/packages/server/src/services/gitlab.ts +++ b/packages/server/src/services/gitlab.ts @@ -1,7 +1,9 @@ import { db } from "@dokploy/server/db"; import { type apiCreateGitlab, + type bitbucket, gitProvider, + type github, gitlab, } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; @@ -11,14 +13,14 @@ export type Gitlab = typeof gitlab.$inferSelect; export const createGitlab = async ( input: typeof apiCreateGitlab._type, - organizationId: string, + adminId: string, ) => { return await db.transaction(async (tx) => { const newGitProvider = await tx .insert(gitProvider) .values({ providerType: "gitlab", - organizationId: organizationId, + adminId: adminId, name: input.name, }) .returning() diff --git a/packages/server/src/services/mariadb.ts b/packages/server/src/services/mariadb.ts index 00be29d6a..8257b5875 100644 --- a/packages/server/src/services/mariadb.ts +++ b/packages/server/src/services/mariadb.ts @@ -4,7 +4,7 @@ import { backups, mariadb, } from "@dokploy/server/db/schema"; -import { buildAppName } from "@dokploy/server/db/schema"; +import { buildAppName, cleanAppName } from "@dokploy/server/db/schema"; import { generatePassword } from "@dokploy/server/templates/utils"; import { buildMariadb } from "@dokploy/server/utils/databases/mariadb"; import { pullImage } from "@dokploy/server/utils/docker/utils"; diff --git a/packages/server/src/services/mongo.ts b/packages/server/src/services/mongo.ts index 0ac4cc632..031a60131 100644 --- a/packages/server/src/services/mongo.ts +++ b/packages/server/src/services/mongo.ts @@ -1,6 +1,6 @@ import { db } from "@dokploy/server/db"; import { type apiCreateMongo, backups, mongo } from "@dokploy/server/db/schema"; -import { buildAppName } from "@dokploy/server/db/schema"; +import { buildAppName, cleanAppName } from "@dokploy/server/db/schema"; import { generatePassword } from "@dokploy/server/templates/utils"; import { buildMongo } from "@dokploy/server/utils/databases/mongo"; import { pullImage } from "@dokploy/server/utils/docker/utils"; diff --git a/packages/server/src/services/mount.ts b/packages/server/src/services/mount.ts index 836feacec..dd7bd3e9a 100644 --- a/packages/server/src/services/mount.ts +++ b/packages/server/src/services/mount.ts @@ -64,7 +64,7 @@ export const createMount = async (input: typeof apiCreateMount._type) => { console.log(error); throw new TRPCError({ code: "BAD_REQUEST", - message: `Error ${error instanceof Error ? error.message : error}`, + message: "Error creating the mount", cause: error, }); } @@ -91,7 +91,7 @@ export const createFileMount = async (mountId: string) => { console.log(`Error creating the file mount: ${error}`); throw new TRPCError({ code: "BAD_REQUEST", - message: `Error creating the mount ${error instanceof Error ? error.message : error}`, + message: "Error creating the mount", cause: error, }); } @@ -123,8 +123,8 @@ export const updateMount = async ( mountId: string, mountData: Partial, ) => { - return await db.transaction(async (tx) => { - const mount = await tx + return await db.transaction(async (transaction) => { + const mount = await db .update(mounts) .set({ ...mountData, @@ -211,7 +211,7 @@ export const deleteFileMount = async (mountId: string) => { } else { await removeFileOrDirectory(fullPath); } - } catch (_error) {} + } catch (error) {} }; export const getBaseFilesPath = async (mountId: string) => { diff --git a/packages/server/src/services/notification.ts b/packages/server/src/services/notification.ts index 16ba2085b..2b62b4574 100644 --- a/packages/server/src/services/notification.ts +++ b/packages/server/src/services/notification.ts @@ -24,7 +24,7 @@ export type Notification = typeof notifications.$inferSelect; export const createSlackNotification = async ( input: typeof apiCreateSlack._type, - organizationId: string, + adminId: string, ) => { await db.transaction(async (tx) => { const newSlack = await tx @@ -54,8 +54,7 @@ export const createSlackNotification = async ( dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, notificationType: "slack", - organizationId: organizationId, - serverThreshold: input.serverThreshold, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -84,8 +83,7 @@ export const updateSlackNotification = async ( databaseBackup: input.databaseBackup, dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, - organizationId: input.organizationId, - serverThreshold: input.serverThreshold, + adminId: input.adminId, }) .where(eq(notifications.notificationId, input.notificationId)) .returning() @@ -114,7 +112,7 @@ export const updateSlackNotification = async ( export const createTelegramNotification = async ( input: typeof apiCreateTelegram._type, - organizationId: string, + adminId: string, ) => { await db.transaction(async (tx) => { const newTelegram = await tx @@ -122,7 +120,6 @@ export const createTelegramNotification = async ( .values({ botToken: input.botToken, chatId: input.chatId, - messageThreadId: input.messageThreadId, }) .returning() .then((value) => value[0]); @@ -145,8 +142,7 @@ export const createTelegramNotification = async ( dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, notificationType: "telegram", - organizationId: organizationId, - serverThreshold: input.serverThreshold, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -175,8 +171,7 @@ export const updateTelegramNotification = async ( databaseBackup: input.databaseBackup, dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, - organizationId: input.organizationId, - serverThreshold: input.serverThreshold, + adminId: input.adminId, }) .where(eq(notifications.notificationId, input.notificationId)) .returning() @@ -194,7 +189,6 @@ export const updateTelegramNotification = async ( .set({ botToken: input.botToken, chatId: input.chatId, - messageThreadId: input.messageThreadId, }) .where(eq(telegram.telegramId, input.telegramId)) .returning() @@ -206,7 +200,7 @@ export const updateTelegramNotification = async ( export const createDiscordNotification = async ( input: typeof apiCreateDiscord._type, - organizationId: string, + adminId: string, ) => { await db.transaction(async (tx) => { const newDiscord = await tx @@ -236,8 +230,7 @@ export const createDiscordNotification = async ( dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, notificationType: "discord", - organizationId: organizationId, - serverThreshold: input.serverThreshold, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -266,8 +259,7 @@ export const updateDiscordNotification = async ( databaseBackup: input.databaseBackup, dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, - organizationId: input.organizationId, - serverThreshold: input.serverThreshold, + adminId: input.adminId, }) .where(eq(notifications.notificationId, input.notificationId)) .returning() @@ -296,7 +288,7 @@ export const updateDiscordNotification = async ( export const createEmailNotification = async ( input: typeof apiCreateEmail._type, - organizationId: string, + adminId: string, ) => { await db.transaction(async (tx) => { const newEmail = await tx @@ -330,8 +322,7 @@ export const createEmailNotification = async ( dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, notificationType: "email", - organizationId: organizationId, - serverThreshold: input.serverThreshold, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -360,8 +351,7 @@ export const updateEmailNotification = async ( databaseBackup: input.databaseBackup, dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, - organizationId: input.organizationId, - serverThreshold: input.serverThreshold, + adminId: input.adminId, }) .where(eq(notifications.notificationId, input.notificationId)) .returning() @@ -394,7 +384,7 @@ export const updateEmailNotification = async ( export const createGotifyNotification = async ( input: typeof apiCreateGotify._type, - organizationId: string, + adminId: string, ) => { await db.transaction(async (tx) => { const newGotify = await tx @@ -426,7 +416,7 @@ export const createGotifyNotification = async ( dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, notificationType: "gotify", - organizationId: organizationId, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -455,7 +445,7 @@ export const updateGotifyNotification = async ( databaseBackup: input.databaseBackup, dokployRestart: input.dokployRestart, dockerCleanup: input.dockerCleanup, - organizationId: input.organizationId, + adminId: input.adminId, }) .where(eq(notifications.notificationId, input.notificationId)) .returning() diff --git a/packages/server/src/services/postgres.ts b/packages/server/src/services/postgres.ts index 75b81c506..682d3f78d 100644 --- a/packages/server/src/services/postgres.ts +++ b/packages/server/src/services/postgres.ts @@ -4,7 +4,7 @@ import { backups, postgres, } from "@dokploy/server/db/schema"; -import { buildAppName } from "@dokploy/server/db/schema"; +import { buildAppName, cleanAppName } from "@dokploy/server/db/schema"; import { generatePassword } from "@dokploy/server/templates/utils"; import { buildPostgres } from "@dokploy/server/utils/databases/postgres"; import { pullImage } from "@dokploy/server/utils/docker/utils"; diff --git a/packages/server/src/services/preview-deployment.ts b/packages/server/src/services/preview-deployment.ts index a1ffca4ba..ab38c17ca 100644 --- a/packages/server/src/services/preview-deployment.ts +++ b/packages/server/src/services/preview-deployment.ts @@ -2,20 +2,23 @@ import { db } from "@dokploy/server/db"; import { type apiCreatePreviewDeployment, deployments, - organization, previewDeployments, } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; import { and, desc, eq } from "drizzle-orm"; -import { generatePassword } from "../templates/utils"; +import { slugify } from "../setup/server-setup"; +import { generatePassword, generateRandomDomain } from "../templates/utils"; import { removeService } from "../utils/docker/utils"; import { removeDirectoryCode } from "../utils/filesystem/directory"; import { authGithub } from "../utils/providers/github"; import { removeTraefikConfig } from "../utils/traefik/application"; import { manageDomain } from "../utils/traefik/domain"; -import { findUserById } from "./admin"; +import { findAdminById } from "./admin"; import { findApplicationById } from "./application"; -import { removeDeploymentsByPreviewDeploymentId } from "./deployment"; +import { + removeDeployments, + removeDeploymentsByPreviewDeploymentId, +} from "./deployment"; import { createDomain } from "./domain"; import { type Github, getIssueComment } from "./github"; @@ -103,17 +106,13 @@ export const removePreviewDeployment = async (previewDeploymentId: string) => { for (const operation of cleanupOperations) { try { await operation(); - } catch (_error) {} + } catch (error) {} } return deployment[0]; } catch (error) { - const message = - error instanceof Error - ? error.message - : "Error deleting this preview deployment"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error deleting this preview deployment", }); } }; @@ -155,14 +154,11 @@ export const createPreviewDeployment = async ( const application = await findApplicationById(schema.applicationId); const appName = `preview-${application.appName}-${generatePassword(6)}`; - const org = await db.query.organization.findFirst({ - where: eq(organization.id, application.project.organizationId), - }); const generateDomain = await generateWildcardDomain( application.previewWildcard || "*.traefik.me", appName, application.server?.ipAddress || "", - org?.ownerId || "", + application.project.adminId, ); const octokit = authGithub(application?.github as Github); @@ -254,7 +250,7 @@ const generateWildcardDomain = async ( baseDomain: string, appName: string, serverIp: string, - userId: string, + adminId: string, ): Promise => { if (!baseDomain.startsWith("*.")) { throw new Error('The base domain must start with "*."'); @@ -272,7 +268,7 @@ const generateWildcardDomain = async ( } if (!ip) { - const admin = await findUserById(userId); + const admin = await findAdminById(adminId); ip = admin?.serverIp || ""; } diff --git a/packages/server/src/services/project.ts b/packages/server/src/services/project.ts index b740834b5..adaa07ea0 100644 --- a/packages/server/src/services/project.ts +++ b/packages/server/src/services/project.ts @@ -16,13 +16,13 @@ export type Project = typeof projects.$inferSelect; export const createProject = async ( input: typeof apiCreateProject._type, - organizationId: string, + adminId: string, ) => { const newProject = await db .insert(projects) .values({ ...input, - organizationId: organizationId, + adminId: adminId, }) .returning() .then((value) => value[0]); diff --git a/packages/server/src/services/redirect.ts b/packages/server/src/services/redirect.ts index 1896105fe..f16dbe428 100644 --- a/packages/server/src/services/redirect.ts +++ b/packages/server/src/services/redirect.ts @@ -6,7 +6,7 @@ import { updateRedirectMiddleware, } from "@dokploy/server/utils/traefik/redirect"; import { TRPCError } from "@trpc/server"; -import { eq } from "drizzle-orm"; +import { desc, eq } from "drizzle-orm"; import type { z } from "zod"; import { findApplicationById } from "./application"; export type Redirect = typeof redirects.$inferSelect; @@ -114,11 +114,9 @@ export const updateRedirectById = async ( return redirect; } catch (error) { - const message = - error instanceof Error ? error.message : "Error updating this redirect"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error updating this redirect", }); } }; diff --git a/packages/server/src/services/redis.ts b/packages/server/src/services/redis.ts index 9f4a1f9e6..e0dbbe025 100644 --- a/packages/server/src/services/redis.ts +++ b/packages/server/src/services/redis.ts @@ -1,6 +1,6 @@ import { db } from "@dokploy/server/db"; import { type apiCreateRedis, redis } from "@dokploy/server/db/schema"; -import { buildAppName } from "@dokploy/server/db/schema"; +import { buildAppName, cleanAppName } from "@dokploy/server/db/schema"; import { generatePassword } from "@dokploy/server/templates/utils"; import { buildRedis } from "@dokploy/server/utils/databases/redis"; import { pullImage } from "@dokploy/server/utils/docker/utils"; diff --git a/packages/server/src/services/registry.ts b/packages/server/src/services/registry.ts index 6468cd970..2bcf3a4a4 100644 --- a/packages/server/src/services/registry.ts +++ b/packages/server/src/services/registry.ts @@ -12,14 +12,14 @@ export type Registry = typeof registry.$inferSelect; export const createRegistry = async ( input: typeof apiCreateRegistry._type, - organizationId: string, + adminId: string, ) => { return await db.transaction(async (tx) => { const newRegistry = await tx .insert(registry) .values({ ...input, - organizationId: organizationId, + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -112,11 +112,9 @@ export const updateRegistry = async ( return response; } catch (error) { - const message = - error instanceof Error ? error.message : "Error updating this registry"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error updating this registry", }); } }; @@ -137,11 +135,9 @@ export const findRegistryById = async (registryId: string) => { return registryResponse; }; -export const findAllRegistryByOrganizationId = async ( - organizationId: string, -) => { +export const findAllRegistryByAdminId = async (adminId: string) => { const registryResponse = await db.query.registry.findMany({ - where: eq(registry.organizationId, organizationId), + where: eq(registry.adminId, adminId), }); return registryResponse; }; diff --git a/packages/server/src/services/security.ts b/packages/server/src/services/security.ts index d6947b887..5efca19fd 100644 --- a/packages/server/src/services/security.ts +++ b/packages/server/src/services/security.ts @@ -76,11 +76,9 @@ export const deleteSecurityById = async (securityId: string) => { await removeSecurityMiddleware(application, result); return result; } catch (error) { - const message = - error instanceof Error ? error.message : "Error removing this security"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error removing this security", }); } }; @@ -100,11 +98,9 @@ export const updateSecurityById = async ( return response[0]; } catch (error) { - const message = - error instanceof Error ? error.message : "Error updating this security"; throw new TRPCError({ code: "BAD_REQUEST", - message, + message: "Error updating this security", }); } }; diff --git a/packages/server/src/services/server.ts b/packages/server/src/services/server.ts index a4d5c5d85..081b19fad 100644 --- a/packages/server/src/services/server.ts +++ b/packages/server/src/services/server.ts @@ -1,24 +1,19 @@ import { db } from "@dokploy/server/db"; -import { - type apiCreateServer, - organization, - server, -} from "@dokploy/server/db/schema"; +import { type apiCreateServer, server } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; -import { eq } from "drizzle-orm"; +import { desc, eq } from "drizzle-orm"; export type Server = typeof server.$inferSelect; export const createServer = async ( input: typeof apiCreateServer._type, - organizationId: string, + adminId: string, ) => { const newServer = await db .insert(server) .values({ ...input, - organizationId: organizationId, - createdAt: new Date().toISOString(), + adminId: adminId, }) .returning() .then((value) => value[0]); @@ -50,16 +45,12 @@ export const findServerById = async (serverId: string) => { return currentServer; }; -export const findServersByUserId = async (userId: string) => { - const orgs = await db.query.organization.findMany({ - where: eq(organization.ownerId, userId), - with: { - servers: true, - }, +export const findServersByAdminId = async (adminId: string) => { + const servers = await db.query.server.findMany({ + where: eq(server.adminId, adminId), + orderBy: desc(server.createdAt), }); - const servers = orgs.flatMap((org) => org.servers); - return servers; }; diff --git a/packages/server/src/services/settings.ts b/packages/server/src/services/settings.ts index 75613be02..37f7b2ee8 100644 --- a/packages/server/src/services/settings.ts +++ b/packages/server/src/services/settings.ts @@ -5,6 +5,7 @@ import { execAsync, execAsyncRemote, } from "@dokploy/server/utils/process/execAsync"; +// import packageInfo from "../../../package.json"; export interface IUpdateData { latestVersion: string | null; @@ -169,6 +170,7 @@ echo "$json_output" const result = JSON.parse(stdout); return result; } + const items = readdirSync(dirPath, { withFileTypes: true }); const stack = [dirPath]; const result: TreeDataItem[] = []; @@ -211,35 +213,3 @@ echo "$json_output" } return result; }; - -export const cleanupFullDocker = async (serverId?: string | null) => { - const cleanupImages = "docker image prune --force"; - const cleanupVolumes = "docker volume prune --force"; - const cleanupContainers = "docker container prune --force"; - const cleanupSystem = "docker system prune --force --volumes"; - const cleanupBuilder = "docker builder prune --force"; - - try { - if (serverId) { - await execAsyncRemote( - serverId, - ` - ${cleanupImages} - ${cleanupVolumes} - ${cleanupContainers} - ${cleanupSystem} - ${cleanupBuilder} - `, - ); - } - await execAsync(` - ${cleanupImages} - ${cleanupVolumes} - ${cleanupContainers} - ${cleanupSystem} - ${cleanupBuilder} - `); - } catch (error) { - console.log(error); - } -}; diff --git a/packages/server/src/services/user.ts b/packages/server/src/services/user.ts index 39ac95cef..d8d9862c4 100644 --- a/packages/server/src/services/user.ts +++ b/packages/server/src/services/user.ts @@ -1,53 +1,80 @@ import { db } from "@dokploy/server/db"; -import { apikey, member, users_temp } from "@dokploy/server/db/schema"; +import { users } from "@dokploy/server/db/schema"; import { TRPCError } from "@trpc/server"; -import { and, eq } from "drizzle-orm"; -import { auth } from "../lib/auth"; +import { eq } from "drizzle-orm"; -export type User = typeof users_temp.$inferSelect; +export type User = typeof users.$inferSelect; -export const addNewProject = async ( - userId: string, - projectId: string, - organizationId: string, -) => { - const userR = await findMemberById(userId, organizationId); - - await db - .update(member) - .set({ - accessedProjects: [...userR.accessedProjects, projectId], - }) - .where( - and(eq(member.id, userR.id), eq(member.organizationId, organizationId)), - ); +export const findUserById = async (userId: string) => { + const user = await db.query.users.findFirst({ + where: eq(users.userId, userId), + }); + if (!user) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "User not found", + }); + } + return user; }; -export const addNewService = async ( - userId: string, - serviceId: string, - organizationId: string, -) => { - const userR = await findMemberById(userId, organizationId); +export const findUserByAuthId = async (authId: string) => { + const user = await db.query.users.findFirst({ + where: eq(users.authId, authId), + with: { + auth: true, + }, + }); + if (!user) { + throw new TRPCError({ + code: "NOT_FOUND", + message: "User not found", + }); + } + return user; +}; + +export const findUsers = async (adminId: string) => { + const currentUsers = await db.query.users.findMany({ + where: eq(users.adminId, adminId), + with: { + auth: { + columns: { + secret: false, + }, + }, + }, + }); + return currentUsers; +}; + +export const addNewProject = async (authId: string, projectId: string) => { + const user = await findUserByAuthId(authId); + await db - .update(member) + .update(users) .set({ - accessedServices: [...userR.accessedServices, serviceId], + accessedProjects: [...user.accessedProjects, projectId], }) - .where( - and(eq(member.id, userR.id), eq(member.organizationId, organizationId)), - ); + .where(eq(users.authId, authId)); +}; + +export const addNewService = async (authId: string, serviceId: string) => { + const user = await findUserByAuthId(authId); + await db + .update(users) + .set({ + accessedServices: [...user.accessedServices, serviceId], + }) + .where(eq(users.authId, authId)); }; export const canPerformCreationService = async ( userId: string, projectId: string, - organizationId: string, ) => { - const { accessedProjects, canCreateServices } = await findMemberById( - userId, - organizationId, - ); + const { accessedProjects, canCreateServices } = + await findUserByAuthId(userId); const haveAccessToProject = accessedProjects.includes(projectId); if (canCreateServices && haveAccessToProject) { @@ -60,9 +87,8 @@ export const canPerformCreationService = async ( export const canPerformAccessService = async ( userId: string, serviceId: string, - organizationId: string, ) => { - const { accessedServices } = await findMemberById(userId, organizationId); + const { accessedServices } = await findUserByAuthId(userId); const haveAccessToService = accessedServices.includes(serviceId); if (haveAccessToService) { @@ -73,14 +99,11 @@ export const canPerformAccessService = async ( }; export const canPeformDeleteService = async ( - userId: string, + authId: string, serviceId: string, - organizationId: string, ) => { - const { accessedServices, canDeleteServices } = await findMemberById( - userId, - organizationId, - ); + const { accessedServices, canDeleteServices } = + await findUserByAuthId(authId); const haveAccessToService = accessedServices.includes(serviceId); if (canDeleteServices && haveAccessToService) { @@ -90,11 +113,8 @@ export const canPeformDeleteService = async ( return false; }; -export const canPerformCreationProject = async ( - userId: string, - organizationId: string, -) => { - const { canCreateProjects } = await findMemberById(userId, organizationId); +export const canPerformCreationProject = async (authId: string) => { + const { canCreateProjects } = await findUserByAuthId(authId); if (canCreateProjects) { return true; @@ -103,11 +123,8 @@ export const canPerformCreationProject = async ( return false; }; -export const canPerformDeleteProject = async ( - userId: string, - organizationId: string, -) => { - const { canDeleteProjects } = await findMemberById(userId, organizationId); +export const canPerformDeleteProject = async (authId: string) => { + const { canDeleteProjects } = await findUserByAuthId(authId); if (canDeleteProjects) { return true; @@ -117,11 +134,10 @@ export const canPerformDeleteProject = async ( }; export const canPerformAccessProject = async ( - userId: string, + authId: string, projectId: string, - organizationId: string, ) => { - const { accessedProjects } = await findMemberById(userId, organizationId); + const { accessedProjects } = await findUserByAuthId(authId); const haveAccessToProject = accessedProjects.includes(projectId); @@ -131,45 +147,26 @@ export const canPerformAccessProject = async ( return false; }; -export const canAccessToTraefikFiles = async ( - userId: string, - organizationId: string, -) => { - const { canAccessToTraefikFiles } = await findMemberById( - userId, - organizationId, - ); +export const canAccessToTraefikFiles = async (authId: string) => { + const { canAccessToTraefikFiles } = await findUserByAuthId(authId); return canAccessToTraefikFiles; }; export const checkServiceAccess = async ( - userId: string, + authId: string, serviceId: string, - organizationId: string, action = "access" as "access" | "create" | "delete", ) => { let hasPermission = false; switch (action) { case "create": - hasPermission = await canPerformCreationService( - userId, - serviceId, - organizationId, - ); + hasPermission = await canPerformCreationService(authId, serviceId); break; case "access": - hasPermission = await canPerformAccessService( - userId, - serviceId, - organizationId, - ); + hasPermission = await canPerformAccessService(authId, serviceId); break; case "delete": - hasPermission = await canPeformDeleteService( - userId, - serviceId, - organizationId, - ); + hasPermission = await canPeformDeleteService(authId, serviceId); break; default: hasPermission = false; @@ -185,7 +182,6 @@ export const checkServiceAccess = async ( export const checkProjectAccess = async ( authId: string, action: "create" | "delete" | "access", - organizationId: string, projectId?: string, ) => { let hasPermission = false; @@ -194,14 +190,13 @@ export const checkProjectAccess = async ( hasPermission = await canPerformAccessProject( authId, projectId as string, - organizationId, ); break; case "create": - hasPermission = await canPerformCreationProject(authId, organizationId); + hasPermission = await canPerformCreationProject(authId); break; case "delete": - hasPermission = await canPerformDeleteProject(authId, organizationId); + hasPermission = await canPerformDeleteProject(authId); break; default: hasPermission = false; @@ -213,82 +208,3 @@ export const checkProjectAccess = async ( }); } }; - -export const findMemberById = async ( - userId: string, - organizationId: string, -) => { - const result = await db.query.member.findFirst({ - where: and( - eq(member.userId, userId), - eq(member.organizationId, organizationId), - ), - with: { - user: true, - }, - }); - - if (!result) { - throw new TRPCError({ - code: "UNAUTHORIZED", - message: "Permission denied", - }); - } - return result; -}; - -export const updateUser = async (userId: string, userData: Partial) => { - const user = await db - .update(users_temp) - .set({ - ...userData, - }) - .where(eq(users_temp.id, userId)) - .returning() - .then((res) => res[0]); - - return user; -}; - -export const createApiKey = async ( - userId: string, - input: { - name: string; - prefix?: string; - expiresIn?: number; - metadata: { - organizationId: string; - }; - rateLimitEnabled?: boolean; - rateLimitTimeWindow?: number; - rateLimitMax?: number; - remaining?: number; - refillAmount?: number; - refillInterval?: number; - }, -) => { - const apiKey = await auth.createApiKey({ - body: { - name: input.name, - expiresIn: input.expiresIn, - prefix: input.prefix, - rateLimitEnabled: input.rateLimitEnabled, - rateLimitTimeWindow: input.rateLimitTimeWindow, - rateLimitMax: input.rateLimitMax, - remaining: input.remaining, - refillAmount: input.refillAmount, - refillInterval: input.refillInterval, - userId, - }, - }); - - if (input.metadata) { - await db - .update(apikey) - .set({ - metadata: JSON.stringify(input.metadata), - }) - .where(eq(apikey.id, apiKey.id)); - } - return apiKey; -}; diff --git a/packages/server/src/setup/monitoring-setup.ts b/packages/server/src/setup/monitoring-setup.ts deleted file mode 100644 index 75b9a928f..000000000 --- a/packages/server/src/setup/monitoring-setup.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { findServerById } from "@dokploy/server/services/server"; -import type { ContainerCreateOptions } from "dockerode"; -import { IS_CLOUD } from "../constants"; -import { findUserById } from "../services/admin"; -import { getDokployImageTag } from "../services/settings"; -import { pullImage, pullRemoteImage } from "../utils/docker/utils"; -import { execAsync, execAsyncRemote } from "../utils/process/execAsync"; -import { getRemoteDocker } from "../utils/servers/remote-docker"; - -export const setupMonitoring = async (serverId: string) => { - const server = await findServerById(serverId); - - const containerName = "dokploy-monitoring"; - let imageName = "dokploy/monitoring:latest"; - - if ( - (getDokployImageTag() !== "latest" || - process.env.NODE_ENV === "development") && - !IS_CLOUD - ) { - imageName = "dokploy/monitoring:canary"; - } - - const settings: ContainerCreateOptions = { - name: containerName, - Env: [`METRICS_CONFIG=${JSON.stringify(server?.metricsConfig)}`], - Image: imageName, - HostConfig: { - // Memory: 100 * 1024 * 1024, // 100MB en bytes - // PidMode: "host", - // CapAdd: ["NET_ADMIN", "SYS_ADMIN"], - // Privileged: true, - PortBindings: { - [`${server.metricsConfig.server.port}/tcp`]: [ - { - HostPort: server.metricsConfig.server.port.toString(), - }, - ], - }, - Binds: [ - "/var/run/docker.sock:/var/run/docker.sock:ro", - "/sys:/host/sys:ro", - "/etc/os-release:/etc/os-release:ro", - "/proc:/host/proc:ro", - "/etc/dokploy/monitoring/monitoring.db:/app/monitoring.db", - ], - NetworkMode: "host", - }, - ExposedPorts: { - [`${server.metricsConfig.server.port}/tcp`]: {}, - }, - }; - const docker = await getRemoteDocker(serverId); - try { - await execAsyncRemote( - serverId, - "mkdir -p /etc/dokploy/monitoring && touch /etc/dokploy/monitoring/monitoring.db", - ); - if (serverId) { - await pullRemoteImage(imageName, serverId); - } - - // Check if container exists - const container = docker.getContainer(containerName); - try { - await container.inspect(); - await container.remove({ force: true }); - console.log("Removed existing container"); - } catch (_error) { - // Container doesn't exist, continue - } - - await docker.createContainer(settings); - const newContainer = docker.getContainer(containerName); - await newContainer.start(); - - console.log("Monitoring Started "); - } catch (error) { - console.log("Monitoring Not Found: Starting ", error); - } -}; - -export const setupWebMonitoring = async (userId: string) => { - const user = await findUserById(userId); - - const containerName = "dokploy-monitoring"; - let imageName = "dokploy/monitoring:latest"; - - if ( - (getDokployImageTag() !== "latest" || - process.env.NODE_ENV === "development") && - !IS_CLOUD - ) { - imageName = "dokploy/monitoring:canary"; - } - - const settings: ContainerCreateOptions = { - name: containerName, - Env: [`METRICS_CONFIG=${JSON.stringify(user?.metricsConfig)}`], - Image: imageName, - HostConfig: { - // Memory: 100 * 1024 * 1024, // 100MB en bytes - // PidMode: "host", - // CapAdd: ["NET_ADMIN", "SYS_ADMIN"], - // Privileged: true, - PortBindings: { - [`${user?.metricsConfig?.server?.port}/tcp`]: [ - { - HostPort: user?.metricsConfig?.server?.port.toString(), - }, - ], - }, - Binds: [ - "/var/run/docker.sock:/var/run/docker.sock:ro", - "/sys:/host/sys:ro", - "/etc/os-release:/etc/os-release:ro", - "/proc:/host/proc:ro", - "/etc/dokploy/monitoring/monitoring.db:/app/monitoring.db", - ], - // NetworkMode: "host", - }, - ExposedPorts: { - [`${user?.metricsConfig?.server?.port}/tcp`]: {}, - }, - }; - const docker = await getRemoteDocker(); - try { - await execAsync( - "mkdir -p /etc/dokploy/monitoring && touch /etc/dokploy/monitoring/monitoring.db", - ); - await pullImage(imageName); - - const container = docker.getContainer(containerName); - try { - await container.inspect(); - await container.remove({ force: true }); - console.log("Removed existing container"); - } catch (_error) {} - - await docker.createContainer(settings); - const newContainer = docker.getContainer(containerName); - await newContainer.start(); - - console.log("Monitoring Started "); - } catch (error) { - console.log("Monitoring Not Found: Starting ", error); - } -}; diff --git a/packages/server/src/setup/postgres-setup.ts b/packages/server/src/setup/postgres-setup.ts index cf162f1ed..b5794c2b2 100644 --- a/packages/server/src/setup/postgres-setup.ts +++ b/packages/server/src/setup/postgres-setup.ts @@ -54,16 +54,10 @@ export const initializePostgres = async () => { version: Number.parseInt(inspect.Version.Index), ...settings, }); + console.log("Postgres Started ✅"); - } catch (_) { - try { - await docker.createService(settings); - } catch (error: any) { - if (error?.statusCode !== 409) { - throw error; - } - console.log("Postgres service already exists, continuing..."); - } + } catch (error) { + await docker.createService(settings); console.log("Postgres Not Found: Starting ✅"); } }; diff --git a/packages/server/src/setup/redis-setup.ts b/packages/server/src/setup/redis-setup.ts index 7366546da..1c3b545a5 100644 --- a/packages/server/src/setup/redis-setup.ts +++ b/packages/server/src/setup/redis-setup.ts @@ -52,15 +52,8 @@ export const initializeRedis = async () => { ...settings, }); console.log("Redis Started ✅"); - } catch (_) { - try { - await docker.createService(settings); - } catch (error: any) { - if (error?.statusCode !== 409) { - throw error; - } - console.log("Redis service already exists, continuing..."); - } + } catch (error) { + await docker.createService(settings); console.log("Redis Not Found: Starting ✅"); } }; diff --git a/packages/server/src/setup/server-audit.ts b/packages/server/src/setup/server-audit.ts index b9283c313..df00e9a74 100644 --- a/packages/server/src/setup/server-audit.ts +++ b/packages/server/src/setup/server-audit.ts @@ -89,7 +89,7 @@ export const serverAudit = async (serverId: string) => { .on("data", (data: string) => { output += data; }) - .stderr.on("data", (_data) => {}); + .stderr.on("data", (data) => {}); }); }) .on("error", (err) => { diff --git a/packages/server/src/setup/server-validate.ts b/packages/server/src/setup/server-validate.ts index c86206b61..4ca21df85 100644 --- a/packages/server/src/setup/server-validate.ts +++ b/packages/server/src/setup/server-validate.ts @@ -128,7 +128,7 @@ export const serverValidate = async (serverId: string) => { .on("data", (data: string) => { output += data; }) - .stderr.on("data", (_data) => {}); + .stderr.on("data", (data) => {}); }); }) .on("error", (err) => { diff --git a/packages/server/src/setup/setup.ts b/packages/server/src/setup/setup.ts index eeef32dd2..c59877022 100644 --- a/packages/server/src/setup/setup.ts +++ b/packages/server/src/setup/setup.ts @@ -18,7 +18,7 @@ export const dockerSwarmInitialized = async () => { await docker.swarmInspect(); return true; - } catch (_e) { + } catch (e) { return false; } }; @@ -41,7 +41,7 @@ export const dockerNetworkInitialized = async () => { try { await docker.getNetwork("dokploy-network").inspect(); return true; - } catch (_e) { + } catch (e) { return false; } }; diff --git a/packages/server/src/setup/traefik-setup.ts b/packages/server/src/setup/traefik-setup.ts index e8d019424..270a4447a 100644 --- a/packages/server/src/setup/traefik-setup.ts +++ b/packages/server/src/setup/traefik-setup.ts @@ -68,6 +68,9 @@ export const initializeTraefik = async ({ Replicas: 1, }, }, + Labels: { + "traefik.enable": "true", + }, EndpointSpec: { Ports: [ { @@ -127,15 +130,8 @@ export const initializeTraefik = async ({ }); console.log("Traefik Started ✅"); - } catch (_) { - try { - await docker.createService(settings); - } catch (error: any) { - if (error?.statusCode !== 409) { - throw error; - } - console.log("Traefik service already exists, continuing..."); - } + } catch (error) { + await docker.createService(settings); console.log("Traefik Not Found: Starting ✅"); } }; @@ -193,12 +189,10 @@ export const getDefaultTraefikConfig = () => { : { swarm: { exposedByDefault: false, - watch: true, + watch: false, }, docker: { exposedByDefault: false, - watch: true, - network: "dokploy-network", }, }), file: { @@ -249,12 +243,10 @@ export const getDefaultServerTraefikConfig = () => { providers: { swarm: { exposedByDefault: false, - watch: true, + watch: false, }, docker: { exposedByDefault: false, - watch: true, - network: "dokploy-network", }, file: { directory: "/etc/dokploy/traefik/dynamic", diff --git a/packages/server/src/types/with.ts b/packages/server/src/types/with.ts index 467020a21..c4826f734 100644 --- a/packages/server/src/types/with.ts +++ b/packages/server/src/types/with.ts @@ -36,7 +36,7 @@ type AnyObj = Record; type ZodObj = { [key in keyof T]: z.ZodType; }; -const _zObject = (arg: ZodObj) => z.object(arg); +const zObject = (arg: ZodObj) => z.object(arg); // const goodDogScheme = zObject({ // // prueba: schema.selectDatabaseSchema, diff --git a/packages/server/src/utils/access-log/handler.ts b/packages/server/src/utils/access-log/handler.ts index 69d0cc68b..b1fd925c6 100644 --- a/packages/server/src/utils/access-log/handler.ts +++ b/packages/server/src/utils/access-log/handler.ts @@ -1,8 +1,8 @@ import { IS_CLOUD, paths } from "@dokploy/server/constants"; +import { updateAdmin } from "@dokploy/server/services/admin"; import { type RotatingFileStream, createStream } from "rotating-file-stream"; +import { db } from "../../db"; import { execAsync } from "../process/execAsync"; -import { findAdmin } from "@dokploy/server/services/admin"; -import { updateUser } from "@dokploy/server/services/user"; class LogRotationManager { private static instance: LogRotationManager; @@ -30,16 +30,17 @@ class LogRotationManager { } private async getStateFromDB(): Promise { - const admin = await findAdmin(); - return admin?.user.enableLogRotation ?? false; + const setting = await db.query.admins.findFirst({}); + return setting?.enableLogRotation ?? false; } private async setStateInDB(active: boolean): Promise { - const admin = await findAdmin(); + const admin = await db.query.admins.findFirst({}); + if (!admin) { return; } - await updateUser(admin.user.id, { + await updateAdmin(admin?.authId, { enableLogRotation: active, }); } diff --git a/packages/server/src/utils/backups/index.ts b/packages/server/src/utils/backups/index.ts index 7699a42e4..922232a0c 100644 --- a/packages/server/src/utils/backups/index.ts +++ b/packages/server/src/utils/backups/index.ts @@ -1,3 +1,4 @@ +import { findAdmin } from "@dokploy/server/services/admin"; import { getAllServers } from "@dokploy/server/services/server"; import { scheduleJob } from "node-schedule"; import { db } from "../../db/index"; @@ -11,14 +12,13 @@ import { runMariadbBackup } from "./mariadb"; import { runMongoBackup } from "./mongo"; import { runMySqlBackup } from "./mysql"; import { runPostgresBackup } from "./postgres"; -import { findAdmin } from "../../services/admin"; export const initCronJobs = async () => { console.log("Setting up cron jobs...."); const admin = await findAdmin(); - if (admin?.user.enableDockerCleanup) { + if (admin?.enableDockerCleanup) { scheduleJob("docker-cleanup", "0 0 * * *", async () => { console.log( `Docker Cleanup ${new Date().toLocaleString()}] Running docker cleanup`, @@ -26,7 +26,7 @@ export const initCronJobs = async () => { await cleanUpUnusedImages(); await cleanUpDockerBuilder(); await cleanUpSystemPrune(); - await sendDockerCleanupNotifications(admin.user.id); + await sendDockerCleanupNotifications(admin.adminId); }); } @@ -43,7 +43,7 @@ export const initCronJobs = async () => { await cleanUpDockerBuilder(serverId); await cleanUpSystemPrune(serverId); await sendDockerCleanupNotifications( - admin.user.id, + admin.adminId, `Docker cleanup for Server ${name} (${serverId})`, ); }); diff --git a/packages/server/src/utils/backups/mariadb.ts b/packages/server/src/utils/backups/mariadb.ts index 56c2919c4..79cba9c57 100644 --- a/packages/server/src/utils/backups/mariadb.ts +++ b/packages/server/src/utils/backups/mariadb.ts @@ -49,7 +49,7 @@ export const runMariadbBackup = async ( projectName: project.name, databaseType: "mariadb", type: "success", - organizationId: project.organizationId, + adminId: project.adminId, }); } catch (error) { console.log(error); @@ -60,7 +60,7 @@ export const runMariadbBackup = async ( type: "error", // @ts-ignore errorMessage: error?.message || "Error message not provided", - organizationId: project.organizationId, + adminId: project.adminId, }); throw error; } diff --git a/packages/server/src/utils/backups/mongo.ts b/packages/server/src/utils/backups/mongo.ts index a40ec4f47..ddd1b8896 100644 --- a/packages/server/src/utils/backups/mongo.ts +++ b/packages/server/src/utils/backups/mongo.ts @@ -46,7 +46,7 @@ export const runMongoBackup = async (mongo: Mongo, backup: BackupSchedule) => { projectName: project.name, databaseType: "mongodb", type: "success", - organizationId: project.organizationId, + adminId: project.adminId, }); } catch (error) { console.log(error); @@ -57,7 +57,7 @@ export const runMongoBackup = async (mongo: Mongo, backup: BackupSchedule) => { type: "error", // @ts-ignore errorMessage: error?.message || "Error message not provided", - organizationId: project.organizationId, + adminId: project.adminId, }); throw error; } diff --git a/packages/server/src/utils/backups/mysql.ts b/packages/server/src/utils/backups/mysql.ts index 1272fc3ed..b505204c2 100644 --- a/packages/server/src/utils/backups/mysql.ts +++ b/packages/server/src/utils/backups/mysql.ts @@ -1,3 +1,4 @@ +import { unlink } from "node:fs/promises"; import path from "node:path"; import type { BackupSchedule } from "@dokploy/server/services/backup"; import type { MySql } from "@dokploy/server/services/mysql"; @@ -45,7 +46,7 @@ export const runMySqlBackup = async (mysql: MySql, backup: BackupSchedule) => { projectName: project.name, databaseType: "mysql", type: "success", - organizationId: project.organizationId, + adminId: project.adminId, }); } catch (error) { console.log(error); @@ -56,7 +57,7 @@ export const runMySqlBackup = async (mysql: MySql, backup: BackupSchedule) => { type: "error", // @ts-ignore errorMessage: error?.message || "Error message not provided", - organizationId: project.organizationId, + adminId: project.adminId, }); throw error; } diff --git a/packages/server/src/utils/backups/postgres.ts b/packages/server/src/utils/backups/postgres.ts index 5ada2aa9d..e9609fc89 100644 --- a/packages/server/src/utils/backups/postgres.ts +++ b/packages/server/src/utils/backups/postgres.ts @@ -49,7 +49,7 @@ export const runPostgresBackup = async ( projectName: project.name, databaseType: "postgres", type: "success", - organizationId: project.organizationId, + adminId: project.adminId, }); } catch (error) { await sendDatabaseBackupNotifications({ @@ -59,7 +59,7 @@ export const runPostgresBackup = async ( type: "error", // @ts-ignore errorMessage: error?.message || "Error message not provided", - organizationId: project.organizationId, + adminId: project.adminId, }); throw error; diff --git a/packages/server/src/utils/backups/utils.ts b/packages/server/src/utils/backups/utils.ts index c76f79626..0d78ff961 100644 --- a/packages/server/src/utils/backups/utils.ts +++ b/packages/server/src/utils/backups/utils.ts @@ -28,7 +28,7 @@ export const removeScheduleBackup = (backupId: string) => { }; export const getS3Credentials = (destination: Destination) => { - const { accessKey, secretAccessKey, region, endpoint, provider } = + const { accessKey, secretAccessKey, bucket, region, endpoint, provider } = destination; const rcloneFlags = [ `--s3-access-key-id=${accessKey}`, diff --git a/packages/server/src/utils/builders/compose.ts b/packages/server/src/utils/builders/compose.ts index 19e7d1529..ae181fc35 100644 --- a/packages/server/src/utils/builders/compose.ts +++ b/packages/server/src/utils/builders/compose.ts @@ -12,12 +12,8 @@ import { writeDomainsToCompose, writeDomainsToComposeRemote, } from "../docker/domain"; -import { - encodeBase64, - getEnviromentVariablesObject, - prepareEnvironmentVariables, -} from "../docker/utils"; -import { execAsync, execAsyncRemote } from "../process/execAsync"; +import { encodeBase64, prepareEnvironmentVariables } from "../docker/utils"; +import { execAsyncRemote } from "../process/execAsync"; import { spawnAsync } from "../process/spawnAsync"; export type ComposeNested = InferResultType< @@ -33,19 +29,13 @@ export const buildCompose = async (compose: ComposeNested, logPath: string) => { await writeDomainsToCompose(compose, domains); createEnvFile(compose); - if (compose.isolatedDeployment) { - await execAsync( - `docker network inspect ${compose.appName} >/dev/null 2>&1 || docker network create --attachable ${compose.appName}`, - ); - } - const logContent = ` - App Name: ${appName} - Build Compose 🐳 - Detected: ${mounts.length} mounts 📂 - Command: docker ${command} - Source Type: docker ${sourceType} ✅ - Compose Type: ${composeType} ✅`; +App Name: ${appName} +Build Compose 🐳 +Detected: ${mounts.length} mounts 📂 +Command: docker ${command} +Source Type: docker ${sourceType} ✅ +Compose Type: ${composeType} ✅`; const logBox = boxen(logContent, { padding: { left: 1, @@ -56,6 +46,7 @@ export const buildCompose = async (compose: ComposeNested, logPath: string) => { borderStyle: "double", }); writeStream.write(`\n${logBox}\n`); + const projectPath = join(COMPOSE_PATH, compose.appName, "code"); await spawnAsync( @@ -71,19 +62,10 @@ export const buildCompose = async (compose: ComposeNested, logPath: string) => { env: { NODE_ENV: process.env.NODE_ENV, PATH: process.env.PATH, - ...(composeType === "stack" && { - ...getEnviromentVariablesObject(compose.env, compose.project.env), - }), }, }, ); - if (compose.isolatedDeployment) { - await execAsync( - `docker network connect ${compose.appName} $(docker ps --filter "name=dokploy-traefik" -q) >/dev/null 2>&1`, - ).catch(() => {}); - } - writeStream.write("Docker Compose Deployed: ✅"); } catch (error) { writeStream.write(`Error ❌ ${(error as Error).message}`); @@ -98,11 +80,11 @@ export const getBuildComposeCommand = async ( logPath: string, ) => { const { COMPOSE_PATH } = paths(true); - const { sourceType, appName, mounts, composeType, domains } = compose; + const { sourceType, appName, mounts, composeType, domains, composePath } = + compose; const command = createCommand(compose); const envCommand = getCreateEnvFileCommand(compose); const projectPath = join(COMPOSE_PATH, compose.appName, "code"); - const exportEnvCommand = getExportEnvCommand(compose); const newCompose = await writeDomainsToComposeRemote( compose, @@ -138,10 +120,7 @@ Compose Type: ${composeType} ✅`; cd "${projectPath}"; - ${exportEnvCommand} - ${compose.isolatedDeployment ? `docker network inspect ${compose.appName} >/dev/null 2>&1 || docker network create --attachable ${compose.appName}` : ""} docker ${command.split(" ").join(" ")} >> "${logPath}" 2>&1 || { echo "Error: ❌ Docker command failed" >> "${logPath}"; exit 1; } - ${compose.isolatedDeployment ? `docker network connect ${compose.appName} $(docker ps --filter "name=dokploy-traefik" -q) >/dev/null 2>&1` : ""} echo "Docker Compose Deployed: ✅" >> "${logPath}" } || { @@ -165,6 +144,7 @@ const sanitizeCommand = (command: string) => { export const createCommand = (compose: ComposeNested) => { const { composeType, appName, sourceType } = compose; + if (compose.command) { return `${sanitizeCommand(compose.command)}`; } @@ -239,17 +219,3 @@ touch ${envFilePath}; echo "${encodedContent}" | base64 -d > "${envFilePath}"; `; }; - -const getExportEnvCommand = (compose: ComposeNested) => { - if (compose.composeType !== "stack") return ""; - - const envVars = getEnviromentVariablesObject( - compose.env, - compose.project.env, - ); - const exports = Object.entries(envVars) - .map(([key, value]) => `export ${key}=${JSON.stringify(value)}`) - .join("\n"); - - return exports ? `\n# Export environment variables\n${exports}\n` : ""; -}; diff --git a/packages/server/src/utils/builders/index.ts b/packages/server/src/utils/builders/index.ts index d777b1a36..d67482755 100644 --- a/packages/server/src/utils/builders/index.ts +++ b/packages/server/src/utils/builders/index.ts @@ -197,7 +197,7 @@ export const mechanizeDockerContainer = async ( ForceUpdate: inspect.Spec.TaskTemplate.ForceUpdate + 1, }, }); - } catch (_error) { + } catch (error) { await docker.createService(settings); } }; diff --git a/packages/server/src/utils/builders/nixpacks.ts b/packages/server/src/utils/builders/nixpacks.ts index c13f82a56..56560e4e2 100644 --- a/packages/server/src/utils/builders/nixpacks.ts +++ b/packages/server/src/utils/builders/nixpacks.ts @@ -91,7 +91,7 @@ export const getNixpacksCommand = ( application: ApplicationNested, logPath: string, ) => { - const { env, appName, publishDirectory } = application; + const { env, appName, publishDirectory, serverId } = application; const buildAppDirectory = getBuildAppDirectory(application); const buildContainerId = `${appName}-${nanoid(10)}`; diff --git a/packages/server/src/utils/databases/mariadb.ts b/packages/server/src/utils/databases/mariadb.ts index ead5a618a..d1b41fc33 100644 --- a/packages/server/src/utils/databases/mariadb.ts +++ b/packages/server/src/utils/databases/mariadb.ts @@ -98,7 +98,7 @@ export const buildMariadb = async (mariadb: MariadbNested) => { version: Number.parseInt(inspect.Version.Index), ...settings, }); - } catch (_error) { + } catch (error) { await docker.createService(settings); } }; diff --git a/packages/server/src/utils/databases/mongo.ts b/packages/server/src/utils/databases/mongo.ts index ace9c9721..5af58eef7 100644 --- a/packages/server/src/utils/databases/mongo.ts +++ b/packages/server/src/utils/databases/mongo.ts @@ -152,7 +152,7 @@ ${command ?? "wait $MONGOD_PID"}`; version: Number.parseInt(inspect.Version.Index), ...settings, }); - } catch (_error) { + } catch (error) { await docker.createService(settings); } }; diff --git a/packages/server/src/utils/databases/mysql.ts b/packages/server/src/utils/databases/mysql.ts index de28cfe6b..5a6911771 100644 --- a/packages/server/src/utils/databases/mysql.ts +++ b/packages/server/src/utils/databases/mysql.ts @@ -104,7 +104,7 @@ export const buildMysql = async (mysql: MysqlNested) => { version: Number.parseInt(inspect.Version.Index), ...settings, }); - } catch (_error) { + } catch (error) { await docker.createService(settings); } }; diff --git a/packages/server/src/utils/databases/redis.ts b/packages/server/src/utils/databases/redis.ts index aef862802..724069a17 100644 --- a/packages/server/src/utils/databases/redis.ts +++ b/packages/server/src/utils/databases/redis.ts @@ -95,7 +95,7 @@ export const buildRedis = async (redis: RedisNested) => { version: Number.parseInt(inspect.Version.Index), ...settings, }); - } catch (_error) { + } catch (error) { await docker.createService(settings); } }; diff --git a/packages/server/src/utils/docker/collision.ts b/packages/server/src/utils/docker/collision.ts deleted file mode 100644 index d3f131c67..000000000 --- a/packages/server/src/utils/docker/collision.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { findComposeById } from "@dokploy/server/services/compose"; -import { dump, load } from "js-yaml"; -import { addAppNameToAllServiceNames } from "./collision/root-network"; -import { generateRandomHash } from "./compose"; -import { addSuffixToAllVolumes } from "./compose/volume"; -import type { ComposeSpecification } from "./types"; - -export const addAppNameToPreventCollision = ( - composeData: ComposeSpecification, - appName: string, -): ComposeSpecification => { - let updatedComposeData = { ...composeData }; - - updatedComposeData = addAppNameToAllServiceNames(updatedComposeData, appName); - updatedComposeData = addSuffixToAllVolumes(updatedComposeData, appName); - return updatedComposeData; -}; - -export const randomizeIsolatedDeploymentComposeFile = async ( - composeId: string, - suffix?: string, -) => { - const compose = await findComposeById(composeId); - const composeFile = compose.composeFile; - const composeData = load(composeFile) as ComposeSpecification; - - const randomSuffix = suffix || compose.appName || generateRandomHash(); - - const newComposeFile = addAppNameToPreventCollision( - composeData, - randomSuffix, - ); - - return dump(newComposeFile); -}; - -export const randomizeDeployableSpecificationFile = ( - composeSpec: ComposeSpecification, - suffix?: string, -) => { - if (!suffix) { - return composeSpec; - } - const newComposeFile = addAppNameToPreventCollision(composeSpec, suffix); - return newComposeFile; -}; diff --git a/packages/server/src/utils/docker/collision/root-network.ts b/packages/server/src/utils/docker/collision/root-network.ts deleted file mode 100644 index ed36d4bd6..000000000 --- a/packages/server/src/utils/docker/collision/root-network.ts +++ /dev/null @@ -1,62 +0,0 @@ -import _ from "lodash"; -import type { ComposeSpecification, DefinitionsService } from "../types"; - -export const addAppNameToRootNetwork = ( - composeData: ComposeSpecification, - appName: string, -): ComposeSpecification => { - const updatedComposeData = { ...composeData }; - - // Initialize networks if it doesn't exist - if (!updatedComposeData.networks) { - updatedComposeData.networks = {}; - } - - // Add the new network with the app name - updatedComposeData.networks[appName] = { - name: appName, - external: true, - }; - - return updatedComposeData; -}; - -export const addAppNameToServiceNetworks = ( - services: { [key: string]: DefinitionsService }, - appName: string, -): { [key: string]: DefinitionsService } => { - return _.mapValues(services, (service) => { - if (!service.networks) { - service.networks = [appName]; - return service; - } - - if (Array.isArray(service.networks)) { - if (!service.networks.includes(appName)) { - service.networks.push(appName); - } - } else { - service.networks[appName] = {}; - } - - return service; - }); -}; - -export const addAppNameToAllServiceNames = ( - composeData: ComposeSpecification, - appName: string, -): ComposeSpecification => { - let updatedComposeData = { ...composeData }; - - updatedComposeData = addAppNameToRootNetwork(updatedComposeData, appName); - - if (updatedComposeData.services) { - updatedComposeData.services = addAppNameToServiceNetworks( - updatedComposeData.services, - appName, - ); - } - - return updatedComposeData; -}; diff --git a/packages/server/src/utils/docker/domain.ts b/packages/server/src/utils/docker/domain.ts index c4ced3f44..69bfa222a 100644 --- a/packages/server/src/utils/docker/domain.ts +++ b/packages/server/src/utils/docker/domain.ts @@ -26,7 +26,6 @@ import { createComposeFileRaw, createComposeFileRawRemote, } from "../providers/raw"; -import { randomizeDeployableSpecificationFile } from "./collision"; import { randomizeSpecificationFile } from "./compose"; import type { ComposeSpecification, @@ -109,7 +108,7 @@ export const loadDockerComposeRemote = async ( if (!stdout) return null; const parsedConfig = load(stdout) as ComposeSpecification; return parsedConfig; - } catch (_err) { + } catch (err) { return null; } }; @@ -191,13 +190,7 @@ export const addDomainToCompose = async ( return null; } - if (compose.isolatedDeployment) { - const randomized = randomizeDeployableSpecificationFile( - result, - compose.suffix || compose.appName, - ); - result = randomized; - } else if (compose.randomize) { + if (compose.randomize) { const randomized = randomizeSpecificationFile(result, compose.suffix); result = randomized; } @@ -210,6 +203,9 @@ export const addDomainToCompose = async ( if (!result?.services?.[serviceName]) { throw new Error(`The service ${serviceName} not found in the compose`); } + if (!result.services[serviceName].labels) { + result.services[serviceName].labels = []; + } const httpLabels = await createDomainLabels(appName, domain, "web"); if (https) { @@ -221,24 +217,7 @@ export const addDomainToCompose = async ( httpLabels.push(...httpsLabels); } - let labels: DefinitionsService["labels"] = []; - if (compose.composeType === "docker-compose") { - if (!result.services[serviceName].labels) { - result.services[serviceName].labels = []; - } - - labels = result.services[serviceName].labels; - } else { - // Stack Case - if (!result.services[serviceName].deploy) { - result.services[serviceName].deploy = {}; - } - if (!result.services[serviceName].deploy.labels) { - result.services[serviceName].deploy.labels = []; - } - - labels = result.services[serviceName].deploy.labels; - } + const labels = result.services[serviceName].labels; if (Array.isArray(labels)) { if (!labels.includes("traefik.enable=true")) { @@ -247,18 +226,14 @@ export const addDomainToCompose = async ( labels.push(...httpLabels); } - if (!compose.isolatedDeployment) { - // Add the dokploy-network to the service - result.services[serviceName].networks = addDokployNetworkToService( - result.services[serviceName].networks, - ); - } + // Add the dokploy-network to the service + result.services[serviceName].networks = addDokployNetworkToService( + result.services[serviceName].networks, + ); } // Add dokploy-network to the root of the compose file - if (!compose.isolatedDeployment) { - result.networks = addDokployNetworkToRoot(result.networks); - } + result.networks = addDokployNetworkToRoot(result.networks); return result; }; diff --git a/packages/server/src/utils/docker/utils.ts b/packages/server/src/utils/docker/utils.ts index 71b7e4aac..654d83301 100644 --- a/packages/server/src/utils/docker/utils.ts +++ b/packages/server/src/utils/docker/utils.ts @@ -100,7 +100,7 @@ export const containerExists = async (containerName: string) => { try { await container.inspect(); return true; - } catch (_error) { + } catch (error) { return false; } }; @@ -144,11 +144,10 @@ export const getContainerByName = (name: string): Promise => { }; export const cleanUpUnusedImages = async (serverId?: string) => { try { - const command = "docker image prune --force"; if (serverId) { - await execAsyncRemote(serverId, command); + await execAsyncRemote(serverId, "docker image prune --all --force"); } else { - await execAsync(command); + await execAsync("docker image prune --all --force"); } } catch (error) { console.error(error); @@ -158,11 +157,10 @@ export const cleanUpUnusedImages = async (serverId?: string) => { export const cleanStoppedContainers = async (serverId?: string) => { try { - const command = "docker container prune --force"; if (serverId) { - await execAsyncRemote(serverId, command); + await execAsyncRemote(serverId, "docker container prune --force"); } else { - await execAsync(command); + await execAsync("docker container prune --force"); } } catch (error) { console.error(error); @@ -172,11 +170,10 @@ export const cleanStoppedContainers = async (serverId?: string) => { export const cleanUpUnusedVolumes = async (serverId?: string) => { try { - const command = "docker volume prune --force"; if (serverId) { - await execAsyncRemote(serverId, command); + await execAsyncRemote(serverId, "docker volume prune --all --force"); } else { - await execAsync(command); + await execAsync("docker volume prune --all --force"); } } catch (error) { console.error(error); @@ -202,20 +199,21 @@ export const cleanUpInactiveContainers = async () => { }; export const cleanUpDockerBuilder = async (serverId?: string) => { - const command = "docker builder prune --all --force"; if (serverId) { - await execAsyncRemote(serverId, command); + await execAsyncRemote(serverId, "docker builder prune --all --force"); } else { - await execAsync(command); + await execAsync("docker builder prune --all --force"); } }; export const cleanUpSystemPrune = async (serverId?: string) => { - const command = "docker system prune --all --force --volumes"; if (serverId) { - await execAsyncRemote(serverId, command); + await execAsyncRemote( + serverId, + "docker system prune --all --force --volumes", + ); } else { - await execAsync(command); + await execAsync("docker system prune --all --force --volumes"); } }; @@ -240,7 +238,7 @@ export const startServiceRemote = async (serverId: string, appName: string) => { export const removeService = async ( appName: string, serverId?: string | null, - _deleteVolumes = false, + deleteVolumes = false, ) => { try { const command = `docker service rm ${appName}`; @@ -278,15 +276,12 @@ export const prepareEnvironmentVariables = ( return resolvedVars; }; -export const getEnviromentVariablesObject = ( - input: string | null, - projectEnv?: string | null, -) => { - const envs = prepareEnvironmentVariables(input, projectEnv); +export const prepareBuildArgs = (input: string | null) => { + const pairs = (input ?? "").split("\n"); const jsonObject: Record = {}; - for (const pair of envs) { + for (const pair of pairs) { const [key, value] = pair.split("="); if (key && value) { jsonObject[key] = value; diff --git a/packages/server/src/utils/gpu-setup.ts b/packages/server/src/utils/gpu-setup.ts index a815a00cc..6a6611b4a 100644 --- a/packages/server/src/utils/gpu-setup.ts +++ b/packages/server/src/utils/gpu-setup.ts @@ -34,7 +34,7 @@ export async function checkGPUStatus(serverId?: string): Promise { ...gpuInfo, ...cudaInfo, }; - } catch (_error) { + } catch (error) { return { driverInstalled: false, driverVersion: undefined, @@ -315,7 +315,7 @@ const setupLocalServer = async (daemonConfig: any) => { try { await execAsync(setupCommands); - } catch (_error) { + } catch (error) { throw new Error( "Failed to configure GPU support. Please ensure you have sudo privileges and try again.", ); diff --git a/packages/server/src/utils/notifications/build-error.ts b/packages/server/src/utils/notifications/build-error.ts index c873c9ab5..95936652c 100644 --- a/packages/server/src/utils/notifications/build-error.ts +++ b/packages/server/src/utils/notifications/build-error.ts @@ -18,7 +18,7 @@ interface Props { applicationType: string; errorMessage: string; buildLink: string; - organizationId: string; + adminId: string; } export const sendBuildErrorNotifications = async ({ @@ -27,14 +27,14 @@ export const sendBuildErrorNotifications = async ({ applicationType, errorMessage, buildLink, - organizationId, + adminId, }: Props) => { const date = new Date(); const unixDate = ~~(Number(date) / 1000); const notificationList = await db.query.notifications.findMany({ where: and( eq(notifications.appBuildError, true), - eq(notifications.organizationId, organizationId), + eq(notifications.adminId, adminId), ), with: { email: true, diff --git a/packages/server/src/utils/notifications/build-success.ts b/packages/server/src/utils/notifications/build-success.ts index ac470c49f..960f7a6a4 100644 --- a/packages/server/src/utils/notifications/build-success.ts +++ b/packages/server/src/utils/notifications/build-success.ts @@ -18,7 +18,7 @@ interface Props { applicationName: string; applicationType: string; buildLink: string; - organizationId: string; + adminId: string; domains: Domain[]; } @@ -27,7 +27,7 @@ export const sendBuildSuccessNotifications = async ({ applicationName, applicationType, buildLink, - organizationId, + adminId, domains, }: Props) => { const date = new Date(); @@ -35,7 +35,7 @@ export const sendBuildSuccessNotifications = async ({ const notificationList = await db.query.notifications.findMany({ where: and( eq(notifications.appDeploy, true), - eq(notifications.organizationId, organizationId), + eq(notifications.adminId, adminId), ), with: { email: true, diff --git a/packages/server/src/utils/notifications/database-backup.ts b/packages/server/src/utils/notifications/database-backup.ts index 37a4a1ff2..0b1d61f7e 100644 --- a/packages/server/src/utils/notifications/database-backup.ts +++ b/packages/server/src/utils/notifications/database-backup.ts @@ -1,3 +1,4 @@ +import { error } from "node:console"; import { db } from "@dokploy/server/db"; import { notifications } from "@dokploy/server/db/schema"; import DatabaseBackupEmail from "@dokploy/server/emails/emails/database-backup"; @@ -18,13 +19,13 @@ export const sendDatabaseBackupNotifications = async ({ databaseType, type, errorMessage, - organizationId, + adminId, }: { projectName: string; applicationName: string; databaseType: "postgres" | "mysql" | "mongodb" | "mariadb"; type: "error" | "success"; - organizationId: string; + adminId: string; errorMessage?: string; }) => { const date = new Date(); @@ -32,7 +33,7 @@ export const sendDatabaseBackupNotifications = async ({ const notificationList = await db.query.notifications.findMany({ where: and( eq(notifications.databaseBackup, true), - eq(notifications.organizationId, organizationId), + eq(notifications.adminId, adminId), ), with: { email: true, diff --git a/packages/server/src/utils/notifications/docker-cleanup.ts b/packages/server/src/utils/notifications/docker-cleanup.ts index b3959cccd..b60e3b0ac 100644 --- a/packages/server/src/utils/notifications/docker-cleanup.ts +++ b/packages/server/src/utils/notifications/docker-cleanup.ts @@ -13,7 +13,7 @@ import { } from "./utils"; export const sendDockerCleanupNotifications = async ( - organizationId: string, + adminId: string, message = "Docker cleanup for dokploy", ) => { const date = new Date(); @@ -21,7 +21,7 @@ export const sendDockerCleanupNotifications = async ( const notificationList = await db.query.notifications.findMany({ where: and( eq(notifications.dockerCleanup, true), - eq(notifications.organizationId, organizationId), + eq(notifications.adminId, adminId), ), with: { email: true, diff --git a/packages/server/src/utils/notifications/server-threshold.ts b/packages/server/src/utils/notifications/server-threshold.ts deleted file mode 100644 index 2e63ba25a..000000000 --- a/packages/server/src/utils/notifications/server-threshold.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { and, eq } from "drizzle-orm"; -import { db } from "../../db"; -import { notifications } from "../../db/schema"; -import { - sendDiscordNotification, - sendSlackNotification, - sendTelegramNotification, -} from "./utils"; - -interface ServerThresholdPayload { - Type: "CPU" | "Memory"; - Value: number; - Threshold: number; - Message: string; - Timestamp: string; - Token: string; - ServerName: string; -} - -export const sendServerThresholdNotifications = async ( - organizationId: string, - payload: ServerThresholdPayload, -) => { - const date = new Date(payload.Timestamp); - const unixDate = ~~(Number(date) / 1000); - - const notificationList = await db.query.notifications.findMany({ - where: and( - eq(notifications.serverThreshold, true), - eq(notifications.organizationId, organizationId), - ), - with: { - email: true, - discord: true, - telegram: true, - slack: true, - }, - }); - - const typeEmoji = payload.Type === "CPU" ? "🔲" : "💾"; - const typeColor = 0xff0000; // Rojo para indicar alerta - - for (const notification of notificationList) { - const { discord, telegram, slack } = notification; - - if (discord) { - const decorate = (decoration: string, text: string) => - `${discord.decoration ? decoration : ""} ${text}`.trim(); - - await sendDiscordNotification(discord, { - title: decorate(">", `\`⚠️\` Server ${payload.Type} Alert`), - color: typeColor, - fields: [ - { - name: decorate("`🏷️`", "Server Name"), - value: payload.ServerName, - inline: true, - }, - { - name: decorate("`📅`", "Date"), - value: ``, - inline: true, - }, - { - name: decorate("`⌚`", "Time"), - value: ``, - inline: true, - }, - { - name: decorate(typeEmoji, "Type"), - value: payload.Type, - inline: true, - }, - { - name: decorate("📊", "Current Value"), - value: `${payload.Value.toFixed(2)}%`, - inline: true, - }, - { - name: decorate("⚠️", "Threshold"), - value: `${payload.Threshold.toFixed(2)}%`, - inline: true, - }, - { - name: decorate("`📜`", "Message"), - value: `\`\`\`${payload.Message}\`\`\``, - }, - ], - timestamp: date.toISOString(), - footer: { - text: "Dokploy Server Monitoring Alert", - }, - }); - } - - if (telegram) { - await sendTelegramNotification( - telegram, - ` - ⚠️ Server ${payload.Type} Alert - Server Name: ${payload.ServerName} - Type: ${payload.Type} - Current Value: ${payload.Value.toFixed(2)}% - Threshold: ${payload.Threshold.toFixed(2)}% - Message: ${payload.Message} - Time: ${date.toLocaleString()} - `, - ); - } - - if (slack) { - const { channel } = slack; - await sendSlackNotification(slack, { - channel: channel, - attachments: [ - { - color: "#FF0000", - pretext: `:warning: *Server ${payload.Type} Alert*`, - fields: [ - { - title: "Server Name", - value: payload.ServerName, - short: true, - }, - { - title: "Type", - value: payload.Type, - short: true, - }, - { - title: "Current Value", - value: `${payload.Value.toFixed(2)}%`, - short: true, - }, - { - title: "Threshold", - value: `${payload.Threshold.toFixed(2)}%`, - short: true, - }, - { - title: "Message", - value: payload.Message, - }, - { - title: "Time", - value: date.toLocaleString(), - short: true, - }, - ], - }, - ], - }); - } - } -}; diff --git a/packages/server/src/utils/notifications/utils.ts b/packages/server/src/utils/notifications/utils.ts index dd552cf3e..4f8bb1a5e 100644 --- a/packages/server/src/utils/notifications/utils.ts +++ b/packages/server/src/utils/notifications/utils.ts @@ -68,7 +68,6 @@ export const sendTelegramNotification = async ( headers: { "Content-Type": "application/json" }, body: JSON.stringify({ chat_id: connection.chatId, - message_thread_id: connection.messageThreadId, text: messageText, parse_mode: "HTML", disable_web_page_preview: true, diff --git a/packages/server/src/utils/process/execAsync.ts b/packages/server/src/utils/process/execAsync.ts index aee1e821a..19a16ac1e 100644 --- a/packages/server/src/utils/process/execAsync.ts +++ b/packages/server/src/utils/process/execAsync.ts @@ -27,7 +27,7 @@ export const execAsyncRemote = async ( throw err; } stream - .on("close", (code: number, _signal: string) => { + .on("close", (code: number, signal: string) => { conn.end(); if (code === 0) { resolve({ stdout, stderr }); diff --git a/packages/server/src/utils/providers/bitbucket.ts b/packages/server/src/utils/providers/bitbucket.ts index dd98a93bd..7059e65f7 100644 --- a/packages/server/src/utils/providers/bitbucket.ts +++ b/packages/server/src/utils/providers/bitbucket.ts @@ -176,6 +176,7 @@ export const getBitbucketCloneCommand = async ( bitbucketBranch, bitbucketId, serverId, + bitbucket, } = entity; if (!serverId) { diff --git a/packages/server/src/utils/providers/git.ts b/packages/server/src/utils/providers/git.ts index c26af3af2..6377b557e 100644 --- a/packages/server/src/utils/providers/git.ts +++ b/packages/server/src/utils/providers/git.ts @@ -69,7 +69,6 @@ export const cloneGitRepository = async ( }); } - const { port } = sanitizeRepoPathSSH(customGitUrl); await spawnAsync( "git", [ @@ -92,7 +91,7 @@ export const cloneGitRepository = async ( env: { ...process.env, ...(customGitSSHKeyId && { - GIT_SSH_COMMAND: `ssh -i ${temporalKeyPath}${port ? ` -p ${port}` : ""} -o UserKnownHostsFile=${knownHostsPath}`, + GIT_SSH_COMMAND: `ssh -i ${temporalKeyPath} -o UserKnownHostsFile=${knownHostsPath}`, }), }, }, @@ -169,8 +168,7 @@ export const getCustomGitCloneCommand = async ( ); if (customGitSSHKeyId) { const sshKey = await findSSHKeyById(customGitSSHKeyId); - const { port } = sanitizeRepoPathSSH(customGitUrl); - const gitSshCommand = `ssh -i /tmp/id_rsa${port ? ` -p ${port}` : ""} -o UserKnownHostsFile=${knownHostsPath}`; + const gitSshCommand = `ssh -i /tmp/id_rsa -o UserKnownHostsFile=${knownHostsPath}`; command.push( ` echo "${sshKey.privateKey}" > /tmp/id_rsa @@ -306,7 +304,6 @@ export const cloneGitRawRepository = async (entity: { }); } - const { port } = sanitizeRepoPathSSH(customGitUrl); await spawnAsync( "git", [ @@ -320,12 +317,12 @@ export const cloneGitRawRepository = async (entity: { outputPath, "--progress", ], - (_data) => {}, + (data) => {}, { env: { ...process.env, ...(customGitSSHKeyId && { - GIT_SSH_COMMAND: `ssh -i ${temporalKeyPath}${port ? ` -p ${port}` : ""} -o UserKnownHostsFile=${knownHostsPath}`, + GIT_SSH_COMMAND: `ssh -i ${temporalKeyPath} -o UserKnownHostsFile=${knownHostsPath}`, }), }, }, @@ -384,8 +381,7 @@ export const cloneRawGitRepositoryRemote = async (compose: Compose) => { command.push(`mkdir -p ${outputPath};`); if (customGitSSHKeyId) { const sshKey = await findSSHKeyById(customGitSSHKeyId); - const { port } = sanitizeRepoPathSSH(customGitUrl); - const gitSshCommand = `ssh -i /tmp/id_rsa${port ? ` -p ${port}` : ""} -o UserKnownHostsFile=${knownHostsPath}`; + const gitSshCommand = `ssh -i /tmp/id_rsa -o UserKnownHostsFile=${knownHostsPath}`; command.push( ` echo "${sshKey.privateKey}" > /tmp/id_rsa diff --git a/packages/server/src/utils/providers/gitlab.ts b/packages/server/src/utils/providers/gitlab.ts index c380a9203..096f9e284 100644 --- a/packages/server/src/utils/providers/gitlab.ts +++ b/packages/server/src/utils/providers/gitlab.ts @@ -162,6 +162,8 @@ export const getGitlabCloneCommand = async ( ) => { const { appName, + gitlabRepository, + gitlabOwner, gitlabPathNamespace, gitlabBranch, gitlabId, @@ -266,7 +268,7 @@ export const getGitlabRepositories = async (gitlabId?: string) => { if (groupName) { return full_path.toLowerCase().includes(groupName) && kind === "group"; } - return kind === "member"; + return kind === "user"; }); const mappedRepositories = filteredRepos.map((repo: any) => { return { @@ -326,7 +328,14 @@ export const getGitlabBranches = async (input: { }; export const cloneRawGitlabRepository = async (entity: Compose) => { - const { appName, gitlabBranch, gitlabId, gitlabPathNamespace } = entity; + const { + appName, + gitlabRepository, + gitlabOwner, + gitlabBranch, + gitlabId, + gitlabPathNamespace, + } = entity; if (!gitlabId) { throw new TRPCError({ @@ -433,7 +442,7 @@ export const testGitlabConnection = async ( if (groupName) { return full_path.toLowerCase().includes(groupName) && kind === "group"; } - return kind === "member"; + return kind === "user"; }); return filteredRepos.length; diff --git a/packages/server/src/utils/traefik/application.ts b/packages/server/src/utils/traefik/application.ts index 61150abf6..4434d8585 100644 --- a/packages/server/src/utils/traefik/application.ts +++ b/packages/server/src/utils/traefik/application.ts @@ -67,7 +67,7 @@ export const removeTraefikConfig = async ( if (fs.existsSync(configPath)) { await fs.promises.unlink(configPath); } - } catch (_error) {} + } catch (error) {} }; export const removeTraefikConfigRemote = async ( @@ -78,7 +78,7 @@ export const removeTraefikConfigRemote = async ( const { DYNAMIC_TRAEFIK_PATH } = paths(true); const configPath = path.join(DYNAMIC_TRAEFIK_PATH, `${appName}.yml`); await execAsyncRemote(serverId, `rm ${configPath}`); - } catch (_error) {} + } catch (error) {} }; export const loadOrCreateConfig = (appName: string): FileConfig => { @@ -110,7 +110,7 @@ export const loadOrCreateConfigRemote = async ( http: { routers: {}, services: {} }, }; return parsedConfig; - } catch (_err) { + } catch (err) { return fileConfig; } }; @@ -132,7 +132,7 @@ export const readRemoteConfig = async (serverId: string, appName: string) => { const { stdout } = await execAsyncRemote(serverId, `cat ${configPath}`); if (!stdout) return null; return stdout; - } catch (_err) { + } catch (err) { return null; } }; diff --git a/packages/server/src/utils/traefik/domain.ts b/packages/server/src/utils/traefik/domain.ts index 1ae3c05a1..a6c878e72 100644 --- a/packages/server/src/utils/traefik/domain.ts +++ b/packages/server/src/utils/traefik/domain.ts @@ -122,25 +122,13 @@ export const createRouterConfig = async ( if ((entryPoint === "websecure" && https) || !https) { // redirects for (const redirect of redirects) { - let middlewareName = `redirect-${appName}-${redirect.uniqueConfigKey}`; - if (domain.domainType === "preview") { - middlewareName = `redirect-${appName.replace( - /^preview-(.+)-[^-]+$/, - "$1", - )}-${redirect.uniqueConfigKey}`; - } + const middlewareName = `redirect-${appName}-${redirect.uniqueConfigKey}`; routerConfig.middlewares?.push(middlewareName); } // security if (security.length > 0) { - let middlewareName = `auth-${appName}`; - if (domain.domainType === "preview") { - middlewareName = `auth-${appName.replace( - /^preview-(.+)-[^-]+$/, - "$1", - )}`; - } + const middlewareName = `auth-${appName}`; routerConfig.middlewares?.push(middlewareName); } } diff --git a/packages/server/src/utils/traefik/middleware.ts b/packages/server/src/utils/traefik/middleware.ts index 934d637e1..60345f66c 100644 --- a/packages/server/src/utils/traefik/middleware.ts +++ b/packages/server/src/utils/traefik/middleware.ts @@ -95,7 +95,7 @@ export const loadRemoteMiddlewares = async (serverId: string) => { } const config = load(stdout) as FileConfig; return config; - } catch (_) { + } catch (error) { throw new Error(`File not found: ${configPath}`); } }; diff --git a/packages/server/src/utils/traefik/web-server.ts b/packages/server/src/utils/traefik/web-server.ts index 78046c673..0aa4d35d5 100644 --- a/packages/server/src/utils/traefik/web-server.ts +++ b/packages/server/src/utils/traefik/web-server.ts @@ -1,14 +1,14 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import { paths } from "@dokploy/server/constants"; -import type { User } from "@dokploy/server/services/user"; +import type { Admin } from "@dokploy/server/services/admin"; import { dump, load } from "js-yaml"; import { loadOrCreateConfig, writeTraefikConfig } from "./application"; import type { FileConfig } from "./file-types"; import type { MainTraefikConfig } from "./types"; export const updateServerTraefik = ( - user: User | null, + admin: Admin | null, newHost: string | null, ) => { const appName = "dokploy"; @@ -22,7 +22,7 @@ export const updateServerTraefik = ( if (currentRouterConfig && newHost) { currentRouterConfig.rule = `Host(\`${newHost}\`)`; - if (user?.certificateType === "letsencrypt") { + if (admin?.certificateType === "letsencrypt") { config.http.routers[`${appName}-router-app-secure`] = { ...currentRouterConfig, entryPoints: ["websecure"], diff --git a/packages/server/src/verification/send-verification-email.tsx b/packages/server/src/verification/send-verification-email.tsx deleted file mode 100644 index c673c0f77..000000000 --- a/packages/server/src/verification/send-verification-email.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { - sendDiscordNotification, - sendEmailNotification, -} from "../utils/notifications/utils"; -export const sendEmail = async ({ - email, - subject, - text, -}: { - email: string; - subject: string; - text: string; -}) => { - await sendEmailNotification( - { - fromAddress: process.env.SMTP_FROM_ADDRESS || "", - toAddresses: [email], - smtpServer: process.env.SMTP_SERVER || "", - smtpPort: Number(process.env.SMTP_PORT), - username: process.env.SMTP_USERNAME || "", - password: process.env.SMTP_PASSWORD || "", - }, - subject, - text, - ); - - return true; -}; - -export const sendDiscordNotificationWelcome = async (email: string) => { - await sendDiscordNotification( - { - webhookUrl: process.env.DISCORD_WEBHOOK_URL || "", - }, - { - title: "New User Registered", - color: 0x00ff00, - fields: [ - { - name: "Email", - value: email, - inline: true, - }, - ], - timestamp: new Date(), - footer: { - text: "Dokploy User Registration Notification", - }, - }, - ); -}; diff --git a/packages/server/tsconfig.server.json b/packages/server/tsconfig.server.json index 33777c025..7f349eb82 100644 --- a/packages/server/tsconfig.server.json +++ b/packages/server/tsconfig.server.json @@ -1,7 +1,6 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "disableSizeLimit": true, "module": "ESNext", "outDir": "dist/", "target": "ESNext", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 703101ec5..7542278f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,7 +17,7 @@ importers: version: 1.9.4 '@commitlint/cli': specifier: ^19.3.0 - version: 19.3.0(@types/node@18.19.42)(typescript@5.7.2) + version: 19.3.0(@types/node@18.19.42)(typescript@5.5.3) '@commitlint/config-conventional': specifier: ^19.2.2 version: 19.2.2 @@ -127,12 +127,6 @@ importers: '@hookform/resolvers': specifier: ^3.9.0 version: 3.9.0(react-hook-form@7.52.1(react@18.2.0)) - '@lucia-auth/adapter-drizzle': - specifier: 1.0.7 - version: 1.0.7(lucia@3.2.0) - '@octokit/auth-app': - specifier: ^6.0.4 - version: 6.1.1 '@octokit/webhooks': specifier: ^13.2.7 version: 13.3.0 @@ -193,9 +187,6 @@ importers: '@radix-ui/react-tooltip': specifier: ^1.0.7 version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@react-email/components': - specifier: ^0.0.21 - version: 0.0.21(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@stepperize/react': specifier: 4.0.1 version: 4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -229,9 +220,6 @@ importers: '@xterm/addon-attach': specifier: 0.10.0 version: 0.10.0(@xterm/xterm@5.5.0) - '@xterm/addon-clipboard': - specifier: 0.1.0 - version: 0.1.0(@xterm/xterm@5.5.0) '@xterm/xterm': specifier: ^5.4.0 version: 5.5.0 @@ -243,16 +231,7 @@ importers: version: 4.0.31(react@18.2.0)(zod@3.23.8) bcrypt: specifier: 5.1.1 - version: 5.1.1(encoding@0.1.13) - better-auth: - specifier: 1.2.0 - version: 1.2.0(typescript@5.5.3) - bl: - specifier: 6.0.11 - version: 6.0.11 - boxen: - specifier: ^7.1.1 - version: 7.1.1 + version: 5.1.1 bullmq: specifier: 5.4.2 version: 5.4.2 @@ -274,24 +253,18 @@ importers: date-fns: specifier: 3.6.0 version: 3.6.0 - dockerode: - specifier: 4.0.2 - version: 4.0.2 dotenv: specifier: 16.4.5 version: 16.4.5 drizzle-orm: - specifier: ^0.39.1 - version: 0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + specifier: ^0.30.8 + version: 0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8) + version: 0.5.1(drizzle-orm@0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0))(zod@3.23.8) fancy-ansi: specifier: ^0.1.3 version: 0.1.3 - hi-base32: - specifier: ^0.5.1 - version: 0.5.1 i18next: specifier: ^23.16.4 version: 23.16.5 @@ -324,43 +297,28 @@ importers: version: 15.3.1(i18next@23.16.5)(next@15.0.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-i18next@15.1.1(i18next@23.16.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) next-themes: specifier: ^0.2.1 - version: 0.2.1(next@15.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - node-os-utils: - specifier: 1.3.7 - version: 1.3.7 + version: 0.2.1(next@15.0.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) node-pty: specifier: 1.0.0 version: 1.0.0 node-schedule: specifier: 2.1.1 version: 2.1.1 - nodemailer: - specifier: 6.9.14 - version: 6.9.14 octokit: specifier: 3.1.2 version: 3.1.2 - otpauth: - specifier: ^9.2.3 - version: 9.3.4 postgres: specifier: 3.4.4 version: 3.4.4 public-ip: specifier: 6.0.2 version: 6.0.2 - qrcode: - specifier: ^1.5.3 - version: 1.5.4 react: specifier: 18.2.0 version: 18.2.0 react-confetti-explosion: specifier: 2.1.2 version: 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-day-picker: - specifier: 8.10.1 - version: 8.10.1(date-fns@3.6.0)(react@18.2.0) react-dom: specifier: 18.2.0 version: 18.2.0(react@18.2.0) @@ -376,9 +334,6 @@ importers: recharts: specifier: ^2.12.7 version: 2.12.7(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - rotating-file-stream: - specifier: 3.2.3 - version: 3.2.3 slugify: specifier: ^1.6.6 version: 1.6.6 @@ -402,7 +357,7 @@ importers: version: 2.4.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3))) + version: 1.0.7(tailwindcss@3.4.7) undici: specifier: ^6.19.2 version: 6.19.4 @@ -443,18 +398,9 @@ importers: '@types/node': specifier: ^18.17.0 version: 18.19.42 - '@types/node-os-utils': - specifier: 1.3.4 - version: 1.3.4 '@types/node-schedule': specifier: 2.1.6 version: 2.1.6 - '@types/nodemailer': - specifier: ^6.4.15 - version: 6.4.16 - '@types/qrcode': - specifier: ^1.5.5 - version: 1.5.5 '@types/react': specifier: 18.3.5 version: 18.3.5 @@ -474,8 +420,8 @@ importers: specifier: 10.4.12 version: 10.4.12(postcss@8.4.40) drizzle-kit: - specifier: ^0.30.4 - version: 0.30.4 + specifier: ^0.21.1 + version: 0.21.4 esbuild: specifier: 0.20.2 version: 0.20.2 @@ -487,7 +433,7 @@ importers: version: 4.11.0 tailwindcss: specifier: ^3.4.1 - version: 3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3)) + version: 3.4.7 tsx: specifier: ^4.7.0 version: 4.16.2 @@ -519,8 +465,8 @@ importers: specifier: ^16.3.1 version: 16.4.5 drizzle-orm: - specifier: ^0.39.1 - version: 0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + specifier: ^0.30.8 + version: 0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0) hono: specifier: ^4.5.8 version: 4.5.8 @@ -561,9 +507,27 @@ importers: packages/server: dependencies: - '@better-auth/utils': - specifier: 0.2.3 - version: 0.2.3 + '@ai-sdk/anthropic': + specifier: ^1.0.6 + version: 1.0.8(zod@3.23.8) + '@ai-sdk/azure': + specifier: ^1.0.15 + version: 1.0.18(zod@3.23.8) + '@ai-sdk/cohere': + specifier: ^1.0.6 + version: 1.0.8(zod@3.23.8) + '@ai-sdk/deepinfra': + specifier: ^0.0.4 + version: 0.0.4(zod@3.23.8) + '@ai-sdk/mistral': + specifier: ^1.0.6 + version: 1.0.8(zod@3.23.8) + '@ai-sdk/openai': + specifier: ^1.0.12 + version: 1.0.16(zod@3.23.8) + '@ai-sdk/openai-compatible': + specifier: ^0.0.13 + version: 0.0.13(zod@3.23.8) '@faker-js/faker': specifier: ^8.4.1 version: 8.4.1 @@ -573,12 +537,6 @@ importers: '@octokit/auth-app': specifier: ^6.0.4 version: 6.1.1 - '@oslojs/crypto': - specifier: 1.0.1 - version: 1.0.1 - '@oslojs/encoding': - specifier: 1.1.0 - version: 1.1.0 '@react-email/components': specifier: ^0.0.21 version: 0.0.21(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -593,10 +551,7 @@ importers: version: 4.0.31(react@18.2.0)(zod@3.23.8) bcrypt: specifier: 5.1.1 - version: 5.1.1(encoding@0.1.13) - better-auth: - specifier: 1.2.0 - version: 1.2.0(typescript@5.5.3) + version: 5.1.1 bl: specifier: 6.0.11 version: 6.0.11 @@ -612,15 +567,12 @@ importers: dotenv: specifier: 16.4.5 version: 16.4.5 - drizzle-dbml-generator: - specifier: 0.10.0 - version: 0.10.0(drizzle-orm@0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7)) drizzle-orm: - specifier: ^0.39.1 - version: 0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + specifier: ^0.30.8 + version: 0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0) drizzle-zod: specifier: 0.5.1 - version: 0.5.1(drizzle-orm@0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8) + version: 0.5.1(drizzle-orm@0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0))(zod@3.23.8) hi-base32: specifier: ^0.5.1 version: 0.5.1 @@ -731,8 +683,8 @@ importers: specifier: 8.5.10 version: 8.5.10 drizzle-kit: - specifier: ^0.30.4 - version: 0.30.4 + specifier: ^0.21.1 + version: 0.21.4 esbuild: specifier: 0.20.2 version: 0.20.2 @@ -744,7 +696,7 @@ importers: version: 8.4.40 tailwindcss: specifier: ^3.4.1 - version: 3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3)) + version: 3.4.7 tsc-alias: specifier: 1.8.10 version: 1.8.10 @@ -873,12 +825,6 @@ packages: '@balena/dockerignore@1.0.2': resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - '@better-auth/utils@0.2.3': - resolution: {integrity: sha512-Ap1GaSmo6JYhJhxJOpUB0HobkKPTNzfta+bLV89HfpyCAHN7p8ntCrmNFHNAVD0F6v0mywFVEUg1FUhNCc81Rw==} - - '@better-fetch/fetch@1.1.15': - resolution: {integrity: sha512-0Bl8YYj1f8qCTNHeSn5+1DWv2hy7rLBrQ8rS8Y9XYloiwZEfc3k4yspIG0llRxafxqhGCwlGRg+F8q1HZRCMXA==} - '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} engines: {node: '>=14.21.3'} @@ -1042,19 +988,12 @@ packages: resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} engines: {node: '>=v18'} - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@dokploy/trpc-openapi@0.0.4': resolution: {integrity: sha512-a7VKunKu9arq57bP9MPH7ikJuKfT5SILnNy70vMqf1stm5IrqMG3Y7CIFprFe0DZiw3bwjue0KpETIATBftN6w==} peerDependencies: '@trpc/server': ^10.0.0 zod: ^3.14.4 - '@drizzle-team/brocli@0.10.2': - resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@emnapi/core@0.45.0': resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==} @@ -1643,15 +1582,9 @@ packages: '@floating-ui/utils@0.2.5': resolution: {integrity: sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==} - '@gar/promisify@1.1.3': - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@hapi/bourne@3.0.0': resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} - '@hexagon/base64@1.1.28': - resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} - '@hono/node-server@1.12.1': resolution: {integrity: sha512-C9l+08O8xtXB7Ppmy8DjBFH1hYji7JKzsU32Yt1poIIbdPp6S7aOI8IldDHD9YFJ55lv2c21ovNrmxatlHfhAg==} engines: {node: '>=18.14.1'} @@ -1804,9 +1737,6 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -1831,9 +1761,6 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@levischuck/tiny-cbor@0.2.11': - resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==} - '@lezer/common@1.2.1': resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} @@ -1944,17 +1871,10 @@ packages: cpu: [x64] os: [win32] - '@noble/ciphers@0.6.0': - resolution: {integrity: sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==} - '@noble/hashes@1.5.0': resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} - '@noble/hashes@1.7.1': - resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} - engines: {node: ^14.21.3 || >=16} - '@node-rs/argon2-android-arm-eabi@1.7.0': resolution: {integrity: sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==} engines: {node: '>= 10'} @@ -2141,14 +2061,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/fs@1.1.1': - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} - - '@npmcli/move-file@1.1.2': - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs - '@octokit/app@14.1.0': resolution: {integrity: sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==} engines: {node: '>= 18'} @@ -2280,32 +2192,9 @@ packages: '@one-ini/wasm@0.1.1': resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} - '@oslojs/asn1@1.0.0': - resolution: {integrity: sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA==} - - '@oslojs/binary@1.0.0': - resolution: {integrity: sha512-9RCU6OwXU6p67H4NODbuxv2S3eenuQ4/WFLrsq+K/k682xrznH5EVWA7N4VFk9VYVcbFtKqur5YQQZc0ySGhsQ==} - - '@oslojs/crypto@1.0.1': - resolution: {integrity: sha512-7n08G8nWjAr/Yu3vu9zzrd0L9XnrJfpMioQcvCMxBIiF5orECHe5/3J0jmXRVvgfqMm/+4oxlQ+Sq39COYLcNQ==} - - '@oslojs/encoding@1.1.0': - resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} - - '@peculiar/asn1-android@2.3.15': - resolution: {integrity: sha512-8U2TIj59cRlSXTX2d0mzUKP7whfWGFMzTeC3qPgAbccXFrPNZLaDhpNEdG5U2QZ/tBv/IHlCJ8s+KYXpJeop6w==} - - '@peculiar/asn1-ecc@2.3.15': - resolution: {integrity: sha512-/HtR91dvgog7z/WhCVdxZJ/jitJuIu8iTqiyWVgRE9Ac5imt2sT/E4obqIVGKQw7PIy+X6i8lVBoT6wC73XUgA==} - - '@peculiar/asn1-rsa@2.3.15': - resolution: {integrity: sha512-p6hsanvPhexRtYSOHihLvUUgrJ8y0FtOM97N5UEpC+VifFYyZa0iZ5cXjTkZoDwxJ/TTJ1IJo3HVTB2JJTpXvg==} - - '@peculiar/asn1-schema@2.3.15': - resolution: {integrity: sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==} - - '@peculiar/asn1-x509@2.3.15': - resolution: {integrity: sha512-0dK5xqTqSLaxv1FHXIcd4Q/BZNuopg+u1l23hT9rOmQ1g4dNtw0g/RnEi+TboB0gOwGtrWn269v27cMgchFIIg==} + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -3318,13 +3207,6 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@simplewebauthn/browser@13.1.0': - resolution: {integrity: sha512-WuHZ/PYvyPJ9nxSzgHtOEjogBhwJfC8xzYkPC+rR/+8chl/ft4ngjiK8kSU5HtRJfczupyOh33b25TjYbvwAcg==} - - '@simplewebauthn/server@13.1.1': - resolution: {integrity: sha512-1hsLpRHfSuMB9ee2aAdh0Htza/X3f4djhYISrggqGe3xopNjOcePiSDkDDoPzDYaaMCrbqGP1H2TYU7bgL9PmA==} - engines: {node: '>=20.0.0'} - '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -3471,10 +3353,6 @@ packages: resolution: {integrity: sha512-IqREj9ADoml9zCAouIG/5kCGoyIxPFdqdyoxis9FisXFi5vT+iYfEfLosq4xkU/iDbMcEuAj+X8dWRLvKYDNoQ==} engines: {node: '>=12'} - '@tootallnate/once@1.1.2': - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - '@trpc/client@10.45.2': resolution: {integrity: sha512-ykALM5kYWTLn1zYuUOZ2cPWlVfrXhc18HzBDyRhoPYN0jey4iQHEFSEowfnhg1RvYnrAVjNBgHNeSAXjrDbGwg==} peerDependencies: @@ -3503,18 +3381,6 @@ packages: '@trpc/server@10.45.2': resolution: {integrity: sha512-wOrSThNNE4HUnuhJG6PfDRp4L2009KDVxsd+2VYH8ro6o/7/jwYZ8Uu5j+VaW+mOmc8EHerHzGcdbGNQSAUPgg==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tybys/wasm-util@0.8.3': resolution: {integrity: sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q==} @@ -3798,11 +3664,6 @@ packages: peerDependencies: '@xterm/xterm': ^5.0.0 - '@xterm/addon-clipboard@0.1.0': - resolution: {integrity: sha512-zdoM7p53T5sv/HbRTyp4hY0kKmEQ3MZvAvEtiXqNIHc/JdpqwByCtsTaQF5DX2n4hYdXRPO4P/eOS0QEhX1nPw==} - peerDependencies: - '@xterm/xterm': ^5.4.0 - '@xterm/xterm@5.5.0': resolution: {integrity: sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==} @@ -3853,10 +3714,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -3950,14 +3807,6 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. - are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -3981,10 +3830,6 @@ packages: asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} - engines: {node: '>=12.0.0'} - assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -4030,19 +3875,10 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - better-auth@1.2.0: - resolution: {integrity: sha512-eIRGOXfix25bh4fgs8jslZAZssufpIkxfEeEokQu5G4wICoDee1wPctkFb8v80PvhtI4dPm28SuAoZaAdRc6Wg==} - - better-call@1.0.3: - resolution: {integrity: sha512-DUKImKoDIy5UtCvQbHTg0wuBRse6gu1Yvznn7+1B3I5TeY8sclRPFce0HI+4WF2bcb+9PqmkET8nXZubrHQh9A==} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4105,10 +3941,6 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} - cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -4212,6 +4044,10 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-color@2.0.4: + resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} + engines: {node: '>=0.10'} + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4394,9 +4230,6 @@ packages: resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} engines: {node: '>=10.0.0'} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} @@ -4477,6 +4310,10 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + dargs@8.1.0: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} @@ -4591,9 +4428,8 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} @@ -4652,29 +4488,25 @@ packages: resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==} engines: {node: '>=4'} - drizzle-dbml-generator@0.10.0: - resolution: {integrity: sha512-cMZq9E3U3RlmE0uBeXyc6oWJ0royOkC6HiTlc9LDeMe+W87poZTzKoNYUyAxZrs4Q1RQtob+cGKiefV4ZoI8HA==} - peerDependencies: - drizzle-orm: '>=0.36.0' + dreamopt@0.8.0: + resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} + engines: {node: '>=0.4.0'} - drizzle-kit@0.30.4: - resolution: {integrity: sha512-B2oJN5UkvwwNHscPWXDG5KqAixu7AUzZ3qbe++KU9SsQ+cZWR4DXEPYcvWplyFAno0dhRJECNEhNxiDmFaPGyQ==} + drizzle-kit@0.21.4: + resolution: {integrity: sha512-Nxcc1ONJLRgbhmR+azxjNF9Ly9privNLEIgW53c92whb4xp8jZLH1kMCh/54ci1mTMuYxPdOukqLwJ8wRudNwA==} hasBin: true - drizzle-orm@0.39.1: - resolution: {integrity: sha512-2bDHlzTY31IDmrYn8i+ZZrxK8IyBD4mPZ7JmZdVDQj2tpBZXs/gxB/1kK5pSvkjxPUMNOVsTnoGkSltgjuJwcA==} + drizzle-orm@0.30.10: + resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' - '@cloudflare/workers-types': '>=4' - '@electric-sql/pglite': '>=0.2.0' - '@libsql/client': '>=0.10.0' - '@libsql/client-wasm': '>=0.10.0' - '@neondatabase/serverless': '>=0.10.0' + '@cloudflare/workers-types': '>=3' + '@electric-sql/pglite': '>=0.1.1' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' '@op-engineering/op-sqlite': '>=2' '@opentelemetry/api': ^1.4.1 '@planetscale/database': '>=1' - '@prisma/client': '*' - '@tidbcloud/serverless': '*' '@types/better-sqlite3': '*' '@types/pg': '*' '@types/react': 18.3.5 @@ -4683,13 +4515,12 @@ packages: '@xata.io/client': '*' better-sqlite3: '>=7' bun-types: '*' - expo-sqlite: '>=14.0.0' + expo-sqlite: '>=13.2.0' knex: '*' kysely: '*' mysql2: '>=2' pg: '>=8' postgres: '>=3' - prisma: '*' react: '>=18' sql.js: '>=1' sqlite3: '>=5' @@ -4702,8 +4533,6 @@ packages: optional: true '@libsql/client': optional: true - '@libsql/client-wasm': - optional: true '@neondatabase/serverless': optional: true '@op-engineering/op-sqlite': @@ -4712,10 +4541,6 @@ packages: optional: true '@planetscale/database': optional: true - '@prisma/client': - optional: true - '@tidbcloud/serverless': - optional: true '@types/better-sqlite3': optional: true '@types/pg': @@ -4744,8 +4569,6 @@ packages: optional: true postgres: optional: true - prisma: - optional: true react: optional: true sql.js: @@ -4782,9 +4605,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -4800,13 +4620,14 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -4821,6 +4642,20 @@ packages: es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + es6-weak-map@2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + esbuild-plugin-alias@0.2.1: resolution: {integrity: sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==} @@ -4868,6 +4703,10 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -4886,6 +4725,9 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -4912,6 +4754,12 @@ packages: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fancy-ansi@0.1.3: resolution: {integrity: sha512-tRQVTo5jjdSIiydqgzIIEZpKddzSsfGLsSVt6vWdjVm7fbvDTiQkyoPu6Z3dIPlAM4OZk0jP5jmTCX4G8WGgBw==} @@ -4954,9 +4802,6 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -5027,11 +4872,6 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. - gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - generic-pool@3.9.0: resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} engines: {node: '>= 4'} @@ -5093,6 +4933,11 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} @@ -5121,6 +4966,9 @@ packages: h3@1.12.0: resolution: {integrity: sha512-Zi/CcNeWBXDrFNlV0hUBJQR9F7a96RjMeAZweW/ZWkR9fuXrMcvKnSA63f/zZ9l0GgQOZDVHGvXivNN9PWOwhA==} + hanji@0.0.5: + resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5159,6 +5007,9 @@ packages: hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} @@ -5195,10 +5046,6 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -5211,9 +5058,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - hyperdyperid@1.2.0: resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} engines: {node: '>=10.18'} @@ -5231,10 +5075,6 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5253,10 +5093,6 @@ packages: import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -5265,9 +5101,6 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} - infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - inflation@2.1.0: resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} engines: {node: '>= 0.8.0'} @@ -5306,10 +5139,6 @@ packages: resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==} engines: {node: '>=12.22.0'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} - ip-regex@5.0.0: resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5382,9 +5211,6 @@ packages: resolution: {integrity: sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5393,6 +5219,13 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5419,16 +5252,10 @@ packages: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - jose@5.9.6: - resolution: {integrity: sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==} - joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} @@ -5451,12 +5278,13 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-diff@0.9.0: + resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} + hasBin: true + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5533,10 +5361,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kysely@0.27.5: - resolution: {integrity: sha512-s7hZHcQeSNKpzCkHRm8yA+0JPLjncSWnjb+2TIElwS2JAqYr+Kv3Ess+9KFfJS0C1xcQ1i9NkNHpWwCYpHMWsA==} - engines: {node: '>=14.0.0'} - leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} @@ -5684,6 +5508,9 @@ packages: lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -5720,9 +5547,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-queue@0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} lucia@3.2.0: resolution: {integrity: sha512-eXMxXwk6hqtjRTj4W/x3EnTUtAztLPm0p2N2TEBMDEbakDLXiYnDQ9z/qahjPdPdhPguQc+vwO0/88zIWxlpuw==} @@ -5743,13 +5569,6 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} - marked@7.0.4: resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} engines: {node: '>= 16'} @@ -5799,6 +5618,10 @@ packages: resolution: {integrity: sha512-+6kz90/YQoZuHvg3rn1CGPMZfEMaU5xe7xIavZMNiom2RNesiI8S37p9O9n+PlIUnUgretjLdM6HnqpZYl3X2g==} engines: {node: '>= 4.0.0'} + memoizee@0.4.17: + resolution: {integrity: sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==} + engines: {node: '>=0.12'} + meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -5925,6 +5748,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@7.4.6: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} @@ -5940,26 +5767,6 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -6015,9 +5822,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanostores@0.11.3: - resolution: {integrity: sha512-TUes3xKIX33re4QzdxwZ6tdbodjmn3tWXCEc1uokiEmo14sI1EaGYNs2k3bU2pyyGNmBqFGAVl6jAGWd06AVIg==} - engines: {node: ^18.0.0 || >=20.0.0} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} @@ -6049,6 +5857,9 @@ packages: react: '*' react-dom: '*' + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + next@15.0.1: resolution: {integrity: sha512-PSkFkr/w7UnFWm+EP8y/QpHrJXMqpZzAXpergB/EqLPOh4SGPJXv1wj4mslr2hUZBAS9pX7/9YLIdxTv6fwytw==} engines: {node: '>=18.18.0'} @@ -6080,9 +5891,6 @@ packages: node-addon-api@5.1.0: resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -6107,11 +5915,6 @@ packages: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true - node-gyp@8.4.1: - resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} - engines: {node: '>= 10.12.0'} - hasBin: true - node-mocks-http@1.15.0: resolution: {integrity: sha512-3orGBAxXrnwz3ixU8AZpa0x8srAvVSHvbWanAqd5F0zVCVA2QstxaVcTSarFcjz4+pFSnR1zm28MsV83s/BtmA==} engines: {node: '>=14'} @@ -6163,11 +5966,6 @@ packages: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. - npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This package is no longer supported. - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -6252,10 +6050,6 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -6453,18 +6247,6 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -6491,13 +6273,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pvtsutils@1.3.6: - resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} - - pvutils@1.1.3: - resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} - engines: {node: '>=6.0.0'} - qrcode@1.5.4: resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} engines: {node: '>=10.13.0'} @@ -6566,12 +6341,6 @@ packages: peerDependencies: react: ^15.3.0 || 16 || 17 || 18 - react-day-picker@8.10.1: - resolution: {integrity: sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==} - peerDependencies: - date-fns: ^2.28.0 || ^3.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-debounce-input@3.3.0: resolution: {integrity: sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==} peerDependencies: @@ -6830,10 +6599,6 @@ packages: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6855,9 +6620,6 @@ packages: resolution: {integrity: sha512-cfmm3tqdnbuYw2FBmRTPBDaohYEbMJ3211T35o6eZdr4d7v69+ZeK1Av84Br7FLj2dlzyeZSbN6qTuXXE6dawQ==} engines: {node: '>=14.0'} - rou3@0.5.1: - resolution: {integrity: sha512-OXMmJ3zRk2xeXFGfA3K+EOPHC5u7RDFG7lIOx0X1pdnhUkI8MdVrbV+sNsD80ElpUZ+MRHdyxPnFthq9VHs8uQ==} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -6915,9 +6677,6 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-cookie-parser@2.7.1: - resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -6971,6 +6730,9 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -6991,18 +6753,6 @@ packages: resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} engines: {node: '>=8.0.0'} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} - - socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sonic-boom@4.1.0: resolution: {integrity: sha512-NGipjjRicyJJ03rPiZCJYjwlsuP2d1/5QUviozRXC7S3WdVWNK5e3Ojieb9CCyfhq2UC+3+SRd9nG3I2lPRvUw==} @@ -7042,20 +6792,10 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - - sqlite3@5.1.7: - resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==} - ssh2@1.15.0: resolution: {integrity: sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==} engines: {node: '>=10.16.0'} - ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -7262,6 +7002,10 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + timers-ext@0.1.8: + resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==} + engines: {node: '>=0.12'} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -7320,20 +7064,6 @@ packages: ts-mixer@6.0.4: resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - ts-toolbelt@9.6.0: resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} @@ -7354,9 +7084,6 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.16.2: resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==} engines: {node: '>=18.0.0'} @@ -7384,6 +7111,9 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + types-ramda@0.30.1: resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} @@ -7392,11 +7122,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} - engines: {node: '>=14.17'} - hasBin: true - ufo@1.5.4: resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} @@ -7417,11 +7142,23 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} universal-github-app-jwt@1.1.2: resolution: {integrity: sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA==} @@ -7491,16 +7228,11 @@ packages: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - valibot@1.0.0-beta.15: - resolution: {integrity: sha512-BKy8XosZkDHWmYC+cJG74LBzP++Gfntwi33pP3D3RKztz2XV9jmFWnkOi21GoqARP8wAWARwhV6eTr1JcWzjGw==} - peerDependencies: - typescript: '>=5' - peerDependenciesMeta: - typescript: - optional: true + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} @@ -7629,6 +7361,9 @@ packages: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -7711,10 +7446,6 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@1.1.1: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} @@ -7740,8 +7471,8 @@ packages: zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} snapshots: @@ -7860,12 +7591,6 @@ snapshots: '@balena/dockerignore@1.0.2': {} - '@better-auth/utils@0.2.3': - dependencies: - uncrypto: 0.1.3 - - '@better-fetch/fetch@1.1.15': {} - '@biomejs/biome@1.9.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 1.9.4 @@ -7973,11 +7698,11 @@ snapshots: style-mod: 4.1.2 w3c-keyname: 2.2.8 - '@commitlint/cli@19.3.0(@types/node@18.19.42)(typescript@5.7.2)': + '@commitlint/cli@19.3.0(@types/node@18.19.42)(typescript@5.5.3)': dependencies: '@commitlint/format': 19.3.0 '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.2.0(@types/node@18.19.42)(typescript@5.7.2) + '@commitlint/load': 19.2.0(@types/node@18.19.42)(typescript@5.5.3) '@commitlint/read': 19.2.1 '@commitlint/types': 19.0.3 execa: 8.0.1 @@ -8024,15 +7749,15 @@ snapshots: '@commitlint/rules': 19.0.3 '@commitlint/types': 19.0.3 - '@commitlint/load@19.2.0(@types/node@18.19.42)(typescript@5.7.2)': + '@commitlint/load@19.2.0(@types/node@18.19.42)(typescript@5.5.3)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 '@commitlint/resolve-extends': 19.1.0 '@commitlint/types': 19.0.3 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.7.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.42)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.5.3) + cosmiconfig-typescript-loader: 5.0.0(@types/node@18.19.42)(cosmiconfig@9.0.0(typescript@5.5.3))(typescript@5.5.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -8084,11 +7809,6 @@ snapshots: '@types/conventional-commits-parser': 5.0.0 chalk: 5.3.0 - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - optional: true - '@dokploy/trpc-openapi@0.0.4(@trpc/server@10.45.2)(zod@3.23.8)': dependencies: '@trpc/server': 10.45.2 @@ -8102,8 +7822,6 @@ snapshots: transitivePeerDependencies: - uWebSockets.js - '@drizzle-team/brocli@0.10.2': {} - '@emnapi/core@0.45.0': dependencies: tslib: 2.6.3 @@ -8427,13 +8145,8 @@ snapshots: '@floating-ui/utils@0.2.5': {} - '@gar/promisify@1.1.3': - optional: true - '@hapi/bourne@3.0.0': {} - '@hexagon/base64@1.1.28': {} - '@hono/node-server@1.12.1': {} '@hono/zod-validator@0.3.0(hono@4.5.8)(zod@3.23.8)': @@ -8557,12 +8270,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - optional: true - '@jsonjoy.com/base64@1.1.2(tslib@2.6.3)': dependencies: tslib: 2.6.3 @@ -8583,8 +8290,6 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@levischuck/tiny-cbor@0.2.11': {} - '@lezer/common@1.2.1': {} '@lezer/highlight@1.2.0': @@ -8611,12 +8316,12 @@ snapshots: dependencies: lucia: 3.2.0 - '@mapbox/node-pre-gyp@1.0.11(encoding@0.1.13)': + '@mapbox/node-pre-gyp@1.0.11': dependencies: detect-libc: 2.0.3 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.7.0(encoding@0.1.13) + node-fetch: 2.7.0 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -8675,12 +8380,8 @@ snapshots: '@next/swc-win32-x64-msvc@15.0.1': optional: true - '@noble/ciphers@0.6.0': {} - '@noble/hashes@1.5.0': {} - '@noble/hashes@1.7.1': {} - '@node-rs/argon2-android-arm-eabi@1.7.0': optional: true @@ -8821,18 +8522,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@npmcli/fs@1.1.1': - dependencies: - '@gar/promisify': 1.1.3 - semver: 7.6.3 - optional: true - - '@npmcli/move-file@1.1.2': - dependencies: - mkdirp: 1.0.4 - rimraf: 3.0.2 - optional: true - '@octokit/app@14.1.0': dependencies: '@octokit/auth-app': 6.1.1 @@ -9009,51 +8698,7 @@ snapshots: '@one-ini/wasm@0.1.1': {} - '@oslojs/asn1@1.0.0': - dependencies: - '@oslojs/binary': 1.0.0 - - '@oslojs/binary@1.0.0': {} - - '@oslojs/crypto@1.0.1': - dependencies: - '@oslojs/asn1': 1.0.0 - '@oslojs/binary': 1.0.0 - - '@oslojs/encoding@1.1.0': {} - - '@peculiar/asn1-android@2.3.15': - dependencies: - '@peculiar/asn1-schema': 2.3.15 - asn1js: 3.0.5 - tslib: 2.8.1 - - '@peculiar/asn1-ecc@2.3.15': - dependencies: - '@peculiar/asn1-schema': 2.3.15 - '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 - tslib: 2.8.1 - - '@peculiar/asn1-rsa@2.3.15': - dependencies: - '@peculiar/asn1-schema': 2.3.15 - '@peculiar/asn1-x509': 2.3.15 - asn1js: 3.0.5 - tslib: 2.8.1 - - '@peculiar/asn1-schema@2.3.15': - dependencies: - asn1js: 3.0.5 - pvtsutils: 1.3.6 - tslib: 2.8.1 - - '@peculiar/asn1-x509@2.3.15': - dependencies: - '@peculiar/asn1-schema': 2.3.15 - asn1js: 3.0.5 - pvtsutils: 1.3.6 - tslib: 2.8.1 + '@opentelemetry/api@1.9.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -10048,18 +9693,6 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@simplewebauthn/browser@13.1.0': {} - - '@simplewebauthn/server@13.1.1': - dependencies: - '@hexagon/base64': 1.1.28 - '@levischuck/tiny-cbor': 0.2.11 - '@peculiar/asn1-android': 2.3.15 - '@peculiar/asn1-ecc': 2.3.15 - '@peculiar/asn1-rsa': 2.3.15 - '@peculiar/asn1-schema': 2.3.15 - '@peculiar/asn1-x509': 2.3.15 - '@sinclair/typebox@0.27.8': {} '@sindresorhus/is@5.6.0': {} @@ -10441,9 +10074,6 @@ snapshots: '@tanstack/table-core@8.19.3': {} - '@tootallnate/once@1.1.2': - optional: true - '@trpc/client@10.45.2(@trpc/server@10.45.2)': dependencies: '@trpc/server': 10.45.2 @@ -10468,18 +10098,6 @@ snapshots: '@trpc/server@10.45.2': {} - '@tsconfig/node10@1.0.11': - optional: true - - '@tsconfig/node12@1.0.11': - optional: true - - '@tsconfig/node14@1.0.3': - optional: true - - '@tsconfig/node16@1.0.4': - optional: true - '@tybys/wasm-util@0.8.3': dependencies: tslib: 2.6.3 @@ -10844,11 +10462,6 @@ snapshots: dependencies: '@xterm/xterm': 5.5.0 - '@xterm/addon-clipboard@0.1.0(@xterm/xterm@5.5.0)': - dependencies: - '@xterm/xterm': 5.5.0 - js-base64: 3.7.7 - '@xterm/xterm@5.5.0': {} '@xtuc/ieee754@1.2.0': {} @@ -10891,11 +10504,6 @@ snapshots: transitivePeerDependencies: - supports-color - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 - optional: true - aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -10986,15 +10594,6 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 - are-we-there-yet@3.0.1: - dependencies: - delegates: 1.0.0 - readable-stream: 3.6.2 - optional: true - - arg@4.1.3: - optional: true - arg@5.0.2: {} argparse@1.0.10: @@ -11015,12 +10614,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - asn1js@3.0.5: - dependencies: - pvtsutils: 1.3.6 - pvutils: 1.1.3 - tslib: 2.8.1 - assertion-error@1.1.0: {} async-await-queue@2.1.4: {} @@ -11061,9 +10654,9 @@ snapshots: dependencies: tweetnacl: 0.14.5 - bcrypt@5.1.1(encoding@0.1.13): + bcrypt@5.1.1: dependencies: - '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) + '@mapbox/node-pre-gyp': 1.0.11 node-addon-api: 5.1.0 transitivePeerDependencies: - encoding @@ -11071,38 +10664,8 @@ snapshots: before-after-hook@2.2.3: {} - better-auth@1.2.0(typescript@5.5.3): - dependencies: - '@better-auth/utils': 0.2.3 - '@better-fetch/fetch': 1.1.15 - '@noble/ciphers': 0.6.0 - '@noble/hashes': 1.7.1 - '@simplewebauthn/browser': 13.1.0 - '@simplewebauthn/server': 13.1.1 - better-call: 1.0.3 - defu: 6.1.4 - jose: 5.9.6 - kysely: 0.27.5 - nanostores: 0.11.3 - valibot: 1.0.0-beta.15(typescript@5.5.3) - zod: 3.24.1 - transitivePeerDependencies: - - typescript - - better-call@1.0.3: - dependencies: - '@better-fetch/fetch': 1.1.15 - rou3: 0.5.1 - set-cookie-parser: 2.7.1 - uncrypto: 0.1.3 - binary-extensions@2.3.0: {} - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - optional: true - bl@4.1.0: dependencies: buffer: 5.7.1 @@ -11189,30 +10752,6 @@ snapshots: cac@6.7.14: {} - cacache@15.3.0: - dependencies: - '@npmcli/fs': 1.1.1 - '@npmcli/move-file': 1.1.2 - chownr: 2.0.0 - fs-minipass: 2.1.0 - glob: 7.2.3 - infer-owner: 1.0.4 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - mkdirp: 1.0.4 - p-map: 4.0.0 - promise-inflight: 1.0.1 - rimraf: 3.0.2 - ssri: 8.0.1 - tar: 6.2.1 - unique-filename: 1.1.1 - transitivePeerDependencies: - - bluebird - optional: true - cacheable-lookup@7.0.0: {} cacheable-request@10.2.14: @@ -11313,6 +10852,14 @@ snapshots: cli-boxes@3.0.0: {} + cli-color@2.0.4: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + memoizee: 0.4.17 + timers-ext: 0.1.8 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -11479,21 +11026,21 @@ snapshots: core-js@3.39.0: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.42)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + cosmiconfig-typescript-loader@5.0.0(@types/node@18.19.42)(cosmiconfig@9.0.0(typescript@5.5.3))(typescript@5.5.3): dependencies: '@types/node': 18.19.42 - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.5.3) jiti: 1.21.6 - typescript: 5.7.2 + typescript: 5.5.3 - cosmiconfig@9.0.0(typescript@5.7.2): + cosmiconfig@9.0.0(typescript@5.5.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.5.3 cpu-features@0.0.10: dependencies: @@ -11501,9 +11048,6 @@ snapshots: nan: 2.20.0 optional: true - create-require@1.1.1: - optional: true - crelt@1.0.6: {} cron-parser@4.9.0: @@ -11573,6 +11117,11 @@ snapshots: d3-timer@3.0.1: {} + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + dargs@8.1.0: {} date-fns@3.6.0: {} @@ -11647,8 +11196,9 @@ snapshots: diff-sequences@29.6.3: {} - diff@4.0.2: - optional: true + difflib@0.2.4: + dependencies: + heap: 0.2.7 dijkstrajs@1.0.3: {} @@ -11716,31 +11266,34 @@ snapshots: drange@1.1.1: {} - drizzle-dbml-generator@0.10.0(drizzle-orm@0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7)): + dreamopt@0.8.0: dependencies: - drizzle-orm: 0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + wordwrap: 1.0.0 - drizzle-kit@0.30.4: + drizzle-kit@0.21.4: dependencies: - '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 + commander: 9.5.0 + env-paths: 3.0.0 esbuild: 0.19.12 esbuild-register: 3.6.0(esbuild@0.19.12) + glob: 8.1.0 + hanji: 0.0.5 + json-diff: 0.9.0 + zod: 3.23.8 transitivePeerDependencies: - supports-color - drizzle-orm@0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7): + drizzle-orm@0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0): optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/react': 18.3.5 - kysely: 0.27.5 postgres: 3.4.4 react: 18.2.0 - sqlite3: 5.1.7 - drizzle-zod@0.5.1(drizzle-orm@0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7))(zod@3.23.8): + drizzle-zod@0.5.1(drizzle-orm@0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0))(zod@3.23.8): dependencies: - drizzle-orm: 0.39.1(@types/react@18.3.5)(kysely@0.27.5)(postgres@3.4.4)(react@18.2.0)(sqlite3@5.1.7) + drizzle-orm: 0.30.10(@opentelemetry/api@1.9.0)(@types/react@18.3.5)(postgres@3.4.4)(react@18.2.0) zod: 3.23.8 eastasianwidth@0.2.0: {} @@ -11764,11 +11317,6 @@ snapshots: emoji-regex@9.2.2: {} - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -11782,10 +11330,9 @@ snapshots: env-paths@2.2.1: {} - environment@1.1.0: {} + env-paths@3.0.0: {} - err-code@2.0.3: - optional: true + environment@1.1.0: {} error-ex@1.3.2: dependencies: @@ -11799,6 +11346,31 @@ snapshots: es-module-lexer@1.5.4: {} + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + + es6-weak-map@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esbuild-plugin-alias@0.2.1: {} esbuild-register@3.6.0(esbuild@0.19.12): @@ -11924,6 +11496,13 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -11938,6 +11517,11 @@ snapshots: dependencies: '@types/estree': 1.0.5 + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-target-shim@5.0.1: {} eventemitter3@4.0.7: {} @@ -11963,6 +11547,12 @@ snapshots: expand-template@2.0.3: optional: true + ext@1.7.0: + dependencies: + type: 2.7.3 + + extend@3.0.2: {} + fancy-ansi@0.1.3: dependencies: escape-html: 1.0.3 @@ -12001,9 +11591,6 @@ snapshots: dependencies: format: 0.2.2 - file-uri-to-path@1.0.0: - optional: true - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -12068,18 +11655,6 @@ snapshots: strip-ansi: 6.0.1 wide-align: 1.1.5 - gauge@4.0.4: - dependencies: - aproba: 2.0.0 - color-support: 1.1.3 - console-control-strings: 1.1.0 - has-unicode: 2.0.1 - signal-exit: 3.0.7 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wide-align: 1.1.5 - optional: true - generic-pool@3.9.0: {} get-caller-file@2.0.5: {} @@ -12143,6 +11718,14 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + global-directory@4.0.1: dependencies: ini: 4.1.1 @@ -12202,6 +11785,11 @@ snapshots: transitivePeerDependencies: - uWebSockets.js + hanji@0.0.5: + dependencies: + lodash.throttle: 4.1.1 + sisteransi: 1.0.5 + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -12254,6 +11842,8 @@ snapshots: property-information: 5.6.0 space-separated-tokens: 1.1.5 + heap@0.2.7: {} + help-me@5.0.0: {} hi-base32@0.5.1: {} @@ -12297,15 +11887,6 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@4.0.1: - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - optional: true - http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -12320,11 +11901,6 @@ snapshots: human-signals@5.0.0: {} - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - optional: true - hyperdyperid@1.2.0: {} hyphenate-style-name@1.1.0: {} @@ -12339,11 +11915,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - optional: true - ieee754@1.2.1: {} ignore@5.3.1: {} @@ -12357,16 +11928,10 @@ snapshots: import-meta-resolve@4.1.0: {} - imurmurhash@0.1.4: - optional: true - indent-string@4.0.0: {} indent-string@5.0.0: {} - infer-owner@1.0.4: - optional: true - inflation@2.1.0: {} inflight@1.0.6: @@ -12407,12 +11972,6 @@ snapshots: transitivePeerDependencies: - supports-color - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 - optional: true - ip-regex@5.0.0: {} iron-webcrypto@1.2.1: {} @@ -12472,13 +12031,14 @@ snapshots: dependencies: ip-regex: 5.0.0 - is-lambda@1.0.1: - optional: true - is-number@7.0.0: {} is-obj@2.0.0: {} + is-plain-obj@4.1.0: {} + + is-promise@2.2.2: {} + is-stream@3.0.0: {} is-text-path@2.0.0: @@ -12503,12 +12063,8 @@ snapshots: jiti@1.21.6: {} - jose@5.9.6: {} - joycon@3.1.1: {} - js-base64@3.7.7: {} - js-beautify@1.15.1: dependencies: config-chain: 1.1.13 @@ -12529,11 +12085,14 @@ snapshots: dependencies: argparse: 2.0.1 - jsbn@1.1.0: - optional: true - json-buffer@3.0.1: {} + json-diff@0.9.0: + dependencies: + cli-color: 2.0.4 + difflib: 0.2.4 + dreamopt: 0.8.0 + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} @@ -12670,8 +12229,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kysely@0.27.5: {} - leac@0.6.0: {} lefthook-darwin-arm64@1.8.4: @@ -12798,6 +12355,8 @@ snapshots: lodash.startcase@4.4.0: {} + lodash.throttle@4.1.1: {} + lodash.uniq@4.5.0: {} lodash.upperfirst@4.3.1: {} @@ -12833,10 +12392,9 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@6.0.0: + lru-queue@0.1.0: dependencies: - yallist: 4.0.0 - optional: true + es5-ext: 0.10.64 lucia@3.2.0: dependencies: @@ -12856,32 +12414,6 @@ snapshots: dependencies: semver: 6.3.1 - make-error@1.3.6: - optional: true - - make-fetch-happen@9.1.0: - dependencies: - agentkeepalive: 4.6.0 - cacache: 15.3.0 - http-cache-semantics: 4.1.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-lambda: 1.0.1 - lru-cache: 6.0.0 - minipass: 3.3.6 - minipass-collect: 1.0.2 - minipass-fetch: 1.4.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 0.6.3 - promise-retry: 2.0.1 - socks-proxy-agent: 6.2.1 - ssri: 8.0.1 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - marked@7.0.4: {} md-to-react-email@5.0.2(react@18.2.0): @@ -12997,6 +12529,17 @@ snapshots: tree-dump: 1.0.2(tslib@2.6.3) tslib: 2.6.3 + memoizee@0.4.17: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.8 + meow@12.1.1: {} merge-descriptors@1.0.3: {} @@ -13171,6 +12714,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@7.4.6: dependencies: brace-expansion: 2.0.1 @@ -13185,35 +12732,6 @@ snapshots: minimist@1.2.8: {} - minipass-collect@1.0.2: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-fetch@1.4.1: - dependencies: - minipass: 3.3.6 - minipass-sized: 1.0.3 - minizlib: 2.1.2 - optionalDependencies: - encoding: 0.1.13 - optional: true - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - optional: true - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - optional: true - minipass@3.3.6: dependencies: yallist: 4.0.0 @@ -13270,7 +12788,7 @@ snapshots: nanoid@3.3.7: {} - nanostores@0.11.3: {} + nanoid@3.3.8: {} napi-build-utils@1.0.2: optional: true @@ -13299,7 +12817,9 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - next@15.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next-tick@1.1.0: {} + + next@15.0.1(@opentelemetry/api@1.9.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@next/env': 15.0.1 '@swc/counter': 0.1.3 @@ -13327,16 +12847,13 @@ snapshots: node-abi@3.68.0: dependencies: - semver: 7.6.3 + semver: 7.6.2 optional: true node-abort-controller@3.1.1: {} node-addon-api@5.1.0: {} - node-addon-api@7.1.1: - optional: true - node-domexception@1.0.0: {} node-fetch-commonjs@3.3.2: @@ -13346,34 +12863,15 @@ snapshots: node-fetch-native@1.6.4: {} - node-fetch@2.7.0(encoding@0.1.13): + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 node-gyp-build-optional-packages@5.2.2: dependencies: detect-libc: 2.0.3 optional: true - node-gyp@8.4.1: - dependencies: - env-paths: 2.2.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - make-fetch-happen: 9.1.0 - nopt: 5.0.0 - npmlog: 6.0.2 - rimraf: 3.0.2 - semver: 7.6.3 - tar: 6.2.1 - which: 2.0.2 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - node-mocks-http@1.15.0: dependencies: '@types/express': 4.17.21 @@ -13430,14 +12928,6 @@ snapshots: gauge: 3.0.2 set-blocking: 2.0.0 - npmlog@6.0.2: - dependencies: - are-we-there-yet: 3.0.1 - console-control-strings: 1.1.0 - gauge: 4.0.4 - set-blocking: 2.0.0 - optional: true - object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -13522,11 +13012,6 @@ snapshots: dependencies: p-limit: 4.0.0 - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - optional: true - p-try@2.2.0: {} package-json-from-dist@1.0.0: {} @@ -13669,13 +13154,12 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.40 - postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3)): + postcss-load-config@4.0.2(postcss@8.4.40): dependencies: lilconfig: 3.1.2 yaml: 2.4.5 optionalDependencies: postcss: 8.4.40 - ts-node: 10.9.2(@types/node@18.19.42)(typescript@5.5.3) postcss-nested@6.2.0(postcss@8.4.40): dependencies: @@ -13738,15 +13222,6 @@ snapshots: process@0.11.10: {} - promise-inflight@1.0.1: - optional: true - - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - optional: true - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -13777,12 +13252,6 @@ snapshots: punycode@2.3.1: {} - pvtsutils@1.3.6: - dependencies: - tslib: 2.8.1 - - pvutils@1.1.3: {} - qrcode@1.5.4: dependencies: dijkstrajs: 1.0.3 @@ -13850,11 +13319,6 @@ snapshots: prop-types: 15.8.1 react: 18.2.0 - react-day-picker@8.10.1(date-fns@3.6.0)(react@18.2.0): - dependencies: - date-fns: 3.6.0 - react: 18.2.0 - react-debounce-input@3.3.0(react@18.2.0): dependencies: lodash.debounce: 4.0.8 @@ -14144,9 +13608,6 @@ snapshots: ret@0.2.2: {} - retry@0.12.0: - optional: true - reusify@1.0.4: {} rfdc@1.4.1: {} @@ -14179,8 +13640,6 @@ snapshots: rotating-file-stream@3.2.3: {} - rou3@0.5.1: {} - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -14233,8 +13692,6 @@ snapshots: set-blocking@2.0.0: {} - set-cookie-parser@2.7.1: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -14316,6 +13773,8 @@ snapshots: is-arrayish: 0.3.2 optional: true + sisteransi@1.0.5: {} + slash@3.0.0: {} slash@5.1.0: {} @@ -14332,24 +13791,6 @@ snapshots: slugify@1.6.6: {} - smart-buffer@4.2.0: - optional: true - - socks-proxy-agent@6.2.1: - dependencies: - agent-base: 6.0.2 - debug: 4.3.7 - socks: 2.8.3 - transitivePeerDependencies: - - supports-color - optional: true - - socks@2.8.3: - dependencies: - ip-address: 9.0.5 - smart-buffer: 4.2.0 - optional: true - sonic-boom@4.1.0: dependencies: atomic-sleep: 1.0.0 @@ -14380,22 +13821,6 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: - optional: true - - sqlite3@5.1.7: - dependencies: - bindings: 1.5.0 - node-addon-api: 7.1.1 - prebuild-install: 7.1.2 - tar: 6.2.1 - optionalDependencies: - node-gyp: 8.4.1 - transitivePeerDependencies: - - bluebird - - supports-color - optional: true - ssh2@1.15.0: dependencies: asn1: 0.2.6 @@ -14404,11 +13829,6 @@ snapshots: cpu-features: 0.0.10 nan: 2.20.0 - ssri@8.0.1: - dependencies: - minipass: 3.3.6 - optional: true - stackback@0.0.2: {} standard-as-callback@2.1.0: {} @@ -14580,11 +14000,11 @@ snapshots: tailwind-merge@2.4.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.7): dependencies: - tailwindcss: 3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3)) + tailwindcss: 3.4.7 - tailwindcss@3.4.7(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3)): + tailwindcss@3.4.7: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -14603,7 +14023,7 @@ snapshots: postcss: 8.4.40 postcss-import: 15.1.0(postcss@8.4.40) postcss-js: 4.0.1(postcss@8.4.40) - postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3)) + postcss-load-config: 4.0.2(postcss@8.4.40) postcss-nested: 6.2.0(postcss@8.4.40) postcss-selector-parser: 6.1.1 resolve: 1.22.8 @@ -14685,6 +14105,11 @@ snapshots: through@2.3.8: {} + timers-ext@0.1.8: + dependencies: + es5-ext: 0.10.64 + next-tick: 1.1.0 + tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} @@ -14733,25 +14158,6 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@types/node@18.19.42)(typescript@5.5.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.42 - acorn: 8.12.1 - acorn-walk: 8.3.3 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.5.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optional: true - ts-toolbelt@9.6.0: {} tsc-alias@1.8.10: @@ -14769,8 +14175,6 @@ snapshots: tslib@2.6.3: {} - tslib@2.8.1: {} - tsx@4.16.2: dependencies: esbuild: 0.21.5 @@ -14796,14 +14200,14 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type@2.7.3: {} + types-ramda@0.30.1: dependencies: ts-toolbelt: 9.6.0 typescript@5.5.3: {} - typescript@5.7.2: {} - ufo@1.5.4: {} uncrypto@0.1.3: {} @@ -14822,15 +14226,38 @@ snapshots: unicorn-magic@0.1.0: {} - unique-filename@1.1.1: + unified@11.0.5: dependencies: - unique-slug: 2.0.2 - optional: true + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 - unique-slug@2.0.2: + unist-util-is@6.0.0: dependencies: - imurmurhash: 0.1.4 - optional: true + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 universal-github-app-jwt@1.1.2: dependencies: @@ -14891,12 +14318,15 @@ snapshots: uuid@9.0.1: {} - v8-compile-cache-lib@3.0.1: - optional: true + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 - valibot@1.0.0-beta.15(typescript@5.5.3): - optionalDependencies: - typescript: 5.5.3 + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 victory-vendor@36.9.2: dependencies: @@ -15059,6 +14489,8 @@ snapshots: dependencies: string-width: 5.1.2 + wordwrap@1.0.0: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -15140,9 +14572,6 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yn@3.1.1: - optional: true - yocto-queue@1.1.1: {} zenscroll@4.0.2: {} @@ -15161,4 +14590,4 @@ snapshots: zod@3.23.8: {} - zod@3.24.1: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2cb911dbc..3ca0730a3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,6 @@ packages: - "apps/dokploy" - "apps/api" - - "apps/monitoring" - "apps/schedules" - "apps/models" - "packages/server"