package fr.ippon.tatami.repository.cassandra;
import fr.ippon.tatami.repository.FavoritelineRepository;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.cassandra.serializers.UUIDSerializer;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.beans.ColumnSlice;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.mutation.Mutator;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static fr.ippon.tatami.config.ColumnFamilyKeys.FAVLINE_CF;
import static me.prettyprint.hector.api.factory.HFactory.createSliceQuery;
/**
* Cassandra implementation of the favoriteline repository.
* <p/>
* Structure :
* - Key = login
* - Name = statusId
* - Value = ""
*
* @author Julien Dubois
*/
@Repository
public class CassandraFavoritelineRepository implements FavoritelineRepository {
@Inject
private Keyspace keyspaceOperator;
@Override
@CacheEvict(value = "favorites-cache", key = "#login")
public void addStatusToFavoriteline(String login, String statusId) {
Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get());
mutator.insert(login, FAVLINE_CF, HFactory.createColumn(UUID.fromString(statusId), "",
UUIDSerializer.get(), StringSerializer.get()));
}
@Override
@CacheEvict(value = "favorites-cache", key = "#login")
public void removeStatusFromFavoriteline(String login, String statusId) {
Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get());
mutator.delete(login, FAVLINE_CF, UUID.fromString(statusId), UUIDSerializer.get());
}
@Override
@Cacheable("favorites-cache")
public List<String> getFavoriteline(String login) {
List<String> line = new ArrayList<String>();
ColumnSlice<UUID, String> result = createSliceQuery(keyspaceOperator,
StringSerializer.get(), UUIDSerializer.get(), StringSerializer.get())
.setColumnFamily(FAVLINE_CF)
.setKey(login)
.setRange(null, null, true, 50)
.execute()
.get();
for (HColumn<UUID, String> column : result.getColumns()) {
line.add(column.getName().toString());
}
return line;
}
@Override
public void deleteFavoriteline(String login) {
Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get());
mutator.addDeletion(login, FAVLINE_CF);
mutator.execute();
}
}