Skip to content

perf(web): deduplicar fetch de auth/notifications en AppBar (#277) - #337

Closed
nopestack wants to merge 2 commits into
GlobalEmergency:mainfrom
nopestack:fix/277-appbar-duplicate-calls
Closed

perf(web): deduplicar fetch de auth/notifications en AppBar (#277)#337
nopestack wants to merge 2 commits into
GlobalEmergency:mainfrom
nopestack:fix/277-appbar-duplicate-calls

Conversation

@nopestack

Copy link
Copy Markdown
Contributor

Closes #277

Contexto

Este issue fue revisado el 2026-07-01 (comentario de @vgpastor) al abordar los follow-ups de PR #280, proponiendo cerrarlo como "aceptable" ya que en ese momento AppBar era el único consumidor por render de /auth/me + /notifications/mine (ya paralelizadas vía Promise.all), por lo que envolver en React.cache() no aportaba.

Desde entonces, PR #280 introdujo getMe() / getNotificationUnread() en navigation-data.ts, ya envueltas en React.cache(), y varias páginas (recepcion/[intakeId], recursos/[resourceId], admin/layout, dashboard-layout vía getNavContext()) ya las usan. AppBar seguía haciendo sus propias llamadas api.GET sin pasar por ese cache — por lo que en cualquier página que renderiza AppBar y también usa esos loaders, /auth/me se duplicaba dentro del mismo request. Es decir, la condición que @vgpastor puso para reconsiderar ("salvo que se añada una capa de datos compartida") ya se cumplió.

Solución

AppBar ahora usa getMe()/getNotificationUnread() de navigation-data.ts en vez de llamadas api.GET propias. Cambio mínimo (1 archivo, 26 líneas) — no toca la lógica del next del login (issue #278, en PR separado).

Tests

pnpm --filter web test: 89/89. Build y lint limpios.

Si preferís mantener el criterio original de @vgpastor, no hay problema en cerrar esta PR — dejo el contexto completo para que decidan.

nopestack added 2 commits July 6, 2026 09:54
…ergency#277)

AppBar hacía sus propias llamadas a /auth/me y /notifications/mine en
cada página pública para usuarios autenticados, duplicando las
llamadas que otros consumidores (dashboard-layout, páginas de
recepción/recursos, etc.) ya hacen en la misma request a través de
getMe()/getNotificationUnread() en navigation-data.ts, ambas ya
envueltas en React cache(). Se reemplazan las llamadas directas a la
API por esos loaders cacheados, reutilizando el mismo round-trip
dentro de una request en vez de repetirlo por página.
@nopestack
nopestack requested a review from vgpastor as a code owner July 6, 2026 08:38
@vercel

vercel Bot commented Jul 6, 2026

Copy link
Copy Markdown

@nopestack is attempting to deploy a commit to the GlobalEmergency Team on Vercel.

A member of the Team first needs to authorize it.

vgpastor commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Cierro este PR en favor de #349, que trae exactamente el mismo cambio ya rebasado sobre main (que entretanto incorporó #336 y #338). La rama de este PR sale de un fork y tenía conflicto en app-bar.tsx que no podíamos resolver desde fuera del fork, así que reapliqué la resolución (solo el bloque de imports: se conserva el import mínimo de @/lib/auth y el de resolveAppBarCurrentPath) en #349.

El crédito del cambio queda anotado en #349. ¡Gracias! 🙏 (Cierra #277 igualmente vía #349.)


Generated by Claude Code

vgpastor added a commit that referenced this pull request Jul 6, 2026
)

Closes #277

Sustituye a **#337** (rama de fork con conflicto irresoluble desde fuera
del fork): mismo cambio, rebasado sobre `main` (que ya incluye #336 y
#338).

## Contexto
`AppBar` hacía sus propias llamadas `api.GET('/auth/me')` +
`api.GET('/notifications/mine')` sin pasar por el cache de datos. Desde
#280, `getMe()`/`getNotificationUnread()` (en `navigation-data.ts`)
están envueltas en `React.cache()` y varias páginas ya las usan, así que
en cualquier página que renderiza `AppBar` y también usa esos loaders,
`/auth/me` se duplicaba dentro del mismo request.

## Solución
`AppBar` usa `getMe()`/`getNotificationUnread()` en lugar de llamadas
`api.GET` propias. Cambio mínimo (1 fichero). Se preserva el
`Promise.all` (paralelismo intacto) y la lógica de `next` del login
(`resolveAppBarCurrentPath`, #278/#336).

## Resolución de conflicto
El conflicto era solo el bloque de imports de `app-bar.tsx`: se conserva
el import mínimo de `@/lib/auth` (el dedupe elimina el uso de
`api`/`getToken`/`authHeaders`) y se mantiene el import de
`resolveAppBarCurrentPath`. El cuerpo integra ambos cambios (dedupe +
`currentPath`).

## Crédito
Cambio original: PR #337.

---------

Co-authored-by: daniel <daniel@nopestack.dev>
Co-authored-by: Claude <noreply@anthropic.com>
@vgpastor vgpastor closed this Jul 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf(web): AppBar hace 2 llamadas API por página pública para autenticados

2 participants