CodeForge

Angular 21 de Cero a Experto / HTTP y datos

Reto: la capa de datos de Mi Bolsillo con caché

Reto35 min60 XP

Vas a construir la columna vertebral de datos de "Mi Bolsillo": un servicio que lee y escribe gastos contra una "API", con una caché que ahorra peticiones e invalidación correcta tras cada mutación. Es el patrón profesional que evita tanto las peticiones de más como el bug de mostrar datos viejos. Hoy lo dejas listo con la lógica probada en vivo.

Reto

Servicio de datos con caché e invalidación

Media35 min60 XP(×2 sin mirar la solución)

Qué debes construir

Un RepositorioGastos que envuelva la "API" con caché:

  1. Lecturas cacheadas: listar() devuelve de la caché si está fresca; si no, "pide al servidor", cachea con TTL y devuelve. Cuenta las peticiones reales.
  2. Escrituras con invalidación: crear(gasto), actualizar(gasto) y eliminar(id) hacen la mutación e INVALIDAN la caché de la lista, para que la próxima lectura sea fresca.
  3. Estadísticas: expón cuántas peticiones reales se hicieron y cuántas se sirvieron de caché, para demostrar el ahorro.

Reglas

  • La caché debe tener TTL (expiración por tiempo) además de invalidación por escritura.
  • Toda mutación (crear/actualizar/eliminar) invalida la caché de la lista.
  • Una lectura tras otra sin mutaciones no debe repetir la petición (mientras esté fresca).

35:00

Cuando estés listo, arranca el reloj.

Qué sigue

Terminaste el módulo de datos: tu app puede leer y escribir contra un backend, con estados, interceptores y caché. A medida que la app crece, ese estado —el que viene del servidor y el propio de la UI— necesita organizarse a gran escala. El próximo módulo es el estado a gran escala: stores de features, NgRx SignalStore, arquitectura por features y el patrón facade. Cómo estructurar el estado de una app que vive años.