package ru.ulstu.activity.deadline.service; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.ulstu.activity.deadline.model.Deadline; import ru.ulstu.activity.deadline.model.DeadlineDto; import ru.ulstu.user.service.UserService; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Service public class DeadlineService { private final DeadlineRepository deadlineRepository; private final UserService userService; public DeadlineService(DeadlineRepository deadlineRepository, UserService userService) { this.deadlineRepository = deadlineRepository; this.userService = userService; } public List saveOrCreate(List deadlines) { return deadlines .stream() .map(deadline -> { return deadline.getId() != null ? update(deadline) : create(deadline); }).collect(Collectors.toList()); } @Transactional public Deadline update(DeadlineDto deadlineDto) { Deadline updateDeadline = deadlineRepository.getOne(deadlineDto.getId()); deadlineRepository.save(copyFromDto(updateDeadline, deadlineDto)); return updateDeadline; } @Transactional public Deadline create(DeadlineDto deadlineDto) { return deadlineRepository.save(copyFromDto(new Deadline(), deadlineDto)); } @Transactional public Deadline create(Deadline deadline) { return deadlineRepository.save(deadline); } @Transactional public void remove(Integer deadlineId) { deadlineRepository.deleteById(deadlineId); } private Deadline copyFromDto(Deadline deadline, DeadlineDto deadlineDto) { deadline.setDate(deadlineDto.getDate()); deadline.setDescription(deadlineDto.getDescription()); deadline.setExecutors(userService.findByIds(deadlineDto.getExecutorsIds())); deadline.setDone(deadlineDto.isDone()); return deadline; } public Date findByGrantIdAndDate(Integer id, Date date) { return deadlineRepository.findByGrantIdAndDate(id, date); } }