apiKey = config('services.xf_api.key'); $this->superUserId = config('services.xf_api.user'); $this->apiUrl = config('services.xf_api.url'); } /** * @throws ConnectionException */ private function get(string $endpoint, ?int $customUserId = null ): mixed { $response = Http::withHeaders([ 'XF-Api-Key' => $this->apiKey, 'XF-Api-User' => $customUserId ?? $this->superUserId, ])->get("{$this->apiUrl}/{$endpoint}"); if( !$response->ok() ) return null; return $response->json(); } private function post(string $endpoint, ?int $customUserId = null, array $data = [] ): mixed { $response = Http::withHeaders([ 'XF-Api-Key' => $this->apiKey, 'XF-Api-User' => $customUserId ?? $this->superUserId, ])->post("{$this->apiUrl}/{$endpoint}", $data); if( !$response->ok() ) return null; return $response->json(); } public function getUserAlerts(int $userId): mixed { if( app(XenforoService::class)->getXfUser($userId)?->alerts_unviewed > 0 ) { Cache::forget("xf_alerts_{$userId}"); } return Cache::remember("xf_alerts_{$userId}", 60, function() use($userId) { return $this->get("alerts?page=1&cutoff=7days", $userId); }); } public function markAllNotificationsRead(int $userId): void { Cache::forget("xf_alerts_{$userId}"); $this->post("alerts/marl-all", $userId ); } public function getConversations(int $userId): mixed { return Cache::remember("xf_conversations_{$userId}", 60, function() use($userId) { return $this->get("conversations?page=1&receiver_id={$userId}", $userId); }); } }