
com.opencredo.concourse.spring.demo.processors.UserCommandsProcessor Maven / Gradle / Ivy
The newest version!
package com.opencredo.concourse.spring.demo.processors;
import com.opencredo.concourse.domain.state.StateRepository;
import com.opencredo.concourse.domain.time.StreamTimestamp;
import com.opencredo.concourse.mapping.events.methods.proxying.ProxyingEventBus;
import com.opencredo.concourse.spring.commands.processing.CommandHandler;
import com.opencredo.concourse.spring.demo.commands.UserCommands;
import com.opencredo.concourse.spring.demo.controllers.UserNotFoundException;
import com.opencredo.concourse.spring.demo.events.GroupEvents;
import com.opencredo.concourse.spring.demo.events.UserEvents;
import com.opencredo.concourse.spring.demo.repositories.UserState;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@CommandHandler
public class UserCommandsProcessor implements UserCommands {
private final StateRepository userStateRepository;
private final ProxyingEventBus proxyingEventBus;
@Autowired
public UserCommandsProcessor(StateRepository userStateRepository, ProxyingEventBus proxyingEventBus) {
this.userStateRepository = userStateRepository;
this.proxyingEventBus = proxyingEventBus;
}
@Override
public CompletableFuture create(StreamTimestamp ts, UUID userId, String userName, byte[] passwordHash) {
proxyingEventBus.dispatch(UserEvents.class, userEvents -> userEvents.created(ts, userId, userName, new String(passwordHash)));
return CompletableFuture.completedFuture(userId);
}
@Override
public CompletableFuture updateName(StreamTimestamp ts, UUID userId, String newName) {
proxyingEventBus.dispatch(UserEvents.class, userEvents -> userEvents.changedName(ts, userId, newName));
return CompletableFuture.completedFuture(null);
}
@Override
public CompletableFuture addToGroup(StreamTimestamp ts, UUID userId, UUID groupId) {
proxyingEventBus.dispatch(UserEvents.class, GroupEvents.class, (userEvents, groupEvents) -> {
userEvents.addedToGroup(ts, userId, groupId);
groupEvents.userAdded(ts, groupId, userId);
});
return CompletableFuture.completedFuture(null);
}
@Override
public CompletableFuture removeFromGroup(StreamTimestamp ts, UUID userId, UUID groupId) {
proxyingEventBus.dispatch(UserEvents.class, GroupEvents.class, (userEvents, groupEvents) -> {
userEvents.removedFromGroup(ts, userId, groupId);
groupEvents.userRemoved(ts, groupId, userId);
});
return CompletableFuture.completedFuture(null);
}
@Override
public CompletableFuture delete(StreamTimestamp ts, UUID userId) {
UserState userState = userStateRepository.getState(userId).orElseThrow(UserNotFoundException::new);
proxyingEventBus.dispatch(UserEvents.class, GroupEvents.class, (userEvents, groupEvents) -> {
userState.getGroupIds().forEach(groupId -> groupEvents.userRemoved(ts, groupId, userId));
userEvents.deleted(ts, userId);
});
return CompletableFuture.completedFuture(null);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy