105 lines
2.3 KiB
TypeScript
105 lines
2.3 KiB
TypeScript
import {
|
|
pgTable,
|
|
foreignKey,
|
|
text,
|
|
timestamp,
|
|
primaryKey,
|
|
unique,
|
|
integer,
|
|
boolean,
|
|
} from "drizzle-orm/pg-core";
|
|
import { sql } from "drizzle-orm";
|
|
|
|
export const session = pgTable(
|
|
"session",
|
|
{
|
|
sessionToken: text().primaryKey().notNull(),
|
|
userId: text().notNull(),
|
|
expires: timestamp({ mode: "string" }).notNull(),
|
|
},
|
|
(table) => [
|
|
foreignKey({
|
|
columns: [table.userId],
|
|
foreignColumns: [user.id],
|
|
name: "session_userId_user_id_fk",
|
|
}).onDelete("cascade"),
|
|
],
|
|
);
|
|
|
|
export const user = pgTable("user", {
|
|
id: text().primaryKey().notNull(),
|
|
name: text(),
|
|
email: text().notNull(),
|
|
emailVerified: timestamp({ mode: "string" }),
|
|
image: text(),
|
|
});
|
|
|
|
export const verificationToken = pgTable(
|
|
"verificationToken",
|
|
{
|
|
identifier: text().notNull(),
|
|
token: text().notNull(),
|
|
expires: timestamp({ mode: "string" }).notNull(),
|
|
},
|
|
(table) => [
|
|
primaryKey({
|
|
columns: [table.identifier, table.token],
|
|
name: "verificationToken_identifier_token_pk",
|
|
}),
|
|
],
|
|
);
|
|
|
|
export const authenticator = pgTable(
|
|
"authenticator",
|
|
{
|
|
credentialId: text().notNull(),
|
|
userId: text().notNull(),
|
|
providerAccountId: text().notNull(),
|
|
credentialPublicKey: text().notNull(),
|
|
counter: integer().notNull(),
|
|
credentialDeviceType: text().notNull(),
|
|
credentialBackedUp: boolean().notNull(),
|
|
transports: text(),
|
|
},
|
|
(table) => [
|
|
foreignKey({
|
|
columns: [table.userId],
|
|
foreignColumns: [user.id],
|
|
name: "authenticator_userId_user_id_fk",
|
|
}).onDelete("cascade"),
|
|
primaryKey({
|
|
columns: [table.credentialId, table.userId],
|
|
name: "authenticator_userId_credentialID_pk",
|
|
}),
|
|
unique("authenticator_credentialID_unique").on(table.credentialId),
|
|
],
|
|
);
|
|
|
|
export const account = pgTable(
|
|
"account",
|
|
{
|
|
userId: text().notNull(),
|
|
type: text().notNull(),
|
|
provider: text().notNull(),
|
|
providerAccountId: text().notNull(),
|
|
refreshToken: text("refresh_token"),
|
|
accessToken: text("access_token"),
|
|
expiresAt: text("expires_at"),
|
|
tokenType: text("token_type"),
|
|
scope: text(),
|
|
idToken: text("id_token"),
|
|
sessionState: text("session_state"),
|
|
},
|
|
(table) => [
|
|
foreignKey({
|
|
columns: [table.userId],
|
|
foreignColumns: [user.id],
|
|
name: "account_userId_user_id_fk",
|
|
}).onDelete("cascade"),
|
|
primaryKey({
|
|
columns: [table.provider, table.providerAccountId],
|
|
name: "account_provider_providerAccountId_pk",
|
|
}),
|
|
],
|
|
);
|