Data/src/main/java/de/ph87/data/view/ViewService.java

59 lines
2.2 KiB
Java

package de.ph87.data.view;
import de.ph87.data.point.Point;
import de.ph87.data.point.PointService;
import de.ph87.data.series.SeriesRepository;
import de.ph87.data.view.tree.View;
import de.ph87.data.view.tree.ViewBinary;
import de.ph87.data.view.tree.ViewSeries;
import de.ph87.data.view.tree.ViewUnary;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class ViewService {
private static final long DEMO_SERIES_POWER_BALANCE = 8L;
private static final long DEMO_SERIES_POWER_PRODUCED = 26L;
private static final String DEMO_POWER_CONSUMED = "__DEMO_POWER_CONSUMED__";
private final ViewRepository viewRepository;
private final PointService pointService;
private final SeriesRepository seriesRepository;
@Transactional
@EventListener(ApplicationReadyEvent.class)
public void init() {
if (!viewRepository.existsByName(DEMO_POWER_CONSUMED)) {
final View powerBalance = new ViewSeries(seriesRepository.findById(DEMO_SERIES_POWER_BALANCE).orElseThrow());
final View powerBalance2 = new ViewBinary(ViewBinary.Operation.PLUS, powerBalance, powerBalance);
final View powerPurchased = new ViewUnary(ViewUnary.Operation.NOT_NEG, powerBalance2);
final View powerProduced = new ViewSeries(seriesRepository.findById(DEMO_SERIES_POWER_PRODUCED).orElseThrow());
final View powerConsumed = viewRepository.save(new ViewBinary(ViewBinary.Operation.PLUS, powerPurchased, powerProduced));
powerConsumed.setName(DEMO_POWER_CONSUMED);
log.warn("DEMO VIEW CREATED: {} \"{}\"", powerConsumed.getUuid(), powerConsumed.getName());
}
}
@Transactional(readOnly = true)
public List<Point> getPoints(@NonNull final ViewPointRequest request) {
final ViewScope scope = new ViewScope(pointService, request);
final View view = viewRepository.findById(request.viewUuid).orElseThrow();
return view.getPoints(scope);
}
}