Added action logs for user api's.
This commit is contained in:
@@ -9,6 +9,7 @@ import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||
import net.gepafin.tendermanagement.entities.UserActionEntity;
|
||||
import net.gepafin.tendermanagement.entities.UserEntity;
|
||||
import net.gepafin.tendermanagement.entities.VersionHistoryEntity;
|
||||
import net.gepafin.tendermanagement.enums.VersionActionTypeEnum;
|
||||
import net.gepafin.tendermanagement.model.request.UserActionRequest;
|
||||
import net.gepafin.tendermanagement.model.request.VersionHistoryRequest;
|
||||
import net.gepafin.tendermanagement.repositories.UserActionsRepository;
|
||||
@@ -18,6 +19,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.annotation.RequestScope;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequestScope
|
||||
@@ -33,13 +38,15 @@ public class LoggingUtil {
|
||||
private UserService userService;
|
||||
|
||||
@Autowired
|
||||
TokenProvider tokenProvider;
|
||||
private TokenProvider tokenProvider;
|
||||
|
||||
public UserActionEntity logUserAction(UserActionRequest userActionRequest) {
|
||||
UserActionEntity userAction = new UserActionEntity();
|
||||
try {
|
||||
String token = tokenProvider.extractTokenFromRequest(userActionRequest.getRequest());
|
||||
Claims claims = tokenProvider.getClaimsFromToken(token);
|
||||
Map<String, String[]> parameters = userActionRequest.getRequest().getParameterMap();
|
||||
parameters.forEach((key, value) -> log.info("Query Parameter: {} = {}", key, Arrays.toString(value)));
|
||||
Long userId = claims.get(GepafinConstant.USER_ID, Long.class);
|
||||
Long loginAttemptId = claims.get(GepafinConstant.LOGIN_ATTEMPT_ID, Long.class);
|
||||
UserEntity userEntity = userService.validateUser(userId);
|
||||
@@ -57,7 +64,8 @@ public class LoggingUtil {
|
||||
userAction.setLoginAttemptId(loginAttemptId);
|
||||
userAction.setIpAddress(IpAddressUtils.getClientIp(userActionRequest.getRequest()));
|
||||
userAction.setRequestBody(requestBody);
|
||||
userAction.setResponse(null);
|
||||
String response = Utils.convertEntityToJsonForLogging(userActionRequest.getResponse());
|
||||
userAction.setResponse(response);
|
||||
userActionsRepository.save(userAction);
|
||||
userActionRequest.getRequest().setAttribute(GepafinConstant.USER_ACTION_ID, userAction.getId());
|
||||
} catch (Exception e) {
|
||||
@@ -116,6 +124,31 @@ public class LoggingUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public void logVersionHistoryWithoutToken(VersionHistoryRequest versionHistoryRequest, Long recordId, Long userActionId, String tableName) {
|
||||
try {
|
||||
VersionHistoryEntity history = new VersionHistoryEntity();
|
||||
Long userId = null;
|
||||
String token = tokenProvider.extractTokenFromRequest(versionHistoryRequest.getRequest());
|
||||
if(versionHistoryRequest.getRequest() != null && token != null)
|
||||
{
|
||||
Claims claims = tokenProvider.getClaimsFromToken(token);
|
||||
userId = claims.get(GepafinConstant.USER_ID, Long.class);
|
||||
}
|
||||
String oldData = Utils.convertEntityToJsonForLogging(versionHistoryRequest.getOldData());
|
||||
String newData = Utils.convertEntityToJsonForLogging(versionHistoryRequest.getNewData());
|
||||
history.setUserActionId(userActionId);
|
||||
history.setActionType(versionHistoryRequest.getActionType().getValue());
|
||||
history.setOldData(oldData);
|
||||
history.setNewData(newData);
|
||||
history.setRecordId(recordId);
|
||||
history.setTableName(tableName);
|
||||
history.setUserId(userId);
|
||||
versionHistoryRepository.save(history);
|
||||
} catch (Exception e) {
|
||||
log.error("Error logging version history: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getTableName(Class<?> entityClass) {
|
||||
try {
|
||||
if (entityClass.isAnnotationPresent(Table.class)) {
|
||||
@@ -132,15 +165,138 @@ public class LoggingUtil {
|
||||
try {
|
||||
Long userActionId = (Long) versionHistoryRequest.getRequest().getAttribute(GepafinConstant.USER_ACTION_ID);
|
||||
Long recordId = null;
|
||||
String tableName = null;
|
||||
if(versionHistoryRequest.getNewData() != null) {
|
||||
recordId = versionHistoryRequest.getNewData().getId();
|
||||
recordId = versionHistoryRequest.getNewData().getId();
|
||||
tableName = getTableName(versionHistoryRequest.getNewData().getClass());
|
||||
} else if(versionHistoryRequest.getOldData() != null){
|
||||
recordId = versionHistoryRequest.getOldData().getId();
|
||||
recordId = versionHistoryRequest.getOldData().getId();
|
||||
}
|
||||
String tableName = getTableName(versionHistoryRequest.getNewData().getClass());
|
||||
logVersionHistory(versionHistoryRequest, recordId, userActionId, tableName);
|
||||
} catch (Exception e) {
|
||||
log.error("Error adding version history: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public void addVersionHistoryWithoutToken(VersionHistoryRequest versionHistoryRequest) {
|
||||
try {
|
||||
Long userActionId = (Long) versionHistoryRequest.getRequest().getAttribute(GepafinConstant.USER_ACTION_ID);
|
||||
Long recordId = null;
|
||||
String tableName = null;
|
||||
if(versionHistoryRequest.getNewData() != null) {
|
||||
recordId = versionHistoryRequest.getNewData().getId();
|
||||
tableName = getTableName(versionHistoryRequest.getNewData().getClass());
|
||||
} else if(versionHistoryRequest.getOldData() != null){
|
||||
recordId = versionHistoryRequest.getOldData().getId();
|
||||
tableName = getTableName(versionHistoryRequest.getOldData().getClass());
|
||||
}
|
||||
versionHistoryRequest.setNewData(versionHistoryRequest.getNewData());
|
||||
versionHistoryRequest.setRequest(versionHistoryRequest.getRequest());
|
||||
logVersionHistoryWithoutToken(versionHistoryRequest, recordId, userActionId, tableName);
|
||||
} catch (Exception e) {
|
||||
log.error("Error adding version history: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public UserActionEntity logUserActionWithoutToken(UserActionRequest userActionRequest) {
|
||||
UserActionEntity userAction = new UserActionEntity();
|
||||
try {
|
||||
Long userId = null;
|
||||
Long loginAttemptId = null;
|
||||
Long hubId = null;
|
||||
String token = tokenProvider.extractTokenFromRequest(userActionRequest.getRequest());
|
||||
Map<String, String[]> parameters = userActionRequest.getRequest().getParameterMap();
|
||||
parameters.forEach((key, value) -> log.info("Query Parameter : {} = {}", key, Arrays.toString(value)));
|
||||
if(userActionRequest.getRequest() != null && token != null)
|
||||
{
|
||||
Claims claims = tokenProvider.getClaimsFromToken(token);
|
||||
userId = claims.get(GepafinConstant.USER_ID, Long.class);
|
||||
loginAttemptId = claims.get(GepafinConstant.LOGIN_ATTEMPT_ID, Long.class);
|
||||
UserEntity userEntity = userService.validateUser(userId);
|
||||
hubId = userEntity.getHub().getId();
|
||||
}
|
||||
|
||||
String requestBody = null;
|
||||
if (userActionRequest.getRequest() instanceof CachedBodyHttpServletRequest cachedRequest) {
|
||||
requestBody = cachedRequest.getCachedBodyAsString();
|
||||
}
|
||||
userAction.setActionType(userActionRequest.getActionType().getValue());
|
||||
userAction.setUserId(userId);
|
||||
userAction.setActionContext(userActionRequest.getActionContext().getValue());
|
||||
userAction.setMethodType(userActionRequest.getRequest().getMethod());
|
||||
userAction.setHubId(hubId);
|
||||
userAction.setUrl(userActionRequest.getRequest().getRequestURI());
|
||||
userAction.setLoginAttemptId(loginAttemptId);
|
||||
userAction.setIpAddress(IpAddressUtils.getClientIp(userActionRequest.getRequest()));
|
||||
userAction.setRequestBody(requestBody);
|
||||
String response = Utils.convertEntityToJsonForLogging(userActionRequest.getResponse());
|
||||
userAction.setResponse(response);
|
||||
userActionsRepository.save(userAction);
|
||||
userActionRequest.getRequest().setAttribute(GepafinConstant.USER_ACTION_ID, userAction.getId());
|
||||
} catch (Exception e) {
|
||||
log.error("Error logging user action: {}", e.getMessage(), e);
|
||||
}
|
||||
return userAction;
|
||||
}
|
||||
public void updateUserActionWithTokenDetails(Long actionId, String token, Object response) {
|
||||
|
||||
try {
|
||||
UserActionEntity userAction = getUserActionLogById(actionId);
|
||||
if (userAction != null && token != null) {
|
||||
Claims claims = tokenProvider.getClaimsFromToken(token);
|
||||
Long userId = claims.get(GepafinConstant.USER_ID, Long.class);
|
||||
Long loginAttemptId = claims.get(GepafinConstant.LOGIN_ATTEMPT_ID, Long.class);
|
||||
UserEntity userEntity = userService.validateUser(userId);
|
||||
|
||||
userAction.setUserId(userId);
|
||||
String responseData = Utils.convertEntityToJsonForLogging(response);
|
||||
userAction.setResponse(responseData);
|
||||
userAction.setLoginAttemptId(loginAttemptId);
|
||||
userAction.setHubId(userEntity.getHub().getId());
|
||||
// Save updated entity
|
||||
userActionsRepository.save(userAction);
|
||||
log.info("User action log updated with token details: {}", userAction.getId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to update user action with token details: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateVersionHistoriesWithTokenDetails(Long userActionId, String token) {
|
||||
|
||||
try {
|
||||
// Fetch version history entities for the given user action ID
|
||||
List<VersionHistoryEntity> versionHistoryEntities = getVersionHistoryLogById(userActionId);
|
||||
|
||||
if (versionHistoryEntities != null && !versionHistoryEntities.isEmpty() && token != null) {
|
||||
// Extract claims from the token
|
||||
Claims claims = tokenProvider.getClaimsFromToken(token);
|
||||
Long userId = claims.get(GepafinConstant.USER_ID, Long.class);
|
||||
|
||||
// Update each version history entity with the user ID
|
||||
for (VersionHistoryEntity versionHistoryEntity : versionHistoryEntities) {
|
||||
versionHistoryEntity.setUserId(userId);
|
||||
}
|
||||
|
||||
// Save all updated entities
|
||||
versionHistoryRepository.saveAll(versionHistoryEntities);
|
||||
|
||||
log.info("Version History logs updated with userId: {}", userId);
|
||||
} else {
|
||||
log.warn("No version history or token provided for userActionId: {}", userActionId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to update version histories with token details: {}", e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public UserActionEntity getUserActionLogById(Long id) {
|
||||
|
||||
return userActionsRepository.findUserActionById(id);
|
||||
}
|
||||
public List<VersionHistoryEntity> getVersionHistoryLogById(Long id) {
|
||||
|
||||
return versionHistoryRepository.findVersionHistoryByUserActionId(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,9 +56,8 @@ public class Utils {
|
||||
|
||||
public static final Logger log = LoggerFactory.getLogger(Utils.class);
|
||||
|
||||
private static final ObjectMapper mapper = new ObjectMapper()
|
||||
.registerModule(new JavaTimeModule())
|
||||
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
private static final ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule()).configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
||||
.registerModule(new JavaTimeModule()).disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS).setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
|
||||
|
||||
public static <T, U> U convertObject(T source, Class<U> destinationClass) {
|
||||
try {
|
||||
@@ -527,17 +526,14 @@ public class Utils {
|
||||
}
|
||||
|
||||
try {
|
||||
mapper.registerModule(new JavaTimeModule());
|
||||
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
|
||||
|
||||
JsonNode entityNode = mapper.valueToTree(entity);
|
||||
ObjectNode objectNode = (ObjectNode) entityNode;
|
||||
|
||||
Field[] fields = entity.getClass().getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
if (field.isAnnotationPresent(ManyToOne.class) || field.isAnnotationPresent(OneToMany.class) || field
|
||||
.isAnnotationPresent(OneToOne.class) || field.isAnnotationPresent(ManyToMany.class)) {
|
||||
if (field.isAnnotationPresent(ManyToOne.class) || field.isAnnotationPresent(OneToMany.class) || field.isAnnotationPresent(
|
||||
OneToOne.class) || field.isAnnotationPresent(ManyToMany.class)) {
|
||||
objectNode.remove(field.getName());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user