Construcción de Controladores HTTP en Node.js con Firebase
Clase 13 de 22 • Curso de Firebase 5: Cloud Functions
Resumen
¿Cómo construir un controlador de API HTTP?
Crear un controlador de API HTTP es fundamental al desarrollar servicios que requieren comunicación con el backend. Iniciaremos estableciendo una conexión con nuestro entorno de desarrollo y revisando nuestro código base. En este ejercicio, trabajaremos en el archivo postController
y utilizaremos diversas utilidades y servicios, como Firestore, para gestionar datos de usuarios y enviar correos electrónicos.
¿Cómo instanciar la clase Post?
Para comenzar, llamaremos a la clase Post
. En el archivo postController
, definimos una constante que contiene una instancia de Post
. Nuestro objetivo es devolver el resultado de la función enviarPostSemana
, que toma un tema como parámetro. Esto está ubicado en el cuerpo cuando se llama a la API HTTP.
const postInstance = new Post();
return postInstance.enviarPostSemana(topico);
¿Cómo definir fechas iniciales y finales?
Definimos las fechas que determinarán el rango de posts que queremos obtener. Para esto, creamos dos constantes: fechaFin
y fechaInicial
, ambas inicializadas con la fecha actual. Ajustamos fechaInicial
, restando cinco días a fechaFin
para obtener el rango deseado.
const fechaFin = new Date();
const fechaInicial = new Date();
fechaInicial.setDate(fechaFin.getDate() - 5);
¿Cómo consultar colección de emails en Firestore?
Necesitamos recuperar los correos electrónicos de los usuarios almacenados en nuestra colección de Firestore. Creamos una variable emails
, luego consultamos Firestore para obtener los emails y los concatenamos en nuestra variable, permitiendo su futuro uso.
let emails = [];
admin.firestore().collection('emails_usuarios').get().then(snapshot => {
snapshot.forEach(doc => {
emails.push(doc.data().email);
});
});
¿Cómo obtener los posts de la semana?
Ahora, consultamos la colección de posts
en Firestore, asegurándonos de establecer las condiciones de fecha y estado de publicación para filtrar únicamente aquellos que deben ser enviados.
admin.firestore().collection('posts')
.where('fecha', '>=', fechaInicial)
.where('fecha', '<=', fechaFin)
.where('publicado', '==', true)
.get()
.then(snapshot => {
if (!snapshot.empty) {
enviarEmailConPosts(snapshot.docs);
}
});
¿Cómo enviar correos electrónicos?
Si hay posts para enviar, empleamos nuestra utilidad de plantillas para configurar el correo electrónico con los posts de la semana, y la enviamos utilizando nuestra clase Email
.
const emailObj = new Email();
emailObj.sendMail({
from: 'info@bloggeek.co',
to: emails,
subject: 'Videos Geek de la Semana',
html: generarHTMLConPosts(posts)
});
Configurar un controlador HTTP de API eficiente es esencial para la interacción correcta entre front y backend. Además, permite asegurar que la información se gestione de manera efectiva y segura al enviar correos automatizados con datos pertinentes. Por último, si no hay posts para enviar, podemos retornar un null
, garantizando que el proceso se maneje adecuadamente incluso en ausencia de nuevos datos.