-- Écarts documentés de `e-learning-prod` par rapport à ce que produisent ses 62
-- migrations enregistrées. Issue #156 (livrable B14) — source : docs/roadmap/
-- 19_DIFF_SCHEMA_PROD.md §3 à §6 et docs/context/CONSIGNATION_DEPLOIEMENT_2026-08-23.md §5.3.
--
-- Appliqué APRÈS le passage en MyISAM : ces écarts ont été posés à la main sur la
-- production, hors migration, et c'est précisément pourquoi ils divergent.
--
-- Chaque instruction porte la référence de l'écart qu'elle reproduit. Rien n'est
-- inventé : ce qui n'est pas documenté n'est pas ici.

-- ---------------------------------------------------------------- §3 / §8
-- Colonnes présentes en production alors que leur migration n'est PAS enregistrée.
-- C'est le cas miroir de #137 : au prochain `migrate`, elles déclencheraient errno 1060
-- sans les gardes `hasColumn` ajoutées par la PR #146.
ALTER TABLE `courses` ADD COLUMN `order_no` INT NOT NULL DEFAULT 0;   -- présente + D6 (défaut 0)
ALTER TABLE `users`   ADD COLUMN `is_active` TINYINT(1) NOT NULL DEFAULT 1;
-- `lessons.order_no` n'est PAS listée parmi les divergences D1-D11 : en production elle
-- est donc conforme à ce que sa migration définit (`integer()->default(0)`). Rien à
-- inventer ici — c'est la définition de la migration qui fait foi.
ALTER TABLE `lessons` ADD COLUMN `order_no` INT NOT NULL DEFAULT 0;
ALTER TABLE `quizzes` ADD COLUMN `order_no` INT NULL DEFAULT 0;       -- D8 (NULL autorisé)

-- ---------------------------------------------------------------- §4
-- Colonnes « en trop » : la production a raison pour la première (le webhook Stripe
-- l'écrit, aucune migration ne la crée), les deux autres sont écrites hors `$fillable`
-- et donc toujours NULL.
ALTER TABLE `subscriptions` ADD COLUMN `subscription_item_id` VARCHAR(125) NULL;
ALTER TABLE `user_points`   ADD COLUMN `action_key` VARCHAR(191) NULL;
ALTER TABLE `user_points`   ADD COLUMN `points` INT NULL;
-- Index « en trop », inopérant : MySQL autorise les NULL multiples dans un UNIQUE.
CREATE UNIQUE INDEX `user_points_user_id_action_key_unique` ON `user_points` (`user_id`, `action_key`);

-- ---------------------------------------------------------------- §5 divergences
-- D1 — 28 réponses de quiz dépassent 125 caractères (max 295) : la prod est en `text`.
ALTER TABLE `options` MODIFY `option_text` TEXT NOT NULL;
-- D2 — bloque la FK `lessons → courses` tant qu'elle n'est pas résorbée.
ALTER TABLE `lessons` MODIFY `course_id` INT NULL;
-- D3 — bloque la FK `learning_paths → course_types`.
ALTER TABLE `learning_paths` MODIFY `course_type_id` BIGINT NULL;
-- D4 — la production est plus stricte que la référence.
ALTER TABLE `courses` MODIFY `subcategory_id` BIGINT UNSIGNED NOT NULL;
-- D5 — tri des catégories.
ALTER TABLE `categories` MODIFY `order_no` INT NOT NULL DEFAULT 0;
-- D7/D9 — quiz obligatoire, seuil de réussite : NULL autorisé en production.
ALTER TABLE `quizzes` MODIFY `is_required` ENUM('yes','no') NULL DEFAULT 'no';
ALTER TABLE `quizzes` MODIFY `passing_percentage` INT NULL DEFAULT 80;
-- D10 — ordre des sections.
ALTER TABLE `sections` MODIFY `order_no` INT NULL DEFAULT 0;
-- D11 — attribution des points.
ALTER TABLE `user_points` MODIFY `point_master_id` BIGINT UNSIGNED NULL;

-- ---------------------------------------------------------------- §6 index manquants
-- Deux index portés par des colonnes PRÉSENTES, jamais créés parce que MyISAM ignore
-- les clés étrangères qui les auraient amenés. Ils reviendront avec la conversion.
DROP INDEX `lessons_course_id_foreign` ON `lessons`;
DROP INDEX `users_parent_id_foreign` ON `users`;
