
com.redis.om.spring.autocomplete.AutoCompleteAspect Maven / Gradle / Ivy
package com.redis.om.spring.autocomplete;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.ObjectUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.GenericTypeResolver;
import org.springframework.core.Ordered;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.Repository;
import org.springframework.stereotype.Component;
import com.google.gson.Gson;
import com.redis.om.spring.annotations.AutoComplete;
import com.redis.om.spring.annotations.AutoCompletePayload;
import com.redis.om.spring.ops.RedisModulesOperations;
import com.redis.om.spring.ops.search.SearchOperations;
// import com.redis.om.spring.serialization.gson.GsonBuidlerFactory;
import io.redisearch.Suggestion;
@Aspect
@Component
public class AutoCompleteAspect implements Ordered {
@Autowired
private Gson gson;
private RedisModulesOperations rmo;
public AutoCompleteAspect(RedisModulesOperations rmo) {
this.rmo = rmo;
}
@Pointcut("execution(public * org.springframework.data.repository.CrudRepository+.save(..))")
public void inCrudRepositorySave() {
}
@Pointcut("execution(public * com.redis.om.spring.repository.RedisDocumentRepository+.save(..))")
public void inRedisDocumentRepositorySave() {
}
@Pointcut("inCrudRepositorySave() || inRedisDocumentRepositorySave()")
private void inSaveOperation() {
}
@AfterReturning("inSaveOperation() && args(entity,..)")
public void addSuggestion(JoinPoint jp, Object entity) {
processSuggestionsForEntity(entity);
}
@Pointcut("execution(public * org.springframework.data.repository.CrudRepository+.saveAll(..))")
public void inCrudRepositorySaveAll() {
}
@Pointcut("execution(public * com.redis.om.spring.repository.RedisDocumentRepository+.saveAll(..))")
public void inRedisDocumentRepositorySaveAll() {
}
@Pointcut("inCrudRepositorySaveAll() || inRedisDocumentRepositorySaveAll()")
private void inSaveAllOperation() {
}
@AfterReturning("inSaveAllOperation() && args(entities,..)")
public void addAllSuggestions(JoinPoint jp, List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy