From d7328ae9d339def2c5498fd62aab416e3cb2e322 Mon Sep 17 00:00:00 2001 From: Whykioh Date: Sat, 11 Jul 2026 09:20:26 +0200 Subject: [PATCH] Add pairing between users --- controllers/UserController.php | 27 +++++++++++++++++ index.php | 18 +++++++++++ models/User.php | 55 ++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+) diff --git a/controllers/UserController.php b/controllers/UserController.php index 81aea12..9087c42 100644 --- a/controllers/UserController.php +++ b/controllers/UserController.php @@ -72,4 +72,31 @@ class UserController { echo json_encode($result); } +} + +// --- INTERCEPTE LA VÉRIFICATION DU STATUT --- +public function pairingStatus($data) { + // Plus tard on prendra l'ID depuis le token JWT pour la sécurité + if (empty($data['user_id'])) { + http_response_code(400); + echo json_encode(["success" => false, "message" => "ID utilisateur requis."]); + return; + } + + $result = $this->userModel->getPairingStatus($data['user_id']); + http_response_code($result['success'] ? 200 : 400); + echo json_encode($result); +} + +// --- INTERCEPTE LA DÉLIAISON --- +public function unlink($data) { + if (empty($data['user_id'])) { + http_response_code(400); + echo json_encode(["success" => false, "message" => "ID utilisateur requis."]); + return; + } + + $result = $this->userModel->unlinkPartner($data['user_id']); + http_response_code($result['success'] ? 200 : 400); + echo json_encode($result); } \ No newline at end of file diff --git a/index.php b/index.php index e971cd1..cac3549 100644 --- a/index.php +++ b/index.php @@ -59,6 +59,24 @@ switch ($route) { echo json_encode(["error" => "Méthode non autorisée (POST requis)"]); } break; + + case 'pairing-status': + if ($method === 'POST') { // On utilise POST temporairement pour lire le user_id dans le JSON + $userController->pairingStatus($data); + } else { + http_response_code(405); + echo json_encode(["error" => "Méthode non autorisée (POST requis)"]); + } + break; + + case 'unlink-partner': + if ($method === 'POST') { + $userController->unlink($data); + } else { + http_response_code(405); + echo json_encode(["error" => "Méthode non autorisée (POST requis)"]); + } + break; default: http_response_code(404); diff --git a/models/User.php b/models/User.php index b39e28b..4c6aa2b 100644 --- a/models/User.php +++ b/models/User.php @@ -120,6 +120,61 @@ class User { return ["success" => false, "message" => "Erreur lors de la liaison."]; } } + + // --- 4. RÉCUPÉRER LE STATUT DE PAIRAGE --- + public function getPairingStatus($user_id) { + // On récupère les infos de l'utilisateur et de son partenaire s'il existe + $query = "SELECT u1.pairing_code, u1.partner_id, u2.username AS partner_username + FROM " . $this->table_name . " u1 + LEFT JOIN " . $this->table_name . " u2 ON u1.partner_id = u2.id + WHERE u1.id = :user_id LIMIT 1"; + + $stmt = $this->conn->prepare($query); + $stmt->bindParam(":user_id", $user_id); + $stmt->execute(); + + if ($stmt->rowCount() > 0) { + return ["success" => true, "data" => $stmt->fetch()]; + } + return ["success" => false, "message" => "Utilisateur introuvable."]; + } + + // --- 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."]; + } + + $partner_id = $user['partner_id']; + + try { + $this->conn->beginTransaction(); + + // 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(); + + $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."]; + } + } // --- UTILS / VALIDATIONS --- private function emailExists($email) {