All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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