package com.flexpoker.table.command.repository; import java.util.List; import java.util.UUID; import javax.inject.Inject; import org.springframework.context.annotation.Profile; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.stereotype.Repository; import com.fasterxml.jackson.databind.ObjectMapper; import com.flexpoker.table.command.framework.TableEvent; @Profile("prod") @Repository public class RedisTableEventRepository implements TableEventRepository { private static final String TABLE_EVENT_NAMESPACE = "table-event:"; private final RedisTemplate<String, TableEvent> redisTemplate; @Inject public RedisTableEventRepository(RedisTemplate<String, TableEvent> redisTemplate) { this.redisTemplate = redisTemplate; this.redisTemplate.setKeySerializer(new StringRedisSerializer()); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.findAndRegisterModules(); Jackson2JsonRedisSerializer<TableEvent> valueSerializer = new Jackson2JsonRedisSerializer<>( TableEvent.class); valueSerializer.setObjectMapper(objectMapper); this.redisTemplate.setValueSerializer(valueSerializer); } @Override public List<TableEvent> fetchAll(UUID id) { return redisTemplate.opsForList().range(TABLE_EVENT_NAMESPACE + id, 0, Long.MAX_VALUE); } @Override public void save(TableEvent event) { redisTemplate.opsForList().rightPush( TABLE_EVENT_NAMESPACE + event.getAggregateId(), event); } }