1 00:00:00,820 --> 00:00:07,639 Hola, buenas tardes. Soy Adrián Blasco Martín y voy a mostrar mi propuesta para el proyecto Intermodular. 2 00:00:08,779 --> 00:00:15,779 Esto es una aplicación que consta con una aplicación Android de Frontend y una de Java para el backend. 3 00:00:17,059 --> 00:00:23,899 Se conectan las dos con un docker y todo el proyecto está hecho en inglés, también para ayudar con los RAs. 4 00:00:23,899 --> 00:00:32,619 aplicados. La aplicación sirve para hacer una creación y edición de personajes de 5 00:00:32,619 --> 00:00:40,960 dragones y mazmorras de 5e. Tiene todo lo necesario para guardar un personaje de forma 6 00:00:40,960 --> 00:00:49,259 local, un personaje que sea funcional y jugable. La aplicación Android utiliza últimas tecnologías 7 00:00:49,259 --> 00:00:59,299 desarrolladoras como Jetpack Compose, Material 3, Expressive y Navigation 3, entre otras. 8 00:01:00,640 --> 00:01:06,599 Voy a explicar un poco cómo funciona por encima. Voy a empezar con el Docker que está aquí. 9 00:01:07,159 --> 00:01:12,659 Simplemente es un contenedor que nos permite conectarnos con el resto de la aplicación. 10 00:01:12,879 --> 00:01:18,260 Y aquí voy a mostrar lo que viene siendo el backend, que es la aplicación Java. 11 00:01:19,260 --> 00:01:39,719 Voy a empezar por los DTOs, que es la clase que nos permite distinguir un poco, coger los datos de los JSON que estoy utilizando, de la API, y convertirlos en unos datos un poco más usables para la aplicación. 12 00:01:42,180 --> 00:01:48,000 Aquí tengo otro, por ejemplo, uno es de las clases y otro es de hechizos, en este caso. 13 00:01:49,260 --> 00:02:07,040 Y vamos a ver aquí el Data Loader. Es una clase que he utilizado para coger los datos del JSON y pasearlos a un formato más legible para poderlos utilizar en la aplicación. 14 00:02:07,640 --> 00:02:20,360 Aquí tenemos también el service, es una estructura de datos funcional como hemos practicado en clase, con su service, su modelo, su todo. 15 00:02:21,800 --> 00:02:31,919 Y aquí en el service podemos ver que tiene unos campos como cargar los datos del fichero, que llama, como hemos dicho antes, al data loader. 16 00:02:31,919 --> 00:02:44,099 Tiene también para coger excepciones, manejarlas y tirar errores que no aparezcan. 17 00:02:45,080 --> 00:02:46,580 Manejar los errores, controlarlos. 18 00:02:47,240 --> 00:02:51,139 Y aquí por último tenemos el JSON. 19 00:02:51,759 --> 00:02:59,000 Este he cogido un ejemplo así un poco complejo que vamos a ver después más a fondo en la aplicación Android. 20 00:02:59,000 --> 00:03:02,060 si se ve un poco 21 00:03:02,060 --> 00:03:04,080 voy a acercar la cámara un poquillo 22 00:03:04,080 --> 00:03:05,659 ahí está 23 00:03:05,659 --> 00:03:07,400 que se vea 24 00:03:07,400 --> 00:03:10,360 tiene todos estos 25 00:03:10,360 --> 00:03:12,280 campos que vamos a utilizar 26 00:03:12,280 --> 00:03:14,080 y también tiene pues 27 00:03:14,080 --> 00:03:15,340 el resto 28 00:03:15,340 --> 00:03:16,979 de cositas 29 00:03:16,979 --> 00:03:20,120 todo esto lo vamos a parsear 30 00:03:20,120 --> 00:03:21,879 tenemos aquí los diferentes 31 00:03:21,879 --> 00:03:23,740 hechizos que llegaré a ello 32 00:03:23,740 --> 00:03:26,039 cuando lleguemos a la aplicación 33 00:03:26,039 --> 00:03:26,400 Android 34 00:03:26,400 --> 00:03:28,900 ahí está 35 00:03:28,900 --> 00:03:37,719 Vamos a continuar ahora con la aplicación Android. La tengo aquí ya corriendo, se puede 36 00:03:37,719 --> 00:03:42,939 ver aquí el emulador. Lo tengo también en mi móvil, pero no puedo porque estoy grabando 37 00:03:42,939 --> 00:03:48,259 con mi móvil, no puedo mostrarlo. Pero funciona correctamente en el móvil, igual que en el 38 00:03:48,259 --> 00:04:00,099 emulador. Entonces, vamos a ver ahora, vamos a empezar con esto, la base de datos. Estoy 39 00:04:00,099 --> 00:04:09,500 utilizando una base de datos RUM generada, o sea, no la he creado yo a mano, sino que 40 00:04:09,500 --> 00:04:15,879 estoy utilizando la que se genera con RUM, pero podemos ver aquí en el DAO, por ejemplo, 41 00:04:15,879 --> 00:04:18,860 que estoy utilizando, pues las queries de SQL. 42 00:04:19,060 --> 00:04:20,420 Voy a mostrarlo también ahí. 43 00:04:21,120 --> 00:04:22,740 Aquí yo que se vea bien. 44 00:04:24,420 --> 00:04:29,420 Ahí están las consultas SQL para la aplicación. 45 00:04:32,420 --> 00:04:34,879 Vamos a continuar ahora con los entities. 46 00:04:35,079 --> 00:04:36,459 Como hemos visto también en clase, 47 00:04:36,899 --> 00:04:39,439 pasamos del modelo a los entities, 48 00:04:39,639 --> 00:04:41,019 o sea, del DAO a los entities, 49 00:04:41,720 --> 00:04:43,759 para tener esos datos, ¿no?, 50 00:04:43,759 --> 00:04:49,199 que se pueden manejar correctamente más en la aplicación que como los recibimos. 51 00:04:52,379 --> 00:05:02,000 Todo esto, lo de Room, se utiliza para almacenar ahora personajes que voy a mostrar en local. 52 00:05:03,300 --> 00:05:11,579 Tenía una idea de ponerlos en la nube, de ponerlos en un servidor, como hemos visto también, 53 00:05:11,579 --> 00:05:17,819 pero he pensado que no era necesario porque no es el objetivo que tengo para esta aplicación. 54 00:05:18,439 --> 00:05:25,819 Entonces con Room me parecía que era más que suficiente y de hecho he comprobado que lo es en esta aplicación. 55 00:05:26,959 --> 00:05:28,600 Vamos a continuar por aquí. 56 00:05:29,639 --> 00:05:40,459 El Network Module, este, utilizamos aquí, como se puede ver, un Retrofit y un OKHttpClient 57 00:05:40,459 --> 00:05:44,000 para poder 58 00:05:44,000 --> 00:05:46,220 realizar la conexión con la app 59 00:05:46,220 --> 00:05:51,959 la API es justo lo que hemos visto antes, el backend que tengo en Java 60 00:05:51,959 --> 00:05:55,980 y vamos a continuar con el siguiente 61 00:05:55,980 --> 00:06:00,259 que tengo aquí puesta una clase, una clase que es justo la del tipo 62 00:06:00,259 --> 00:06:03,360 de clase que va a tener el personaje que vayamos a elegir 63 00:06:03,360 --> 00:06:07,879 es la clase más compleja que diría yo que tenemos 64 00:06:07,879 --> 00:06:11,800 podemos ver primero todos los valores que tiene 65 00:06:11,800 --> 00:06:16,899 todos estos valores que son a tener en cuenta 66 00:06:16,899 --> 00:06:21,319 que después se ven reflejados en la pantalla de detalles, muy curioso 67 00:06:21,319 --> 00:06:25,480 vamos a continuar por aquí con el siguiente 68 00:06:25,480 --> 00:06:29,339 esta es la parte yo diría más compleja de toda la aplicación 69 00:06:29,339 --> 00:06:32,939 esto lo he puesto en la memoria del proyecto 70 00:06:32,939 --> 00:06:36,100 y es la parte de los hechizos 71 00:06:36,100 --> 00:06:48,660 Es muy curioso, porque cada clase puede tirar o no hechizos, entonces hay que hacer un filtro para saber qué clases pueden tirar hechizos, qué clases no. 72 00:06:50,259 --> 00:06:57,420 Y esto es lo que hace. Además, los hechizos hay de dos tipos, hay cantrips y hechizos normales, hechizos por niveles, digamos. 73 00:06:58,300 --> 00:07:04,379 Y estos se pueden conjurar dependiendo del nivel que tenga el personaje y de la clase. 74 00:07:04,379 --> 00:07:06,920 entonces esta clase que es 75 00:07:06,920 --> 00:07:09,339 diría de las más importantes 76 00:07:09,339 --> 00:07:10,860 que tenemos por aquí 77 00:07:10,860 --> 00:07:12,699 hace todo esto 78 00:07:12,699 --> 00:07:14,319 va a coger aquí 79 00:07:14,319 --> 00:07:17,540 el nivel 80 00:07:17,540 --> 00:07:19,480 el nivel del personaje 81 00:07:19,480 --> 00:07:21,699 y dependiendo de la progresión 82 00:07:21,699 --> 00:07:23,339 que tengan los hechizos pues va a decir 83 00:07:23,339 --> 00:07:25,800 tiene tantos hechizos 84 00:07:25,800 --> 00:07:27,300 o tantos pocos 85 00:07:27,300 --> 00:07:29,139 así que 86 00:07:29,139 --> 00:07:31,199 es muy curioso, después vamos a verlo 87 00:07:31,199 --> 00:07:33,040 en un ejemplo práctico 88 00:07:33,040 --> 00:07:44,980 El siguiente, vamos a ver aquí el NavHost. Esto es súper simple. Esto es un fichero que nos ayuda a hacer la navegación de la aplicación. 89 00:07:45,120 --> 00:07:54,319 Como he comentado antes, estamos utilizando Navigation 3. Entonces es lo más actual. Creo que todavía no ha salido nada nuevo. 90 00:07:54,319 --> 00:07:56,120 y es lo que hemos visto en clase 91 00:07:56,120 --> 00:07:58,740 así que esto es lo más actual 92 00:07:58,740 --> 00:08:00,519 que existe por ahora 93 00:08:00,519 --> 00:08:02,560 de navegación y funciona 94 00:08:02,560 --> 00:08:03,300 muy muy bien 95 00:08:03,300 --> 00:08:06,519 vamos a continuar aquí por 96 00:08:06,519 --> 00:08:08,860 la API, como podéis ver es súper chiquitito 97 00:08:08,860 --> 00:08:10,579 es simplemente coger 98 00:08:10,579 --> 00:08:11,899 con el arroba get 99 00:08:11,899 --> 00:08:14,279 el path 100 00:08:14,279 --> 00:08:15,040 arroba path 101 00:08:15,040 --> 00:08:18,540 vamos a coger 102 00:08:18,540 --> 00:08:20,860 los datos justos que necesitamos 103 00:08:20,860 --> 00:08:21,920 dependiendo de la situación 104 00:08:21,920 --> 00:08:24,259 en este caso 105 00:08:24,259 --> 00:08:30,620 en la que estoy mostrando es para las clases. Aquí tenemos un DTO, un DTO que es súper 106 00:08:30,620 --> 00:08:38,500 similar al que hemos visto antes en el backend, como de todo, así enlazándolo. No es exactamente 107 00:08:38,500 --> 00:08:48,500 igual porque me convenía más cambiar unas cositas para Android que como las tenía en 108 00:08:48,500 --> 00:08:54,700 Así que, bueno, pues ha cambiado un poco, pero es muy similar para tener la consistencia de datos. 109 00:08:56,200 --> 00:09:13,740 Aquí tenemos el AppChrome, que es un fichero de conveniencia, porque estaba repitiendo muchas partes de código y he dicho, vale, voy a sacar todo a un fichero aparte, y lo he puesto a todo lo que estaba repitiendo. 110 00:09:13,740 --> 00:09:23,860 Cosas comunes como el Drawer que tenemos aquí arriba del móvil, el Button Bar que tenemos aquí también y esas cositas. 111 00:09:24,000 --> 00:09:31,659 Las tengo aquí y así por cada pantalla que las va a tener solo llamo a este fichero y ya está. 112 00:09:31,919 --> 00:09:34,179 Y se añade si lo importa. 113 00:09:35,019 --> 00:09:40,299 Y aquí tenemos la pantalla de menú. Es justo esta pantalla que estamos viendo aquí. 114 00:09:40,299 --> 00:09:44,120 esta es la pantalla más completa 115 00:09:44,120 --> 00:09:45,740 que tiene toda la aplicación 116 00:09:45,740 --> 00:09:49,620 porque tiene todos estos botoncitos 117 00:09:49,620 --> 00:09:50,960 los podéis ver aquí 118 00:09:50,960 --> 00:09:52,759 también tiene el button bar 119 00:09:52,759 --> 00:09:54,559 un pequeño texto aquí 120 00:09:54,559 --> 00:09:57,519 para decir de qué va la aplicación 121 00:09:57,519 --> 00:10:00,360 y aquí es un dato curioso 122 00:10:00,360 --> 00:10:02,820 que esta aplicación la probé con mi hermano 123 00:10:02,820 --> 00:10:03,820 se la enseñé 124 00:10:03,820 --> 00:10:06,860 y no se dio cuenta de que esto eran botones 125 00:10:06,860 --> 00:10:08,580 estaba viendo 126 00:10:08,580 --> 00:10:27,139 Se pensaba que era como solo texto, ¿no? Solo era información especial, ¿no? Y después se lo dije. Dije, pero es que son botones. Y pensé en poner este pequeño texto de ayuda que hay aquí. 127 00:10:27,139 --> 00:10:32,779 de hecho lo voy a mostrar este pequeño texto que dice que puedes 128 00:10:32,779 --> 00:10:37,019 tocar los botones y te va a llevar a la pantalla correspondiente 129 00:10:37,019 --> 00:10:43,759 así que ahora voy una pequeña demostración de cómo funcionaría 130 00:10:43,759 --> 00:10:48,320 la aplicación vamos a venir por aquí se ve el ratón 131 00:10:48,320 --> 00:10:53,879 bien correctamente y bueno de primeras pues tenemos el menú 132 00:10:53,879 --> 00:11:00,559 principal como he dicho antes el menú principal que tiene personajes hechizos 133 00:11:00,559 --> 00:11:05,700 clases y gracias por todo esto que tiene también tenemos la pantalla de 134 00:11:05,700 --> 00:11:10,980 personajes he dejado ya aquí uno uno preparado y llamado paco y vamos a 135 00:11:10,980 --> 00:11:17,279 probar ahora también a crear uno para empezar vamos a ver los vamos a ver aquí 136 00:11:17,279 --> 00:11:22,980 los hechizos los hechizos son todos estos hay muchos muchos muchos muchos 137 00:11:22,980 --> 00:11:29,919 hechizos vale y que más aquí en el driver podemos pasar también a las otras dos cositas que tenemos 138 00:11:29,919 --> 00:11:37,220 tenemos aquí los distintos tipos de clases y este que es más importante que son las razas como 139 00:11:37,220 --> 00:11:46,019 podéis ver estamos cogiendo también imágenes aquí las imágenes las estoy sacando también de la app y 140 00:11:46,019 --> 00:11:51,419 sólo los que tienen aquí podemos ver que estos por ejemplo no tienen no tienen pero porque no 141 00:11:51,419 --> 00:11:57,600 existe imagen para ellos, entonces he dejado ahí una por defecto de los contactos, pero 142 00:11:57,600 --> 00:12:03,379 el resto, los que sí que tienen imágenes, se pueden ver sus imágenes. Y a cada uno 143 00:12:03,379 --> 00:12:08,860 tenemos su pantalla de detalle, ¿vale? Tenemos aquí su pantalla de detalle que nos dice 144 00:12:08,860 --> 00:12:15,460 las distintas cosas que tienen. Y te puedes dar cuenta que aquí hay un más. Se lo podemos 145 00:12:15,460 --> 00:12:24,039 asignar directamente a los personajes que tenemos vamos a ir de vuelta ahora a la de clases que voy 146 00:12:24,039 --> 00:12:29,679 a mostrar también que estos pues más de lo mismo tienen todo en todo toda la información que 147 00:12:29,679 --> 00:12:40,080 necesita y de los hechizos pues también lo mismo vamos a ver aquí alguno chulo este mismo y pues 148 00:12:40,080 --> 00:12:45,960 nos pone lo mismo la descripción todo el rango la acción bueno todo lo que necesitas saber 149 00:12:46,960 --> 00:12:50,179 Y vamos a probar ahora a ir a los personajes. 150 00:12:50,879 --> 00:12:54,279 Vamos a ver este, que le tengo de ejemplo ya con todo, para que se vea todo bien. 151 00:12:55,399 --> 00:12:57,700 Tiene aquí el nombre, que se puede cambiar. 152 00:12:57,980 --> 00:13:01,240 Si me pongo aquí, sale para cambiar el texto. 153 00:13:02,360 --> 00:13:04,059 Y ahí está. 154 00:13:04,700 --> 00:13:09,360 Aquí, para subir o bajar de nivel, lo tengo a nivel 3 para mostrar ahora los hechizos. 155 00:13:10,500 --> 00:13:13,519 Y, bueno, esta es la raza, que se llama Asimar. 156 00:13:13,720 --> 00:13:15,320 La clase, que es Sorcerer. 157 00:13:15,320 --> 00:13:18,259 que es un brujo hechicero 158 00:13:18,259 --> 00:13:22,080 y aquí pues tenemos los distintos tipos de hechizos 159 00:13:22,080 --> 00:13:23,340 tenemos cantrips 160 00:13:23,340 --> 00:13:26,899 que los puedo coger y añadir en esta pantalla 161 00:13:26,899 --> 00:13:30,059 me salen todos los cantrips y voy a probar a añadir este 162 00:13:30,059 --> 00:13:33,080 y como se puede ver, este se ha añadido 163 00:13:33,080 --> 00:13:36,879 voy a probar a quitarlo 164 00:13:36,879 --> 00:13:38,799 se quita correctamente 165 00:13:38,799 --> 00:13:41,840 sale el texto de que no hay ninguno seleccionado 166 00:13:41,840 --> 00:13:44,960 y aquí tenemos un ejemplo de que 167 00:13:44,960 --> 00:13:51,559 hay varios seleccionados pero no todos y deja añadir y aquí otro de salen todos 168 00:13:51,559 --> 00:13:56,399 los que pueden estar seleccionados y no deja añadir ninguno se puede ver que 169 00:13:56,399 --> 00:14:01,159 estoy clicando y no deja añadir 170 00:14:01,159 --> 00:14:07,559 vamos a probar rapidito ahora hacer un personaje nuevo le vamos a llamar 171 00:14:07,559 --> 00:14:10,240 paula 172 00:14:10,240 --> 00:14:18,279 Ahí está. Y va a ser de nivel 4. Le vamos a poner de raza un goblin. 173 00:14:20,360 --> 00:14:27,299 Mira, se puede añadir con esto. Ahora nos sale Paula aquí. Y también se puede añadir simplemente tocando. 174 00:14:28,000 --> 00:14:32,919 Y de clase le vamos a poner uno que no pueda tirar hechizos. Por ejemplo, un bárbaro. 175 00:14:33,480 --> 00:14:36,620 Y como se puede ver aquí, ya no aparecen los hechizos. 176 00:14:36,620 --> 00:14:39,179 si salgo de aquí 177 00:14:39,179 --> 00:14:41,519 vamos a ver que se ha puesto correctamente 178 00:14:41,519 --> 00:14:43,679 la imagen y que es de nivel 4 179 00:14:43,679 --> 00:14:45,480 y bueno, toda la 180 00:14:45,480 --> 00:14:46,440 información que tiene 181 00:14:46,440 --> 00:14:49,039 si volvemos al menú pues 182 00:14:49,039 --> 00:14:51,159 podemos volver de nuevo 183 00:14:51,159 --> 00:14:52,580 y sigue estando 184 00:14:52,580 --> 00:14:55,799 y esta es mi aplicación 185 00:14:55,799 --> 00:14:57,220 entera, espero que haya quedado claro 186 00:14:57,220 --> 00:14:59,519 y bueno, cualquier duda diría 187 00:14:59,519 --> 00:15:01,220 que espero preguntas 188 00:15:01,220 --> 00:15:03,200 pero no hay nadie 189 00:15:03,200 --> 00:15:05,299 a quien preguntar, así que 190 00:15:05,299 --> 00:15:07,080 Un saludo y muchas gracias.