import {
  pgTable,
  uuid,
  text,
  boolean,
  timestamp,
  index,
} from "drizzle-orm/pg-core";

/**
 * Login-Versuche für Rate-Limiting. `key` ist i. d. R. eine Kombination aus
 * E-Mail und/oder IP. Der Index auf (key, zeitpunkt) ermöglicht effizientes
 * Zählen jüngster Fehlversuche.
 */
export const loginAttempts = pgTable(
  "login_attempts",
  {
    id: uuid("id").primaryKey().defaultRandom(),
    key: text("key").notNull(),
    erfolg: boolean("erfolg").notNull(),
    zeitpunkt: timestamp("zeitpunkt", { withTimezone: true })
      .notNull()
      .defaultNow(),
  },
  (t) => ({
    keyZeitIdx: index("login_attempts_key_zeit_idx").on(t.key, t.zeitpunkt),
  }),
);
