Skip to content
This repository has been archived by the owner on Jul 29, 2021. It is now read-only.

Commit

Permalink
feat(user): archive users
Browse files Browse the repository at this point in the history
  • Loading branch information
NicolasGeraud authored and tcompiegne committed Mar 29, 2019
1 parent dbb43ee commit 89e4696
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 13 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
<name>Gravitee.io APIM - Repository - Redis</name>

<properties>
<gravitee-repository.version>1.20.1</gravitee-repository.version>
<gravitee-repository-test.version>1.20.2</gravitee-repository-test.version>
<gravitee-repository.version>1.20.2-SNAPSHOT</gravitee-repository.version>
<gravitee-repository-test.version>1.20.3-SNAPSHOT</gravitee-repository-test.version>
<jedis.version>2.9.0</jedis.version>
<spring-data-redis.version>1.8.14.RELEASE</spring-data-redis.version>
<maven-dependency-plugin.version>2.10</maven-dependency-plugin.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
import io.gravitee.repository.exceptions.TechnicalException;
import io.gravitee.repository.management.api.UserRepository;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.management.api.search.UserCriteria;
import io.gravitee.repository.management.model.User;
import io.gravitee.repository.management.model.UserStatus;
import io.gravitee.repository.redis.management.internal.UserRedisRepository;
import io.gravitee.repository.redis.management.model.RedisUser;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -89,8 +91,8 @@ public Set<User> findByIds(List<String> ids) throws TechnicalException {
}

@Override
public Page<User> search(Pageable pageable) throws TechnicalException {
Page<RedisUser> redisUserPage = userRedisRepository.search(pageable);
public Page<User> search(UserCriteria criteria, Pageable pageable) throws TechnicalException {
Page<RedisUser> redisUserPage = userRedisRepository.search(criteria, pageable);
return new Page<>(
redisUserPage.getContent()
.stream()
Expand Down Expand Up @@ -118,6 +120,11 @@ private User convert(RedisUser redisUser) {
user.setPicture(redisUser.getPicture());
user.setSource(redisUser.getSource());
user.setSourceId(redisUser.getSourceId());
if (redisUser.getStatus() == null) {
user.setStatus(UserStatus.ACTIVE);
} else {
user.setStatus(UserStatus.valueOf(redisUser.getStatus()));
}

if (redisUser.getLastConnectionAt() != 0) {
user.setLastConnectionAt(new Date(redisUser.getLastConnectionAt()));
Expand All @@ -139,6 +146,9 @@ private RedisUser convert(User user) {
redisUser.setPicture(user.getPicture());
redisUser.setSource(user.getSource());
redisUser.setSourceId(user.getSourceId());
if (user.getStatus() != null) {
redisUser.setStatus(user.getStatus().name());
}

if (user.getLastConnectionAt() != null) {
redisUser.setLastConnectionAt(user.getLastConnectionAt().getTime());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@

import io.gravitee.common.data.domain.Page;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.management.api.search.UserCriteria;
import io.gravitee.repository.redis.management.model.RedisUser;

import java.util.List;
import java.util.Set;

/**
* @author David BRASSELY (david.brassely at graviteesource.com)
* @author Nicolas GERAUD (nicolas.geraud at graviteesource.com)
* @author GraviteeSource Team
*/
public interface UserRedisRepository {
Expand All @@ -38,7 +40,7 @@ public interface UserRedisRepository {

RedisUser saveOrUpdate(RedisUser user);

Page<RedisUser> search(Pageable pageable);
Page<RedisUser> search(UserCriteria criteria, Pageable pageable);

void delete(String user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@

import io.gravitee.common.data.domain.Page;
import io.gravitee.repository.management.api.search.Pageable;
import io.gravitee.repository.management.api.search.UserCriteria;
import io.gravitee.repository.management.model.UserStatus;
import io.gravitee.repository.redis.management.internal.UserRedisRepository;
import io.gravitee.repository.redis.management.model.RedisUser;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -74,7 +76,7 @@ public Set<RedisUser> findAll() {
}

@Override
public Page<RedisUser> search(Pageable pageable) {
public Page<RedisUser> search(UserCriteria criteria, Pageable pageable) {
Set<Object> keys = redisTemplate
.opsForHash()
.keys(REDIS_KEY);
Expand All @@ -88,10 +90,28 @@ public Page<RedisUser> search(Pageable pageable) {
.opsForHash()
.multiGet(REDIS_KEY, subKeys);

return new Page<>(
usersObject.stream()
.map(u -> convert(u, RedisUser.class))
.collect(Collectors.toList()),
List<RedisUser> redisUsers = usersObject.stream()
.map(u -> convert(u, RedisUser.class))
.collect(Collectors.toList());

if(criteria != null) {
if (criteria.getStatuses() != null && criteria.getStatuses().length > 0) {
List<String> statuses = Arrays.stream(criteria.getStatuses())
.map(UserStatus::name)
.collect(Collectors.toList());
redisUsers = redisUsers.stream()
.filter(u -> statuses.contains(u.getStatus()))
.collect(Collectors.toList());
}

if (criteria.hasNoStatus()) {
redisUsers = redisUsers.stream()
.filter(u -> u.getStatus() == null)
.collect(Collectors.toList());
}
}

return new Page<>(redisUsers,
pageable.pageNumber(),
subKeys.size(),
keys.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@
*/
package io.gravitee.repository.redis.management.model;

import java.util.Objects;

/**
* @author David BRASSELY (brasseld at gmail.com)
* @author David BRASSELY (david.brassely at graviteesource.com)
* @author Nicolas GERAUD (nicolas.geraud at graviteesource.com)
* @author GraviteeSource Team
*/
public class RedisUser {
Expand All @@ -35,6 +34,7 @@ public class RedisUser {
private String source;
private String sourceId;
private long lastConnectionAt;
private String status;

public String getId() {
return id;
Expand Down Expand Up @@ -132,6 +132,14 @@ public void setLastConnectionAt(long lastConnectionAt) {
this.lastConnectionAt = lastConnectionAt;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down

0 comments on commit 89e4696

Please sign in to comment.