package com.pollex.pam.appointment.process; import java.util.Optional; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.pollex.pam.domain.AppointmentClosedInfo; import com.pollex.pam.enums.ContactStatusEnum; import com.pollex.pam.repository.AppointmentClosedInfoRepository; import com.pollex.pam.service.AppointmentClosedInfoService; import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; import com.pollex.pam.service.dto.ClosedProcessDTO; import com.pollex.pam.service.dto.DoneProcessDTO; import com.pollex.pam.web.rest.errors.AppointmentClosedInfoNotFoundException; @Service public class DoneProcess implements AppointmentProcessInterface{ @Autowired AppointmentClosedInfoRepository appointmentClosedInfoRepository; @Autowired AppointmentClosedInfoService appointmentClosedInfoService; @Override public void createProcess(AbstractAppointmentProcessDTO processDTO) { checkClosedInfo(processDTO.getAppointmentId()); DoneProcessDTO doneProcess = toDoneProcessDTO(processDTO); AppointmentClosedInfo closedInfo = new AppointmentClosedInfo(); BeanUtils.copyProperties(doneProcess, closedInfo); appointmentClosedInfoRepository.save(closedInfo); } @Override public ContactStatusEnum getProcessType() { return ContactStatusEnum.DONE; } private void checkClosedInfo(Long appointmentId) { Optional closedInfo = appointmentClosedInfoRepository.findByAppointmentId(appointmentId); if(closedInfo.isPresent()) { throw new IllegalArgumentException("appointment closed info exist"); } } @Override public AppointmentClosedInfo editClosedInfo(AbstractAppointmentProcessDTO abstractDTO) { DoneProcessDTO doneProcess = toDoneProcessDTO(abstractDTO); AppointmentClosedInfo closedInfo = appointmentClosedInfoService.findByAppointmentId(abstractDTO.getAppointmentId()); BeanUtils.copyProperties(doneProcess, closedInfo); return appointmentClosedInfoRepository.save(closedInfo); } private DoneProcessDTO toDoneProcessDTO(AbstractAppointmentProcessDTO abstractDTO) { DoneProcessDTO doneProcess = (DoneProcessDTO)abstractDTO; BeanUtils.copyProperties(abstractDTO, doneProcess); return doneProcess; } }