refactor: replace Spring Boot with Jooby framework

- Remove Spring Boot dependencies and annotations.
- Implement Jooby MVC controllers and Guice dependency injection.
- Migrate persistence layer to Ebean ORM.
- Configure Flyway migrations and ApiErrorController.
- Update application configuration to HOCON format.
This commit is contained in:
2026-03-02 16:38:11 +01:00
parent 83070ccbda
commit 16f10e101a
78 changed files with 1262 additions and 971 deletions

View File

@@ -0,0 +1,101 @@
# ========== Log4j2 Properties Configuration ==========
status = warn
name = JoobyPortfolioConfig
property.basePath = logs
# ========== Appenders ==========
# Console
appender.console.type = Console
appender.console.name = ConsoleAppender
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
# Rolling File INFO (DEBUG e INFO)
appender.info.type = RollingFile
appender.info.name = InfoFileAppender
appender.info.fileName = ${basePath}/info.log
appender.info.filePattern = ${basePath}/info-%d{yyyy-MM-dd}-%i.log.gz
appender.info.layout.type = PatternLayout
appender.info.layout.pattern = [%d{yyyy-MM-dd HH:mm:ss}] [%t] %-5level %logger{36} - %msg%n
appender.info.policies.type = Policies
appender.info.policies.time.type = TimeBasedTriggeringPolicy
appender.info.policies.time.interval = 1
appender.info.policies.size.type = SizeBasedTriggeringPolicy
appender.info.policies.size.size = 10MB
appender.info.filter.type = LevelRangeFilter
appender.info.filter.levelMin = debug
appender.info.filter.levelMax = info
appender.info.filter.onMatch = ACCEPT
appender.info.filter.onMismatch = DENY
# Rolling File ERROR (ERROR y FATAL)
appender.error.type = RollingFile
appender.error.name = ErrorFileAppender
appender.error.fileName = ${basePath}/error.log
appender.error.filePattern = ${basePath}/error-%d{yyyy-MM-dd}-%i.log.gz
appender.error.layout.type = PatternLayout
appender.error.layout.pattern = [%d{yyyy-MM-dd HH:mm:ss}] [%t] %-5level %logger{36} - %msg%n
appender.error.policies.type = Policies
appender.error.policies.time.type = TimeBasedTriggeringPolicy
appender.error.policies.time.interval = 1
appender.error.policies.size.type = SizeBasedTriggeringPolicy
appender.error.policies.size.size = 10MB
appender.error.filter.threshold.type = ThresholdFilter
appender.error.filter.threshold.level = error
appender.error.filter.threshold.onMatch = ACCEPT
appender.error.filter.threshold.onMismatch = DENY
# Rolling File for Database logs (Ebean SQL)
appender.db.type = RollingFile
appender.db.name = DBFileAppender
appender.db.fileName = ${basePath}/db.log
appender.db.filePattern = ${basePath}/db-%d{yyyy-MM-dd}-%i.log.gz
appender.db.layout.type = PatternLayout
appender.db.layout.pattern = [%d{yyyy-MM-dd HH:mm:ss}] [%t] %-5level %logger{36} - %msg%n
appender.db.policies.type = Policies
appender.db.policies.time.type = TimeBasedTriggeringPolicy
appender.db.policies.time.interval = 1
appender.db.policies.size.type = SizeBasedTriggeringPolicy
appender.db.policies.size.size = 10MB
# ========== Loggers ==========
# App logs (Tu paquete base)
logger.app.name = com.pablotj
logger.app.level = debug
logger.app.additivity = false
logger.app.appenderRefs = console, info, error
logger.app.appenderRef.console.ref = ConsoleAppender
logger.app.appenderRef.info.ref = InfoFileAppender
logger.app.appenderRef.error.ref = ErrorFileAppender
# Ebean SQL (Sustituye a Hibernate SQL)
# io.ebean.SQL muestra las sentencias ejecutadas
logger.ebean.name = io.ebean.SQL
logger.ebean.level = debug
logger.ebean.additivity = false
logger.ebean.appenderRefs = db
logger.ebean.appenderRef.db.ref = DBFileAppender
# Ebean TX (Opcional: muestra transacciones)
logger.ebean_tx.name = io.ebean.TX
logger.ebean_tx.level = info
logger.ebean_tx.additivity = false
logger.ebean_tx.appenderRefs = db
logger.ebean_tx.appenderRef.db.ref = DBFileAppender
# Jooby Framework logs
logger.jooby.name = io.jooby
logger.jooby.level = info
logger.jooby.additivity = false
logger.jooby.appenderRefs = console
logger.jooby.appenderRef.console.ref = ConsoleAppender
# ========== Root Logger ==========
rootLogger.level = info
rootLogger.appenderRefs = console, info, error
rootLogger.appenderRef.console.ref = ConsoleAppender
rootLogger.appenderRef.info.ref = InfoFileAppender
rootLogger.appenderRef.error.ref = ErrorFileAppender