From 4601e110b1a6aeb1f59dd03d460891a9000673e1 Mon Sep 17 00:00:00 2001 From: TravisDev5x Date: Thu, 11 Jun 2026 18:30:20 -0600 Subject: [PATCH 1/3] chore: migrate database from MySQL to PostgreSQL (Supabase) --- prisma.config.ts | 5 ++- .../migrations/0_init_baseline/migration.sql | 11 ----- .../migration.sql | 2 - .../migration.sql | 11 ----- .../migration.sql | 8 ---- .../20260610195932_add_roles/migration.sql | 37 ---------------- .../migration.sql | 21 ---------- .../migration.sql | 5 --- .../migration.sql | 42 +++++++++++++++++++ prisma/migrations/migration_lock.toml | 2 +- prisma/schema.prisma | 2 +- 11 files changed, 47 insertions(+), 99 deletions(-) delete mode 100644 prisma/migrations/0_init_baseline/migration.sql delete mode 100644 prisma/migrations/20260608014550_add_soft_delete/migration.sql delete mode 100644 prisma/migrations/20260608220059_add_admin_user/migration.sql delete mode 100644 prisma/migrations/20260608230000_add_email_tokens/migration.sql delete mode 100644 prisma/migrations/20260610195932_add_roles/migration.sql delete mode 100644 prisma/migrations/20260611185236_add_user_auth_fields/migration.sql delete mode 100644 prisma/migrations/20260611185358_unify_user_tables/migration.sql create mode 100644 prisma/migrations/20260612002854_init_postgresql/migration.sql diff --git a/prisma.config.ts b/prisma.config.ts index 9a0c26e..8b400a3 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -7,6 +7,7 @@ export default defineConfig({ seed: "npx tsx prisma/seed.ts", }, datasource: { - url: process.env.DATABASE_URL - } + url: process.env.DATABASE_URL!, + directUrl: process.env.DIRECT_URL!, + }, }); \ No newline at end of file diff --git a/prisma/migrations/0_init_baseline/migration.sql b/prisma/migrations/0_init_baseline/migration.sql deleted file mode 100644 index ec9f873..0000000 --- a/prisma/migrations/0_init_baseline/migration.sql +++ /dev/null @@ -1,11 +0,0 @@ --- CreateTable -CREATE TABLE `user` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `nombre` VARCHAR(191) NOT NULL, - `email` VARCHAR(191) NOT NULL, - `creadoEn` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - - UNIQUE INDEX `User_email_key`(`email` ASC), - PRIMARY KEY (`id` ASC) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - diff --git a/prisma/migrations/20260608014550_add_soft_delete/migration.sql b/prisma/migrations/20260608014550_add_soft_delete/migration.sql deleted file mode 100644 index 494697a..0000000 --- a/prisma/migrations/20260608014550_add_soft_delete/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE `user` ADD COLUMN `deletedAt` DATETIME(3) NULL; diff --git a/prisma/migrations/20260608220059_add_admin_user/migration.sql b/prisma/migrations/20260608220059_add_admin_user/migration.sql deleted file mode 100644 index 722ffe4..0000000 --- a/prisma/migrations/20260608220059_add_admin_user/migration.sql +++ /dev/null @@ -1,11 +0,0 @@ --- CreateTable -CREATE TABLE `AdminUser` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `email` VARCHAR(191) NOT NULL, - `password` VARCHAR(191) NOT NULL, - `name` VARCHAR(191) NOT NULL, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - - UNIQUE INDEX `AdminUser_email_key`(`email`), - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/migrations/20260608230000_add_email_tokens/migration.sql b/prisma/migrations/20260608230000_add_email_tokens/migration.sql deleted file mode 100644 index 421f11e..0000000 --- a/prisma/migrations/20260608230000_add_email_tokens/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -ALTER TABLE `AdminUser` - ADD COLUMN `emailVerified` BOOLEAN NOT NULL DEFAULT false, - ADD COLUMN `verifyToken` VARCHAR(191) NULL, - ADD COLUMN `verifyTokenExp` DATETIME(3) NULL, - ADD COLUMN `resetToken` VARCHAR(191) NULL, - ADD COLUMN `resetTokenExp` DATETIME(3) NULL, - ADD UNIQUE INDEX `AdminUser_verifyToken_key`(`verifyToken`), - ADD UNIQUE INDEX `AdminUser_resetToken_key`(`resetToken`); diff --git a/prisma/migrations/20260610195932_add_roles/migration.sql b/prisma/migrations/20260610195932_add_roles/migration.sql deleted file mode 100644 index 3e98210..0000000 --- a/prisma/migrations/20260610195932_add_roles/migration.sql +++ /dev/null @@ -1,37 +0,0 @@ -/* - Warnings: - - - You are about to drop the `user` table. If the table is not empty, all the data it contains will be lost. - -*/ --- AlterTable -ALTER TABLE `AdminUser` ADD COLUMN `roleId` INTEGER NULL; - --- DropTable -DROP TABLE `user`; - --- CreateTable -CREATE TABLE `User` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `nombre` VARCHAR(191) NOT NULL, - `email` VARCHAR(191) NOT NULL, - `creadoEn` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `deletedAt` DATETIME(3) NULL, - - UNIQUE INDEX `User_email_key`(`email`), - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - --- CreateTable -CREATE TABLE `Role` ( - `id` INTEGER NOT NULL AUTO_INCREMENT, - `nombre` VARCHAR(191) NOT NULL, - `descripcion` VARCHAR(191) NULL, - `creadoEn` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - - UNIQUE INDEX `Role_nombre_key`(`nombre`), - PRIMARY KEY (`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - --- AddForeignKey -ALTER TABLE `AdminUser` ADD CONSTRAINT `AdminUser_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/20260611185236_add_user_auth_fields/migration.sql b/prisma/migrations/20260611185236_add_user_auth_fields/migration.sql deleted file mode 100644 index baa53f9..0000000 --- a/prisma/migrations/20260611185236_add_user_auth_fields/migration.sql +++ /dev/null @@ -1,21 +0,0 @@ --- AlterTable -ALTER TABLE `User` DROP COLUMN `creadoEn`, - DROP COLUMN `nombre`, - ADD COLUMN `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - ADD COLUMN `emailVerified` BOOLEAN NOT NULL DEFAULT false, - ADD COLUMN `name` VARCHAR(191) NOT NULL, - ADD COLUMN `password` VARCHAR(191) NULL, - ADD COLUMN `resetToken` VARCHAR(191) NULL, - ADD COLUMN `resetTokenExp` DATETIME(3) NULL, - ADD COLUMN `roleId` INTEGER NULL, - ADD COLUMN `verifyToken` VARCHAR(191) NULL, - ADD COLUMN `verifyTokenExp` DATETIME(3) NULL; - --- CreateIndex -CREATE UNIQUE INDEX `User_verifyToken_key` ON `User`(`verifyToken`); - --- CreateIndex -CREATE UNIQUE INDEX `User_resetToken_key` ON `User`(`resetToken`); - --- AddForeignKey -ALTER TABLE `User` ADD CONSTRAINT `User_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/20260611185358_unify_user_tables/migration.sql b/prisma/migrations/20260611185358_unify_user_tables/migration.sql deleted file mode 100644 index e9e26ab..0000000 --- a/prisma/migrations/20260611185358_unify_user_tables/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- DropForeignKey -ALTER TABLE `AdminUser` DROP FOREIGN KEY `AdminUser_roleId_fkey`; - --- DropTable -DROP TABLE `AdminUser`; diff --git a/prisma/migrations/20260612002854_init_postgresql/migration.sql b/prisma/migrations/20260612002854_init_postgresql/migration.sql new file mode 100644 index 0000000..e0fdb56 --- /dev/null +++ b/prisma/migrations/20260612002854_init_postgresql/migration.sql @@ -0,0 +1,42 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT NOT NULL, + "password" TEXT, + "emailVerified" BOOLEAN NOT NULL DEFAULT false, + "verifyToken" TEXT, + "verifyTokenExp" TIMESTAMP(3), + "resetToken" TEXT, + "resetTokenExp" TIMESTAMP(3), + "roleId" INTEGER, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deletedAt" TIMESTAMP(3), + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Role" ( + "id" SERIAL NOT NULL, + "nombre" TEXT NOT NULL, + "descripcion" TEXT, + "creadoEn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Role_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_verifyToken_key" ON "User"("verifyToken"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_resetToken_key" ON "User"("resetToken"); + +-- CreateIndex +CREATE UNIQUE INDEX "Role_nombre_key" ON "Role"("nombre"); + +-- AddForeignKey +ALTER TABLE "User" ADD CONSTRAINT "User_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index 592fc0b..044d57c 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (e.g., Git) -provider = "mysql" +provider = "postgresql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ac87bd4..5d2adbc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,7 +3,7 @@ generator client { } datasource db { - provider = "mysql" + provider = "postgresql" } model User { From 005b7f4bee6061430310c7682ce3fe6c82756f72 Mon Sep 17 00:00:00 2001 From: TravisDev5x Date: Thu, 11 Jun 2026 18:37:00 -0600 Subject: [PATCH 2/3] chore: migrar lib/prisma.ts y seeds de MariaDB a PostgreSQL (Supabase) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prisma 7 requiere un driver adapter explícito incluso para postgresql, así que se usa @prisma/adapter-pg en lugar de instanciar PrismaClient sin argumentos. Se elimina @prisma/adapter-mariadb y mariadb (sin uso). --- lib/prisma.ts | 7 +- package-lock.json | 259 +++++++++++++++++++++++++++++-------------- package.json | 5 +- prisma/seed-roles.ts | 4 +- prisma/seed.ts | 4 +- 5 files changed, 186 insertions(+), 93 deletions(-) diff --git a/lib/prisma.ts b/lib/prisma.ts index 92dc529..9dd5b0c 100644 --- a/lib/prisma.ts +++ b/lib/prisma.ts @@ -1,9 +1,8 @@ import { PrismaClient } from '@prisma/client' -import { PrismaMariaDb } from '@prisma/adapter-mariadb' +import { PrismaPg } from '@prisma/adapter-pg' const prismaClientSingleton = () => { - const connectionString = process.env.DATABASE_URL as string - const adapter = new PrismaMariaDb(connectionString) + const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) return new PrismaClient({ adapter }) } @@ -16,4 +15,4 @@ const prisma = globalThis.prisma ?? prismaClientSingleton() export default prisma -if (process.env.NODE_ENV !== 'production') globalThis.prisma = prisma \ No newline at end of file +if (process.env.NODE_ENV !== 'production') globalThis.prisma = prisma diff --git a/package-lock.json b/package-lock.json index dabe6af..43c98d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "dependencies": { "@base-ui/react": "^1.5.0", - "@prisma/adapter-mariadb": "^7.8.0", + "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", "@upstash/ratelimit": "^2.0.8", "@upstash/redis": "^1.38.0", @@ -18,11 +18,11 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^1.17.0", - "mariadb": "^3.5.2", "next": "16.2.7", "next-auth": "^5.0.0-beta.31", "next-themes": "^0.4.6", "nodemailer": "^7.0.13", + "pg": "^8.21.0", "react": "19.2.4", "react-dom": "19.2.4", "shadcn": "^4.11.0", @@ -37,6 +37,7 @@ "@types/bcryptjs": "^2.4.6", "@types/node": "^20", "@types/nodemailer": "^8.0.0", + "@types/pg": "^8.20.0", "@types/react": "^19", "@types/react-dom": "^19", "dotenv": "^17.4.2", @@ -1981,65 +1982,18 @@ "url": "https://github.com/sponsors/panva" } }, - "node_modules/@prisma/adapter-mariadb": { + "node_modules/@prisma/adapter-pg": { "version": "7.8.0", - "resolved": "https://registry.npmjs.org/@prisma/adapter-mariadb/-/adapter-mariadb-7.8.0.tgz", - "integrity": "sha512-mWsgcfbUjxB3qSzRlLs8E03vsKrqXzYK2zpx3e8u6wIgeHJM/sE46cuOGcYvHiZGmeQLCd3xL6YSSGM9QOLI6w==", + "resolved": "https://registry.npmjs.org/@prisma/adapter-pg/-/adapter-pg-7.8.0.tgz", + "integrity": "sha512-ygb3UkerK3v8MDpXVgCISdRNDozpxh6+JVJgiIGbSr5KBgz10LLf5ejUskPGoXlsIjxsOu6nuy1JVQr2EKGSlg==", "license": "Apache-2.0", "dependencies": { "@prisma/driver-adapter-utils": "7.8.0", - "mariadb": "3.4.5" + "@types/pg": "^8.16.0", + "pg": "^8.16.3", + "postgres-array": "3.0.4" } }, - "node_modules/@prisma/adapter-mariadb/node_modules/@types/node": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.1.tgz", - "integrity": "sha512-RSpUJGmvsJ1ZeBehQZFhIdpsz+bIpES0nIQXko4Ybq+N+kX6XvOq3Jo+iJ82FWLdblFq85AsMikd3m35jgezYg==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@prisma/adapter-mariadb/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@prisma/adapter-mariadb/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@prisma/adapter-mariadb/node_modules/mariadb": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.4.5.tgz", - "integrity": "sha512-gThTYkhIS5rRqkVr+Y0cIdzr+GRqJ9sA2Q34e0yzmyhMCwyApf3OKAC1jnF23aSlIOqJuyaUFUcj7O1qZslmmQ==", - "license": "LGPL-2.1-or-later", - "dependencies": { - "@types/geojson": "^7946.0.16", - "@types/node": "^24.0.13", - "denque": "^2.1.0", - "iconv-lite": "^0.6.3", - "lru-cache": "^10.4.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@prisma/adapter-mariadb/node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "license": "MIT" - }, "node_modules/@prisma/client": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz", @@ -2833,12 +2787,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/geojson": { - "version": "7946.0.16", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", - "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2872,6 +2820,17 @@ "@types/node": "*" } }, + "node_modules/@types/pg": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.20.0.tgz", + "integrity": "sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, "node_modules/@types/react": { "version": "19.2.17", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", @@ -4694,6 +4653,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=0.10" @@ -7647,28 +7607,6 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/mariadb": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/mariadb/-/mariadb-3.5.2.tgz", - "integrity": "sha512-9rztrI4nouxAY/82a+RlzzZ5ie2vxu2eYclkBvTy1ATXH1B9cnvZ0O71Pzsy/mlfDb5P3HhOg0JzQKkDRhctyA==", - "license": "LGPL-2.1-or-later", - "dependencies": { - "@types/geojson": "^7946.0.16", - "@types/node": ">=18", - "denque": "^2.1.0", - "iconv-lite": "^0.7.2", - "lru-cache": "^10.4.3" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/mariadb/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -8524,6 +8462,104 @@ "devOptional": true, "license": "MIT" }, + "node_modules/pg": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz", + "integrity": "sha512-AUP1EYJuHraQGsVoCQVIcM7TEJVGtDzxWtGFZd8rds9d+CCXlU5Js1rYgfLNvxy9iJrpHjGrRjoi/3BT9fRyiA==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.13.0", + "pg-pool": "^3.14.0", + "pg-protocol": "^1.14.0", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.4.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz", + "integrity": "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.13.0.tgz", + "integrity": "sha512-EMnU9E2fSULdsbErBbMaXJvFeD9B4+nPcM3f+4lsiCR0BHLPrLVjv3DbyM2hgQQviKJaTWIRRTjKjWlHg3p2ig==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", + "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.14.0.tgz", + "integrity": "sha512-n5taZ1kO3s9ngDTVxsEznOqCyToTgz0FLuPq0B33COy5pPpuWJpY3/2oRBVETuOgzdqRXfWpM9HIhp2LBBT1BA==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-types/node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -8628,6 +8664,45 @@ "url": "https://github.com/sponsors/porsager" } }, + "node_modules/postgres-array": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.4.tgz", + "integrity": "sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/powershell-utils": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", @@ -9633,6 +9708,15 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -10630,6 +10714,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 7aa375f..419d3a7 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@base-ui/react": "^1.5.0", - "@prisma/adapter-mariadb": "^7.8.0", + "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", "@upstash/ratelimit": "^2.0.8", "@upstash/redis": "^1.38.0", @@ -19,11 +19,11 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^1.17.0", - "mariadb": "^3.5.2", "next": "16.2.7", "next-auth": "^5.0.0-beta.31", "next-themes": "^0.4.6", "nodemailer": "^7.0.13", + "pg": "^8.21.0", "react": "19.2.4", "react-dom": "19.2.4", "shadcn": "^4.11.0", @@ -41,6 +41,7 @@ "@types/bcryptjs": "^2.4.6", "@types/node": "^20", "@types/nodemailer": "^8.0.0", + "@types/pg": "^8.20.0", "@types/react": "^19", "@types/react-dom": "^19", "dotenv": "^17.4.2", diff --git a/prisma/seed-roles.ts b/prisma/seed-roles.ts index cb5e31c..053cd25 100644 --- a/prisma/seed-roles.ts +++ b/prisma/seed-roles.ts @@ -1,8 +1,8 @@ import "dotenv/config" import { PrismaClient } from "@prisma/client" -import { PrismaMariaDb } from "@prisma/adapter-mariadb" +import { PrismaPg } from "@prisma/adapter-pg" -const adapter = new PrismaMariaDb(process.env.DATABASE_URL as string) +const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) const prisma = new PrismaClient({ adapter }) async function main() { diff --git a/prisma/seed.ts b/prisma/seed.ts index f13ecc1..0f1ba67 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,9 +1,9 @@ import "dotenv/config" import { PrismaClient } from "@prisma/client" -import { PrismaMariaDb } from "@prisma/adapter-mariadb" +import { PrismaPg } from "@prisma/adapter-pg" import bcrypt from "bcryptjs" -const adapter = new PrismaMariaDb(process.env.DATABASE_URL as string) +const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }) const prisma = new PrismaClient({ adapter }) async function main() { From 61868cef71c1ae751275b42739e84f5c5c994d8e Mon Sep 17 00:00:00 2001 From: TravisDev5x Date: Thu, 11 Jun 2026 18:40:57 -0600 Subject: [PATCH 3/3] fix: remove invalid directUrl from prisma.config.ts @prisma/config v7.8 only supports `url` and `shadowDatabaseUrl` in datasource, not `directUrl`, which caused a TS error in tsc/build. --- prisma.config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/prisma.config.ts b/prisma.config.ts index 8b400a3..cfb31f4 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -8,6 +8,5 @@ export default defineConfig({ }, datasource: { url: process.env.DATABASE_URL!, - directUrl: process.env.DIRECT_URL!, }, }); \ No newline at end of file