package com.pollex.pam.service; import java.util.ArrayList; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.Satisfaction; import com.pollex.pam.enums.SatisfactionStatusEnum; import com.pollex.pam.repository.ConsultantRepository; import com.pollex.pam.repository.CustomerRepository; import com.pollex.pam.repository.SatisfactionRepository; import com.pollex.pam.service.dto.SatisfactionCustomerScoreDTO; import com.pollex.pam.service.dto.SatisfactionDTO; import com.pollex.pam.service.mapper.AppointmentMapper; import com.pollex.pam.service.mapper.SatisfactionDTOMapper; import com.pollex.pam.service.mapper.SatisfactionMapper; import com.pollex.pam.web.rest.errors.SatisfactionAlreadyExistException; import com.pollex.pam.web.rest.errors.SatisfactionNotFoundException; @Service @Transactional public class SatisfactionService { @Autowired SatisfactionRepository satisfactionRepository; @Autowired AppointmentMapper appointmentMapper; @Autowired SatisfactionDTOMapper satisfactionDTOMapper; @Autowired SatisfactionMapper satisfactionMapper; @Autowired CustomerRepository customerRepository; @Autowired ConsultantRepository consultantRepository; @Autowired ConsultantService consultantService; @Autowired PersonalNotificationService personalNotificationService; public Satisfaction save(Satisfaction satisfaction) { satisfaction = satisfactionRepository.save(satisfaction); consultantService.setConsultantAvgScore(satisfaction); return satisfaction; } public Satisfaction scorefaction(SatisfactionCustomerScoreDTO scoreDTO) { Optional satisfactionOP = getByAppointmentId(scoreDTO.getAppointmentId()); Satisfaction satisfaction = satisfactionOP.orElseThrow(SatisfactionNotFoundException::new); satisfaction.setScore(scoreDTO.getScore()); satisfaction.setStatus(SatisfactionStatusEnum.FILLED); save(satisfaction); personalNotificationService.createScorefactionToConsultant(satisfaction); return satisfaction; } public Satisfaction createSatisfaction(Appointment appointment) { boolean isexist = getByAppointmentId(appointment.getId()).isPresent(); if(isexist) { throw new SatisfactionAlreadyExistException(); } Satisfaction satisfaction = appointmentMapper.toSatisfaction(appointment); return save(satisfaction); } // // public Satisfaction createSatisfaction(SatisfactionCustomerScoreDTO createDTO) { // Satisfaction satisfaction = satisfactionDTOMapper.toSatisfaction(createDTO); // return save(satisfaction); // } public List getByAgentNo(String agentNo) { List satisfactionList = satisfactionRepository.findByAgentNo(agentNo); return satisfactionMapper.toDTO(satisfactionList); } public List getByCustomerId(Long customerDBId) { List satisfactionList = satisfactionRepository.findByCustomerId(customerDBId); return satisfactionMapper.toDTO(satisfactionList); } public Optional getByAppointmentId(Long appointmentId) { return satisfactionRepository.findOneByAppointmentId(appointmentId); } public List getByStatus(SatisfactionStatusEnum status) { return satisfactionRepository.findAllByStatus(status); } public List scoreAllfaction(List scoreDTO) { List satisfactionList = new ArrayList<>(); scoreDTO.stream().forEach(dto ->{ satisfactionList.add(scorefaction(dto)); }); return satisfactionList; } }