class DatabaseFDFlowManager extends BaseService implements FDFlowManager {

    @Override
    public void revertToFlowRevision(final String flowId, final BigInteger flowRevision) {
        if (StringUtils.isBlank(flowId)) {
            throw new IllegalArgumentException("Flow id cannot be null or blank");
        }

        if (flowRevision == null) {
            throw new IllegalArgumentException("Flow revision cannot be null");
        }

        final Optional<FDFlowEntity> flowEntity = flowRepository.findById(flowId);
        if (!flowEntity.isPresent()) {
            throw new ResourceNotFoundException("No flow exists with the provided flow id");
        }

        final Optional<FDFlowEventEntity> flowEventEntity = flowEventRepository.findByFlowAndFlowRevision(flowEntity.get(), flowRevision);
        if (!flowEventEntity.isPresent()) {
            throw new ResourceNotFoundException("No flow event exists with given event id for the given flow");
        }

        flowEventRepository.deleteByFlowAndFlowRevisionGreaterThan(flowEntity.get(), flowEventEntity.get().getFlowRevision());

        if (flowsById.containsKey(flowEntity.get().getId())) {
            flowsById.remove(flowEntity.get().getId());
        }
    }

    @Autowired public  DatabaseFDFlowManager(final FDFlowRepository flowRepository,
                                 final FDFlowEventRepository flowEventRepository,
                                 final OptionalModelMapper modelMapper,
                                 final ObjectMapper objectMapper,
                                 final Validator validator);

}