create-t3-app
Version:
Create web application with the t3 stack
101 lines (91 loc) • 3.1 kB
text/typescript
import { relations, sql } from "drizzle-orm";
import { index, mysqlTableCreator, primaryKey } from "drizzle-orm/mysql-core";
import { type AdapterAccount } from "next-auth/adapters";
/**
* This is an example of how to use the multi-project schema feature of Drizzle ORM. Use the same
* database instance for multiple projects.
*
* @see https://orm.drizzle.team/docs/goodies#multi-project-schema
*/
export const createTable = mysqlTableCreator((name) => `project1_${name}`);
export const posts = createTable(
"post",
(d) => ({
id: d.bigint({ mode: "number" }).primaryKey().autoincrement(),
name: d.varchar({ length: 256 }),
createdById: d.varchar({ length: 255 }).notNull(),
createdAt: d
.timestamp()
.default(sql`CURRENT_TIMESTAMP`)
.notNull(),
updatedAt: d.timestamp().onUpdateNow(),
}),
(t) => [
index("created_by_idx").on(t.createdById),
index("name_idx").on(t.name),
]
);
export const users = createTable("user", (d) => ({
id: d
.varchar({ length: 255 })
.notNull()
.primaryKey()
.$defaultFn(() => crypto.randomUUID()),
name: d.varchar({ length: 255 }),
email: d.varchar({ length: 255 }).notNull(),
emailVerified: d
.timestamp({
mode: "date",
fsp: 3,
})
.default(sql`CURRENT_TIMESTAMP(3)`),
image: d.varchar({ length: 255 }),
}));
export const usersRelations = relations(users, ({ many }) => ({
accounts: many(accounts),
sessions: many(sessions),
}));
export const accounts = createTable(
"account",
(d) => ({
userId: d.varchar({ length: 255 }).notNull(),
type: d.varchar({ length: 255 }).$type<AdapterAccount["type"]>().notNull(),
provider: d.varchar({ length: 255 }).notNull(),
providerAccountId: d.varchar({ length: 255 }).notNull(),
refresh_token: d.text(),
access_token: d.text(),
expires_at: d.int(),
token_type: d.varchar({ length: 255 }),
scope: d.varchar({ length: 255 }),
id_token: d.text(),
session_state: d.varchar({ length: 255 }),
}),
(account) => [
primaryKey({ columns: [account.provider, account.providerAccountId] }),
index("accounts_user_id_idx").on(account.userId),
]
);
export const accountsRelations = relations(accounts, ({ one }) => ({
user: one(users, { fields: [accounts.userId], references: [users.id] }),
}));
export const sessions = createTable(
"session",
(d) => ({
sessionToken: d.varchar({ length: 255 }).notNull().primaryKey(),
userId: d.varchar({ length: 255 }).notNull(),
expires: d.timestamp({ mode: "date" }).notNull(),
}),
(session) => [index("session_user_id_idx").on(session.userId)]
);
export const sessionsRelations = relations(sessions, ({ one }) => ({
user: one(users, { fields: [sessions.userId], references: [users.id] }),
}));
export const verificationTokens = createTable(
"verification_token",
(d) => ({
identifier: d.varchar({ length: 255 }).notNull(),
token: d.varchar({ length: 255 }).notNull(),
expires: d.timestamp({ mode: "date" }).notNull(),
}),
(vt) => [primaryKey({ columns: [vt.identifier, vt.token] })]
);