diff --git a/.gitignore b/.gitignore index b11f4509..f70cf5f3 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ node_modules /public/script.js /geo /dist +src/generated/prisma/ # misc .DS_Store diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 5643ef96..5f7d6f36 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -1,5 +1,6 @@ generator client { provider = "prisma-client-js" + output = "../src/generated/prisma" binaryTargets = ["native"] } @@ -29,17 +30,17 @@ model User { } model Session { - id String @id @unique @map("session_id") @db.VarChar(36) - websiteId String @map("website_id") @db.VarChar(36) - browser String? @db.VarChar(20) - os String? @db.VarChar(20) - device String? @db.VarChar(20) - screen String? @db.VarChar(11) - language String? @db.VarChar(35) - country String? @db.Char(2) - region String? @db.Char(20) - city String? @db.VarChar(50) - createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0) + id String @id @unique @map("session_id") @db.VarChar(36) + websiteId String @map("website_id") @db.VarChar(36) + browser String? @db.VarChar(20) + os String? @db.VarChar(20) + device String? @db.VarChar(20) + screen String? @db.VarChar(11) + language String? @db.VarChar(35) + country String? @db.Char(2) + region String? @db.Char(20) + city String? @db.VarChar(50) + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamp(0) websiteEvent WebsiteEvent[] sessionData SessionData[] diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index ea19d861..d7c5de08 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -1,5 +1,6 @@ generator client { provider = "prisma-client-js" + output = "../src/generated/prisma" binaryTargets = ["native"] } @@ -29,17 +30,17 @@ model User { } model Session { - id String @id @unique @map("session_id") @db.Uuid - websiteId String @map("website_id") @db.Uuid - browser String? @db.VarChar(20) - os String? @db.VarChar(20) - device String? @db.VarChar(20) - screen String? @db.VarChar(11) - language String? @db.VarChar(35) - country String? @db.Char(2) - region String? @db.VarChar(20) - city String? @db.VarChar(50) - createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) + id String @id @unique @map("session_id") @db.Uuid + websiteId String @map("website_id") @db.Uuid + browser String? @db.VarChar(20) + os String? @db.VarChar(20) + device String? @db.VarChar(20) + screen String? @db.VarChar(11) + language String? @db.VarChar(35) + country String? @db.Char(2) + region String? @db.VarChar(20) + city String? @db.VarChar(50) + createdAt DateTime? @default(now()) @map("created_at") @db.Timestamptz(6) websiteEvent WebsiteEvent[] sessionData SessionData[] diff --git a/package.json b/package.json index f0000253..21f9be53 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,6 @@ "@prisma/extension-read-replicas": "^0.4.1", "@react-spring/web": "^9.7.3", "@tanstack/react-query": "^5.28.6", - "@umami/prisma-client": "^0.14.0", "@umami/redis-client": "^0.26.0", "bcryptjs": "^2.4.3", "chalk": "^4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ada4d7c7..e2fbe3d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,9 +38,6 @@ importers: '@tanstack/react-query': specifier: ^5.28.6 version: 5.74.3(react@19.1.0) - '@umami/prisma-client': - specifier: ^0.14.0 - version: 0.14.0(@prisma/client@6.6.0(prisma@6.6.0(typescript@5.8.3))(typescript@5.8.3))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.6.0(prisma@6.6.0(typescript@5.8.3))(typescript@5.8.3))) '@umami/redis-client': specifier: ^0.26.0 version: 0.26.0 @@ -2364,12 +2361,6 @@ packages: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@umami/prisma-client@0.14.0': - resolution: {integrity: sha512-62aAE5s5m/M1T88JIvOyZk2LzQIJ/iEeF57ewd/qKKNZdgXfP1aib+IAQ74db85vq6TwFyHMaXBeXztNNby5Fw==} - peerDependencies: - '@prisma/client': ^4.8.0 - '@prisma/extension-read-replicas': ^0.3.0 - '@umami/redis-client@0.26.0': resolution: {integrity: sha512-j2vxb1gYF5zfk7BkrHgau2MwKsB5ijbQh2w1WoIvbP41cqTMsFm/zUrjhZ0cP1ZxR/riQR1AWxKmqNggYRZ5eA==} @@ -8978,15 +8969,6 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@umami/prisma-client@0.14.0(@prisma/client@6.6.0(prisma@6.6.0(typescript@5.8.3))(typescript@5.8.3))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.6.0(prisma@6.6.0(typescript@5.8.3))(typescript@5.8.3)))': - dependencies: - '@prisma/client': 6.6.0(prisma@6.6.0(typescript@5.8.3))(typescript@5.8.3) - '@prisma/extension-read-replicas': 0.4.1(@prisma/client@6.6.0(prisma@6.6.0(typescript@5.8.3))(typescript@5.8.3)) - chalk: 4.1.2 - debug: 4.4.0(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - '@umami/redis-client@0.26.0': dependencies: debug: 4.4.0(supports-color@8.1.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..d9932f98 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +onlyBuiltDependencies: + - '@prisma/client' + - '@prisma/engines' + - prisma diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts index 509c651e..b611123a 100644 --- a/src/lib/prisma.ts +++ b/src/lib/prisma.ts @@ -246,8 +246,8 @@ async function rawQuery(sql: string, data: object): Promise { }); return process.env.DATABASE_REPLICA_URL - ? client.$replica().$queryRawUnsafe(query, params) - : client.$queryRawUnsafe(query, params); + ? client.$replica().$queryRawUnsafe(query, ...params) + : client.$queryRawUnsafe(query, ...params); } async function pagedQuery(model: string, criteria: T, pageParams: PageParams) { @@ -371,6 +371,10 @@ function getClient(params?: { prisma.$on('query' as never, queryLogger || log); } + if (process.env.NODE_ENV !== 'production') { + global[PRISMA] = prisma; + } + log('Prisma initialized'); return prisma; diff --git a/src/lib/redis.ts b/src/lib/redis.ts index 868b408a..98b08388 100644 --- a/src/lib/redis.ts +++ b/src/lib/redis.ts @@ -3,13 +3,13 @@ import { REDIS, UmamiRedisClient } from '@umami/redis-client'; const enabled = !!process.env.REDIS_URL; function getClient() { - const client = new UmamiRedisClient(process.env.REDIS_URL); + const redis = new UmamiRedisClient(process.env.REDIS_URL); if (process.env.NODE_ENV !== 'production') { - global[REDIS] = client; + global[REDIS] = redis; } - return client; + return redis; } const client = global[REDIS] || getClient();