This commit is contained in:
string 2025-03-20 11:43:49 +05:30
parent 4d2b28392c
commit cd7dfe0a07
3 changed files with 208 additions and 0 deletions

View File

@ -0,0 +1,122 @@
package com.realnet.MultiTimeZone.Component;
import java.time.ZonedDateTime;
import java.util.Collection;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.realnet.MultiTimeZone.Services.TimezoneService;
import com.realnet.WhoColumn.Entity.Who_column;
import com.realnet.users.entity1.AppUser;
import com.realnet.users.service1.AppUserService;
@Aspect
@Component
public class WhoColumnAspect {
@Autowired
private TimezoneService timezoneService;
@PersistenceContext
private EntityManager entityManager;
@Autowired
private AppUserService userService;
// @Transactional
//// @Before("execution(* org.springframework.data.jpa.repository.JpaRepository.save(..)) && args(entity)")
// @AfterReturning(pointcut = "execution(* org.springframework.data.jpa.repository.JpaRepository.find*(..))", returning = "entity")
//
// public void applyTimezone(Object entity) {
// if (entity instanceof Who_column) {
// Who_column whoColumn = (Who_column) entity;
//
// // Null check for createdBy
//// Long createdByUserId = whoColumn.getCreatedBy();
//// if (createdByUserId == null) {
//// return; // Avoid processing if no user info is available
//// }
//
// AppUser appUser = userService.getLoggedInUser();
//
// // Fetch user timezone
//// AppUser appUser = entityManager.find(AppUser.class, createdByUserId);
// if (appUser == null || appUser.getMultitime() == null) {
// return; // Skip if user or timezone is not found
// }
//
// String userTimezone = appUser.getMultitime();
//
// try {
// if (whoColumn.getCreatedAt() != null) {
// ZonedDateTime convertedCreatedAt = timezoneService.convertToUserTimezone(whoColumn.getCreatedAt(),
// userTimezone);
// whoColumn.setCreatedAt(Date.from(convertedCreatedAt.toInstant()));
// }
//
// if (whoColumn.getUpdatedAt() != null) {
// ZonedDateTime convertedUpdatedAt = timezoneService.convertToUserTimezone(whoColumn.getUpdatedAt(),
// userTimezone);
// whoColumn.setUpdatedAt(Date.from(convertedUpdatedAt.toInstant()));
// }
// } catch (Exception e) {
// System.err.println("Timezone conversion error: " + e.getMessage());
// }
// }
// }
@Transactional
@AfterReturning(pointcut = "execution(* org.springframework.data.jpa.repository.JpaRepository.find*(..))", returning = "entity")
public void applyTimezone(Object entity) {
if (entity == null) {
return; // Agar entity null hai to kuch mat karo
}
AppUser appUser = userService.getLoggedInUser();
if (appUser == null || appUser.getMultitime() == null) {
return; // Agar user ya timezone nahi mila to skip karo
}
String userTimezone = appUser.getMultitime();
try {
if (entity instanceof Collection<?>) {
// Agar entity ek collection hai to har element ko process karo
for (Object obj : (Collection<?>) entity) {
convertWhoColumn(obj, userTimezone);
}
} else {
// Single entity case
convertWhoColumn(entity, userTimezone);
}
} catch (Exception e) {
System.err.println("Timezone conversion error: " + e.getMessage());
}
}
private void convertWhoColumn(Object obj, String userTimezone) {
if (obj instanceof Who_column) {
Who_column whoColumn = (Who_column) obj;
if (whoColumn.getCreatedAt() != null) {
ZonedDateTime convertedCreatedAt = timezoneService.convertToUserTimezone(whoColumn.getCreatedAt(),
userTimezone);
whoColumn.setCreatedAt(Date.from(convertedCreatedAt.toInstant()));
}
if (whoColumn.getUpdatedAt() != null) {
ZonedDateTime convertedUpdatedAt = timezoneService.convertToUserTimezone(whoColumn.getUpdatedAt(),
userTimezone);
whoColumn.setUpdatedAt(Date.from(convertedUpdatedAt.toInstant()));
}
}
}
}

View File

@ -0,0 +1,62 @@
//package com.realnet.MultiTimeZone.Component;
//
//import java.io.Serializable;
//import java.time.ZonedDateTime;
//import java.util.Date;
//import java.util.TimeZone;
//
//import javax.persistence.EntityManager;
//import javax.persistence.EntityManagerFactory;
//
//import org.hibernate.EmptyInterceptor;
//import org.hibernate.type.Type;
//import org.springframework.stereotype.Component;
//
//import com.realnet.MultiTimeZone.Services.TimezoneService;
//import com.realnet.WhoColumn.Entity.Who_column;
//import com.realnet.users.entity1.AppUser;
//
//@Component
//public class WhoColumnInterceptor extends EmptyInterceptor {
//
// private final EntityManagerFactory entityManagerFactory;
// private final TimezoneService timezoneService;
//
// public WhoColumnInterceptor(EntityManagerFactory entityManagerFactory, TimezoneService timezoneService) {
// this.entityManagerFactory = entityManagerFactory;
// this.timezoneService = timezoneService;
// }
//
// @Override
// public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
// if (entity instanceof Who_column) {
// Who_column whoColumn = (Who_column) entity;
//
// // Fetch user timezone
// Long createdByUserId = whoColumn.getCreatedBy();
// EntityManager entityManager = entityManagerFactory.createEntityManager();
// AppUser appUser = entityManager.find(AppUser.class, createdByUserId);
//
// if (appUser != null) {
// String userTimezone = appUser.getMultitime();
// TimeZone timeZone = TimeZone.getTimeZone(userTimezone);
//
// // Convert timestamps
// if (whoColumn.getCreatedAt() != null) {
// ZonedDateTime convertedCreatedAt = timezoneService.convertToUserTimezone(whoColumn.getCreatedAt(),
// userTimezone);
// whoColumn.setCreatedAt(Date.from(convertedCreatedAt.toInstant()));
// }
//
// if (whoColumn.getUpdatedAt() != null) {
// ZonedDateTime convertedUpdatedAt = timezoneService.convertToUserTimezone(whoColumn.getUpdatedAt(),
// userTimezone);
// whoColumn.setUpdatedAt(Date.from(convertedUpdatedAt.toInstant()));
// }
// }
//
// entityManager.close();
// }
// return false;
// }
//}

View File

@ -0,0 +1,24 @@
//package com.realnet.MultiTimeZone.config;
//import org.hibernate.SessionFactory;
//import org.hibernate.boot.spi.MetadataImplementor;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import com.realnet.MultiTimeZone.Component.WhoColumnInterceptor;
//
//@Configuration
//public class HibernateConfig {
//
// private final WhoColumnInterceptor whoColumnInterceptor;
//
// public HibernateConfig(WhoColumnInterceptor whoColumnInterceptor) {
// this.whoColumnInterceptor = whoColumnInterceptor;
// }
//
// @Bean
// public SessionFactory sessionFactory(MetadataImplementor metadata) {
// return metadata.getSessionFactoryBuilder()
// .applyInterceptor(whoColumnInterceptor)
// .build();
// }
//}