From c74140aaadc169f09e21babaf840c0192e852cda Mon Sep 17 00:00:00 2001 From: Whykioh Date: Sun, 12 Jul 2026 16:10:25 +0200 Subject: [PATCH] Fix unlink method --- models/User.php | 80 +++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/models/User.php b/models/User.php index a83b708..d283dee 100644 --- a/models/User.php +++ b/models/User.php @@ -150,44 +150,60 @@ class User { } // --- 5. CASSER LE LIEN (DÉLIAISON) --- - public function unlinkPartner($user_id) { - // 1. On cherche d'abord l'ID du partenaire actuel - $query = "SELECT partner_id FROM " . $this->table_name . " WHERE id = :user_id LIMIT 1"; - $stmt = $this->conn->prepare($query); - $stmt->bindParam(":user_id", $user_id); - $stmt->execute(); - - $user = $stmt->fetch(); - if (!$user || is_null($user['partner_id'])) { - return ["success" => false, "message" => "Tu n'es lié à personne."]; - } + public function unlinkPartner($userId) { + // 1. On récupère l'ID du partenaire + // (Pense bien à utiliser $this->conn ou $this->db selon ce que tu as corrigé tout à l'heure) + $stmt = $this->db->prepare("SELECT partner_id FROM users WHERE id = ?"); + $stmt->execute([$userId]); + $partnerId = $stmt->fetchColumn(); - $partner_id = $user['partner_id']; + if ($partnerId) { + // 2. On récupère la liste exacte de tous les films en commun + $stmt = $this->db->prepare(" + SELECT tmdb_id, title, poster_path, media_type + FROM movies + WHERE is_common = 1 AND user_id IN (?, ?) + GROUP BY tmdb_id, title, poster_path, media_type + "); + $stmt->execute([$userId, $partnerId]); + $commonMovies = $stmt->fetchAll(PDO::FETCH_ASSOC); - try { - $this->conn->beginTransaction(); + // 3. La distribution des biens : on s'assure que chacun a sa copie + foreach ($commonMovies as $movie) { + foreach ([$userId, $partnerId] as $uid) { + // On vérifie si l'utilisateur possède déjà la ligne physique du film + $checkStmt = $this->db->prepare("SELECT id FROM movies WHERE user_id = ? AND tmdb_id = ?"); + $checkStmt->execute([$uid, $movie['tmdb_id']]); + + // S'il ne l'a pas, on lui insère sa copie perso + if (!$checkStmt->fetch()) { + $insertStmt = $this->db->prepare(" + INSERT INTO movies (user_id, tmdb_id, title, poster_path, media_type, is_common) + VALUES (?, ?, ?, ?, ?, 0) + "); + $insertStmt->execute([ + $uid, + $movie['tmdb_id'], + $movie['title'], + $movie['poster_path'], + $movie['media_type'] + ]); + } + } + } - // On passe le partner_id à NULL pour les deux utilisateurs - $query1 = "UPDATE " . $this->table_name . " SET partner_id = NULL WHERE id = :user_id"; - $stmt1 = $this->conn->prepare($query1); - $stmt1->bindParam(":user_id", $user_id); - $stmt1->execute(); - - $query2 = "UPDATE " . $this->table_name . " SET partner_id = NULL WHERE id = :partner_id"; - $stmt2 = $this->conn->prepare($query2); - $stmt2->bindParam(":partner_id", $partner_id); - $stmt2->execute(); - - // 2. On repasse TOUS leurs films en mode perso (is_common = 0) - $stmt = $this->conn->prepare("UPDATE movies SET is_common = 0 WHERE user_id IN (?, ?)"); + // 4. On repasse TOUS les films de ces deux utilisateurs en perso + $stmt = $this->db->prepare("UPDATE movies SET is_common = 0 WHERE user_id IN (?, ?)"); $stmt->execute([$userId, $partnerId]); - $this->conn->commit(); - return ["success" => true, "message" => "Comptes déliés avec succès."]; - } catch (Exception $e) { - $this->conn->rollBack(); - return ["success" => false, "message" => "Erreur lors de la déliaison."]; + // 5. On casse le lien dans la table users + $stmt = $this->db->prepare("UPDATE users SET partner_id = NULL WHERE id IN (?, ?)"); + $stmt->execute([$userId, $partnerId]); + + return ["success" => true, "message" => "Lien rompu et films sauvegardés dans les listes persos."]; } + + return ["success" => false, "message" => "Pas de partenaire trouvé."]; } // --- UTILS / VALIDATIONS ---