package de.ph87.data.topic; import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.function.Consumer; @Slf4j @Service @RequiredArgsConstructor public class TopicService { private final TopicRepository topicRepository; private final ApplicationEventPublisher applicationEventPublisher; @Transactional public TopicDto setEnabled(final long id, final boolean enabled) { return set(id, t -> t.setEnabled(enabled)); } @Transactional public TopicDto setTimestampQuery(final long id, @NonNull final String timestampQuery) { return set(id, t -> t.setTimestampQuery(timestampQuery)); } @Transactional public TopicDto setTimestampType(final long id, @NonNull final TimestampType timestampType) { return set(id, t -> t.setTimestampType(timestampType)); } @NonNull private TopicDto set(final long id, @NonNull final Consumer modifier) { final Topic topic = topicRepository.findById(id).orElseThrow(); modifier.accept(topic); log.info("Topic CHANGED: {}", topic); return publish(topic); } @NonNull public TopicDto publish(@NonNull final Topic topic) { final TopicDto dto = new TopicDto(topic); applicationEventPublisher.publishEvent(dto); return dto; } }