Fix unlink method

This commit is contained in:
2026-07-12 16:10:25 +02:00
parent dd32a2dd12
commit c74140aaad
+48 -32
View File
@@ -150,44 +150,60 @@ class User {
} }
// --- 5. CASSER LE LIEN (DÉLIAISON) --- // --- 5. CASSER LE LIEN (DÉLIAISON) ---
public function unlinkPartner($user_id) { public function unlinkPartner($userId) {
// 1. On cherche d'abord l'ID du partenaire actuel // 1. On récupère l'ID du partenaire
$query = "SELECT partner_id FROM " . $this->table_name . " WHERE id = :user_id LIMIT 1"; // (Pense bien à utiliser $this->conn ou $this->db selon ce que tu as corrigé tout à l'heure)
$stmt = $this->conn->prepare($query); $stmt = $this->db->prepare("SELECT partner_id FROM users WHERE id = ?");
$stmt->bindParam(":user_id", $user_id); $stmt->execute([$userId]);
$stmt->execute(); $partnerId = $stmt->fetchColumn();
$user = $stmt->fetch();
if (!$user || is_null($user['partner_id'])) {
return ["success" => false, "message" => "Tu n'es lié à personne."];
}
$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 { // 3. La distribution des biens : on s'assure que chacun a sa copie
$this->conn->beginTransaction(); 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 // 4. On repasse TOUS les films de ces deux utilisateurs en perso
$query1 = "UPDATE " . $this->table_name . " SET partner_id = NULL WHERE id = :user_id"; $stmt = $this->db->prepare("UPDATE movies SET is_common = 0 WHERE user_id IN (?, ?)");
$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 (?, ?)");
$stmt->execute([$userId, $partnerId]); $stmt->execute([$userId, $partnerId]);
$this->conn->commit(); // 5. On casse le lien dans la table users
return ["success" => true, "message" => "Comptes déliés avec succès."]; $stmt = $this->db->prepare("UPDATE users SET partner_id = NULL WHERE id IN (?, ?)");
} catch (Exception $e) { $stmt->execute([$userId, $partnerId]);
$this->conn->rollBack();
return ["success" => false, "message" => "Erreur lors de la déliaison."]; return ["success" => true, "message" => "Lien rompu et films sauvegardés dans les listes persos."];
} }
return ["success" => false, "message" => "Pas de partenaire trouvé."];
} }
// --- UTILS / VALIDATIONS --- // --- UTILS / VALIDATIONS ---