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
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,
|
|
),
|
|
}),
|
|
);
|
|
|