onQueue('lemmy-posts'); } public static function dispatchForLemmy(): void { $communityId = config('lemmy.community_id'); $communityName = config('lemmy.community'); if ($communityId && $communityName) { self::dispatch(PlatformEnum::LEMMY, (string) $communityId, $communityName); } else { logger()->warning('Cannot dispatch Lemmy sync job: missing community configuration'); } } public function handle(): void { if ($this->platform === PlatformEnum::LEMMY) { $this->syncLemmyChannelPosts(); } } private function syncLemmyChannelPosts(): void { try { $api = new LemmyApiService(config('lemmy.instance')); $token = $this->getAuthToken($api); $api->syncChannelPosts($token, (int) $this->channelId, $this->channelName); logger()->info('Channel posts synced successfully', [ 'platform' => $this->platform->value, 'channel_id' => $this->channelId, 'channel_name' => $this->channelName ]); } catch (Exception $e) { logger()->error('Failed to sync channel posts', [ 'platform' => $this->platform->value, 'channel_id' => $this->channelId, 'error' => $e->getMessage() ]); throw $e; } } private function getAuthToken(LemmyApiService $api): string { $cachedToken = Cache::get('lemmy_jwt_token'); if ($cachedToken) { return $cachedToken; } $username = config('lemmy.username'); $password = config('lemmy.password'); if (!$username || !$password) { throw new PlatformAuthException(PlatformEnum::LEMMY, 'Missing credentials'); } $token = $api->login($username, $password); if (!$token) { throw new PlatformAuthException(PlatformEnum::LEMMY, 'Login failed'); } Cache::put('lemmy_jwt_token', $token, 3600); return $token; } }