From 3b17f47efe55aa90f46044ad48e02cc39d8a0885 Mon Sep 17 00:00:00 2001 From: Harkamal Randhawa Date: Wed, 15 Apr 2026 13:11:21 -0600 Subject: [PATCH] activity logs to files --- backend/log.txt.2026-04-14.0.gz | Bin 0 -> 5918 bytes backend/logs/app.log | 701 ++++++++++++++++++ .../controller/ActivityLogController.java | 37 - .../dto/activity/ActivityLogResponse.java | 126 ---- .../petshop/backend/entity/ActivityLog.java | 148 ---- .../repository/ActivityLogRepository.java | 18 - .../backend/service/ActivityLogService.java | 147 +--- .../petshop/backend/service/UserService.java | 11 +- backend/src/main/resources/logback-spring.xml | 44 ++ 9 files changed, 755 insertions(+), 477 deletions(-) create mode 100644 backend/log.txt.2026-04-14.0.gz create mode 100644 backend/logs/app.log delete mode 100644 backend/src/main/java/com/petshop/backend/controller/ActivityLogController.java delete mode 100644 backend/src/main/java/com/petshop/backend/dto/activity/ActivityLogResponse.java delete mode 100644 backend/src/main/java/com/petshop/backend/entity/ActivityLog.java delete mode 100644 backend/src/main/java/com/petshop/backend/repository/ActivityLogRepository.java create mode 100644 backend/src/main/resources/logback-spring.xml diff --git a/backend/log.txt.2026-04-14.0.gz b/backend/log.txt.2026-04-14.0.gz new file mode 100644 index 0000000000000000000000000000000000000000..b47f7d644fca332d2012b25c1cf1eed4d30860cb GIT binary patch literal 5918 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.java:110) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:408) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:166) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:190) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + ... 7 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jwtAuthenticationFilter' defined in file [/home/user/threaded/main/backend/target/classes/com/petshop/backend/security/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1382) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1221) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:231) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:185) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:180) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAdaptableBeans(ServletContextInitializerBeans.java:165) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:97) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.context.servlet.WebApplicationContextInitializer.initialize(WebApplicationContextInitializer.java:53) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.DeferredServletContainerInitializers.onStartup(DeferredServletContainerInitializers.java:55) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4416) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1162) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1158) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:714) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:780) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1162) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1158) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:714) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:201) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:410) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:864) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:435) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.springframework.boot.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:131) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + ... 12 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:499) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1446) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:1225) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1704) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-7.0.5.jar:7.0.5] + ... 52 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'JWT_SECRET' in value "${JWT_SECRET}" <-- "${jwt.secret}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:296) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:129) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:96) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:286) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:257) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:184) ~[spring-context-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:959) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1672) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:764) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:748) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:146) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:493) ~[spring-beans-7.0.5.jar:7.0.5] + ... 64 common frames omitted + +2026-04-15T00:01:40.378-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.flywaydb.core.FlywayExecutor : Database: jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (MySQL 8.0) +2026-04-15T00:01:40.417-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.c.i.s.JdbcTableSchemaHistory : Schema history table `Petstoredb`.`flyway_schema_history` does not exist yet +2026-04-15T00:01:40.421-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbValidate : Successfully validated 4 migrations (execution time 00:00.016s) +2026-04-15T00:01:40.435-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table `Petstoredb`.`flyway_schema_history` ... +2026-04-15T00:01:40.477-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Current version of schema `Petstoredb`: << Empty Schema >> +2026-04-15T00:01:40.496-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Migrating schema `Petstoredb` to version "1 - target baseline" +2026-04-15T00:01:41.063-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Migrating schema `Petstoredb` to version "2 - seed data" +2026-04-15T00:01:41.257-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Migrating schema `Petstoredb` to version "3 - nullable appointment petid" +2026-04-15T00:01:41.334-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Migrating schema `Petstoredb` to version "4 - drop purchase order status" +2026-04-15T00:01:41.352-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Successfully applied 4 migrations to schema `Petstoredb`, now at version v4 (execution time 00:00.781s) +2026-04-15T00:01:41.356-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] c.petshop.backend.DevStackApplication : Starting DevStackApplication using Java 25.0.2 with PID 395219 (/home/user/threaded/main/backend/target/classes started by user in /home/user/threaded/main/backend) +2026-04-15T00:01:41.357-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] c.petshop.backend.DevStackApplication : The following 1 profile is active: "local" +2026-04-15T00:01:41.866-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-04-15T00:01:41.937-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 66 ms. Found 22 JPA repository interfaces. +2026-04-15T00:01:42.388-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-04-15T00:01:42.404-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-04-15T00:01:42.405-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.18] +2026-04-15T00:01:42.431-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 1055 ms +2026-04-15T00:01:42.512-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default] +2026-04-15T00:01:42.538-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final +2026-04-15T00:01:42.712-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-04-15T00:01:42.726-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2026-04-15T00:01:42.732-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@73e64c68 +2026-04-15T00:01:42.733-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2026-04-15T00:01:42.774-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.connections.pooling : HHH10001005: Database info: + Database JDBC URL [jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC] + Database driver: MySQL Connector/J + Database dialect: MySQLDialect + Database version: 8.0.45 + Default catalog/schema: Petstoredb/undefined + Autocommit mode: undefined/unknown + Isolation level: REPEATABLE_READ [default REPEATABLE_READ] + JDBC fetch size: none + Pool: DataSourceConnectionProvider + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2026-04-15T00:01:43.421-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-04-15T00:01:43.444-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T00:01:43.482-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-04-15T00:01:44.244-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.boot.web.servlet.RegistrationBean : Filter activityLoggingFilterRegistration was not registered (disabled) +2026-04-15T00:01:44.926-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-04-15T00:01:44.927-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@282afd1c]] +2026-04-15T00:01:44.928-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-04-15T00:01:44.940-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-04-15T00:01:45.239-06:00 INFO 395219 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] c.petshop.backend.DevStackApplication : Started DevStackApplication in 5.38 seconds (process running for 19.418) +2026-04-15T00:01:52.849-06:00 INFO 395219 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-04-15T00:01:52.849-06:00 INFO 395219 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-04-15T00:01:52.896-06:00 INFO 395219 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 47 ms +2026-04-15T00:02:44.898-06:00 INFO 395219 --- [petshop-backend] [MessageBroker-2] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 2, completed tasks = 1] +2026-04-15T00:32:44.899-06:00 INFO 395219 --- [petshop-backend] [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 11, active threads = 1, queued tasks = 2, completed tasks = 8] +2026-04-15T00:50:19.669-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.boot.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete +2026-04-15T00:50:19.671-06:00 INFO 395219 --- [petshop-backend] [tomcat-shutdown] o.s.boot.tomcat.GracefulShutdown : Graceful shutdown complete +2026-04-15T00:50:19.673-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler : Stopping... +2026-04-15T00:50:19.673-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=false, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@282afd1c]] +2026-04-15T00:50:19.673-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler : Stopped. +2026-04-15T00:50:19.678-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T00:50:19.680-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2026-04-15T00:50:19.681-06:00 INFO 395219 --- [petshop-backend] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +2026-04-15T00:52:47.712-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.flywaydb.core.FlywayExecutor : Database: jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (MySQL 8.0) +2026-04-15T00:52:47.755-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbValidate : Successfully validated 4 migrations (execution time 00:00.019s) +2026-04-15T00:52:47.762-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Current version of schema `Petstoredb`: 4 +2026-04-15T00:52:47.765-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.f.core.internal.command.DbMigrate : Schema `Petstoredb` is up to date. No migration necessary. +2026-04-15T00:52:47.770-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] c.petshop.backend.DevStackApplication : Starting DevStackApplication using Java 25.0.2 with PID 479752 (/home/user/threaded/main/backend/target/classes started by user in /home/user/threaded/main/backend) +2026-04-15T00:52:47.771-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] c.petshop.backend.DevStackApplication : The following 1 profile is active: "local" +2026-04-15T00:52:48.264-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-04-15T00:52:48.340-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 70 ms. Found 22 JPA repository interfaces. +2026-04-15T00:52:48.783-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-04-15T00:52:48.796-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-04-15T00:52:48.796-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.18] +2026-04-15T00:52:48.822-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 1027 ms +2026-04-15T00:52:48.892-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default] +2026-04-15T00:52:48.917-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final +2026-04-15T00:52:49.094-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-04-15T00:52:49.107-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2026-04-15T00:52:49.114-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@5bd8d681 +2026-04-15T00:52:49.115-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2026-04-15T00:52:49.145-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.connections.pooling : HHH10001005: Database info: + Database JDBC URL [jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC] + Database driver: MySQL Connector/J + Database dialect: MySQLDialect + Database version: 8.0.45 + Default catalog/schema: Petstoredb/undefined + Autocommit mode: undefined/unknown + Isolation level: REPEATABLE_READ [default REPEATABLE_READ] + JDBC fetch size: none + Pool: DataSourceConnectionProvider + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2026-04-15T00:52:49.779-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-04-15T00:52:49.803-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T00:52:49.838-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-04-15T00:52:50.544-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.boot.web.servlet.RegistrationBean : Filter activityLoggingFilterRegistration was not registered (disabled) +2026-04-15T00:52:51.245-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-04-15T00:52:51.245-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@a0892ad]] +2026-04-15T00:52:51.246-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-04-15T00:52:51.256-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-04-15T00:52:51.428-06:00 INFO 479752 --- [petshop-backend] [com.petshop.backend.DevStackApplication.main()] c.petshop.backend.DevStackApplication : Started DevStackApplication in 4.249 seconds (process running for 13.053) +2026-04-15T00:52:54.795-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-04-15T00:52:54.795-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-04-15T00:52:54.832-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 37 ms +2026-04-15T00:53:51.222-06:00 INFO 479752 --- [petshop-backend] [MessageBroker-1] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 2, completed tasks = 1] +2026-04-15T00:54:09.875-06:00 INFO 482960 --- [petshop-backend] [main] org.flywaydb.core.FlywayExecutor : Database: jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (MySQL 8.0) +2026-04-15T00:54:09.916-06:00 INFO 482960 --- [petshop-backend] [main] o.f.core.internal.command.DbValidate : Successfully validated 4 migrations (execution time 00:00.018s) +2026-04-15T00:54:09.924-06:00 INFO 482960 --- [petshop-backend] [main] o.f.core.internal.command.DbMigrate : Current version of schema `Petstoredb`: 4 +2026-04-15T00:54:09.925-06:00 INFO 482960 --- [petshop-backend] [main] o.f.core.internal.command.DbMigrate : Schema `Petstoredb` is up to date. No migration necessary. +2026-04-15T00:54:09.931-06:00 INFO 482960 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : Starting BackendApplication using Java 25.0.2 with PID 482960 (/home/user/threaded/main/backend/target/classes started by user in /home/user/threaded/main/backend) +2026-04-15T00:54:09.932-06:00 INFO 482960 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : No active profile set, falling back to 1 default profile: "default" +2026-04-15T00:54:10.354-06:00 INFO 482960 --- [petshop-backend] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-04-15T00:54:10.462-06:00 INFO 482960 --- [petshop-backend] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 103 ms. Found 22 JPA repository interfaces. +2026-04-15T00:54:10.793-06:00 INFO 482960 --- [petshop-backend] [main] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-04-15T00:54:10.799-06:00 INFO 482960 --- [petshop-backend] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-04-15T00:54:10.800-06:00 INFO 482960 --- [petshop-backend] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.18] +2026-04-15T00:54:10.821-06:00 INFO 482960 --- [petshop-backend] [main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 869 ms +2026-04-15T00:54:10.873-06:00 INFO 482960 --- [petshop-backend] [main] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default] +2026-04-15T00:54:10.892-06:00 INFO 482960 --- [petshop-backend] [main] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final +2026-04-15T00:54:11.051-06:00 INFO 482960 --- [petshop-backend] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-04-15T00:54:11.065-06:00 INFO 482960 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2026-04-15T00:54:11.071-06:00 INFO 482960 --- [petshop-backend] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2db0dd19 +2026-04-15T00:54:11.072-06:00 INFO 482960 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2026-04-15T00:54:11.118-06:00 INFO 482960 --- [petshop-backend] [main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: + Database JDBC URL [jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC] + Database driver: MySQL Connector/J + Database dialect: MySQLDialect + Database version: 8.0.45 + Default catalog/schema: Petstoredb/undefined + Autocommit mode: undefined/unknown + Isolation level: REPEATABLE_READ [default REPEATABLE_READ] + JDBC fetch size: none + Pool: DataSourceConnectionProvider + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2026-04-15T00:54:11.686-06:00 INFO 482960 --- [petshop-backend] [main] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-04-15T00:54:11.707-06:00 INFO 482960 --- [petshop-backend] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T00:54:11.739-06:00 INFO 482960 --- [petshop-backend] [main] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-04-15T00:54:12.507-06:00 ERROR 482960 --- [petshop-backend] [main] t.s.DeferredServletContainerInitializers : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'jwtAuthenticationFilter' defined in file [/home/user/threaded/main/backend/target/classes/com/petshop/backend/security/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed +2026-04-15T00:54:12.517-06:00 INFO 482960 --- [petshop-backend] [main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] +2026-04-15T00:54:12.518-06:00 WARN 482960 --- [petshop-backend] [main] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [HikariPool-1:housekeeper] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: + java.base/jdk.internal.misc.Unsafe.park(Native Method) + java.base/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:271) + java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1803) + java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1166) + java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:883) + java.base/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1016) + java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) + java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + java.base/java.lang.Thread.run(Thread.java:1474) +2026-04-15T00:54:12.518-06:00 WARN 482960 --- [petshop-backend] [main] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [HikariPool-1:connection-adder] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: + java.base/jdk.internal.misc.Unsafe.park(Native Method) + java.base/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:271) + java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1803) + java.base/java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:460) + java.base/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015) + java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) + java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + java.base/java.lang.Thread.run(Thread.java:1474) +2026-04-15T00:54:12.519-06:00 WARN 482960 --- [petshop-backend] [main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server +2026-04-15T00:54:12.519-06:00 INFO 482960 --- [petshop-backend] [main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T00:54:12.521-06:00 INFO 482960 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2026-04-15T00:54:12.522-06:00 INFO 482960 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +2026-04-15T00:54:12.526-06:00 INFO 482960 --- [petshop-backend] [main] .s.b.a.l.ConditionEvaluationReportLogger : + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2026-04-15T00:54:12.532-06:00 ERROR 482960 --- [petshop-backend] [main] o.s.boot.SpringApplication : Application run failed + +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:167) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:615) ~[spring-context-7.0.5.jar:7.0.5] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:154) ~[spring-boot-4.0.3.jar:4.0.3] + at com.petshop.backend.BackendApplication.main(BackendApplication.java:17) ~[classes/:na] +Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat + at org.springframework.boot.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:150) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.TomcatWebServer.(TomcatWebServer.java:110) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:408) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:166) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:190) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + ... 7 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jwtAuthenticationFilter' defined in file [/home/user/threaded/main/backend/target/classes/com/petshop/backend/security/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1382) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1221) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:231) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:185) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:180) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAdaptableBeans(ServletContextInitializerBeans.java:165) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:97) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.context.servlet.WebApplicationContextInitializer.initialize(WebApplicationContextInitializer.java:53) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.DeferredServletContainerInitializers.onStartup(DeferredServletContainerInitializers.java:55) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4416) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1162) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1158) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:714) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:780) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1162) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1158) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:714) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:201) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:410) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:864) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:435) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.springframework.boot.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:131) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + ... 12 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:499) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1446) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:1225) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1704) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-7.0.5.jar:7.0.5] + ... 52 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'JWT_SECRET' in value "${JWT_SECRET}" <-- "${jwt.secret}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:296) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:129) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:96) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:286) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:257) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:184) ~[spring-context-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:959) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1672) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:764) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:748) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:146) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:493) ~[spring-beans-7.0.5.jar:7.0.5] + ... 64 common frames omitted + +2026-04-15T01:03:14.655-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-4] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | POST /api/v1/auth/login -> 200 +2026-04-15T01:03:14.697-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-6] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/auth/me -> 200 +2026-04-15T01:03:14.761-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-9] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/auth/me -> 200 +2026-04-15T01:03:14.773-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-3] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/auth/me/avatar/file -> 200 +2026-04-15T01:03:14.800-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/chat/conversations -> 200 +2026-04-15T01:03:15.064-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-7] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/sales -> 200 +2026-04-15T01:03:16.279-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-6] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/dropdowns/customers -> 200 +2026-04-15T01:03:16.315-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-4] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/chat/conversations -> 200 +2026-04-15T01:03:16.367-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-3] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/chat/conversations/31/messages -> 200 +2026-04-15T01:03:16.418-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/users/15/avatar/file -> 200 +2026-04-15T01:03:23.526-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-8] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | POST /api/v1/chat/conversations/31/messages -> 201 +2026-04-15T01:03:23.534-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-6] c.p.backend.service.ActivityLogService : [ACTIVITY] ADMIN | admin | Downtown Branch | GET /api/v1/users/1/avatar/file -> 200 +2026-04-15T01:04:23.990-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-8] c.p.backend.service.ActivityLogService : [ACTIVITY] CUSTOMER | customer | Downtown Branch | Email sent: Appointment confirmed — Nail Trimming → customer@petshop.com +2026-04-15T01:04:24.272-06:00 INFO 479752 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-8] c.p.backend.service.ActivityLogService : [ACTIVITY] STAFF | david.brown | Downtown Branch | Email sent: Appointment assigned — Nail Trimming → david.brown@petshop.com +2026-04-15T01:07:25.933-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.boot.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete +2026-04-15T01:07:25.936-06:00 INFO 479752 --- [petshop-backend] [tomcat-shutdown] o.s.boot.tomcat.GracefulShutdown : Graceful shutdown complete +2026-04-15T01:07:25.939-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler : Stopping... +2026-04-15T01:07:25.939-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=false, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@a0892ad]] +2026-04-15T01:07:25.939-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] o.s.m.s.b.SimpleBrokerMessageHandler : Stopped. +2026-04-15T01:07:25.946-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T01:07:25.949-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2026-04-15T01:07:25.951-06:00 INFO 479752 --- [petshop-backend] [SpringApplicationShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +2026-04-15T01:07:44.609-06:00 ERROR 509891 --- [petshop-backend] [main] o.s.boot.SpringApplication : Application run failed + +org.flywaydb.core.internal.exception.sqlExceptions.FlywaySqlUnableToConnectToDbException: Unable to obtain connection from database (jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC) for user 'petshop': Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +SQL State : 08S01 +Error Code : 0 +Message : Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + + at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:70) ~[flyway-core-11.14.1.jar:na] + at org.flywaydb.core.internal.jdbc.JdbcConnectionFactory.(JdbcConnectionFactory.java:76) ~[flyway-core-11.14.1.jar:na] + at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:142) ~[flyway-core-11.14.1.jar:na] + at org.flywaydb.core.Flyway.migrate(Flyway.java:186) ~[flyway-core-11.14.1.jar:na] + at com.petshop.backend.config.FlywayContextInitializer.initialize(FlywayContextInitializer.java:41) ~[classes/:na] + at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:623) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:386) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:154) ~[spring-boot-4.0.3.jar:4.0.3] + at com.petshop.backend.BackendApplication.main(BackendApplication.java:17) ~[classes/:na] +Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:165) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:55) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:840) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:416) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:180) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at org.flywaydb.core.internal.jdbc.DriverDataSource.getConnectionFromDriver(DriverDataSource.java:283) ~[flyway-core-11.14.1.jar:na] + at org.flywaydb.core.internal.jdbc.DriverDataSource.getConnection(DriverDataSource.java:248) ~[flyway-core-11.14.1.jar:na] + at org.flywaydb.core.internal.jdbc.JdbcUtils.openConnection(JdbcUtils.java:65) ~[flyway-core-11.14.1.jar:na] + ... 9 common frames omitted +Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure + +The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. + at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na] + at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483) ~[na:na] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:52) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:95) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:140) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:156) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:79) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.NativeSession.connect(NativeSession.java:142) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:964) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828) ~[mysql-connector-j-9.6.0.jar:9.6.0] + ... 15 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.connect0(Native Method) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:546) ~[na:na] + at java.base/sun.nio.ch.Net.connect(Net.java:535) ~[na:na] + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:585) ~[na:na] + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:284) ~[na:na] + at java.base/java.net.Socket.connect(Socket.java:659) ~[na:na] + at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:144) ~[mysql-connector-j-9.6.0.jar:9.6.0] + at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:53) ~[mysql-connector-j-9.6.0.jar:9.6.0] + ... 18 common frames omitted + +2026-04-15T01:10:36.734-06:00 INFO 511344 --- [petshop-backend] [main] org.flywaydb.core.FlywayExecutor : Database: jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (MySQL 8.0) +2026-04-15T01:10:36.776-06:00 INFO 511344 --- [petshop-backend] [main] o.f.core.internal.command.DbValidate : Successfully validated 4 migrations (execution time 00:00.017s) +2026-04-15T01:10:36.784-06:00 INFO 511344 --- [petshop-backend] [main] o.f.core.internal.command.DbMigrate : Current version of schema `Petstoredb`: 4 +2026-04-15T01:10:36.786-06:00 INFO 511344 --- [petshop-backend] [main] o.f.core.internal.command.DbMigrate : Schema `Petstoredb` is up to date. No migration necessary. +2026-04-15T01:10:36.789-06:00 INFO 511344 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : Starting BackendApplication using Java 25.0.2 with PID 511344 (/home/user/threaded/main/backend/target/classes started by user in /home/user/threaded/main/backend) +2026-04-15T01:10:36.790-06:00 INFO 511344 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : No active profile set, falling back to 1 default profile: "default" +2026-04-15T01:10:37.202-06:00 INFO 511344 --- [petshop-backend] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-04-15T01:10:37.271-06:00 INFO 511344 --- [petshop-backend] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 64 ms. Found 22 JPA repository interfaces. +2026-04-15T01:10:37.586-06:00 INFO 511344 --- [petshop-backend] [main] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-04-15T01:10:37.592-06:00 INFO 511344 --- [petshop-backend] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-04-15T01:10:37.592-06:00 INFO 511344 --- [petshop-backend] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.18] +2026-04-15T01:10:37.612-06:00 INFO 511344 --- [petshop-backend] [main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 802 ms +2026-04-15T01:10:37.664-06:00 INFO 511344 --- [petshop-backend] [main] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default] +2026-04-15T01:10:37.682-06:00 INFO 511344 --- [petshop-backend] [main] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final +2026-04-15T01:10:37.845-06:00 INFO 511344 --- [petshop-backend] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-04-15T01:10:37.862-06:00 INFO 511344 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2026-04-15T01:10:37.869-06:00 INFO 511344 --- [petshop-backend] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@65cb50dc +2026-04-15T01:10:37.870-06:00 INFO 511344 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2026-04-15T01:10:37.912-06:00 INFO 511344 --- [petshop-backend] [main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: + Database JDBC URL [jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC] + Database driver: MySQL Connector/J + Database dialect: MySQLDialect + Database version: 8.0.45 + Default catalog/schema: Petstoredb/undefined + Autocommit mode: undefined/unknown + Isolation level: REPEATABLE_READ [default REPEATABLE_READ] + JDBC fetch size: none + Pool: DataSourceConnectionProvider + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2026-04-15T01:10:38.526-06:00 INFO 511344 --- [petshop-backend] [main] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-04-15T01:10:38.549-06:00 INFO 511344 --- [petshop-backend] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T01:10:38.583-06:00 INFO 511344 --- [petshop-backend] [main] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-04-15T01:10:39.341-06:00 ERROR 511344 --- [petshop-backend] [main] t.s.DeferredServletContainerInitializers : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'jwtAuthenticationFilter' defined in file [/home/user/threaded/main/backend/target/classes/com/petshop/backend/security/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed +2026-04-15T01:10:39.356-06:00 INFO 511344 --- [petshop-backend] [main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] +2026-04-15T01:10:39.358-06:00 WARN 511344 --- [petshop-backend] [main] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [HikariPool-1:housekeeper] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: + java.base/jdk.internal.misc.Unsafe.park(Native Method) + java.base/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:271) + java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1803) + java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1166) + java.base/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:883) + java.base/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1016) + java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) + java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + java.base/java.lang.Thread.run(Thread.java:1474) +2026-04-15T01:10:39.358-06:00 WARN 511344 --- [petshop-backend] [main] o.a.c.loader.WebappClassLoaderBase : The web application [ROOT] appears to have started a thread named [HikariPool-1:connection-adder] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread: + java.base/jdk.internal.misc.Unsafe.park(Native Method) + java.base/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:271) + java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1803) + java.base/java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:460) + java.base/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1015) + java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) + java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614) + java.base/java.lang.Thread.run(Thread.java:1474) +2026-04-15T01:10:39.359-06:00 WARN 511344 --- [petshop-backend] [main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server +2026-04-15T01:10:39.359-06:00 INFO 511344 --- [petshop-backend] [main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T01:10:39.360-06:00 INFO 511344 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated... +2026-04-15T01:10:39.362-06:00 INFO 511344 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed. +2026-04-15T01:10:39.365-06:00 INFO 511344 --- [petshop-backend] [main] .s.b.a.l.ConditionEvaluationReportLogger : + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2026-04-15T01:10:39.371-06:00 ERROR 511344 --- [petshop-backend] [main] o.s.boot.SpringApplication : Application run failed + +org.springframework.context.ApplicationContextException: Unable to start web server + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:167) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:615) ~[spring-context-7.0.5.jar:7.0.5] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:154) ~[spring-boot-4.0.3.jar:4.0.3] + at com.petshop.backend.BackendApplication.main(BackendApplication.java:17) ~[classes/:na] +Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat + at org.springframework.boot.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:150) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.TomcatWebServer.(TomcatWebServer.java:110) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:408) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:166) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:190) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:164) ~[spring-boot-web-server-4.0.3.jar:4.0.3] + ... 7 common frames omitted +Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jwtAuthenticationFilter' defined in file [/home/user/threaded/main/backend/target/classes/com/petshop/backend/security/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1382) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1221) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:231) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:185) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAsRegistrationBean(ServletContextInitializerBeans.java:180) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addAdaptableBeans(ServletContextInitializerBeans.java:165) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:97) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.web.context.servlet.WebApplicationContextInitializer.initialize(WebApplicationContextInitializer.java:53) ~[spring-boot-4.0.3.jar:4.0.3] + at org.springframework.boot.tomcat.servlet.DeferredServletContainerInitializers.onStartup(DeferredServletContainerInitializers.java:55) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4416) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1162) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1158) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:714) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:780) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1162) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1158) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328) ~[na:na] + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:81) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:149) ~[na:na] + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:714) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:201) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:410) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:864) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:435) ~[tomcat-embed-core-11.0.18.jar:11.0.18] + at org.springframework.boot.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:131) ~[spring-boot-tomcat-4.0.3.jar:4.0.3] + ... 12 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtUtil': Injection of autowired dependencies failed + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:499) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1446) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:1225) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1704) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-7.0.5.jar:7.0.5] + ... 52 common frames omitted +Caused by: org.springframework.util.PlaceholderResolutionException: Could not resolve placeholder 'JWT_SECRET' in value "${JWT_SECRET}" <-- "${jwt.secret}" + at org.springframework.util.PlaceholderResolutionException.withValue(PlaceholderResolutionException.java:81) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PlaceholderParser$ParsedValue.resolve(PlaceholderParser.java:296) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PlaceholderParser.replacePlaceholders(PlaceholderParser.java:129) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:96) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:286) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:257) ~[spring-core-7.0.5.jar:7.0.5] + at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:184) ~[spring-context-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:959) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1672) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:764) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:748) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:146) ~[spring-beans-7.0.5.jar:7.0.5] + at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:493) ~[spring-beans-7.0.5.jar:7.0.5] + ... 64 common frames omitted + +2026-04-15T01:13:25.663-06:00 INFO 512591 --- [petshop-backend] [main] org.flywaydb.core.FlywayExecutor : Database: jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC (MySQL 8.0) +2026-04-15T01:13:25.698-06:00 INFO 512591 --- [petshop-backend] [main] o.f.core.internal.command.DbValidate : Successfully validated 4 migrations (execution time 00:00.013s) +2026-04-15T01:13:25.705-06:00 INFO 512591 --- [petshop-backend] [main] o.f.core.internal.command.DbMigrate : Current version of schema `Petstoredb`: 4 +2026-04-15T01:13:25.707-06:00 INFO 512591 --- [petshop-backend] [main] o.f.core.internal.command.DbMigrate : Schema `Petstoredb` is up to date. No migration necessary. +2026-04-15T01:13:25.711-06:00 INFO 512591 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : Starting BackendApplication using Java 25.0.2 with PID 512591 (/home/user/threaded/main/backend/target/classes started by user in /home/user/threaded/main/backend) +2026-04-15T01:13:25.712-06:00 INFO 512591 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : No active profile set, falling back to 1 default profile: "default" +2026-04-15T01:13:26.129-06:00 INFO 512591 --- [petshop-backend] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2026-04-15T01:13:26.197-06:00 INFO 512591 --- [petshop-backend] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 64 ms. Found 22 JPA repository interfaces. +2026-04-15T01:13:26.510-06:00 INFO 512591 --- [petshop-backend] [main] o.s.boot.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) +2026-04-15T01:13:26.517-06:00 INFO 512591 --- [petshop-backend] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat] +2026-04-15T01:13:26.517-06:00 INFO 512591 --- [petshop-backend] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/11.0.18] +2026-04-15T01:13:26.536-06:00 INFO 512591 --- [petshop-backend] [main] b.w.c.s.WebApplicationContextInitializer : Root WebApplicationContext: initialization completed in 798 ms +2026-04-15T01:13:26.584-06:00 INFO 512591 --- [petshop-backend] [main] org.hibernate.orm.jpa : HHH008540: Processing PersistenceUnitInfo [name: default] +2026-04-15T01:13:26.602-06:00 INFO 512591 --- [petshop-backend] [main] org.hibernate.orm.core : HHH000001: Hibernate ORM core version 7.2.4.Final +2026-04-15T01:13:26.748-06:00 INFO 512591 --- [petshop-backend] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer +2026-04-15T01:13:26.769-06:00 INFO 512591 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... +2026-04-15T01:13:26.776-06:00 INFO 512591 --- [petshop-backend] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@7aff1db3 +2026-04-15T01:13:26.777-06:00 INFO 512591 --- [petshop-backend] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. +2026-04-15T01:13:26.803-06:00 INFO 512591 --- [petshop-backend] [main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: + Database JDBC URL [jdbc:mysql://localhost:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC] + Database driver: MySQL Connector/J + Database dialect: MySQLDialect + Database version: 8.0.45 + Default catalog/schema: Petstoredb/undefined + Autocommit mode: undefined/unknown + Isolation level: REPEATABLE_READ [default REPEATABLE_READ] + JDBC fetch size: none + Pool: DataSourceConnectionProvider + Minimum pool size: undefined/unknown + Maximum pool size: undefined/unknown +2026-04-15T01:13:27.355-06:00 INFO 512591 --- [petshop-backend] [main] org.hibernate.orm.core : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2026-04-15T01:13:27.376-06:00 INFO 512591 --- [petshop-backend] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' +2026-04-15T01:13:27.407-06:00 INFO 512591 --- [petshop-backend] [main] o.s.d.j.r.query.QueryEnhancerFactories : Hibernate is in classpath; If applicable, HQL parser will be used. +2026-04-15T01:13:28.169-06:00 INFO 512591 --- [petshop-backend] [main] o.s.boot.web.servlet.RegistrationBean : Filter activityLoggingFilterRegistration was not registered (disabled) +2026-04-15T01:13:28.975-06:00 INFO 512591 --- [petshop-backend] [main] o.s.m.s.b.SimpleBrokerMessageHandler : Starting... +2026-04-15T01:13:28.976-06:00 INFO 512591 --- [petshop-backend] [main] o.s.m.s.b.SimpleBrokerMessageHandler : BrokerAvailabilityEvent[available=true, SimpleBrokerMessageHandler [org.springframework.messaging.simp.broker.DefaultSubscriptionRegistry@6bd1cffe]] +2026-04-15T01:13:28.976-06:00 INFO 512591 --- [petshop-backend] [main] o.s.m.s.b.SimpleBrokerMessageHandler : Started. +2026-04-15T01:13:28.982-06:00 INFO 512591 --- [petshop-backend] [main] o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' +2026-04-15T01:13:29.118-06:00 INFO 512591 --- [petshop-backend] [main] com.petshop.backend.BackendApplication : Started BackendApplication in 3.879 seconds (process running for 4.044) +2026-04-15T01:13:50.939-06:00 INFO 512591 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' +2026-04-15T01:13:50.939-06:00 INFO 512591 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' +2026-04-15T01:13:50.979-06:00 INFO 512591 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 40 ms +2026-04-15T01:14:28.955-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-2] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 4, active threads = 1, queued tasks = 2, completed tasks = 1] +2026-04-15T01:21:53.056-06:00 INFO 512591 --- [petshop-backend] [http-nio-0.0.0.0-8080-exec-2] c.p.backend.service.ActivityLogService : [ACTIVITY] CUSTOMER | customer | Downtown Branch | Email sent: Contact: Hello → customer@petshop.com +2026-04-15T01:44:28.956-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-6] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 11, active threads = 1, queued tasks = 2, completed tasks = 8] +2026-04-15T07:13:11.461-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-2] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 15] +2026-04-15T07:52:32.311-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-16] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 0 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(0)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 22] +2026-04-15T08:22:32.312-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-14] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 2 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(2)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 6], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 29] +2026-04-15T08:52:32.313-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-16] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 2 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(2)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 6], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 36] +2026-04-15T12:04:41.833-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-15] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 2 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(2)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 6], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 43] +2026-04-15T12:34:41.834-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-8] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 2 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(2)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 6], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 50] +2026-04-15T13:04:41.834-06:00 INFO 512591 --- [petshop-backend] [MessageBroker-14] o.s.w.s.c.WebSocketMessageBrokerStats : WebSocketSession[0 current WS(0)-HttpStream(0)-HttpPoll(0), 2 total, 0 closed abnormally (0 connect failure, 0 send limit, 0 transport error)], stompSubProtocol[processed CONNECT(2)-CONNECTED(0)-DISCONNECT(0)], stompBrokerRelay[null], inboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 6], outboundChannel[pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2], sockJsScheduler[pool size = 16, active threads = 1, queued tasks = 2, completed tasks = 57] diff --git a/backend/src/main/java/com/petshop/backend/controller/ActivityLogController.java b/backend/src/main/java/com/petshop/backend/controller/ActivityLogController.java deleted file mode 100644 index 6d202ddb..00000000 --- a/backend/src/main/java/com/petshop/backend/controller/ActivityLogController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.petshop.backend.controller; - -import com.petshop.backend.dto.activity.ActivityLogResponse; -import com.petshop.backend.service.ActivityLogService; -import java.time.LocalDate; -import java.util.List; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.http.ResponseEntity; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/api/v1/activity-logs") -@PreAuthorize("hasRole('ADMIN')") -public class ActivityLogController { - - private final ActivityLogService activityLogService; - - public ActivityLogController(ActivityLogService activityLogService) { - this.activityLogService = activityLogService; - } - - @GetMapping - public ResponseEntity> getActivityLogs( - @RequestParam(defaultValue = "2000") int limit, - @RequestParam(required = false) Long storeId, - @RequestParam(required = false) String role, - @RequestParam(required = false) String search, - @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate, - @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) { - int safeLimit = Math.min(Math.max(1, limit), 10000); - return ResponseEntity.ok(activityLogService.getLogs(safeLimit, storeId, role, search, startDate, endDate)); - } -} diff --git a/backend/src/main/java/com/petshop/backend/dto/activity/ActivityLogResponse.java b/backend/src/main/java/com/petshop/backend/dto/activity/ActivityLogResponse.java deleted file mode 100644 index 3d5bc890..00000000 --- a/backend/src/main/java/com/petshop/backend/dto/activity/ActivityLogResponse.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.petshop.backend.dto.activity; - -import java.time.LocalDateTime; - -public class ActivityLogResponse { - private Long logId; - private Long userId; - private String username; - private String fullName; - private String role; - private Long storeId; - private String storeName; - private String usernameSnapshot; - private String fullNameSnapshot; - private String roleSnapshot; - private String storeNameSnapshot; - private String activity; - private LocalDateTime logTimestamp; - - public ActivityLogResponse() { - } - - public Long getLogId() { - return logId; - } - - public void setLogId(Long logId) { - this.logId = logId; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getFullName() { - return fullName; - } - - public void setFullName(String fullName) { - this.fullName = fullName; - } - - public String getRole() { - return role; - } - - public void setRole(String role) { - this.role = role; - } - - public Long getStoreId() { - return storeId; - } - - public void setStoreId(Long storeId) { - this.storeId = storeId; - } - - public String getStoreName() { - return storeName; - } - - public void setStoreName(String storeName) { - this.storeName = storeName; - } - - public String getUsernameSnapshot() { - return usernameSnapshot; - } - - public void setUsernameSnapshot(String usernameSnapshot) { - this.usernameSnapshot = usernameSnapshot; - } - - public String getFullNameSnapshot() { - return fullNameSnapshot; - } - - public void setFullNameSnapshot(String fullNameSnapshot) { - this.fullNameSnapshot = fullNameSnapshot; - } - - public String getRoleSnapshot() { - return roleSnapshot; - } - - public void setRoleSnapshot(String roleSnapshot) { - this.roleSnapshot = roleSnapshot; - } - - public String getStoreNameSnapshot() { - return storeNameSnapshot; - } - - public void setStoreNameSnapshot(String storeNameSnapshot) { - this.storeNameSnapshot = storeNameSnapshot; - } - - public String getActivity() { - return activity; - } - - public void setActivity(String activity) { - this.activity = activity; - } - - public LocalDateTime getLogTimestamp() { - return logTimestamp; - } - - public void setLogTimestamp(LocalDateTime logTimestamp) { - this.logTimestamp = logTimestamp; - } -} diff --git a/backend/src/main/java/com/petshop/backend/entity/ActivityLog.java b/backend/src/main/java/com/petshop/backend/entity/ActivityLog.java deleted file mode 100644 index b445b7c4..00000000 --- a/backend/src/main/java/com/petshop/backend/entity/ActivityLog.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.petshop.backend.entity; - -import jakarta.persistence.*; -import org.hibernate.annotations.Immutable; - -import java.time.LocalDateTime; -import java.util.Objects; - -@Entity -@Immutable -@Table(name = "activityLog") -public class ActivityLog { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long logId; - - @ManyToOne - @JoinColumn(name = "userId", nullable = false) - private User user; - - @ManyToOne - @JoinColumn(name = "storeId") - private StoreLocation store; - - @Column(length = 50) - private String usernameSnapshot; - - @Column(length = 100) - private String fullNameSnapshot; - - @Column(length = 20) - private String roleSnapshot; - - @Column(length = 100) - private String storeNameSnapshot; - - @Column(nullable = false, columnDefinition = "TEXT") - private String activity; - - @Column(nullable = false) - private LocalDateTime logTimestamp = LocalDateTime.now(); - - public ActivityLog() { - } - - public ActivityLog(Long logId, User user, String activity, LocalDateTime logTimestamp) { - this.logId = logId; - this.user = user; - this.activity = activity; - this.logTimestamp = logTimestamp; - } - - public Long getLogId() { - return logId; - } - - public void setLogId(Long logId) { - this.logId = logId; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public StoreLocation getStore() { - return store; - } - - public void setStore(StoreLocation store) { - this.store = store; - } - - public String getUsernameSnapshot() { - return usernameSnapshot; - } - - public void setUsernameSnapshot(String usernameSnapshot) { - this.usernameSnapshot = usernameSnapshot; - } - - public String getFullNameSnapshot() { - return fullNameSnapshot; - } - - public void setFullNameSnapshot(String fullNameSnapshot) { - this.fullNameSnapshot = fullNameSnapshot; - } - - public String getRoleSnapshot() { - return roleSnapshot; - } - - public void setRoleSnapshot(String roleSnapshot) { - this.roleSnapshot = roleSnapshot; - } - - public String getStoreNameSnapshot() { - return storeNameSnapshot; - } - - public void setStoreNameSnapshot(String storeNameSnapshot) { - this.storeNameSnapshot = storeNameSnapshot; - } - - public String getActivity() { - return activity; - } - - public void setActivity(String activity) { - this.activity = activity; - } - - public LocalDateTime getLogTimestamp() { - return logTimestamp; - } - - public void setLogTimestamp(LocalDateTime logTimestamp) { - this.logTimestamp = logTimestamp; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ActivityLog that = (ActivityLog) o; - return Objects.equals(logId, that.logId); - } - - @Override - public int hashCode() { - return Objects.hash(logId); - } - - @Override - public String toString() { - return "ActivityLog{" + - "logId=" + logId + - ", user=" + user + - ", activity='" + activity + '\'' + - ", logTimestamp=" + logTimestamp + - '}'; - } -} diff --git a/backend/src/main/java/com/petshop/backend/repository/ActivityLogRepository.java b/backend/src/main/java/com/petshop/backend/repository/ActivityLogRepository.java deleted file mode 100644 index 09bf817a..00000000 --- a/backend/src/main/java/com/petshop/backend/repository/ActivityLogRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.petshop.backend.repository; - -import com.petshop.backend.entity.ActivityLog; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; -import org.springframework.data.jpa.repository.Query; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface ActivityLogRepository extends JpaRepository, JpaSpecificationExecutor { - boolean existsByUser_Id(Long userId); - - @Query("select a from ActivityLog a order by a.logTimestamp desc, a.logId desc") - List findRecent(Pageable pageable); -} diff --git a/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java b/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java index a3880071..540b9383 100644 --- a/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java +++ b/backend/src/main/java/com/petshop/backend/service/ActivityLogService.java @@ -1,65 +1,38 @@ package com.petshop.backend.service; -import com.petshop.backend.dto.activity.ActivityLogResponse; -import com.petshop.backend.entity.ActivityLog; import com.petshop.backend.entity.StoreLocation; import com.petshop.backend.entity.User; -import com.petshop.backend.repository.ActivityLogRepository; import com.petshop.backend.repository.UserRepository; -import jakarta.persistence.criteria.Predicate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.List; @Service public class ActivityLogService { - private static final Logger log = LoggerFactory.getLogger(ActivityLogService.class); + private static final Logger log = LoggerFactory.getLogger("activity"); - private final ActivityLogRepository activityLogRepository; private final UserRepository userRepository; - public ActivityLogService(ActivityLogRepository activityLogRepository, UserRepository userRepository) { - this.activityLogRepository = activityLogRepository; + public ActivityLogService(UserRepository userRepository) { this.userRepository = userRepository; } - @Transactional public void record(Long userId, String activity) { if (userId == null || activity == null || activity.isBlank()) { return; } - try { - User managedUser = userRepository.findById(userId).orElse(null); - if (managedUser == null) { + User user = userRepository.findById(userId).orElse(null); + if (user == null) { return; } - StoreLocation store = managedUser.getPrimaryStore(); - ActivityLog entry = new ActivityLog(); - entry.setUser(managedUser); - entry.setStore(store); - entry.setUsernameSnapshot(managedUser.getUsername()); - entry.setFullNameSnapshot(resolveFullName(managedUser)); - entry.setRoleSnapshot(managedUser.getRole() != null ? managedUser.getRole().name() : null); - entry.setStoreNameSnapshot(store != null ? store.getStoreName() : null); - entry.setActivity(activity.trim()); - activityLogRepository.save(entry); - log.info("[ACTIVITY] {} | {} | {} | {}", - entry.getRoleSnapshot(), - entry.getUsernameSnapshot(), - entry.getStoreNameSnapshot() != null ? entry.getStoreNameSnapshot() : "no store", - entry.getActivity()); + StoreLocation store = user.getPrimaryStore(); + String role = user.getRole() != null ? user.getRole().name() : "UNKNOWN"; + String storeName = store != null ? store.getStoreName() : "no store"; + log.info("{} | {} | {} | {}", role, user.getUsername(), storeName, activity.trim()); } catch (Exception ex) { - log.warn("Failed to persist activity log", ex); + log.warn("Failed to record activity", ex); } } @@ -69,106 +42,4 @@ public class ActivityLogService { } record(user.getId(), activity); } - - @Transactional(readOnly = true) - public List getLogs(int limit, Long storeId, String role, String search, LocalDate startDate, LocalDate endDate) { - Specification spec = (root, query, cb) -> { - List predicates = new ArrayList<>(); - - if (storeId != null) { - predicates.add(cb.equal(root.get("store").get("storeId"), storeId)); - } - - if (role != null && !role.isBlank()) { - predicates.add(cb.equal(root.get("roleSnapshot"), role)); - } - - if (search != null && !search.isBlank()) { - String pattern = "%" + search.toLowerCase() + "%"; - Predicate searchPredicate = cb.or( - cb.like(cb.lower(root.get("activity")), pattern), - cb.like(cb.lower(root.get("fullNameSnapshot")), pattern), - cb.like(cb.lower(root.get("usernameSnapshot")), pattern) - ); - predicates.add(searchPredicate); - } - - if (startDate != null) { - predicates.add(cb.greaterThanOrEqualTo(root.get("logTimestamp"), startDate.atStartOfDay())); - } - - if (endDate != null) { - predicates.add(cb.lessThan(root.get("logTimestamp"), endDate.plusDays(1).atStartOfDay())); - } - - return cb.and(predicates.toArray(new Predicate[0])); - }; - - PageRequest pageRequest = PageRequest.of(0, limit, Sort.by(Sort.Direction.DESC, "logTimestamp", "logId")); - return activityLogRepository.findAll(spec, pageRequest).stream() - .map(this::toResponse) - .toList(); - } - - @Transactional(readOnly = true) - public List getLogs(int limit, Long storeId, String role, String search) { - return getLogs(limit, storeId, role, search, null, null); - } - - @Transactional(readOnly = true) - public List getLogs(int limit) { - return getLogs(limit, null, null, null, null, null); - } - - private ActivityLogResponse toResponse(ActivityLog entry) { - ActivityLogResponse response = new ActivityLogResponse(); - response.setLogId(entry.getLogId()); - - if (entry.getUser() != null) { - response.setUserId(entry.getUser().getId()); - response.setUsername(firstNonBlank(entry.getUsernameSnapshot(), entry.getUser().getUsername())); - response.setFullName(firstNonBlank(entry.getFullNameSnapshot(), resolveFullName(entry.getUser()))); - response.setRole(firstNonBlank(entry.getRoleSnapshot(), entry.getUser().getRole() != null ? entry.getUser().getRole().name() : null)); - } - - StoreLocation store = entry.getStore(); - if (store != null) { - response.setStoreId(store.getStoreId()); - response.setStoreName(firstNonBlank(entry.getStoreNameSnapshot(), store.getStoreName())); - } - - response.setUsernameSnapshot(entry.getUsernameSnapshot()); - response.setFullNameSnapshot(entry.getFullNameSnapshot()); - response.setRoleSnapshot(entry.getRoleSnapshot()); - response.setStoreNameSnapshot(entry.getStoreNameSnapshot()); - - response.setActivity(entry.getActivity()); - response.setLogTimestamp(entry.getLogTimestamp()); - return response; - } - - private String resolveFullName(User user) { - if (user == null) { - return null; - } - if (user.getFullName() != null && !user.getFullName().isBlank()) { - return user.getFullName(); - } - String first = user.getFirstName(); - String last = user.getLastName(); - if (first == null || first.isBlank()) { - return last; - } - if (last == null || last.isBlank()) { - return first; - } - return first.trim() + " " + last.trim(); - } - - private String firstNonBlank(String preferred, String fallback) { - if (preferred != null && !preferred.isBlank()) { - return preferred; - } - return fallback; - } } diff --git a/backend/src/main/java/com/petshop/backend/service/UserService.java b/backend/src/main/java/com/petshop/backend/service/UserService.java index f1aa848b..4cf83d35 100644 --- a/backend/src/main/java/com/petshop/backend/service/UserService.java +++ b/backend/src/main/java/com/petshop/backend/service/UserService.java @@ -5,7 +5,6 @@ import com.petshop.backend.dto.user.UserRequest; import com.petshop.backend.dto.user.UserResponse; import com.petshop.backend.entity.StoreLocation; import com.petshop.backend.entity.User; -import com.petshop.backend.repository.ActivityLogRepository; import com.petshop.backend.exception.ResourceNotFoundException; import com.petshop.backend.repository.StoreRepository; import com.petshop.backend.repository.UserRepository; @@ -32,13 +31,11 @@ import static org.springframework.http.HttpStatus.CONFLICT; public class UserService { private final UserRepository userRepository; - private final ActivityLogRepository activityLogRepository; private final PasswordEncoder passwordEncoder; private final StoreRepository storeRepository; - public UserService(UserRepository userRepository, ActivityLogRepository activityLogRepository, PasswordEncoder passwordEncoder, StoreRepository storeRepository) { + public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder, StoreRepository storeRepository) { this.userRepository = userRepository; - this.activityLogRepository = activityLogRepository; this.passwordEncoder = passwordEncoder; this.storeRepository = storeRepository; } @@ -166,9 +163,6 @@ public class UserService { requireRoleOrNotFound(user, requiredRole, id); requireAdminDeletionAllowed(user); - if (activityLogRepository.existsByUser_Id(id)) { - throw new ResponseStatusException(CONFLICT, "User cannot be deleted because activity logs exist"); - } userRepository.deleteById(id); } @@ -194,9 +188,6 @@ public class UserService { requireRoleOrNotFound(usersToDelete, requiredRole); requireAdminDeletionAllowed(usersToDelete); - if (request.getIds().stream().anyMatch(activityLogRepository::existsByUser_Id)) { - throw new ResponseStatusException(CONFLICT, "One or more users cannot be deleted because activity logs exist"); - } userRepository.deleteAllById(request.getIds()); } diff --git a/backend/src/main/resources/logback-spring.xml b/backend/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..1e99f056 --- /dev/null +++ b/backend/src/main/resources/logback-spring.xml @@ -0,0 +1,44 @@ + + + + + + + %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n + + + + + ${logFile} + + ${logFile}.%d{yyyy-MM-dd}.gz + 30 + + + %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n + + + + + logs/activity.log + + logs/activity.%d{yyyy-MM-dd}.gz + 90 + + + %d{yyyy-MM-dd HH:mm:ss} %msg%n + + + + + + + + + + + + + + +