import { and, eq } from 'drizzle-orm'; import type { CardsDb } from '../db/connection.ts'; import { decks } from '../db/schema/index.ts'; import { ulid } from './ulid.ts'; /** Stabiler Name des Inbox-Decks pro User. Auto-Created bei erstem Share. */ export const INBOX_DECK_NAME = 'Inbox'; /** * Holt das Inbox-Deck eines Users oder legt es neu an. * Wird von allen Share-Receive-Handlern benutzt — eingehende * Shares landen immer in der Inbox, der User kann sie später * in andere Decks umsortieren. */ export async function ensureInboxDeck(db: CardsDb, userId: string) { const [existing] = await db .select() .from(decks) .where(and(eq(decks.userId, userId), eq(decks.name, INBOX_DECK_NAME))) .limit(1); if (existing) return existing; const now = new Date(); const [created] = await db .insert(decks) .values({ id: ulid(), userId, name: INBOX_DECK_NAME, description: 'Eingehende Shares aus anderen Apps. Sortiere sie in eigene Decks um.', color: '#888888', visibility: 'private', fsrsSettings: {}, createdAt: now, updatedAt: now, }) .returning(); return created; }