InMemoryWorkflowEventOutbox.java

package org.hammer.audio.workflow.collaboration;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

/** In-memory test/dev outbox implementation. */
public final class InMemoryWorkflowEventOutbox implements WorkflowEventOutbox {

  private final Map<String, OutboxEntry> entries = new ConcurrentHashMap<>();

  @Override
  public OutboxEntry append(WorkflowCollaborationEvent event) {
    Objects.requireNonNull(event, "event");
    OutboxEntry entry = new OutboxEntry(UUID.randomUUID().toString(), event);
    entries.put(entry.entryId(), entry);
    return entry;
  }

  @Override
  public List<OutboxEntry> pending() {
    return new ArrayList<>(entries.values());
  }

  @Override
  public void markPublished(String entryId) {
    Objects.requireNonNull(entryId, "entryId");
    entries.remove(entryId);
  }
}