Mezclar datos de dos rutas en la DB, para generar un Add Collections to UI

Muy buenas a todos. No tengo claro si este post debería ir aquí, o en la categoría de Interfaz.

Tengo, por un lado, una ruta dentro de mi DB Cloud, con un catálogo de productos, el cual incluye su código, su nombre, su precio, su imagen, etc.

Por otro lado, necesito que cada cliente pueda “elegir” productos, para generar una especie de “carrito”, que será guardado también en la DB Cloud, en la carpeta del cliente. En esa ruta se guardará el código del producto (similar al codigo del catálogo), la cantidad elegida, y algunos otros datos.

El problema es el siguiente: Requiero, cuando el usuario ingresa a este “carrito”, mostrar una lista con todos los productos por el elegidos (trayendo la info de su carpeta personal en la DB Cloud) pero para cada uno de los productos, mostrar el nombre, la imagen, y el precio (trayendolo del catálogo).

¿Alguien sabe como podría resolverlo? Lo que a priori se me ocurre, es traer de la DB Cloud el carrito del cliente, transformarlo en un Array, hacer un bucle for y por cada item buscar en el catálogo los datos que necesito, guardar todo eso en la DB Local, y de ahí generar la lista, pero estimo que será MUY ineficiente, no solo a nivel tiempo (ejecutar toda esa secuencia al entrar al “carrito”) sino también a nivel API calls, ya que con el bucle for generará una llamada a Firebase por cada producto. ¿Existe alguna manera mejor de poder resolverlo?

Muchisimas gracias de antemano!
Saludos,

Aclaro, por las dudas, que no puedo guardar en la propia carpeta del cliente imagen, nombre y precio, ya que estos estarán sujetos a modificación y por tanto deberían estar linkeados al catalogo para poder actualizarse.

Para eso trabaja con la base de datos local, ya que como dices, el estar leyendo los productos del carrito desde el firebase, te saldrá alta la factura en Firebase, cada vez que un usuario agrega un producto, guárdalo en la local storage, con el save local storage, cuando entres al carrito, renderizas esa lista con el get local, y cuando acepte el pedido, guardas esa local en la cloud, en un campo de productos del carrito, le introduces todo lo que viene del get local, y lo guardaras como un objeto, y ya luego los puedes consultar

Y muy importante, cuando aceptes el pedido, cuando hayas guardado en la cloud, eliminas la base de datos local. De hecho eso lo puedes encontrar en los videos de la app tipo uber eats, ahí se explica