You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

74 lines
2.1 KiB

import {
integer,
pgTable,
varchar,
timestamp,
text,
pgEnum,
uniqueIndex,
index,
} from "drizzle-orm/pg-core";
export const authChallengeTypeEnum = pgEnum("auth_challenge_type", [
"email_verify",
"password_reset",
]);
export const usersTable = pgTable("users_table", {
id: integer().primaryKey().generatedAlwaysAsIdentity(),
name: varchar({ length: 255 }).notNull(),
age: integer().notNull(),
email: varchar({ length: 320 }).notNull().unique(),
passwordHash: text("password_hash").notNull(),
emailVerifiedAt: timestamp("email_verified_at", {
withTimezone: true,
}),
sessionVersion: integer("session_version").notNull().default(0),
createdAt: timestamp("created_at", { withTimezone: true })
.notNull()
.defaultNow(),
updatedAt: timestamp("updated_at", { withTimezone: true })
.notNull()
.defaultNow(),
});
export const authChallengesTable = pgTable(
"auth_challenges",
{
id: integer().primaryKey().generatedAlwaysAsIdentity(),
userId: integer("user_id")
.notNull()
.references(() => usersTable.id, { onDelete: "cascade" }),
type: authChallengeTypeEnum("type").notNull(),
tokenHash: varchar("token_hash", { length: 64 }).notNull(),
expiresAt: timestamp("expires_at", { withTimezone: true }).notNull(),
consumedAt: timestamp("consumed_at", { withTimezone: true }),
createdAt: timestamp("created_at", { withTimezone: true })
.notNull()
.defaultNow(),
},
(t) => ({
tokenHashIdx: index("auth_challenges_token_hash_idx").on(t.tokenHash),
}),
);
export const linkedAccountsTable = pgTable(
"linked_accounts",
{
id: integer().primaryKey().generatedAlwaysAsIdentity(),
userId: integer("user_id")
.notNull()
.references(() => usersTable.id, { onDelete: "cascade" }),
provider: varchar({ length: 64 }).notNull(),
providerUserId: varchar("provider_user_id", { length: 255 }).notNull(),
createdAt: timestamp("created_at", { withTimezone: true })
.notNull()
.defaultNow(),
},
(t) => ({
providerUserUnique: uniqueIndex("linked_accounts_provider_uid").on(
t.provider,
t.providerUserId,
),
}),
);