package de.ph87.homeautomation.schedule; 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 ScheduleWriteService { public static final String NAME_PREFIX = "Neu "; private final ScheduleReadService scheduleReadService; private final ScheduleCalculationService scheduleCalculationService; private final ScheduleMapper scheduleMapper; private final ScheduleRepository scheduleRepository; public ScheduleDto set(final long id, final BiConsumer setter, final T value) { final Schedule schedule = scheduleReadService.getById(id); setter.accept(schedule, value); scheduleCalculationService.calculateSchedule(schedule, ZonedDateTime.now()); return scheduleMapper.toDto(schedule); } public ScheduleDto create() { final Schedule entry = new Schedule(); entry.setName(generateUnusedName()); return scheduleMapper.toDto(scheduleRepository.save(entry)); } private String generateUnusedName() { int index = 0; String name = null; while (name == null || scheduleRepository.existsByName(name)) { name = ScheduleWriteService.NAME_PREFIX + ++index; } return name; } public void delete(final long id) { scheduleRepository.deleteById(id); } }