Skip to content
File

Blob: src/worker/db/d1/repositories/tessera-identities.ts

typescript41 lines
1import { eq } from "drizzle-orm";
2 
3import { type D1DbExecutor, tesseraIdentities } from "@/worker/db/d1";
4 
5export type TesseraIdentityRow = typeof tesseraIdentities.$inferSelect;
6export type NewTesseraIdentityRow = typeof tesseraIdentities.$inferInsert;
7 
8export const findIdentityBySub = async (db: D1DbExecutor, sub: string): Promise<TesseraIdentityRow | undefined> => {
9 const rows = await db.select().from(tesseraIdentities).where(eq(tesseraIdentities.sub, sub)).limit(1);
10 return rows[0];
11};
12 
13export const findIdentityByUserId = async (
14 db: D1DbExecutor,
15 userId: string,
16): Promise<TesseraIdentityRow | undefined> => {
17 const rows = await db.select().from(tesseraIdentities).where(eq(tesseraIdentities.userId, userId)).limit(1);
18 return rows[0];
19};
20 
21export const findUserIdBySub = async (db: D1DbExecutor, sub: string): Promise<string | null> => {
22 const rows = await db
23 .select({ userId: tesseraIdentities.userId })
24 .from(tesseraIdentities)
25 .where(eq(tesseraIdentities.sub, sub))
26 .limit(1);
27 return rows[0]?.userId ?? null;
28};
29 
30export const bumpLastSeenAt = async (db: D1DbExecutor, sub: string, lastSeenAt: number): Promise<void> => {
31 await db.update(tesseraIdentities).set({ lastSeenAt }).where(eq(tesseraIdentities.sub, sub));
32};
33 
34export const insertIdentity = async (
35 db: D1DbExecutor,
36 row: NewTesseraIdentityRow,
37): Promise<TesseraIdentityRow | undefined> => {
38 const rows = await db.insert(tesseraIdentities).values(row).returning();
39 return rows[0];
40};