52 lines
1.4 KiB
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;
|
|
}
|
|
|
|
}
|