package com.pollex.pam.appointment.process; import java.time.Instant; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.AppointmentClosedInfo; import com.pollex.pam.enums.ContactStatusEnum; import com.pollex.pam.repository.AppointmentClosedInfoRepository; import com.pollex.pam.repository.AppointmentRepository; import com.pollex.pam.service.AppointmentClosedInfoService; import com.pollex.pam.service.AppointmentService; import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; import com.pollex.pam.service.dto.DoneProcessDTO; @Service public class AppointmentProcess{ @Autowired List processList; @Autowired AppointmentService appointmentService; @Autowired AppointmentRepository appointmentRepository; @Autowired AppointmentClosedInfoRepository appointmentClosedInfoRepository; public void process(AbstractAppointmentProcessDTO dto) { processList.stream().forEach(process ->{ if(process.getProcessType() == dto.getContactStatus()) { Optional closedInfoOP = appointmentClosedInfoRepository.findByAppointmentId(dto.getAppointmentId()); if(closedInfoOP.isPresent()) { process.editClosedInfo(dto, closedInfoOP.get()); }else { process.create(dto); } } }); changeAppointmentCommunicateStatus(dto.getAppointmentId(), dto.getContactStatus()); } private void changeAppointmentCommunicateStatus(Long appointmentId, ContactStatusEnum contactStatus) { Appointment appointment = appointmentService.findById(appointmentId); appointment.setCommunicateStatus(contactStatus); appointmentRepository.save(appointment); } }