Consultas Asíncronas y Futuros en Scala con Slick

Clase 29 de 36Curso de Scala básico

Resumen

¿Qué son los controladores en un proyecto con Slick?

Pasemos a desentrañar uno de los aspectos más fascinantes del desarrollo de aplicaciones en Scala: los controladores. En este contexto, controladores se refiere a dos secciones principales: los repositorios para el acceso a la base de datos y la validación de datos. Aquí, nos enfocaremos en cómo hacer consultas a la base de datos usando programación asíncrona.

¿Cómo se implementa la programación asíncrona en Scala?

Para lograr programación asíncrona en Scala, utilizamos la estructura llamada Future. Un Future encapsula computaciones asíncronas de manera sencilla, similar a las promesas en JavaScript, aunque con diferencias específicas. En este curso, nos enfocaremos en Future, pero también existen bibliotecas como Monix, CATS.io, o ZIO que ofrecen alternativas para desarrollo asíncrono en Scala.

¿Qué son las for comprehsions y cómo se usan?

Las for comprensions simplifican la escritura de programas, tanto síncronos como asíncronos, y son compatibles con listas, Options, Trys, o Eithers. Permiten encadenar operaciones de manera elegante y comprensible, evitando la verbosidad del código, especialmente cuando se trata de iteraciones y transformaciones de datos.

Creación de consultas en nuestra base de datos

Ahora, vamos a profundizar en cómo puedes crear consultas en tu base de datos utilizando los repositorios en Scala.

¿Cómo consultar todas las películas disponibles?

Para hacer una consulta que recupere todas las películas, primero creamos un valor a partir de nuestra MovieTable. Este proceso es análogo a tratar una tabla como una lista en términos de cómo podemos manipularla y consultar sus datos.

val q = movieQuery // Una representación de la tabla MovieTable

Para ejecutar esta consulta, utilizamos la función run del objeto db:

db.run(q.result)

Aquí, q.result devuelve un DBIOAction que se convierte a un Future de una secuencia de películas.

¿Cómo ordenar los resultados por ID?

Podemos ordenar los resultados utilizando la función sortBy en la consulta:

val orderedMovies = q.sortBy(_.id)

Este código organiza las películas por su ID proporcionando un enfoque eficiente para manejar los datos recuperados.

¿Cómo consultar una película específica por su ID?

A la hora de buscar una película por su ID, la funcionalidad de filtro se convierte en tu aliado. Se logra mediante el uso de un filtrado en el ID de la película:

def findMovieById(movieId: String): Future[Option[Movie]] = {
  val query = movieQuery.filter(_.id === movieId).result.headOption
  db.run(query)
}

El método headOption se utiliza para asegurar que se devuelva una sola película como una opción en lugar de una secuencia. Si no se encuentra la película, se devuelve None.

Más allá de la consulta: imprimiendo la base de código

Este enfoque ofrece una manera estructurada de acceder y manipular los datos de una base de datos utilizando Slick en Scala. Invita a profundizar en el uso de programaciones asíncronas y a considerar otras bibliotecas y alternativas para enriquecer tu pila tecnológica.

A medida que avances en la creación de tu proyecto, considera explorar las diversas opciones que Scala y sus bibliotecas ofrecen. Sigue aprendiendo y experimentando, y recuerda que el mundo del desarrollo está lleno de posibilidades emocionantes.