package com.pollex.pam.service; import java.util.ArrayList; import java.util.List; import java.util.Optional; import com.pollex.pam.enums.SatisfactionTypeEnum; import com.pollex.pam.security.SecurityUtils; import com.pollex.pam.service.dto.SatisfactionSystemScoreDTO; 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); satisfaction.setType(SatisfactionTypeEnum.APPOINTMENT); save(satisfaction); personalNotificationService.createScorefactionToConsultant(satisfaction); return satisfaction; } public Satisfaction createAppointmentSatisfaction(Appointment appointment) { boolean isexist = getByAppointmentId(appointment.getId()).isPresent(); if(isexist) { throw new SatisfactionAlreadyExistException(); } Satisfaction satisfaction = appointmentMapper.toAppointmentSatisfaction(appointment); return save(satisfaction); } // // public Satisfaction createSatisfaction(SatisfactionCustomerScoreDTO createDTO) { // Satisfaction satisfaction = satisfactionDTOMapper.toSatisfaction(createDTO); // return save(satisfaction); // } public List getByAgentNoAndType(String agentNo, SatisfactionTypeEnum type) { List satisfactionList = satisfactionRepository.findByAgentNoAndType(agentNo, type); return satisfactionMapper.toDTO(satisfactionList); } public List getByCustomerIdAndType(Long customerDBId, SatisfactionTypeEnum type) { List satisfactionList = satisfactionRepository.findByCustomerIdAndType(customerDBId, type); return satisfactionMapper.toDTO(satisfactionList); } public Optional getByAppointmentId(Long appointmentId) { return satisfactionRepository.findOneByAppointmentId(appointmentId); } public List getByStatusAndType(SatisfactionStatusEnum status, SatisfactionTypeEnum type) { return satisfactionRepository.findAllByStatusAndType(status, type); } public List scoreAllfaction(List scoreDTO) { List satisfactionList = new ArrayList<>(); scoreDTO.stream().forEach(dto ->{ satisfactionList.add(scorefaction(dto)); }); return satisfactionList; } public Satisfaction createSystemSatisfaction(SatisfactionSystemScoreDTO scoreDTO) { Satisfaction satisfaction = new Satisfaction(); satisfaction.setCustomerId(SecurityUtils.getCustomerDBId()); satisfaction.setAppointmentId(scoreDTO.getAppointmentId()); satisfaction.setStatus(SatisfactionStatusEnum.FILLED); satisfaction.setScore(scoreDTO.getScore()); satisfaction.setType(SatisfactionTypeEnum.SYSTEM); return satisfactionRepository.save(satisfaction); } }