Data2025/src/main/java/de/ph87/data/topic/TopicService.java

52 lines
1.4 KiB
Java

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<Topic> 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;
}
}