/es/furyviewer-proyecto-de-daw2-con-jhipster/media/unnamed-2-619x346.png

FuryViewer: Proyecto de DAW2 con JHipster

El grupo formado por los alumnos Clara de Clemente, Marc Debuen, Pau Duran, Ibrahim González y Pablo Toscano de DAW2 son aficionados al cine y series, eso les dio la idea de crear una aplicación con esa temática e intentar implementar todos los conocimientos, adquiridos en el ciclo, en el proyecto y al mismo tiempo aprender a trabajar en equipo en un proyecto real y potente.
El objetivo principal era crear una aplicación dinámica, interactiva, con una interfaz de usuario simple pero al mismo tiempo interesante. La aplicación debía tener una base de datos actualizada y con suficiente información para que cualquier aficionado de las artes multimedia se sienta tentado a utilizarla.

La tecnología principal utilizada para el proyecto se llama JHispterJHispter es un generador de aplicaciones gratis y open-source que se utiliza para poder desarrollar más rápidamente aplicaciones modernas combinando Angular y Spring Framework. Esta tecnología también combina otras tecnologías utilizadas en el proyecto. Dichas tecnologías son:

HTML5 es un lenguaje marcado con el cual se estructura el contenido básico de una página web, como imágenes, videos, tablas, texto y otros.
CSS3 es un lenguaje de diseño gráfico para definir y crear la presentación de un documento estructurado escrito en un lenguaje de marcado
Angular 4 se utiliza para crear aplicaciones web de una sola página. Esta versión se basa en el lenguaje de programación TypesScript.
TypeScript es un lenguaje de programación libre y de código abierto desarrollado y mantenido por Microsoft. Es un superconjunto de JavaScript, que esencialmente añade tipado estático y objetos basados en clases. Anders Hejlsberg, diseñador de C# y creador de Delphi y Turbo Pascal, ha trabajado en el desarrollo de TypeScript. Typescript puede ser usado para desarrollar aplicaciones JavaScript que se ejecutarán en el lado del cliente o del servidor (Node.js).
Twitter Bootstrap es un framework para el diseño de aplicaciones web. Contiene clases que se pueden utilizar como plantilla para el diseño de formularios, botones, menús de navegación entre otros.
Ng-Bootstrap es un framework que permite utilizar elementos de Bootstrap 4 impulsados por Angular.
Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.
Npm es el gestor de paquetes por defecto de Node.js
Yarn es un gestor de paquetes de código para frontend.

Spring Framework es un framework para el desarrollo de aplicaciones y contenedor de inversión de control, de código abierto para la plataforma Java.
Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos, que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o “write once, run anywhere”), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir de 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos diez millones de usuarios reportados.
Amazon Web Services (AWS abreviado) es una colección de  servicios de computación en la nube pública (también llamados servicios web) que en conjunto forman una plataforma de computación en la nube, ofrecidas a través de Internet por
Amazon.com. Es una de las ofertas internacionales más importantes de la computación en la nube y compite directamente contra servicios como Microsoft Azure y Google Cloud Platform. Es considerado como un pionero en este campo.
MySQL es el sistema de gestión de bases de datos relacional más popular del mundo, sobretodo para desarrollo de aplicaciones web.
Liquibase es una librería open-source que se utiliza para  registrar y controlar los cambios que se vayan realizando sobre la base de datos.
Maven es una herramienta de software para la gestión y construcción de proyectos Java. Utiliza un Project Object Model (POM) para describir el proyecto de software a construir, sus dependencias de otros módulos y componentes externos.
Hibernate es una herramienta de mapeo objeto-relacional (ORM) para Java. Este facilita el mapeo de atributos de una base de datos tradicional con los del modelo de objetos de una aplicación.

Open Movie Database es la API que utiliza el proyecto por defecto para conseguir información sobre películas y series. De ella se obitene el género, la duración, el país y, en el caso de las series, temporadas y episodios.
The Movie Database es la API que utiliza el proyecto para complementar la información de OMDb. A través de ella se obitene información sobre los actores, episodios que no estén en OMDb, el tráiler y las compañías.
Google Maps Geocoding API country a partir de la localización que proporcionan las apis (a veces es una ciudad en lugar de un país).

Además en el proyecto trabajaron también con JPA Criteria Queries. Una ventaja importante de trabajar con JPA es la generación de clases criteria. Este tipo de clases generan constructores de clases dinámicos y trabajan dependiendo
de los parámetros que se le ingresen. Funciona con consultas similares a JPQL solo que trabaja las queries de forma diferente, los atributos que se añaden al constructor se llaman operadores.
En este proyecto se implementó para generar una búsqueda dinámica dentro de la aplicación, así el usuario puede distinguir y seleccionar diferentes parámetros para su búsqueda.

Esta es una simplificación y explicación de como funciona:

Primeramente se debe tener acceso al repositorio de la entidad donde uno quiere tener respuesta, en este caso es la entidad Artist, el parámetro que le pasamos a la función es el criterio de busqueda y la llamada dentro del repositorio de Artist seria la de encontrar todos los elementos que coincidan con el mismo y agregarlos a la lista.

Es importante remarcar que se creará una clase del mismo tipo que Artist, con los mismos atributos, la clase no tiene ningún constructor creado más que el vació. El Service de criteria creara el constructor que se requiera​​​​​​​.

El siguiente constructor dinámico genera el objeto de Artist con los parametros que el usuario quiere filtrar:

La llamada a estos servicios y clases la hará la API, en el recurso de la clase Artist:

Para implementar esta funcionalidad se tienen que instalar dependencias de Maven:

Una vez implementado hay que iniciar el programa desde el Spring boot mismo para que todos los cambios se lleven a cambio y no haya errores en la compilación.

El proyecto aprovecha diferentes tecnologías que combinadas facilitan poder realizar un proyecto de gran envergadura sin necesidad de realizar el esfuerzo de crear la estructura básica. 

El esquema UML resultante se puede descargar del siguiente enlace:

https://drive.google.com/file/d/1Pc6Hsmjf8CuyBgIyu_6OjswpBf7jOpzg/view

 

Procesando la petición. ¡Espera, por favor!