añadido perfil a IL

This commit is contained in:
2026-02-04 19:26:44 +01:00
parent 48993a34c4
commit ecf1472f58
7 changed files with 749 additions and 4 deletions

View File

@ -748,3 +748,393 @@ org.springframework.context.NoSuchMessageException: No message found under code
2026-02-04 18:54:32 WARN [http-nio-8080-exec-7] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory 2026-02-04 18:54:32 WARN [http-nio-8080-exec-7] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory
2026-02-04 18:54:56 WARN [http-nio-8080-exec-3] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory 2026-02-04 18:54:56 WARN [http-nio-8080-exec-3] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory
2026-02-04 18:55:47 WARN [http-nio-8080-exec-8] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory 2026-02-04 18:55:47 WARN [http-nio-8080-exec-8] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory
2026-02-04 19:10:52 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:10:52 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:10:56 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
2026-02-04 19:10:56 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@183104a5
2026-02-04 19:10:56 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
2026-02-04 19:10:57 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:10:57 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:10:57 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:10:57 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:10:57 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:10:57 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:10:58 INFO [restartedMain] org.hibernate.Version - HHH000412: Hibernate ORM core version 6.6.39.Final
2026-02-04 19:10:58 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:10:58 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:11:00 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:11:04 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 12.701 seconds (process running for 13.526)
2026-02-04 19:11:34 WARN [http-nio-8080-exec-6] org.hibernate.orm.query - HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory
2026-02-04 19:16:44 INFO [Thread-5] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
2026-02-04 19:16:44 INFO [Thread-5] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
2026-02-04 19:16:44 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:16:44 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:16:45 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting...
2026-02-04 19:16:45 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection com.mysql.cj.jdbc.ConnectionImpl@66447f67
2026-02-04 19:16:45 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed.
2026-02-04 19:16:45 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:16:46 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:16:46 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:16:46 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:16:46 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:16:46 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:16:46 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:16:46 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-2)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:16:46 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:16:47 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 3.535 seconds (process running for 356.622)
2026-02-04 19:19:10 INFO [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated...
2026-02-04 19:19:10 INFO [Thread-7] com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed.
2026-02-04 19:19:10 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:19:10 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:19:11 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Starting...
2026-02-04 19:19:11 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-3 - Added connection com.mysql.cj.jdbc.ConnectionImpl@34098173
2026-02-04 19:19:11 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Start completed.
2026-02-04 19:19:11 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:19:11 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:19:11 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:19:11 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:19:11 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:19:11 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:19:11 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:19:11 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-3)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:19:12 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:19:13 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 2.836 seconds (process running for 501.834)
2026-02-04 19:20:20 INFO [Thread-11] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown initiated...
2026-02-04 19:20:20 INFO [Thread-11] com.zaxxer.hikari.HikariDataSource - HikariPool-3 - Shutdown completed.
2026-02-04 19:20:20 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:20:20 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:20:21 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Starting...
2026-02-04 19:20:21 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-4 - Added connection com.mysql.cj.jdbc.ConnectionImpl@e1e7a35
2026-02-04 19:20:21 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Start completed.
2026-02-04 19:20:21 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:20:21 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:20:21 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:20:21 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:20:21 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:20:21 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:20:21 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:20:21 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-4)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:20:22 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:20:23 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 2.256 seconds (process running for 571.857)
2026-02-04 19:20:43 INFO [Thread-15] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown initiated...
2026-02-04 19:20:43 INFO [Thread-15] com.zaxxer.hikari.HikariDataSource - HikariPool-4 - Shutdown completed.
2026-02-04 19:20:43 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:20:43 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:20:44 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Starting...
2026-02-04 19:20:44 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-5 - Added connection com.mysql.cj.jdbc.ConnectionImpl@63deb5c1
2026-02-04 19:20:44 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Start completed.
2026-02-04 19:20:44 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:20:44 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:20:44 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:20:44 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:20:44 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:20:44 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:20:44 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:20:44 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-5)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:20:44 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:20:45 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.959 seconds (process running for 593.959)
2026-02-04 19:20:54 INFO [Thread-19] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Shutdown initiated...
2026-02-04 19:20:54 INFO [Thread-19] com.zaxxer.hikari.HikariDataSource - HikariPool-5 - Shutdown completed.
2026-02-04 19:20:54 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:20:54 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:20:54 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Starting...
2026-02-04 19:20:54 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-6 - Added connection com.mysql.cj.jdbc.ConnectionImpl@34ac6b55
2026-02-04 19:20:54 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Start completed.
2026-02-04 19:20:55 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:20:55 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:20:55 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:20:55 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:20:55 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:20:55 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:20:55 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:20:55 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-6)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:20:55 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:20:56 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.772 seconds (process running for 604.729)
2026-02-04 19:21:06 INFO [Thread-23] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Shutdown initiated...
2026-02-04 19:21:06 INFO [Thread-23] com.zaxxer.hikari.HikariDataSource - HikariPool-6 - Shutdown completed.
2026-02-04 19:21:06 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:21:06 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:21:07 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Starting...
2026-02-04 19:21:07 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-7 - Added connection com.mysql.cj.jdbc.ConnectionImpl@10784627
2026-02-04 19:21:07 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Start completed.
2026-02-04 19:21:08 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:21:08 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:21:08 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:21:08 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:21:08 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:21:08 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:21:08 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:21:08 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-7)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:21:08 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:21:10 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 3.395 seconds (process running for 618.722)
2026-02-04 19:21:59 INFO [Thread-27] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Shutdown initiated...
2026-02-04 19:21:59 INFO [Thread-27] com.zaxxer.hikari.HikariDataSource - HikariPool-7 - Shutdown completed.
2026-02-04 19:21:59 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:21:59 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:22:00 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Starting...
2026-02-04 19:22:00 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-8 - Added connection com.mysql.cj.jdbc.ConnectionImpl@41c31f82
2026-02-04 19:22:00 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Start completed.
2026-02-04 19:22:00 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:00 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:22:00 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:22:00 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:22:00 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:22:00 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:22:00 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:22:00 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-8)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:22:00 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:22:01 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.628 seconds (process running for 670.213)
2026-02-04 19:22:11 INFO [Thread-31] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Shutdown initiated...
2026-02-04 19:22:11 INFO [Thread-31] com.zaxxer.hikari.HikariDataSource - HikariPool-8 - Shutdown completed.
2026-02-04 19:22:12 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:22:12 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:22:12 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Starting...
2026-02-04 19:22:12 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-9 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1711d305
2026-02-04 19:22:12 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Start completed.
2026-02-04 19:22:12 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:12 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:22:12 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:22:12 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:22:12 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:22:12 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:22:12 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:22:12 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-9)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:22:12 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:22:13 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.598 seconds (process running for 682.299)
2026-02-04 19:22:20 INFO [Thread-35] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Shutdown initiated...
2026-02-04 19:22:20 INFO [Thread-35] com.zaxxer.hikari.HikariDataSource - HikariPool-9 - Shutdown completed.
2026-02-04 19:22:20 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:22:20 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:22:21 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Starting...
2026-02-04 19:22:21 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-10 - Added connection com.mysql.cj.jdbc.ConnectionImpl@821ce2f
2026-02-04 19:22:21 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Start completed.
2026-02-04 19:22:21 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:21 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:22:21 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:22:21 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:22:21 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:22:21 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:22:21 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:22:21 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-10)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:22:21 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:22:22 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.659 seconds (process running for 691.219)
2026-02-04 19:22:34 INFO [Thread-39] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Shutdown initiated...
2026-02-04 19:22:34 INFO [Thread-39] com.zaxxer.hikari.HikariDataSource - HikariPool-10 - Shutdown completed.
2026-02-04 19:22:34 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:22:34 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:22:35 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Starting...
2026-02-04 19:22:35 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-11 - Added connection com.mysql.cj.jdbc.ConnectionImpl@3b357f77
2026-02-04 19:22:35 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Start completed.
2026-02-04 19:22:35 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:35 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:22:35 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:22:35 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:22:35 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:22:35 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:22:35 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:22:35 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-11)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:22:35 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:22:36 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.688 seconds (process running for 704.975)
2026-02-04 19:22:45 INFO [Thread-43] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Shutdown initiated...
2026-02-04 19:22:45 INFO [Thread-43] com.zaxxer.hikari.HikariDataSource - HikariPool-11 - Shutdown completed.
2026-02-04 19:22:45 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:22:45 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:22:45 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Starting...
2026-02-04 19:22:45 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-12 - Added connection com.mysql.cj.jdbc.ConnectionImpl@36500de4
2026-02-04 19:22:45 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Start completed.
2026-02-04 19:22:45 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:45 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:22:45 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:22:45 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:22:45 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:22:45 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:22:45 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:22:45 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-12)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:22:46 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:22:46 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.575 seconds (process running for 715.38)
2026-02-04 19:22:57 INFO [Thread-47] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Shutdown initiated...
2026-02-04 19:22:57 INFO [Thread-47] com.zaxxer.hikari.HikariDataSource - HikariPool-12 - Shutdown completed.
2026-02-04 19:22:57 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Starting ErpApplication using Java 21.0.10 with PID 29536 (C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros\target\classes started by jjime in C:\Users\jjime\Documents\00_DESIGN_NOTEBOOK\PROGRAMMING\erp-imprimelibros)
2026-02-04 19:22:57 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - The following 1 profile is active: "dev"
2026-02-04 19:22:57 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-13 - Starting...
2026-02-04 19:22:57 INFO [restartedMain] com.zaxxer.hikari.pool.HikariPool - HikariPool-13 - Added connection com.mysql.cj.jdbc.ConnectionImpl@3d063cf3
2026-02-04 19:22:57 INFO [restartedMain] com.zaxxer.hikari.HikariDataSource - HikariPool-13 - Start completed.
2026-02-04 19:22:57 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:57 INFO [restartedMain] liquibase.ui - Database is up to date, no changesets to execute
2026-02-04 19:22:57 INFO [restartedMain] liquibase.changelog - Reading from imprimelibros.DATABASECHANGELOG
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - UPDATE SUMMARY
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - Run: 0
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - Previously run: 69
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - Filtered out: 0
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - -------------------------------
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - Total change sets: 69
2026-02-04 19:22:57 INFO [restartedMain] liquibase.util - Update summary generated
2026-02-04 19:22:57 INFO [restartedMain] liquibase.command - Command execution complete
2026-02-04 19:22:57 INFO [restartedMain] o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
2026-02-04 19:22:57 INFO [restartedMain] o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
2026-02-04 19:22:57 INFO [restartedMain] o.hibernate.orm.connections.pooling - HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-13)']
Database driver: undefined/unknown
Database version: 8.0.45
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2026-02-04 19:22:58 INFO [restartedMain] o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2026-02-04 19:22:58 INFO [restartedMain] c.imprimelibros.erp.ErpApplication - Started ErpApplication in 1.446 seconds (process running for 727.328)

