perf(web): deduplicar fetch de auth/notifications en AppBar (#277) - #337
Closed
nopestack wants to merge 2 commits into
Closed
perf(web): deduplicar fetch de auth/notifications en AppBar (#277)#337nopestack wants to merge 2 commits into
nopestack wants to merge 2 commits into
Conversation
…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 is attempting to deploy a commit to the GlobalEmergency Team on Vercel. A member of the Team first needs to authorize it. |
Contributor
|
Cierro este PR en favor de #349, que trae exactamente el mismo cambio ya rebasado sobre 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
AppBarera el único consumidor por render de/auth/me+/notifications/mine(ya paralelizadas víaPromise.all), por lo que envolver enReact.cache()no aportaba.Desde entonces, PR #280 introdujo
getMe()/getNotificationUnread()ennavigation-data.ts, ya envueltas enReact.cache(), y varias páginas (recepcion/[intakeId],recursos/[resourceId],admin/layout,dashboard-layoutvíagetNavContext()) ya las usan.AppBarseguía haciendo sus propias llamadasapi.GETsin pasar por ese cache — por lo que en cualquier página que renderizaAppBary también usa esos loaders,/auth/mese 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
AppBarahora usagetMe()/getNotificationUnread()denavigation-data.tsen vez de llamadasapi.GETpropias. Cambio mínimo (1 archivo, 26 líneas) — no toca la lógica delnextdel 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.