package de.ph87.homeautomation.schedule.entry; import de.ph87.homeautomation.schedule.Schedule; import de.ph87.homeautomation.schedule.ScheduleCalculationService; import de.ph87.homeautomation.schedule.ScheduleReadService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.ZonedDateTime; import java.util.function.BiConsumer; @Slf4j @Service @Transactional @RequiredArgsConstructor public class ScheduleEntryWriteService { private final ScheduleEntryReadService scheduleEntryReadService; private final ScheduleReadService scheduleReadService; private final ScheduleCalculationService scheduleCalculationService; private final ScheduleEntryMapper scheduleEntryMapper; public ScheduleEntryDto set(final long id, final BiConsumer setter, final T value) { final ScheduleEntry entry = scheduleEntryReadService.get(id); setter.accept(entry, value); final Schedule schedule = scheduleReadService.getByEntry(entry); scheduleCalculationService.calculateSchedule(schedule, ZonedDateTime.now()); return scheduleEntryMapper.toDto(entry); } }