-- Migration 04 — réinitialisation de mot de passe
--
-- Le jeton n'est jamais stocké en clair : seule son empreinte l'est.
-- Une fuite de la base ne permet donc pas de prendre la main sur les
-- comptes, exactement comme pour les mots de passe.
--
-- À passer après migration_03_nom_depuis_description.sql

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS app_password_reset (
    id           BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    user_id      INT UNSIGNED NOT NULL,
    token_hash   CHAR(64)     NOT NULL,
    expires_at   DATETIME     NOT NULL,
    used_at      DATETIME     DEFAULT NULL,
    requested_ip VARBINARY(16) DEFAULT NULL,
    created_by   INT UNSIGNED DEFAULT NULL,  -- non nul si généré par un admin
    created_at   DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uniq_reset_token (token_hash),
    KEY idx_reset_user (user_id, used_at),
    CONSTRAINT fk_reset_user FOREIGN KEY (user_id)
        REFERENCES app_user (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
