diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 5cadece6ee..7248ec3882 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -3469,23 +3469,23 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') $document->setAttribute('$collectionId', $collection->getId()); static $relatedCollectionsCache = []; - + $relationships = \array_filter( $collection->getAttribute('attributes', []), fn ($attribute) => $attribute->getAttribute('type') === Database::VAR_RELATIONSHIP ); - + // First collect all required related collection IDs $relatedCollectionIds = []; foreach ($relationships as $relationship) { $relatedCollectionId = $relationship->getAttribute('relatedCollection'); $cacheKey = 'database_' . $database->getInternalId() . '_' . $relatedCollectionId; - + if (!isset($relatedCollectionsCache[$cacheKey])) { $relatedCollectionIds[$cacheKey] = $relatedCollectionId; } } - + // Fetch all required collections in a single batch if needed if (!empty($relatedCollectionIds)) { foreach ($relatedCollectionIds as $cacheKey => $relatedCollectionId) { diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index 9d226e54de..ee879057e3 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -1919,7 +1919,7 @@ App::post('/v1/functions/:functionId/executions') static $functionCache = []; static $deploymentCache = []; static $buildCache = []; - + // Get function document with caching $cacheKey = $functionId; if (!isset($functionCache[$cacheKey])) { diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index cc3456a8e5..7f03045e7f 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -810,35 +810,35 @@ App::get('/v1/users/:userId/memberships') } $memberships = $user->getAttribute('memberships', []); - + // Get all team IDs to fetch in a single query $teamIds = array_map(function ($membership) { return $membership->getAttribute('teamId'); }, $memberships); - + // Fetch all teams in a single query if there are any memberships $teams = []; if (!empty($teamIds)) { $teamsDocuments = $dbForProject->find('teams', [ Query::equal('$id', $teamIds), ]); - + // Index teams by ID for quick lookup foreach ($teamsDocuments as $team) { $teams[$team->getId()] = $team; } } - + // Now map memberships with team data $memberships = array_map(function ($membership) use ($teams, $user) { $teamId = $membership->getAttribute('teamId'); $team = $teams[$teamId] ?? null; - + $membership ->setAttribute('teamName', $team ? $team->getAttribute('name') : '') ->setAttribute('userName', $user->getAttribute('name')) ->setAttribute('userEmail', $user->getAttribute('email')); - + return $membership; }, $memberships);