CREATE TABLE `auth_tokens` ( `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, `user_id` integer NOT NULL, `token_hash` text NOT NULL, `purpose` text NOT NULL, `payload` text, `expires_at` integer NOT NULL, `used_at` integer, `created_at` integer DEFAULT (unixepoch()) NOT NULL, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint CREATE TABLE `sessions_auth` ( `id` text PRIMARY KEY NOT NULL, `user_id` integer NOT NULL, `created_at` integer DEFAULT (unixepoch()) NOT NULL, `expires_at` integer NOT NULL, `last_used_at` integer DEFAULT (unixepoch()) NOT NULL, `user_agent` text, `ip` text, FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint CREATE TABLE `users` ( `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, `email` text NOT NULL, `display_name` text NOT NULL, `password_hash` text, `role` text DEFAULT 'user' NOT NULL, `is_active` integer DEFAULT true NOT NULL, `email_verified_at` integer, `pending_email` text, `created_at` integer DEFAULT (unixepoch()) NOT NULL, `updated_at` integer DEFAULT (unixepoch()) NOT NULL ); --> statement-breakpoint CREATE INDEX `auth_tokens_hash_idx` ON `auth_tokens` (`token_hash`);--> statement-breakpoint CREATE INDEX `auth_tokens_user_purpose_idx` ON `auth_tokens` (`user_id`,`purpose`);--> statement-breakpoint CREATE INDEX `sessions_auth_user_idx` ON `sessions_auth` (`user_id`);--> statement-breakpoint CREATE INDEX `sessions_auth_expires_idx` ON `sessions_auth` (`expires_at`);--> statement-breakpoint CREATE UNIQUE INDEX `users_email_unique` ON `users` (`email`);--> statement-breakpoint CREATE INDEX `users_email_idx` ON `users` (`email`);