Add pairing between users

This commit is contained in:
2026-07-11 09:20:26 +02:00
parent 81b1b3b835
commit d7328ae9d3
3 changed files with 100 additions and 0 deletions
+27
View File
@@ -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);
}
+18
View File
@@ -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);
+55
View File
@@ -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) {