diff --git a/TODO.md b/TODO.md index 897264e..ca38902 100644 --- a/TODO.md +++ b/TODO.md @@ -4,3 +4,4 @@ - [x] Fix `ShareLink::setPassword()`: also encrypt and store plain-text password, matching `create()` behavior - [x] Audit: confirm all remaining credential comparison sites use constant-time `hash_equals` or `password_verify` - [x] Fix `.gitignore`: anchor `vendor/` to root (`/vendor/`) so `app/public/assets/js/vendor/` (htmx, OverType, FilePond) is tracked +- [x] Fix migration `025_lowercase_languages.sql`: deduplicate languages before LOWER() to avoid UNIQUE constraint violation (`Néerlandais`/`néerlandais`) diff --git a/app/migrations/applied/025_lowercase_languages.sql b/app/migrations/applied/025_lowercase_languages.sql index 320dc33..b0b10f5 100644 --- a/app/migrations/applied/025_lowercase_languages.sql +++ b/app/migrations/applied/025_lowercase_languages.sql @@ -1,6 +1,14 @@ -- 025_lowercase_languages.sql -- Normalise les noms de langues en minuscules et recrée la vue avec ucfirst. +-- Supprimer les doublons (même nom après LOWER) en gardant l'id le plus petit +DELETE FROM languages +WHERE id NOT IN ( + SELECT MIN(id) + FROM languages + GROUP BY LOWER(name) +); + -- Normaliser les langues existantes UPDATE languages SET name = LOWER(name);