import { findUserByClerkId } from "~/models/user"; /** * Builds a map of teamId -> manager username (or displayName fallback). * Accepts any array of objects that have a `team` with `id` and `ownerId`. */ export async function buildOwnerMap( slots: Array<{ team: { id: string; ownerId: string | null } }> ): Promise> { const ownerIds = slots .map((s) => s.team.ownerId) .filter((id): id is string => id !== null); const uniqueOwnerIds = [...new Set(ownerIds)]; const ownerEntries = await Promise.all( uniqueOwnerIds.map(async (ownerId) => { const user = await findUserByClerkId(ownerId); const name = user?.username || user?.displayName || null; return name ? { ownerId, name } : null; }) ); const ownerByClerkId = new Map( ownerEntries .filter((e): e is NonNullable => e !== null) .map((e) => [e.ownerId, e.name]) ); const ownerMap: Record = {}; for (const slot of slots) { const name = slot.team.ownerId ? ownerByClerkId.get(slot.team.ownerId) : undefined; if (name) { ownerMap[slot.team.id] = name; } } return ownerMap; }