59 lines
2.2 KiB
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);
|
|
}
|
|
|
|
}
|