Cómo insertar datos en Firestore con validación

Clase 17 de 32Curso de Firebase 5 para Web

Resumen

Crear un flujo sólido para insertar datos en Firestore con control de autenticación y manejo de promesas es clave para apps escalables. Aquí verás cómo configurar la instancia, crear un documento con ID automático y usar serverTimestamp del servidor, además de validar el usuario desde Firebase Auth y depurar errores comunes.

Configuración y preparación

Antes de insertar datos, se define en el constructor una variable db que guarda la instancia de Firestore. También se ajustan los settings para que los valores tipo DateTime se recuperen como Timestamp. Esto centraliza el acceso a la base y estandariza las fechas del servidor.

¿Cómo inicializar la base de datos con una instancia de Firestore?

  • Guardar la instancia en this.db para reutilizarla en varias funciones.
  • Configurar timestamps in snapshots para recibir fechas como Timestamp.
// En el constructor
this.db = firebase.firestore();
this.db.settings({ timestampsInSnapshots: true });

¿Para qué sirve timestamps in snapshots?

  • Convierte fechas almacenadas como DateTime en objetos Timestamp al leerlos.
  • Facilita cálculos de tiempo y ordenamiento.

Inserción del documento y manejo de resultados

La creación del post se realiza con collection('post') y add(...). Esto permite que Firestore genere un ID automático. Además, la fecha se asigna desde el servidor con firebase.firestore.FieldValue.serverTimestamp() para evitar desajustes locales.

¿Cómo crear un documento con ID automático e información del post?

  • Usar add para delegar a Firestore la creación del ID.
  • Enviar un objeto JavaScript con campos: UID, autor, título, descripción, link de imagen, link de video y fecha.
this.db
  .collection('post')
  .add({
    uid: uidUsuario,
    autor: emailUsuario,
    titulo,
    descripcion,
    linkImagen,
    linkVideo,
    fecha: firebase.firestore.FieldValue.serverTimestamp()
  })
  .then(ref => {
    console.log('ID del post:', ref.id);
  })
  .catch(error => {
    console.error('Error creando el post:', error);
  });

¿Cómo obtener serverTimestamp del servidor?

  • Usar FieldValue.serverTimestamp() entrega fecha y hora del servidor.
  • Evita inconsistencias por reloj del cliente.

Validación de usuario y prueba en la interfaz

El controlador de post crea la instancia de la clase, valida si el usuario está autenticado y, solo entonces, llama a la función de creación. Se muestran mensajes según el éxito o el error, y se depuran fallos como variables mal nombradas.

¿Cómo validar que el usuario esté autenticado antes de crear el post?

  • Recuperar el usuario con firebase.auth().currentUser.
  • Si es null: informar que debe autenticarse y salir.
const user = firebase.auth().currentUser;
if (user === null) {
  // Mostrar alerta: para crear el post debe estar autenticado.
  return;
}

¿Qué campos se envían y cómo se reporta el resultado?

  • Enviar uid del usuario, email, titulo, descripcion, linkImagen, linkVideo.
  • Si la promesa resuelve: imprimir “Post creado correctamente”.
  • Si falla: mostrar “Error creando el post” y el detalle del error.

¿Cómo depurar un error común de variables mal nombradas?

  • Caso real: “autor no está definido”. La causa fue usar un nombre distinto al declarado (por ejemplo, emailUser en lugar de autor).
  • Solución: alinear el nombre de la variable con la clave del objeto antes de guardar y probar de nuevo.

¿Te gustaría que ampliemos con lectura en tiempo real y consultas filtradas en Firestore? Deja tus dudas o casos de uso en los comentarios.