public function take(StreamName $streamName, AggregateRootInterface $aggregate, DomainMessage $message)
    {
        $id = $aggregate->getAggregateRootId();

        if (!$this->strategy->isFulfilled($streamName, $aggregate)) {
            return false;
        }

        if (!$this->snapshotStore->has($id, $message->getVersion())) {
            $this->snapshotStore->save(Snapshot::take($id, $aggregate, $message->getVersion()));
        }

        return true;
    }