From a1243d5fd67c4329895da2a649bb4f66fdd0ce99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81kos=20Kov=C3=A1cs?= Date: Wed, 1 Nov 2023 20:54:51 +0100 Subject: [PATCH] Use `uuid` datatype for Drizzle/Postgres `user_id` --- src/commands/add/auth/lucia/utils.ts | 10 ++----- src/commands/add/auth/next-auth/generators.ts | 7 +++-- src/commands/add/misc/stripe/generators.ts | 3 +- src/commands/add/orm/drizzle/generators.ts | 30 +++++++++---------- 4 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/commands/add/auth/lucia/utils.ts b/src/commands/add/auth/lucia/utils.ts index ffb6f439..c3372832 100644 --- a/src/commands/add/auth/lucia/utils.ts +++ b/src/commands/add/auth/lucia/utils.ts @@ -106,7 +106,7 @@ export const DrizzleAdapterDriverMappings: { }; export const DrizzleLuciaSchema: { [k in DBType]: string } = { - pg: `import { pgTable, bigint, varchar } from "drizzle-orm/pg-core"; + pg: `import { pgTable, bigint, varchar, uuid } from "drizzle-orm/pg-core"; export const users = pgTable("auth_user", { id: varchar("id", { @@ -122,9 +122,7 @@ export const sessions = pgTable("user_session", { id: varchar("id", { length: 128 }).primaryKey(), - userId: varchar("user_id", { - length: 15 - }) + userId: uuid("user_id") .notNull() .references(() => users.id), activeExpires: bigint("active_expires", { @@ -139,9 +137,7 @@ export const keys = pgTable("user_key", { id: varchar("id", { length: 255 }).primaryKey(), - userId: varchar("user_id", { - length: 15 - }) + userId: uuid("user_id") .notNull() .references(() => users.id), hashedPassword: varchar("hashed_password", { diff --git a/src/commands/add/auth/next-auth/generators.ts b/src/commands/add/auth/next-auth/generators.ts index 1f6bf81d..879f539c 100644 --- a/src/commands/add/auth/next-auth/generators.ts +++ b/src/commands/add/auth/next-auth/generators.ts @@ -115,11 +115,12 @@ export const createDrizzleAuthSchema = (dbType: DBType) => { text, primaryKey, integer, + uuid, } from "drizzle-orm/pg-core"; import type { AdapterAccount } from "@auth/core/adapters"; export const users = pgTable("user", { - id: text("id").notNull().primaryKey(), + id: uuid("id").notNull().primaryKey(), name: text("name"), email: text("email").notNull(), emailVerified: timestamp("emailVerified", { mode: "date" }), @@ -129,7 +130,7 @@ export const users = pgTable("user", { export const accounts = pgTable( "account", { - userId: text("userId") + userId: uuid("userId") .notNull() .references(() => users.id, { onDelete: "cascade" }), type: text("type").$type().notNull(), @@ -150,7 +151,7 @@ export const accounts = pgTable( export const sessions = pgTable("session", { sessionToken: text("sessionToken").notNull().primaryKey(), - userId: text("userId") + userId: uuid("userId") .notNull() .references(() => users.id, { onDelete: "cascade" }), expires: timestamp("expires", { mode: "date" }).notNull(), diff --git a/src/commands/add/misc/stripe/generators.ts b/src/commands/add/misc/stripe/generators.ts index 2dd54cc8..5c7dfb5c 100644 --- a/src/commands/add/misc/stripe/generators.ts +++ b/src/commands/add/misc/stripe/generators.ts @@ -880,6 +880,7 @@ export const generateSubscriptionsDrizzleSchema = ( primaryKey, timestamp, varchar, + uuid, } from "drizzle-orm/pg-core";${ auth !== "clerk" ? `\nimport { users } from "./auth";` : "" } @@ -887,7 +888,7 @@ export const generateSubscriptionsDrizzleSchema = ( export const subscriptions = pgTable( "subscriptions", { - userId: varchar("user_id", { length: 255 }) + userId: uuid("user_id") .unique()${auth !== "clerk" ? `\n .references(() => users.id)` : ""}, stripeCustomerId: varchar("stripe_customer_id", { length: 255 }).unique(), stripeSubscriptionId: varchar("stripe_subscription_id", { diff --git a/src/commands/add/orm/drizzle/generators.ts b/src/commands/add/orm/drizzle/generators.ts index 986917fa..b58b4149 100644 --- a/src/commands/add/orm/drizzle/generators.ts +++ b/src/commands/add/orm/drizzle/generators.ts @@ -81,7 +81,7 @@ import { drizzle } from 'drizzle-orm/neon-http'; import { env } from "@/lib/env.mjs"; neonConfig.fetchConnectionCache = true; - + export const sql = neon(env.DATABASE_URL); export const db = drizzle(sql); `; @@ -90,7 +90,7 @@ export const db = drizzle(sql); indexTS = `import { sql } from '@vercel/postgres'; import { drizzle } from 'drizzle-orm/vercel-postgres'; import { env } from "@/lib/env.mjs"; - + export const db = drizzle(sql) `; break; @@ -98,7 +98,7 @@ export const db = drizzle(sql) indexTS = `import { drizzle } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import { env } from "@/lib/env.mjs"; - + const connectionString = env.DATABASE_URL const client = postgres(connectionString) export const db = drizzle(client); @@ -110,12 +110,12 @@ import { RDSDataClient } from '@aws-sdk/client-rds-data'; import { fromIni } from '@aws-sdk/credential-providers'; import "dotenv/config"; - + const rdsClient = new RDSDataClient({ credentials: fromIni({ profile: env['PROFILE'] }), region: 'us-east-1', }); - + export const db = drizzle(rdsClient, { database: env['DATABASE']!, secretArn: env['SECRET_ARN']!, @@ -127,12 +127,12 @@ export const db = drizzle(rdsClient, { indexTS = `import { drizzle } from "drizzle-orm/planetscale-serverless"; import { connect } from "@planetscale/database"; import { env } from "@/lib/env.mjs"; - + // create the connection export const connection = connect({ url: env.DATABASE_URL }); - + export const db = drizzle(connection); `; break; @@ -140,16 +140,16 @@ export const db = drizzle(connection); indexTS = `import { drizzle } from "drizzle-orm/mysql2"; import mysql from "mysql2/promise"; import { env } from "@/lib/env.mjs"; - + export const poolConnection = mysql.createPool(env.DATABASE_URL); - + export const db = drizzle(poolConnection); `; break; case "better-sqlite3": indexTS = `import { drizzle, BetterSQLite3Database } from 'drizzle-orm/better-sqlite3'; import Database from 'better-sqlite3'; - + export const sqlite = new Database('sqlite.db'); export const db: BetterSQLite3Database = drizzle(sqlite); `; @@ -216,7 +216,7 @@ import { neon, neonConfig } from '@neondatabase/serverless'; `; connectionLogic = ` neonConfig.fetchConnectionCache = true; - + const sql = neon(env.DATABASE_URL); const db = drizzle(sql); `; @@ -257,7 +257,7 @@ const rdsClient = new RDSDataClient({ credentials: fromIni({ profile: process.env['PROFILE'] }), region: 'us-east-1', }); - + const db = drizzle(rdsClient, { database: process.env['DATABASE']!, secretArn: process.env['SECRET_ARN']!, @@ -274,7 +274,7 @@ import { connect } from "@planetscale/database"; `; connectionLogic = ` const connection = connect({ url: env.DATABASE_URL }); - + const db = drizzle(connection); `; break; @@ -345,7 +345,7 @@ export const createInitSchema = (libPath?: string, dbType?: DBType) => { let initModel = ""; switch (dbDriver) { case "pg": - initModel = `import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";${ + initModel = `import { pgTable, serial, text, integer, uuid } from "drizzle-orm/pg-core";${ packages.includes("next-auth") ? '\nimport { users } from "./auth";' : "" @@ -356,7 +356,7 @@ export const computers = pgTable("computers", { brand: text("brand").notNull(), cores: integer("cores").notNull(),${ packages.includes("next-auth") - ? '\nuserId: integer("user_id").notNull().references(() => users.id)' + ? '\nuserId: uuid("user_id").notNull().references(() => users.id)' : "" } });`;