From 9d23a03bc28181b4f5ccd3fc160f3b0a473abaa5 Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Sun, 20 Sep 2026 01:10:40 +0200 Subject: [PATCH] test encoooore --- .../migrations/0002_fix_user_foreign_key.py | 125 ++++++++++-------- 1 file changed, 70 insertions(+), 55 deletions(-) diff --git a/backend/time_tracking/migrations/0002_fix_user_foreign_key.py b/backend/time_tracking/migrations/0002_fix_user_foreign_key.py index f0b60df..68882e8 100644 --- a/backend/time_tracking/migrations/0002_fix_user_foreign_key.py +++ b/backend/time_tracking/migrations/0002_fix_user_foreign_key.py @@ -2,76 +2,91 @@ from django.db import migrations def fix_user_foreign_key(apps, schema_editor): - with schema_editor.connection.cursor() as cursor: - # Récupère le vrai nom de la FK actuellement présente + connection = schema_editor.connection + + with connection.cursor() as cursor: + # Récupère toutes les contraintes de time_tracking_timeentry cursor.execute(""" - SELECT CONSTRAINT_NAME + SELECT + CONSTRAINT_NAME, + COLUMN_NAME, + REFERENCED_TABLE_NAME, + REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'time_tracking_timeentry' AND COLUMN_NAME = 'user_id' - AND REFERENCED_TABLE_NAME = 'auth_user' + """) + + constraints = cursor.fetchall() + + print("DEBUG FK FOUND:", constraints) + + old_constraint = None + + for ( + constraint_name, + column_name, + referenced_table, + referenced_column, + ) in constraints: + if referenced_table: + old_constraint = constraint_name + + print( + "DEBUG USER FK:", + constraint_name, + "->", + referenced_table, + referenced_column, + ) + + break + + if old_constraint: + print( + f"Suppression de l'ancienne FK : {old_constraint}" + ) + + cursor.execute( + f""" + ALTER TABLE `time_tracking_timeentry` + DROP FOREIGN KEY `{old_constraint}` + """ + ) + + # Vérifie si la bonne FK existe déjà + cursor.execute(""" + SELECT + CONSTRAINT_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'time_tracking_timeentry' + AND COLUMN_NAME = 'user_id' + AND REFERENCED_TABLE_NAME = 'users_user' AND REFERENCED_COLUMN_NAME = 'id' """) - row = cursor.fetchone() + correct_constraint = cursor.fetchone() - if not row: - # La FK vers auth_user n'existe déjà plus. - # On vérifie simplement si la bonne FK existe. - cursor.execute(""" - SELECT CONSTRAINT_NAME - FROM information_schema.KEY_COLUMN_USAGE - WHERE TABLE_SCHEMA = DATABASE() - AND TABLE_NAME = 'time_tracking_timeentry' - AND COLUMN_NAME = 'user_id' - AND REFERENCED_TABLE_NAME = 'users_user' - AND REFERENCED_COLUMN_NAME = 'id' - """) - - if cursor.fetchone(): - return - - raise RuntimeError( - "Impossible de trouver la FK de time_tracking_timeentry.user_id" + if correct_constraint: + print( + "La FK vers users_user existe déjà :", + correct_constraint[0], ) + return - old_constraint = row[0] + print("Création de la FK vers users_user") - # Supprime la FK actuelle - cursor.execute( - f""" - ALTER TABLE time_tracking_timeentry - DROP FOREIGN KEY `{old_constraint}` - """ - ) - - # Crée la FK correcte vers users_user cursor.execute(""" - ALTER TABLE time_tracking_timeentry - ADD CONSTRAINT time_tracking_timeentry_user_id_users_user_fk - FOREIGN KEY (user_id) - REFERENCES users_user (id) + ALTER TABLE `time_tracking_timeentry` + ADD CONSTRAINT `time_tracking_timeentry_user_id_users_user_fk` + FOREIGN KEY (`user_id`) + REFERENCES `users_user` (`id`) ON DELETE CASCADE """) - -def reverse_user_foreign_key(apps, schema_editor): - with schema_editor.connection.cursor() as cursor: - # Supprime la FK users_user - cursor.execute(""" - ALTER TABLE time_tracking_timeentry - DROP FOREIGN KEY time_tracking_timeentry_user_id_users_user_fk - """) - - # Recrée la FK vers auth_user - cursor.execute(""" - ALTER TABLE time_tracking_timeentry - ADD CONSTRAINT time_tracking_timeentry_user_id_auth_user_fk - FOREIGN KEY (user_id) - REFERENCES auth_user (id) - ON DELETE CASCADE - """) + print("FK corrigée avec succès.") class Migration(migrations.Migration): @@ -83,6 +98,6 @@ class Migration(migrations.Migration): operations = [ migrations.RunPython( fix_user_foreign_key, - reverse_user_foreign_key, + migrations.RunPython.noop, ), ] \ No newline at end of file