Consultas Asíncronas y Futuros en Scala con Slick
Clase 29 de 36 • Curso 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.