import { eq, sql } from "drizzle-orm"; import { db } from "./index"; import { users } from "./schema"; // One row per address, whatever happens: the unique index on email turns a // second insert into the update branch, so retries and races only count. export async function recordSignIn(email: string): Promise { await db .insert(users) .values({ email, emailVerified: sql`now()`, lastSignInAt: sql`now()`, signInCount: 1, }) .onConflictDoUpdate({ target: users.email, set: { lastSignInAt: sql`now()`, signInCount: sql`${users.signInCount} + 1`, emailVerified: sql`coalesce(${users.emailVerified}, excluded.email_verified)`, }, }); } export async function getUserByEmail(email: string) { const [user] = await db .select() .from(users) .where(eq(users.email, email)) .limit(1); return user ?? null; }