prepare(" INSERT INTO push_notifications (target_role, target_reference_id, target_compte_id, type, title, body, url, data_json, status, attempts, created_at) VALUES (:role, :ref_id, :compte_id, :type, :title, :body, :url, :data_json, 'pending', 0, NOW()) "); $stmt->execute([ ':role' => $targetRole, ':ref_id' => $targetReferenceId, ':compte_id' => $targetCompteId, ':type' => $type, ':title' => mb_substr($title, 0, 120), ':body' => mb_substr($body, 0, 255), ':url' => $url ? mb_substr($url, 0, 255) : null, ':data_json' => $dataJson, ]); return (int)$pdo->lastInsertId(); } /** * Helpers “RDV” : cible métier par reference_id (client_id / praticien_id) */ function resolve_compte_id(PDO $pdo, string $role, int $refId): int { $st = $pdo->prepare("SELECT id FROM compte WHERE role = ? AND reference_id = ? LIMIT 1"); $st->execute([$role, $refId]); return (int)($st->fetchColumn() ?: 0); } function push_rdv_to_client(PDO $pdo, int $clientId, string $title, string $body, string $url, array $data = []): ?int { $cid = resolve_compte_id($pdo, 'client', $clientId); return push_queue_notification($pdo, 'client', $clientId, ($cid>0?$cid:null), 'rdv', $title, $body, $url, $data); } function push_rdv_to_praticien(PDO $pdo, int $praticienId, string $title, string $body, string $url, array $data = []): ?int { $cid = resolve_compte_id($pdo, 'praticien', $praticienId); return push_queue_notification($pdo, 'praticien', $praticienId, ($cid>0?$cid:null), 'rdv', $title, $body, $url, $data); } function push_rdv_to_secretaire(PDO $pdo, int $secretaireCompteId, string $title, string $body, string $url, array $data = []): ?int { return push_queue_notification($pdo, 'secretaire', null, $secretaireCompteId, 'rdv', $title, $body, $url, $data); }