onQueue('posthog'); } public function handle(PostHogService $postHog): void { if (! PostHogService::isEnabled()) { return; } $workspace = Workspace::query() ->with('account.owner') ->find($this->workspaceId); $account = $workspace?->account; if ($account === null) { return; } $workspacePlatforms = $this->connectedPlatformSlugs( SocialAccount::query()->where('workspace_id', $workspace->id), ); $accountPlatforms = $this->connectedPlatformSlugs( SocialAccount::query()->whereIn('workspace_id', $account->workspaces()->select('id')), ); $postHog->groupIdentify('workspace', (string) $workspace->id, [ 'connected_platforms' => $workspacePlatforms, ]); $postHog->groupIdentify('account', (string) $account->id, [ 'connected_platforms' => $accountPlatforms, ]); $owner = $account->owner; if ($owner === null) { return; } $postHog->identify($owner->id, [ 'connected_platforms' => $accountPlatforms, ]); } /** * @param Builder $query * @return list */ private function connectedPlatformSlugs(Builder $query): array { return $query ->where('status', Status::Connected) ->orderBy('id') ->get() ->map(fn (SocialAccount $account): string => $account->platform->value) ->unique() ->values() ->all(); } }