in pekko-sample-distributed-workers-scala/src/main/scala/worker/WorkState.scala [33:58]
def isAccepted(workId: String): Boolean = acceptedWorkIds.contains(workId)
def isInProgress(workId: String): Boolean = workInProgress.contains(workId)
def isDone(workId: String): Boolean = doneWorkIds.contains(workId)
def updated(event: WorkDomainEvent): WorkState = event match {
case WorkAccepted(work) =>
copy(pendingWork = pendingWork.enqueue(work), acceptedWorkIds = acceptedWorkIds + work.workId)
case WorkStarted(workId) =>
val (work, rest) = pendingWork.dequeue
require(workId == work.workId, s"WorkStarted expected workId $workId == ${work.workId}")
copy(pendingWork = rest, workInProgress = workInProgress + (workId -> work))
case WorkCompleted(workId) =>
copy(workInProgress = workInProgress - workId, doneWorkIds = doneWorkIds + workId)
case WorkerFailed(workId) =>
copy(pendingWork = pendingWork.enqueue(workInProgress(workId)), workInProgress = workInProgress - workId)
case WorkerTimedOut(workId) =>
copy(pendingWork = pendingWork.enqueue(workInProgress(workId)), workInProgress = workInProgress - workId)
case WorkInProgressReset =>
copy(pendingWork = pendingWork.enqueueAll(workInProgress.values), workInProgress = Map.empty)
}