Modificaciones en el Código Final
La aplicación que genera Duende Code Generator puede ser una aplicación final, lista para el despliegue, o bien solo una primera versión de dicha aplicación. Todo depende de los requisitos que debe cumplir la aplicación según las necesidades del cliente.
Es muy posible que la aplicación generada no cumpla con todos los requerimientos necesarios, por lo que resulta entonces obligado realizar modificaciones sobre la aplicación obtenida. En cualquier caso, estas modificaciones se realizan sobre una aplicación ya existente, ahorrando trabajo al desarrollador ya que no tiene que empezar la aplicación desde cero.
A continuación se indican algunas de las modificaciones que muy probablemente sean necesarias realizar sobre la aplicación generada:
Configuración de la base de datos
La aplicación generada por Duende está configurada con una base de datos de prueba H2 en memoria. Esta configuración se deberá cambiar para conseguir una persistencia de datos en MySQL. Para ello será necesario acudir al archivo de la aplicación: application.properties, dentro de la carpeta resources:
#Mysql setup
spring.datasource.url=jdbc:mysql://localhost/nombre_base_datos
spring.datasource.username=usuario_base_datos
spring.datasource.password=password_base_datos
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.jpa.hibernate.ddl-auto=create
#H2 setup
#spring.datasource.url=jdbc:h2:mem:nombre_base_datos
#spring.datasource.username=usuario_base_datos
#spring.datasource.password=password_base_datos
#spring.datasource.driver-class-name=org.h2.Driver
#spring.h2.console.enabled=true
Tendrá que comentar las líneas de la configuración H2 añadiendo el símbolo # al principio de cada línea y quitarlos de las líneas de configuración de MySQL (tal como ve en el código anterior)
Estas configuraciones coincidirán con los datos de configuración de la base de datos indicados en las especificaciones JSON, pero si fueran incorrectos o nuevos debería cambiarlos en este fichero.
La línea de configuración MySQL:
spring.jpa.hibernate.ddl-auto=create
Hace que cuando se ejecute la aplicación se creen automáticamente las tablas asociadas a las entidades en la base de datos. Si no quiere que estas tablas se vuelvan a crear una y otra vez al ejecutar repetidas veces la aplicación tendrá que comentar esta línea con #.
Si necesitara una persistencia de datos con otro motor de base de datos tendrá que anular las líneas de configuración de MySQL y añadir su propia configuración.
También se recomienda acceder a la clase SecurityConfig.java que se encuentra en el paquete config de la aplicación y comente las siguientes líneas:
//************* USED FOR ACCESSING THE H2 CONSOLE WITH SPRING SECURITY
//************* REMOVE IN PRODUCTION!
//http.csrf().disable();
//http.headers().frameOptions().disable();
//*************
Estas líneas permiten el acceso a la base de datos H2 durante la fase de desarrollo, y tendrían que estar anuladas durante la fase de producción.
Configuración de usuarios
La versión 1.x.x de Duende crea solo dos usuarios configurados en memoria para acceder a la aplicación: un usuario ADMIN y un usuario USER. El usuario administrador tendrá permiso para usar todas las opciones de la aplicación (ver, añadir, modificar y borrar), mientras que el usuario estándar solo podrá visualizar datos en la aplicación.
Aunque es posible indicar un nombre de usuario y contraseña para ambos usuarios en las especificaciones JSON, si lo desea puede cambiar estos datos en la clase SecurityConfig.java que se encuentra en el paquete config de la aplicación:
UserDetails user = User.builder().passwordEncoder(encoder::encode)
.username("user")
.password("1234")
.roles("USER")
.build();
UserDetails admin = User.builder().passwordEncoder(encoder::encode)
.username("admin")
.password("1234")
.roles("ADMIN", "USER")
.build();
Puede añadir nuevos usuarios creando más objetos del tipo UserDetails y añadiéndolos a través del constructor de la clase InMemoryUserDetailsManager. A continuación puede ver un ejemplo de código donde se han añadido a los dos usuarios anteriores otro usuario ADMIN (gestor) y otro USER (garcia):
UserDetails user = User.builder().passwordEncoder(encoder::encode)
.username("user")
.password("1234")
.roles("USER")
.build();
UserDetails admin = User.builder().passwordEncoder(encoder::encode)
.username("admin")
.password("1234")
.roles("ADMIN", "USER")
.build();
UserDetails admin2 = User.builder().passwordEncoder(encoder::encode)
.username("gestor")
.password("Lopez@444")
.roles("ADMIN", "USER")
.build();
UserDetails user2 = User.builder().passwordEncoder(encoder::encode)
.username("garcia")
.password("Rojo@9168")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user, admin, admin2, user2);
Cambios en la Interfaz
Aunque la especificación JSON de la aplicación permite asignar un tema a la interfaz de la aplicación, es muy probable que resulte inevitable realizar cambios adicionales.
Para ello, la aplicación incluye dos archivos CSS que se encuentran en la carpeta resources/static/css.
Uno de ellos es el archivo login.css que contiene reglas CSS para la pantalla de logueo. Desde aquí podrá cambiar características tales como el tamaño de la imagen principal.
El segundo de los archivos CSS es styles.css. Este se encarga de aplicar formato al resto de las pantallas de la aplicación.
Tendrá que modificar estos archivos para adaptar la interfaz de la aplicación a sus necesidades, teniendo en cuenta las distintas vistas HTML de la aplicación, que podrá encontrar en la carpeta templates de la carpeta resources.