package microservices.sample.user; import com.google.common.base.Strings; import com.google.inject.Inject; import com.google.inject.Singleton; import microservices.sample.GenericResponse; import microservices.sample.IdResponse; import microservices.sample.persistence.PersistenceService; import java.util.Collections; import java.util.List; import java.util.UUID; import java.util.function.Consumer; import java.util.stream.Collectors; /** * This class is not implemented async. * * * @author mamad * @since 17/03/15. */ @Singleton public class UserStoreImpl implements UserStore { private final PersistenceServiceProvider persistenceServiceProvider; @Inject public UserStoreImpl(PersistenceServiceProvider persistenceServiceProvider) { this.persistenceServiceProvider = persistenceServiceProvider; } @Override public void saveAsync(User user, Consumer<IdResponse> onSuccessCallback, Consumer<Throwable> onErrorCallback) { if (user == null) { onErrorCallback.accept(new NullPointerException("user can not be null.")); return; } if (Strings.isNullOrEmpty(user.getId())) { user = new User(user.getName(), UUID.randomUUID().toString()); } PersistenceService persistenceService = persistenceServiceProvider.get(); IdResponse idResponse = persistenceService.save(user); onSuccessCallback.accept(IdResponse.of(idResponse.getId())); } @Override public void connectAsync(String userId, String secondUserId, Consumer<GenericResponse> onSuccessCallback, Consumer<Throwable> onErrorCallback) { PersistenceService persistenceService = persistenceServiceProvider.get(); //todo: handle user not found (HTTP 404) User user = persistenceService.findById(userId); User secondUser = persistenceService.findById(secondUserId); user.addConnection(secondUser.getId()); //save the user persistenceService.save(user); //and second user secondUser.addConnection(user.getId()); persistenceService.save(secondUser); onSuccessCallback.accept(GenericResponse.of("connected.")); } @Override public void listConnections(String userId, int max, Consumer<List<User>> onSuccessCallback, Consumer<Throwable> onErrorCallback) { PersistenceService persistenceService = persistenceServiceProvider.get(); User user = persistenceService.findById(userId); List<String> connectionIds = user.getConnectionIds(); if (connectionIds == null || connectionIds.isEmpty()) { onSuccessCallback.accept(Collections.emptyList()); return; } List<User> connections = connectionIds.stream() .limit(max) .map(persistenceService::findById) .collect(Collectors.toList()); onSuccessCallback.accept(connections); } }