Files
erp-imprimelibros/src/main/java/com/imprimelibros/erp/config/JpaAuditConfig.java

48 lines
1.7 KiB
Java

// JpaAuditConfig.java
package com.imprimelibros.erp.config;
import java.util.Optional;
import jakarta.persistence.EntityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.security.core.context.SecurityContextHolder;
import com.imprimelibros.erp.users.User;
import com.imprimelibros.erp.users.UserDetailsImpl; // tu implementación
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
public class JpaAuditConfig {
@Bean
public AuditorAware<User> auditorAware(EntityManager em) {
return () -> {
var ctx = SecurityContextHolder.getContext();
if (ctx == null) return Optional.empty();
var auth = ctx.getAuthentication();
if (auth == null || !auth.isAuthenticated()) return Optional.empty();
Object principal = auth.getPrincipal();
Long userId = null;
// Tu UserDetailsImpl ya tiene el id
if (principal instanceof UserDetailsImpl udi) {
userId = udi.getId();
}
// Si a veces pones el propio User como principal:
else if (principal instanceof User u && u.getId() != null) {
userId = u.getId();
}
// ⚠️ NO hagas consultas aquí (nada de userDao.findBy...).
if (userId == null) return Optional.empty();
// Devuelve una referencia gestionada (NO hace SELECT ni fuerza flush)
return Optional.of(em.getReference(User.class, userId));
};
}
}