Estructura base de una app Angular con guards

Resumen

Antes de escribir lógica en una aplicación Angular, conviene dejar lista la arquitectura base. Aquí verás cómo crear componentes, servicios, modelos y un guard para proteger rutas usando el Angular CLI, pensado para quienes están construyendo una app de chat con autenticación e integración con Firestore y Gemini.

Esta preparación inicial te ahorra fricción después: cuando empieces a programar, ya tendrás cada carpeta y cada archivo en su lugar.

Cómo creo componentes en Angular con el CLI

Los componentes son las pantallas o piezas visuales de tu app. En este proyecto necesitas dos: uno para autenticación y otro para el chat.

Desde la terminal, dentro de source/app, ejecutas el comando de generación. La bandera --skip-tests evita que se cree el archivo de testing, útil cuando quieres mantener el proyecto liviano.

bash ng generate component components/auth --skip-tests ng generate component components/chat --skip-tests

Cada componente generado trae tres archivos: el HTML como template, el TS como controller y el CSS como cascada de estilos [0:30]. Esa tripleta es la estructura estándar de cualquier componente Angular.

¿Qué hace la bandera --skip-tests en Angular CLI? Le indica al CLI que no genere el archivo .spec.ts de pruebas unitarias junto al componente o servicio. Es práctica común cuando no vas a escribir tests de inmediato.

Por qué separar auth y chat en componentes distintos

Cada componente representa una pantalla con responsabilidad clara. El de auth maneja el flujo de inicio de sesión, y el de chat aparece solo después de que el usuario se autentica. Esa separación facilita aplicar el guard más adelante.

Qué servicios necesita una app de chat con Firestore y Gemini

Los servicios concentran la lógica de negocio. En este proyecto creas cuatro, todos dentro de una carpeta services.

  • auth: maneja el flujo de autenticación.
  • chat: gestiona la lógica de mensajes y conversación.
  • firestore: encapsula la interacción con la base de datos Firestore.
  • gemini: contiene la lógica de negocio para integrarte con Gemini.

bash ng generate service services/auth ng generate service services/chat ng generate service services/firestore ng generate service services/gemini

La idea de fondo es simple: los componentes muestran y reaccionan, los servicios ejecutan. Si mañana cambias de proveedor de IA o de base de datos, solo tocas el servicio correspondiente.

¿Para qué sirve un service en Angular? Es una clase inyectable donde concentras lógica reutilizable: llamadas a APIs, autenticación, acceso a base de datos. Así evitas duplicar código entre componentes.

Cómo proteger rutas en Angular con un guard CanActivate

Un guard decide si un usuario puede acceder o no a una ruta. Para esta app necesitas uno solo, encargado de bloquear el acceso al chat cuando no hay sesión iniciada.

bash ng generate guard guards/auth

Al ejecutar el comando, el CLI te pregunta qué tipo de guard quieres. Seleccionas CanActivate, que es la forma más simple y la que se activa antes de entrar a una ruta [2:30]. Si la condición se cumple, el usuario pasa; si no, lo rediriges.

Cuándo usar CanActivate frente a otros guards

CanActivate es ideal para validar autenticación en la entrada. Existen otros como CanDeactivate o CanLoad, pero para un flujo básico de login y chat, CanActivate cubre el caso sin complicar la implementación.

Dónde van los modelos en un proyecto Angular

Los modelos definen la forma de los datos que circulan por tu app. Aquí creas una carpeta models dentro de source/app con dos archivos:

  • usuario.ts para representar al usuario autenticado.
  • chat.ts para los mensajes y estructuras de conversación.

Estos archivos quedan vacíos por ahora. Los rellenarás cuando trabajes los mensajes de chat y las interacciones con las APIs en clases posteriores. Tener la carpeta lista evita improvisar la ubicación más adelante.

Qué queda listo después de inicializar la estructura

Con esto, el esqueleto del proyecto queda armado y listo para recibir lógica. La estructura final dentro de source/app incluye:

  • Carpeta components con auth y chat.
  • Carpeta services con auth, chat, firestore y gemini.
  • Carpeta guards con auth.
  • Carpeta models con usuario.ts y chat.ts.

A partir de aquí, cada clase siguiente toma una pieza y la implementa: primero la autenticación, luego el chat, después la conexión con Firestore y la integración con Gemini.

¿Tú prefieres montar toda la estructura antes de programar o vas creando archivos sobre la marcha? Cuéntame en los comentarios cómo organizas tus proyectos Angular.