-- +goose Up CREATE TABLE IF NOT EXISTS user_email_login_otps ( id BINARY(16) NOT NULL, user_id BINARY(16) NOT NULL, otp_hash BINARY(32) NOT NULL, expires_at DATETIME(6) NOT NULL, used_at DATETIME(6) NULL, attempt_count INT NOT NULL DEFAULT 0, max_attempts INT NOT NULL DEFAULT 5, resend_count INT NOT NULL DEFAULT 1, last_sent_at DATETIME(6) NOT NULL, created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), created_by BINARY(16) NULL, updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), updated_by BINARY(16) NULL, PRIMARY KEY (id), KEY idx_user_email_login_otps_user_id (user_id), KEY idx_user_email_login_otps_expires_at (expires_at), KEY idx_user_email_login_otps_used_at (used_at), CONSTRAINT fk_user_email_login_otps_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- +goose Down DROP TABLE IF EXISTS user_email_login_otps;