diff --git a/apps/cli/src/helpers/auth-setup.ts b/apps/cli/src/helpers/auth-setup.ts index 13f5d51..168a07e 100644 --- a/apps/cli/src/helpers/auth-setup.ts +++ b/apps/cli/src/helpers/auth-setup.ts @@ -18,13 +18,14 @@ export async function setupAuth( projectDir: string, enableAuth: boolean, ): Promise { + if (!enableAuth) { + return; + } + const serverDir = path.join(projectDir, "packages/server"); const clientDir = path.join(projectDir, "packages/client"); try { - if (!enableAuth) { - return; - } addPackageDependency({ dependencies: ["better-auth"], projectDir: serverDir, diff --git a/apps/cli/src/helpers/create-project.ts b/apps/cli/src/helpers/create-project.ts index acc9ac7..7d14439 100644 --- a/apps/cli/src/helpers/create-project.ts +++ b/apps/cli/src/helpers/create-project.ts @@ -40,6 +40,65 @@ export async function createProject(options: ProjectConfig): Promise { if (await fs.pathExists(ormTemplateDir)) { await fs.copy(ormTemplateDir, projectDir, { overwrite: true }); + + const serverSrcPath = path.join(projectDir, "packages/server/src"); + const baseLibPath = path.join(serverSrcPath, "lib"); + const withAuthLibPath = path.join(serverSrcPath, "with-auth-lib"); + + if (options.auth) { + await fs.remove(baseLibPath); + await fs.move(withAuthLibPath, baseLibPath); + + if (options.orm === "prisma") { + const schemaPath = path.join( + projectDir, + "packages/server/prisma/schema.prisma", + ); + const withAuthSchemaPath = path.join( + projectDir, + "packages/server/prisma/with-auth-schema.prisma", + ); + + if (await fs.pathExists(withAuthSchemaPath)) { + await fs.remove(schemaPath); + await fs.move(withAuthSchemaPath, schemaPath); + } + } else if (options.orm === "drizzle") { + const schemaPath = path.join( + projectDir, + "packages/server/src/db/schema.ts", + ); + const withAuthSchemaPath = path.join( + projectDir, + "packages/server/src/db/with-auth-schema.ts", + ); + + if (await fs.pathExists(withAuthSchemaPath)) { + await fs.remove(schemaPath); + await fs.move(withAuthSchemaPath, schemaPath); + } + } + } else { + await fs.remove(withAuthLibPath); + + if (options.orm === "prisma") { + const withAuthSchema = path.join( + projectDir, + "packages/server/prisma/with-auth-schema.prisma", + ); + if (await fs.pathExists(withAuthSchema)) { + await fs.remove(withAuthSchema); + } + } else if (options.orm === "drizzle") { + const withAuthSchema = path.join( + projectDir, + "packages/server/src/db/with-auth-schema.ts", + ); + if (await fs.pathExists(withAuthSchema)) { + await fs.remove(withAuthSchema); + } + } + } } } @@ -51,7 +110,6 @@ export async function createProject(options: ProjectConfig): Promise { ); await setupAuth(projectDir, options.auth); - await setupEnvironmentVariables(projectDir, options); if (options.git) { @@ -63,7 +121,6 @@ export async function createProject(options: ProjectConfig): Promise { } await updatePackageConfigurations(projectDir, options); - await createReadme(projectDir, options); displayPostInstallInstructions( diff --git a/apps/cli/src/helpers/env-setup.ts b/apps/cli/src/helpers/env-setup.ts index a3f72de..846010e 100644 --- a/apps/cli/src/helpers/env-setup.ts +++ b/apps/cli/src/helpers/env-setup.ts @@ -17,6 +17,10 @@ export async function setupEnvironmentVariables( envContent = await fs.readFile(envPath, "utf8"); } + if (!envContent.includes("CORS_ORIGIN")) { + envContent += "\nCORS_ORIGIN=http://localhost:3001"; + } + if (options.auth) { if (!envContent.includes("BETTER_AUTH_SECRET")) { envContent += `\nBETTER_AUTH_SECRET=${generateAuthSecret()}`; @@ -25,16 +29,6 @@ export async function setupEnvironmentVariables( if (!envContent.includes("BETTER_AUTH_URL")) { envContent += "\nBETTER_AUTH_URL=http://localhost:3000"; } - - if (!envContent.includes("CORS_ORIGIN")) { - envContent += "\nCORS_ORIGIN=http://localhost:3001"; - } - - const clientEnvPath = path.join(clientDir, ".env"); - if (!(await fs.pathExists(clientEnvPath))) { - const clientEnvContent = "VITE_SERVER_URL=http://localhost:3000\n"; - await fs.writeFile(clientEnvPath, clientEnvContent); - } } if (options.database !== "none") { @@ -54,4 +48,17 @@ export async function setupEnvironmentVariables( } await fs.writeFile(envPath, envContent.trim()); + + const clientEnvPath = path.join(clientDir, ".env"); + let clientEnvContent = ""; + + if (await fs.pathExists(clientEnvPath)) { + clientEnvContent = await fs.readFile(clientEnvPath, "utf8"); + } + + if (!clientEnvContent.includes("VITE_SERVER_URL")) { + clientEnvContent += "VITE_SERVER_URL=http://localhost:3000\n"; + } + + await fs.writeFile(clientEnvPath, clientEnvContent.trim()); } diff --git a/apps/cli/src/helpers/post-installation.ts b/apps/cli/src/helpers/post-installation.ts index ba3878a..7e9df29 100644 --- a/apps/cli/src/helpers/post-installation.ts +++ b/apps/cli/src/helpers/post-installation.ts @@ -33,32 +33,30 @@ function getDatabaseInstructions( const instructions = []; if (orm === "prisma") { - instructions.push( - `${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`, - ); - instructions.push( - `${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`, - ); - if (database === "sqlite") { instructions.push( `${pc.yellow("NOTE:")} Turso support with Prisma is in Early Access and requires additional setup.`, `${pc.dim("Learn more at: https://www.prisma.io/docs/orm/overview/databases/turso")}`, ); } - } else if (orm === "drizzle") { instructions.push( `${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`, ); instructions.push( `${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`, ); - + } else if (orm === "drizzle") { if (database === "sqlite") { instructions.push( `${pc.cyan("•")} Start local DB: ${pc.dim(`cd packages/server && ${runCmd} db:local`)}`, ); } + instructions.push( + `${pc.cyan("•")} Apply schema: ${pc.dim(`${runCmd} db:push`)}`, + ); + instructions.push( + `${pc.cyan("•")} Database UI: ${pc.dim(`${runCmd} db:studio`)}`, + ); } return instructions.length diff --git a/apps/cli/template/base/packages/client/src/main.tsx b/apps/cli/template/base/packages/client/src/main.tsx index 904f39a..44783ba 100644 --- a/apps/cli/template/base/packages/client/src/main.tsx +++ b/apps/cli/template/base/packages/client/src/main.tsx @@ -31,12 +31,6 @@ const trpcClient = trpc.createClient({ links: [ httpBatchLink({ url: `${import.meta.env.VITE_SERVER_URL}/trpc`, - fetch(url, options) { - return fetch(url, { - ...options, - credentials: "include", - }); - }, }), ], }); diff --git a/apps/cli/template/with-auth/packages/client/src/main.tsx b/apps/cli/template/with-auth/packages/client/src/main.tsx new file mode 100644 index 0000000..904f39a --- /dev/null +++ b/apps/cli/template/with-auth/packages/client/src/main.tsx @@ -0,0 +1,77 @@ +import { + QueryCache, + QueryClient, + QueryClientProvider, +} from "@tanstack/react-query"; +import { RouterProvider, createRouter } from "@tanstack/react-router"; +import { httpBatchLink } from "@trpc/client"; +import { createTRPCQueryUtils } from "@trpc/react-query"; +import ReactDOM from "react-dom/client"; +import { toast } from "sonner"; +import Loader from "./components/loader"; +import { routeTree } from "./routeTree.gen"; +import { trpc } from "./utils/trpc"; + +const queryClient = new QueryClient({ + queryCache: new QueryCache({ + onError: (error) => { + toast.error(error.message, { + action: { + label: "retry", + onClick: () => { + queryClient.invalidateQueries(); + }, + }, + }); + }, + }), +}); + +const trpcClient = trpc.createClient({ + links: [ + httpBatchLink({ + url: `${import.meta.env.VITE_SERVER_URL}/trpc`, + fetch(url, options) { + return fetch(url, { + ...options, + credentials: "include", + }); + }, + }), + ], +}); + +export const trpcQueryUtils = createTRPCQueryUtils({ + queryClient, + client: trpcClient, +}); + +const router = createRouter({ + routeTree, + defaultPreload: "intent", + context: { trpcQueryUtils }, + defaultPendingComponent: () => , + Wrap: function WrapComponent({ children }) { + return ( + + + {children} + + + ); + }, +}); + +// Register things for typesafety +declare module "@tanstack/react-router" { + interface Register { + router: typeof router; + } +} + +const rootElement = document.getElementById("app")!; + +if (!rootElement.innerHTML) { + const root = ReactDOM.createRoot(rootElement); + root.render(); +} diff --git a/apps/cli/template/with-drizzle-postgres/packages/server/src/db/schema.ts b/apps/cli/template/with-drizzle-postgres/packages/server/src/db/schema.ts index 65af47c..7725d84 100644 --- a/apps/cli/template/with-drizzle-postgres/packages/server/src/db/schema.ts +++ b/apps/cli/template/with-drizzle-postgres/packages/server/src/db/schema.ts @@ -1,47 +1,7 @@ import { pgTable, text, integer, timestamp, boolean } from "drizzle-orm/pg-core"; -export const user = pgTable("user", { - 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() - }); - -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(()=> user.id, { onDelete: 'cascade' }) - }); - -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(()=> user.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 todo = pgTable("todo", { + id: serial("id").primaryKey(), + text: text("text").notNull(), + completed: boolean("completed").default(false).notNull() +}); diff --git a/apps/cli/template/with-drizzle-postgres/packages/server/src/db/with-auth-schema.ts b/apps/cli/template/with-drizzle-postgres/packages/server/src/db/with-auth-schema.ts new file mode 100644 index 0000000..e64d0c4 --- /dev/null +++ b/apps/cli/template/with-drizzle-postgres/packages/server/src/db/with-auth-schema.ts @@ -0,0 +1,53 @@ +import { pgTable, text, integer, timestamp, boolean } from "drizzle-orm/pg-core"; + +export const todo = pgTable("todo", { + id: serial("id").primaryKey(), + text: text("text").notNull(), + completed: boolean("completed").default(false).notNull() +}); + +export const user = pgTable("user", { + 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() + }); + +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(()=> user.id, { onDelete: 'cascade' }) + }); + +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(()=> user.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') + }); diff --git a/apps/cli/template/with-drizzle-sqlite/packages/server/src/lib/auth.ts b/apps/cli/template/with-drizzle-postgres/packages/server/src/with-auth-lib/auth.ts similarity index 93% rename from apps/cli/template/with-drizzle-sqlite/packages/server/src/lib/auth.ts rename to apps/cli/template/with-drizzle-postgres/packages/server/src/with-auth-lib/auth.ts index 4531d67..d3e8669 100644 --- a/apps/cli/template/with-drizzle-sqlite/packages/server/src/lib/auth.ts +++ b/apps/cli/template/with-drizzle-postgres/packages/server/src/with-auth-lib/auth.ts @@ -5,7 +5,7 @@ import * as schema from "../db/schema"; export const auth = betterAuth({ database: drizzleAdapter(db, { - provider: "sqlite", + provider: "pg", schema: schema, }), trustedOrigins: [process.env.CORS_ORIGIN!], diff --git a/apps/cli/template/with-drizzle-postgres/packages/server/src/lib/context.ts b/apps/cli/template/with-drizzle-postgres/packages/server/src/with-auth-lib/context.ts similarity index 100% rename from apps/cli/template/with-drizzle-postgres/packages/server/src/lib/context.ts rename to apps/cli/template/with-drizzle-postgres/packages/server/src/with-auth-lib/context.ts diff --git a/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/schema.ts b/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/schema.ts index c0f5512..710fd27 100644 --- a/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/schema.ts +++ b/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/schema.ts @@ -1,55 +1,7 @@ import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core"; -export const user = sqliteTable("user", { - id: text("id").primaryKey(), - name: text("name").notNull(), - email: text("email").notNull().unique(), - emailVerified: integer("email_verified", { mode: "boolean" }).notNull(), - image: text("image"), - createdAt: integer("created_at", { mode: "timestamp" }).notNull(), - updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), -}); - -export const session = sqliteTable("session", { - id: text("id").primaryKey(), - expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), - token: text("token").notNull().unique(), - createdAt: integer("created_at", { mode: "timestamp" }).notNull(), - updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), - ipAddress: text("ip_address"), - userAgent: text("user_agent"), - userId: text("user_id") - .notNull() - .references(() => user.id), -}); - -export const account = sqliteTable("account", { - id: text("id").primaryKey(), - accountId: text("account_id").notNull(), - providerId: text("provider_id").notNull(), - userId: text("user_id") - .notNull() - .references(() => user.id), - accessToken: text("access_token"), - refreshToken: text("refresh_token"), - idToken: text("id_token"), - accessTokenExpiresAt: integer("access_token_expires_at", { - mode: "timestamp", - }), - refreshTokenExpiresAt: integer("refresh_token_expires_at", { - mode: "timestamp", - }), - scope: text("scope"), - password: text("password"), - createdAt: integer("created_at", { mode: "timestamp" }).notNull(), - updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), -}); - -export const verification = sqliteTable("verification", { - id: text("id").primaryKey(), - identifier: text("identifier").notNull(), - value: text("value").notNull(), - expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), - createdAt: integer("created_at", { mode: "timestamp" }), - updatedAt: integer("updated_at", { mode: "timestamp" }), +export const todo = sqliteTable("todo", { + id: integer("id").primaryKey({ autoIncrement: true }), + text: text("text").notNull(), + completed: integer("completed", { mode: "boolean" }).default(false).notNull() }); diff --git a/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/with-auth-schema.ts b/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/with-auth-schema.ts new file mode 100644 index 0000000..29e986a --- /dev/null +++ b/apps/cli/template/with-drizzle-sqlite/packages/server/src/db/with-auth-schema.ts @@ -0,0 +1,61 @@ +import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core"; + +export const todo = sqliteTable("todo", { + id: integer("id").primaryKey({ autoIncrement: true }), + text: text("text").notNull(), + completed: integer("completed", { mode: "boolean" }).default(false).notNull() +}); + +export const user = sqliteTable("user", { + id: text("id").primaryKey(), + name: text("name").notNull(), + email: text("email").notNull().unique(), + emailVerified: integer("email_verified", { mode: "boolean" }).notNull(), + image: text("image"), + createdAt: integer("created_at", { mode: "timestamp" }).notNull(), + updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), +}); + +export const session = sqliteTable("session", { + id: text("id").primaryKey(), + expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), + token: text("token").notNull().unique(), + createdAt: integer("created_at", { mode: "timestamp" }).notNull(), + updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), + ipAddress: text("ip_address"), + userAgent: text("user_agent"), + userId: text("user_id") + .notNull() + .references(() => user.id), +}); + +export const account = sqliteTable("account", { + id: text("id").primaryKey(), + accountId: text("account_id").notNull(), + providerId: text("provider_id").notNull(), + userId: text("user_id") + .notNull() + .references(() => user.id), + accessToken: text("access_token"), + refreshToken: text("refresh_token"), + idToken: text("id_token"), + accessTokenExpiresAt: integer("access_token_expires_at", { + mode: "timestamp", + }), + refreshTokenExpiresAt: integer("refresh_token_expires_at", { + mode: "timestamp", + }), + scope: text("scope"), + password: text("password"), + createdAt: integer("created_at", { mode: "timestamp" }).notNull(), + updatedAt: integer("updated_at", { mode: "timestamp" }).notNull(), +}); + +export const verification = sqliteTable("verification", { + id: text("id").primaryKey(), + identifier: text("identifier").notNull(), + value: text("value").notNull(), + expiresAt: integer("expires_at", { mode: "timestamp" }).notNull(), + createdAt: integer("created_at", { mode: "timestamp" }), + updatedAt: integer("updated_at", { mode: "timestamp" }), +}); diff --git a/apps/cli/template/with-drizzle-postgres/packages/server/src/lib/auth.ts b/apps/cli/template/with-drizzle-sqlite/packages/server/src/with-auth-lib/auth.ts similarity index 100% rename from apps/cli/template/with-drizzle-postgres/packages/server/src/lib/auth.ts rename to apps/cli/template/with-drizzle-sqlite/packages/server/src/with-auth-lib/auth.ts diff --git a/apps/cli/template/with-drizzle-sqlite/packages/server/src/lib/context.ts b/apps/cli/template/with-drizzle-sqlite/packages/server/src/with-auth-lib/context.ts similarity index 100% rename from apps/cli/template/with-drizzle-sqlite/packages/server/src/lib/context.ts rename to apps/cli/template/with-drizzle-sqlite/packages/server/src/with-auth-lib/context.ts diff --git a/apps/cli/template/with-prisma-postgres/packages/server/prisma/schema.prisma b/apps/cli/template/with-prisma-postgres/packages/server/prisma/schema.prisma index 05383ce..6612705 100644 --- a/apps/cli/template/with-prisma-postgres/packages/server/prisma/schema.prisma +++ b/apps/cli/template/with-prisma-postgres/packages/server/prisma/schema.prisma @@ -1,9 +1,3 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? -// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init - generator client { provider = "prisma-client-js" } @@ -13,6 +7,14 @@ datasource db { url = env("DATABASE_URL") } +model Todo { + id Int @id @default(autoincrement()) + text String + completed Boolean @default(false) + + @@map("todo") +} + model User { id String @id @map("_id") name String diff --git a/apps/cli/template/with-prisma-postgres/packages/server/prisma/with-auth-schema.prisma b/apps/cli/template/with-prisma-postgres/packages/server/prisma/with-auth-schema.prisma new file mode 100644 index 0000000..6612705 --- /dev/null +++ b/apps/cli/template/with-prisma-postgres/packages/server/prisma/with-auth-schema.prisma @@ -0,0 +1,76 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgres" + url = env("DATABASE_URL") +} + +model Todo { + id Int @id @default(autoincrement()) + text String + completed Boolean @default(false) + + @@map("todo") +} + +model User { + id String @id @map("_id") + name String + email String + emailVerified Boolean + image String? + createdAt DateTime + updatedAt DateTime + sessions Session[] + accounts Account[] + + @@unique([email]) + @@map("user") +} + +model Session { + id String @id @map("_id") + expiresAt DateTime + token String + createdAt DateTime + updatedAt DateTime + ipAddress String? + userAgent String? + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@unique([token]) + @@map("session") +} + +model Account { + id String @id @map("_id") + accountId String + providerId String + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + accessToken String? + refreshToken String? + idToken String? + accessTokenExpiresAt DateTime? + refreshTokenExpiresAt DateTime? + scope String? + password String? + createdAt DateTime + updatedAt DateTime + + @@map("account") +} + +model Verification { + id String @id @map("_id") + identifier String + value String + expiresAt DateTime + createdAt DateTime? + updatedAt DateTime? + + @@map("verification") +} diff --git a/apps/cli/template/with-prisma-postgres/packages/server/src/lib/auth.ts b/apps/cli/template/with-prisma-postgres/packages/server/src/with-auth-lib/auth.ts similarity index 100% rename from apps/cli/template/with-prisma-postgres/packages/server/src/lib/auth.ts rename to apps/cli/template/with-prisma-postgres/packages/server/src/with-auth-lib/auth.ts diff --git a/apps/cli/template/with-prisma-postgres/packages/server/src/lib/context.ts b/apps/cli/template/with-prisma-postgres/packages/server/src/with-auth-lib/context.ts similarity index 100% rename from apps/cli/template/with-prisma-postgres/packages/server/src/lib/context.ts rename to apps/cli/template/with-prisma-postgres/packages/server/src/with-auth-lib/context.ts diff --git a/apps/cli/template/with-prisma-sqlite/packages/server/prisma/schema.prisma b/apps/cli/template/with-prisma-sqlite/packages/server/prisma/schema.prisma index 66cfa4f..36c95c7 100644 --- a/apps/cli/template/with-prisma-sqlite/packages/server/prisma/schema.prisma +++ b/apps/cli/template/with-prisma-sqlite/packages/server/prisma/schema.prisma @@ -1,74 +1,16 @@ -// This is your Prisma schema file, -// learn more about it in the docs: https://pris.ly/d/prisma-schema - -// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? -// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init - generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" - url = "file:./dev.db" + url = "file:./local.db" } -model User { - id String @id @map("_id") - name String - email String - emailVerified Boolean - image String? - createdAt DateTime - updatedAt DateTime - sessions Session[] - accounts Account[] +model Todo { + id Int @id @default(autoincrement()) + text String + completed Boolean @default(false) - @@unique([email]) - @@map("user") -} - -model Session { - id String @id @map("_id") - expiresAt DateTime - token String - createdAt DateTime - updatedAt DateTime - ipAddress String? - userAgent String? - userId String - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - - @@unique([token]) - @@map("session") -} - -model Account { - id String @id @map("_id") - accountId String - providerId String - userId String - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - accessToken String? - refreshToken String? - idToken String? - accessTokenExpiresAt DateTime? - refreshTokenExpiresAt DateTime? - scope String? - password String? - createdAt DateTime - updatedAt DateTime - - @@map("account") -} - -model Verification { - id String @id @map("_id") - identifier String - value String - expiresAt DateTime - createdAt DateTime? - updatedAt DateTime? - - @@map("verification") + @@map("todo") } diff --git a/apps/cli/template/with-prisma-sqlite/packages/server/prisma/with-auth-schema.prisma b/apps/cli/template/with-prisma-sqlite/packages/server/prisma/with-auth-schema.prisma new file mode 100644 index 0000000..36c95c7 --- /dev/null +++ b/apps/cli/template/with-prisma-sqlite/packages/server/prisma/with-auth-schema.prisma @@ -0,0 +1,16 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "sqlite" + url = "file:./local.db" +} + +model Todo { + id Int @id @default(autoincrement()) + text String + completed Boolean @default(false) + + @@map("todo") +} diff --git a/apps/cli/template/with-prisma-sqlite/packages/server/src/lib/auth.ts b/apps/cli/template/with-prisma-sqlite/packages/server/src/with-auth-lib/auth.ts similarity index 100% rename from apps/cli/template/with-prisma-sqlite/packages/server/src/lib/auth.ts rename to apps/cli/template/with-prisma-sqlite/packages/server/src/with-auth-lib/auth.ts diff --git a/apps/cli/template/with-prisma-sqlite/packages/server/src/lib/context.ts b/apps/cli/template/with-prisma-sqlite/packages/server/src/with-auth-lib/context.ts similarity index 100% rename from apps/cli/template/with-prisma-sqlite/packages/server/src/lib/context.ts rename to apps/cli/template/with-prisma-sqlite/packages/server/src/with-auth-lib/context.ts