View File

@ -0,0 +1,155 @@
package com.imprimelibros.erp.users;
import java.util.Locale;
import org.springframework.context.MessageSource;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.imprimelibros.erp.config.Sanitizer;
import com.imprimelibros.erp.users.validation.ProfileForm;
@Controller
@RequestMapping("/pages-profile")
@PreAuthorize("isAuthenticated()")
public class ProfileController {
private final UserDao userDao;
private final PasswordEncoder passwordEncoder;
private final MessageSource messageSource;
private final Sanitizer sanitizer;
public ProfileController(UserDao userDao, PasswordEncoder passwordEncoder,
MessageSource messageSource, Sanitizer sanitizer) {
this.userDao = userDao;
this.passwordEncoder = passwordEncoder;
this.messageSource = messageSource;
this.sanitizer = sanitizer;
}
@GetMapping
public String view(
Authentication authentication,
@RequestParam(name = "success", required = false) String success,
Model model,
Locale locale) {
if (authentication == null) {
return "redirect:/login";
}
User user = userDao.findByUserNameIgnoreCase(authentication.getName()).orElse(null);
if (user == null) {
return "redirect:/login";
}
ProfileForm form = new ProfileForm();
form.setId(user.getId());
form.setFullName(user.getFullName());
form.setUserName(user.getUserName());
model.addAttribute("user", form);
model.addAttribute("success", success != null);
return "imprimelibros/users/profile";
}
@PostMapping
public String update(
Authentication authentication,
@Validated @ModelAttribute("user") ProfileForm form,
BindingResult binding,
Model model,
RedirectAttributes redirectAttributes,
Locale locale) {
if (authentication == null) {
return "redirect:/login";
}
User user = userDao.findByUserNameIgnoreCase(authentication.getName()).orElse(null);
if (user == null) {
return "redirect:/login";
}
String normalized = sanitizer.plain(form.getUserName());
if (normalized != null) {
normalized = normalized.trim().toLowerCase();
}
if (normalized == null || normalized.isBlank()) {
binding.rejectValue("userName", "usuarios.error.email",
messageSource.getMessage("usuarios.error.email", null, locale));
} else if (userDao.existsByUserNameIgnoreCaseAndIdNot(normalized, user.getId())) {
binding.rejectValue("userName", "usuarios.error.duplicado",
messageSource.getMessage("usuarios.error.duplicado", null, locale));
}
String cleanName = sanitizer.plain(form.getFullName());
if (cleanName == null || cleanName.isBlank()) {
binding.rejectValue("fullName", "usuarios.error.nombre",
messageSource.getMessage("usuarios.error.nombre", null, locale));
}
boolean wantsPasswordChange = hasText(form.getCurrentPassword())
|| hasText(form.getNewPassword())
|| hasText(form.getConfirmPassword());
if (wantsPasswordChange) {
if (!hasText(form.getCurrentPassword())) {
binding.rejectValue("currentPassword", "usuarios.error.password.actual",
messageSource.getMessage("usuarios.error.password.actual", null, locale));
} else if (!passwordEncoder.matches(form.getCurrentPassword(), user.getPassword())) {
binding.rejectValue("currentPassword", "usuarios.error.password.actual.incorrecta",
messageSource.getMessage("usuarios.error.password.actual.incorrecta", null, locale));
}
if (!hasText(form.getNewPassword())) {
binding.rejectValue("newPassword", "usuarios.error.password.nueva.requerida",
messageSource.getMessage("usuarios.error.password.nueva.requerida", null, locale));
} else if (form.getNewPassword().length() < 6) {
binding.rejectValue("newPassword", "usuarios.error.password.min",
messageSource.getMessage("usuarios.error.password.min", null, locale));
}
if (!hasText(form.getConfirmPassword())) {
binding.rejectValue("confirmPassword", "usuarios.error.confirmPassword.requerida",
messageSource.getMessage("usuarios.error.confirmPassword.requerida", null, locale));
} else if (hasText(form.getNewPassword()) && !form.getNewPassword().equals(form.getConfirmPassword())) {
binding.rejectValue("confirmPassword", "usuarios.error.password-coinciden",
messageSource.getMessage("usuarios.error.password-coinciden", null, locale));
}
}
if (binding.hasErrors()) {
model.addAttribute("success", false);
return "imprimelibros/users/profile";
}
user.setFullName(cleanName.trim());
user.setUserName(normalized);
if (wantsPasswordChange) {
user.setPassword(passwordEncoder.encode(form.getNewPassword()));
}
userDao.save(user);
redirectAttributes.addAttribute("success", "1");
return "redirect:/pages-profile";
}
private static boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@ -0,0 +1,68 @@
package com.imprimelibros.erp.users.validation;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
public class ProfileForm {
private Long id;
@NotBlank(message = "{usuarios.error.nombre}")
private String fullName;
@NotBlank(message = "{usuarios.error.email}")
@Email(message = "{usuarios.error.email.formato}")
private String userName;
private String currentPassword;
private String newPassword;
private String confirmPassword;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getCurrentPassword() {
return currentPassword;
}
public void setCurrentPassword(String currentPassword) {
this.currentPassword = currentPassword;
}
public String getNewPassword() {
return newPassword;
}
public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
}

View File

@ -1,3 +1,23 @@
usuarios.form.nombre=Full name
usuarios.form.email=Email
usuarios.form.confirmarPassword=Confirm password
usuarios.form.password.actual=Current password
usuarios.form.password.nueva=New password
usuarios.form.password.nota=You can only change the password if you provide the current one.
usuarios.error.nombre=Name is required.
usuarios.error.email=Email is required.
usuarios.error.email.formato=Email is not valid.
usuarios.error.password.min=Password must be at least 6 characters.
usuarios.error.password.actual=Current password is required.
usuarios.error.password.actual.incorrecta=Current password is not correct.
usuarios.error.password.nueva.requerida=New password is required.
usuarios.error.confirmPassword.requerida=Password confirmation is required.
usuarios.error.password-coinciden=Passwords do not match.
usuarios.error.duplicado=There is already a user with that email.
usuarios.impersonate.title=Sign in as user usuarios.impersonate.title=Sign in as user
usuarios.impersonate.text=You are about to sign in as <b>{0}</b>. You can return to your user from the menu. usuarios.impersonate.text=You are about to sign in as <b>{0}</b>. You can return to your user from the menu.
usuarios.impersonate.button=Continue usuarios.impersonate.button=Continue
usuarios.profile.title=Edit profile
usuarios.profile.success=Profile updated successfully.

View File

@ -20,6 +20,9 @@ usuarios.form.nombre=Nombre completo
usuarios.form.email=Correo electrónico usuarios.form.email=Correo electrónico
usuarios.form.password=Contraseña usuarios.form.password=Contraseña
usuarios.form.confirmarPassword=Confirmar contraseña usuarios.form.confirmarPassword=Confirmar contraseña
usuarios.form.password.actual=Contraseña actual
usuarios.form.password.nueva=Nueva contraseña
usuarios.form.password.nota=Solo podrás cambiar la contraseña si indicas la actual.
usuarios.form.rol=Rol usuarios.form.rol=Rol
usuarios.form.estado=Estado usuarios.form.estado=Estado
@ -37,6 +40,9 @@ usuarios.error.email.formato=El correo electrónico no es válido.
usuarios.error.rol=El rol seleccionado no es válido. usuarios.error.rol=El rol seleccionado no es válido.
usuarios.error.password.requerida=La contraseña es obligatoria. usuarios.error.password.requerida=La contraseña es obligatoria.
usuarios.error.password.min=La contraseña debe tener al menos 6 caracteres. usuarios.error.password.min=La contraseña debe tener al menos 6 caracteres.
usuarios.error.password.actual=La contraseña actual es obligatoria.
usuarios.error.password.actual.incorrecta=La contraseña actual no es correcta.
usuarios.error.password.nueva.requerida=La nueva contraseña es obligatoria.
usuarios.error.confirmPassword.requerida=La confirmación de la contraseña es obligatoria. usuarios.error.confirmPassword.requerida=La confirmación de la contraseña es obligatoria.
usuarios.error.password-coinciden=Las contraseñas no coinciden. usuarios.error.password-coinciden=Las contraseñas no coinciden.
usuarios.error.delete-relational-data=No se puede eliminar el usuario porque tiene datos relacionados. usuarios.error.delete-relational-data=No se puede eliminar el usuario porque tiene datos relacionados.
@ -55,5 +61,7 @@ usuarios.delete.text=¿Está seguro de que desea eliminar al usuario?<br>Esta ac
usuarios.delete.ok.title=Usuario eliminado usuarios.delete.ok.title=Usuario eliminado
usuarios.delete.ok.text=El usuario ha sido eliminado con éxito. usuarios.delete.ok.text=El usuario ha sido eliminado con éxito.
usuarios.impersonate.title=Entrar como usuario usuarios.impersonate.title=Entrar como usuario
usuarios.impersonate.text=Vas a iniciar sesión como <b>{0}</b>. Podrás volver a tu usuario desde el menú. usuarios.impersonate.text=Vas a iniciar sesión como <b>{0}</b>. Podrás volver a tu usuario desde el menú.
usuarios.impersonate.button=Entrar usuarios.impersonate.button=Entrar
usuarios.profile.title=Editar perfil
usuarios.profile.success=Perfil actualizado correctamente.

View File

@ -100,9 +100,6 @@
<a class="dropdown-item" href="/pages-profile"><i <a class="dropdown-item" href="/pages-profile"><i
class="mdi mdi-account-circle text-muted fs-16 align-middle me-1"></i> <span class="mdi mdi-account-circle text-muted fs-16 align-middle me-1"></i> <span
class="align-middle" th:text="#{app.perfil}">Perfil</span></a> class="align-middle" th:text="#{app.perfil}">Perfil</span></a>
<a class="dropdown-item" href="/apps-chat"><i
class="mdi mdi-message-text-outline text-muted fs-16 align-middle me-1"></i>
<span class="align-middle" th:text="#{app.mensajes}">Mensajes</span></a>
<div sec:authorize="hasRole('PREVIOUS_ADMINISTRATOR')"> <div sec:authorize="hasRole('PREVIOUS_ADMINISTRATOR')">
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" <a class="dropdown-item" href="#"

View File

@ -0,0 +1,107 @@
<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{imprimelibros/layout}">
<head>
<th:block layout:fragment="pagetitle" />
<th:block th:replace="~{imprimelibros/partials/head-css :: head-css}" />
</head>
<body>
<div th:replace="~{imprimelibros/partials/topbar :: topbar}" />
<div th:replace="~{imprimelibros/partials/sidebar :: sidebar}" />
<th:block layout:fragment="content">
<div th:if="${#authorization.expression('isAuthenticated()')}">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/"><i class="ri-home-5-fill"></i></a></li>
<li class="breadcrumb-item active" aria-current="page" th:text="#{app.perfil}">Perfil</li>
</ol>
</nav>
<div class="container-fluid">
<div class="row">
<div class="col-12 col-lg-6">
<div class="card">
<div class="card-header">
<h5 class="card-title mb-0" th:text="#{usuarios.profile.title}">Editar perfil</h5>
</div>
<div class="card-body">
<div th:if="${success}" class="alert alert-success"
th:text="#{usuarios.profile.success}">Perfil actualizado.</div>
<form id="profileForm" novalidate th:action="@{/pages-profile}" th:object="${user}"
method="post">
<div th:if="${#fields.hasGlobalErrors()}" class="alert alert-danger">
<div th:each="e : ${#fields.globalErrors()}" th:text="${e}"></div>
</div>
<div class="mb-3">
<label th:text="#{usuarios.form.nombre}" for="fullName">Nombre</label>
<input type="text" class="form-control" id="fullName" th:field="*{fullName}"
th:classappend="${#fields.hasErrors('fullName')} ? ' is-invalid'" required>
<div class="invalid-feedback" th:if="${#fields.hasErrors('fullName')}"
th:errors="*{fullName}">Error</div>
</div>
<div class="mb-3">
<label th:text="#{usuarios.form.email}" for="userName">Correo electrónico</label>
<input type="email" class="form-control" id="userName" th:field="*{userName}"
th:classappend="${#fields.hasErrors('userName')} ? ' is-invalid'" required>
<div class="invalid-feedback" th:if="${#fields.hasErrors('userName')}"
th:errors="*{userName}">Error</div>
</div>
<hr class="my-4">
<div class="mb-3">
<label th:text="#{usuarios.form.password.actual}" for="currentPassword">Contraseña actual</label>
<input type="password" class="form-control" id="currentPassword"
th:field="*{currentPassword}"
th:classappend="${#fields.hasErrors('currentPassword')} ? ' is-invalid'">
<div class="invalid-feedback" th:if="${#fields.hasErrors('currentPassword')}"
th:errors="*{currentPassword}">Error</div>
</div>
<div class="mb-3">
<label th:text="#{usuarios.form.password.nueva}" for="newPassword">Nueva contraseña</label>
<input type="password" class="form-control" id="newPassword"
th:field="*{newPassword}"
th:classappend="${#fields.hasErrors('newPassword')} ? ' is-invalid'">
<div class="text-muted" th:text="#{usuarios.form.password.nota}">
Solo podrás cambiar la contraseña si indicas la actual.
</div>
<div class="invalid-feedback" th:if="${#fields.hasErrors('newPassword')}"
th:errors="*{newPassword}">Error</div>
</div>
<div class="mb-3">
<label th:text="#{usuarios.form.confirmarPassword}" for="confirmPassword">Confirmar contraseña</label>
<input type="password" class="form-control" id="confirmPassword"
th:field="*{confirmPassword}"
th:classappend="${#fields.hasErrors('confirmPassword')} ? ' is-invalid'">
<div class="invalid-feedback" th:if="${#fields.hasErrors('confirmPassword')}"
th:errors="*{confirmPassword}">Error</div>
</div>
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-secondary" th:text="#{app.guardar}">Guardar</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</th:block>
<th:block layout:fragment="modal" />
<th:block th:replace="~{theme/partials/vendor-scripts :: scripts}" />
</body>
</html>