From 45bea6d60d78f3dbdaf922983001a1da1e572e9b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sun, 5 Jul 2026 10:42:39 +0000 Subject: [PATCH] Optimize tenant access resolution by avoiding redundant database lookups Co-authored-by: brycejohnson1417 <257422776+brycejohnson1417@users.noreply.github.com> --- .jules/bolt.md | 3 +++ lib/application/auth/tenant-access-selection.ts | 6 +++--- lib/application/auth/tenant-access.ts | 16 +++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 .jules/bolt.md diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000..79e9d84 --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2024-07-05 - Avoid redundant database queries for cached Workspace Service +**Learning:** React's `cache` memoizes the promise returned by `getWorkspaceExperienceBySlug(slug)`. If we already have the `Organization` object (e.g. from `selectMembershipOrganization` or `organizations.findFirstByWorkspaceEmailDomain`), calling `getWorkspaceExperienceBySlug(slug)` creates a redundant database query in `organizations.findBySlug(slug)` since we just fetched it. +**Action:** When the application layer already holds the `organization` object, bypass `getWorkspaceExperienceBySlug` and call `compileWorkspaceExperience({ slug, organization })` synchronously to save an unnecessary database query. Ensure that we don't access `compiled.organization` as `CompiledWorkspaceExperience` does not return the `organization` property. diff --git a/lib/application/auth/tenant-access-selection.ts b/lib/application/auth/tenant-access-selection.ts index 75e45ac..93362ca 100644 --- a/lib/application/auth/tenant-access-selection.ts +++ b/lib/application/auth/tenant-access-selection.ts @@ -8,11 +8,11 @@ export interface MembershipSelectionOrganization { slug: string; } -export function selectMembershipOrganization(input: { +export function selectMembershipOrganization(input: { memberships: MembershipSelectionMember[]; - organizationsById: Map; + organizationsById: Map; requestedSlug?: string | null; -}) { +}): T | null { const requestedSlug = input.requestedSlug?.trim() || null; for (const membership of input.memberships) { diff --git a/lib/application/auth/tenant-access.ts b/lib/application/auth/tenant-access.ts index 09f0d27..f0eaa53 100644 --- a/lib/application/auth/tenant-access.ts +++ b/lib/application/auth/tenant-access.ts @@ -12,6 +12,7 @@ import { } from "@/lib/application/auth/tenant-routing"; import { selectMembershipOrganization } from "@/lib/application/auth/tenant-access-selection"; import { getWorkspaceExperienceBySlug } from "@/lib/application/workspace/workspace-service"; +import { compileWorkspaceExperience } from "@/lib/platform/workspace/compiler"; import { OrganizationMemberRepository } from "@/lib/infrastructure/supabase/organization-member-repository"; import { OrganizationRepository } from "@/lib/infrastructure/supabase/organization-repository"; import { resolveWorkspaceTemplateForEmailDomain } from "@/lib/platform/workspace/registry"; @@ -110,7 +111,10 @@ export async function resolveTenantAccess( }); if (organization) { - const workspace = await getWorkspaceExperienceBySlug(organization.slug); + const workspace = compileWorkspaceExperience({ + slug: organization.slug, + organization, + }); return existingWorkspaceAccess({ slug: organization.slug, name: organization.name, @@ -124,7 +128,10 @@ export async function resolveTenantAccess( if (emailDomain) { const workspaceOrganization = await organizations.findFirstByWorkspaceEmailDomain(emailDomain); if (workspaceOrganization && (!requestedSlug || workspaceOrganization.slug === requestedSlug)) { - const workspace = await getWorkspaceExperienceBySlug(workspaceOrganization.slug); + const workspace = compileWorkspaceExperience({ + slug: workspaceOrganization.slug, + organization: workspaceOrganization, + }); return existingWorkspaceAccess({ slug: workspaceOrganization.slug, name: workspaceOrganization.name, @@ -143,7 +150,10 @@ export async function resolveTenantAccess( if (guessed.slug) { const existingOrganization = await organizations.findBySlug(guessed.slug).catch(() => null); if (existingOrganization) { - const workspace = await getWorkspaceExperienceBySlug(existingOrganization.slug); + const workspace = compileWorkspaceExperience({ + slug: existingOrganization.slug, + organization: existingOrganization, + }); return existingWorkspaceAccess({ slug: existingOrganization.slug, name: existingOrganization.name,