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

com.opencredo.concourse.spring.demo.processors.GroupCommandsProcessor 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.GroupCommands;
import com.opencredo.concourse.spring.demo.controllers.GroupNotFoundException;
import com.opencredo.concourse.spring.demo.events.GroupEvents;
import com.opencredo.concourse.spring.demo.events.UserEvents;
import com.opencredo.concourse.spring.demo.repositories.GroupState;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.UUID;
import java.util.concurrent.CompletableFuture;

@CommandHandler
public class GroupCommandsProcessor implements GroupCommands {

    private final ProxyingEventBus proxyingEventBus;
    private final StateRepository groupStateRepository;

    @Autowired
    public GroupCommandsProcessor(ProxyingEventBus proxyingEventBus, StateRepository groupStateRepository) {
        this.proxyingEventBus = proxyingEventBus;
        this.groupStateRepository = groupStateRepository;
    }

    @Override
    public CompletableFuture create(StreamTimestamp ts, UUID groupId, String groupName) {
        proxyingEventBus.dispatch(GroupEvents.class, groupEvents -> groupEvents.created(ts, groupId, groupName));

        return CompletableFuture.completedFuture(groupId);
    }

    @Override
    public CompletableFuture delete(StreamTimestamp ts, UUID groupId) {
        GroupState groupState = groupStateRepository.getState(groupId).orElseThrow(GroupNotFoundException::new);

        proxyingEventBus.dispatch(UserEvents.class, GroupEvents.class, (userEvents, groupEvents) -> {
            groupState.getUsers().forEach(userId -> userEvents.removedFromGroup(ts, userId, groupId));
            groupEvents.deleted(ts, groupId);
        });

        return CompletableFuture.completedFuture(null);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy