Advertisement
Guest User

UserSkillService

a guest
Jan 23rd, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.54 KB | None | 0 0
  1. package de.ite.onepager.mindmap.service;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7. import java.util.NoSuchElementException;
  8. import java.util.Optional;
  9. import java.util.stream.Collectors;
  10.  
  11. import javax.transaction.Transactional;
  12.  
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15.  
  16. import de.ite.onepager.mindmap.common.DateFormatter;
  17. import de.ite.onepager.mindmap.model.Skill;
  18. import de.ite.onepager.mindmap.model.User;
  19. import de.ite.onepager.mindmap.model.UserSkill;
  20. import de.ite.onepager.mindmap.model.education.Certificate;
  21. import de.ite.onepager.mindmap.model.education.Training;
  22. import de.ite.onepager.mindmap.model.requests.CertificateRequest;
  23. import de.ite.onepager.mindmap.model.requests.TrainingRequest;
  24. import de.ite.onepager.mindmap.model.requests.UserSkillRequest;
  25. import de.ite.onepager.mindmap.repository.CertificateRepository;
  26. import de.ite.onepager.mindmap.repository.SkillRepository;
  27. import de.ite.onepager.mindmap.repository.TrainingRepository;
  28. import de.ite.onepager.mindmap.repository.UserRepository;
  29. import de.ite.onepager.mindmap.repository.UserSkillRepository;
  30.  
  31. @Service
  32. public class UserSkillService {
  33.  
  34.     @Autowired
  35.     UserSkillRepository userSkillRepository;
  36.  
  37.     @Autowired
  38.     UserRepository userRepository;
  39.  
  40.     @Autowired
  41.     SkillRepository skillRepository;
  42.  
  43.     @Autowired
  44.     CertificateRepository certificateRepository;
  45.  
  46.     @Autowired
  47.     TrainingRepository trainingRepository;
  48.  
  49.     public Optional<UserSkillRequest> getUserSkillByUserIdAndSkillId(Long userId, Long skillId) {
  50.  
  51.         Optional<User> user = userRepository.findById(userId);
  52.         Optional<Skill> skill = skillRepository.findById(skillId);
  53.  
  54.         if (!user.isPresent() || !skill.isPresent()) {
  55.            return Optional.empty();
  56.         }
  57.  
  58.         Optional<UserSkill> userSkill = userSkillRepository.findBySkillAndUser(skill.get(), user.get());
  59.  
  60.         return userSkill.map(this::generateUserSkillsResponse);
  61.     }
  62.  
  63.     public List<UserSkillRequest> getUserSkillsByEmail(String email) {
  64.  
  65.         Optional<User> user = userRepository.findByEmail(email);
  66.  
  67.         if (email == null || email.isEmpty()) {
  68.             throw new IllegalArgumentException();
  69.         }
  70.         if (!user.isPresent()) {
  71.             throw new NoSuchElementException();
  72.         }
  73.  
  74.         return getUserSkills(user.get().getId());
  75.     }
  76.  
  77.     public List<UserSkillRequest> getUserSkills(Long userId) {
  78.         List<UserSkill> listUserSkills = new LinkedList<>();
  79.  
  80.         Optional<User> user = userRepository.findById(userId);
  81.  
  82.         if (user.isPresent()) {
  83.             listUserSkills = userSkillRepository.findByUser(user.get());
  84.         }
  85.  
  86.         return generateListUserSkillsResponse(listUserSkills);
  87.     }
  88.  
  89.  
  90.     public UserSkill updateUserSkill(UserSkillRequest updateRequest) {
  91.         return this.saveUserSkill(updateRequest);
  92.     }
  93.  
  94.     // if user skill we attempt to add already exists (by unique key user_id + skill_id), we just update it"
  95.     public UserSkill addUserSkill(UserSkillRequest request) {
  96.  
  97.         if (request.getUserId() == null || request.getSkillId() == null) {
  98.             throw new IllegalArgumentException();
  99.         }
  100.  
  101.         Optional<User> user = userRepository.findById(request.getUserId());
  102.         Optional<Skill> skill = skillRepository.findById(request.getSkillId());
  103.         if (!user.isPresent() || !skill.isPresent()) {
  104.             throw new NoSuchElementException();
  105.         }
  106.  
  107.         Optional<UserSkill> userSkillOptional = userSkillRepository.findBySkillAndUser(skill.get(), user.get());
  108.  
  109.         if (userSkillOptional.isPresent()) {
  110.             UserSkill updatedUserSkill = userSkillOptional.get();
  111.             updatedUserSkill.setSkillDesireLvl(request.getSkillDesireLvl());
  112.             updatedUserSkill.setSkillLvl(request.getSkillLvl());
  113.  
  114.             if (!request.getCertificates().isEmpty()) {
  115.                 for (CertificateRequest certificate : request.getCertificates()) {
  116.                     certificateRepository.save(getCertificate(certificate, userSkillOptional.get()));
  117.                 }
  118.             }
  119.  
  120.             if (!request.getTrainings().isEmpty()) {
  121.                 for (TrainingRequest training : request.getTrainings()) {
  122.                     trainingRepository.save(getTraining(training, userSkillOptional.get()));
  123.                 }
  124.             }
  125.  
  126.             userSkillRepository.save(userSkillOptional.get());
  127.             return updatedUserSkill;
  128.         } else {
  129.             UserSkill userSkillToAdd = new UserSkill(skill.get(), user.get(), request.getSkillLvl(), request.getSkillDesireLvl());
  130.  
  131.             userSkillRepository.save(userSkillToAdd);
  132.             userSkillRepository.flush();
  133.  
  134.             if (!request.getCertificates().isEmpty()) {
  135.                 for (CertificateRequest certificate : request.getCertificates()) {
  136.                     certificateRepository.save(getCertificate(certificate, userSkillToAdd));
  137.                 }
  138.             }
  139.  
  140.             if (!request.getTrainings().isEmpty()) {
  141.                 for (TrainingRequest training : request.getTrainings()) {
  142.                     trainingRepository.save(getTraining(training, userSkillToAdd));
  143.                 }
  144.             }
  145.  
  146.             return userSkillToAdd;
  147.         }
  148.     }
  149.  
  150.     @Transactional
  151.     private UserSkill saveUserSkill(UserSkillRequest request) {
  152.         Optional<UserSkill> skillToUpdate;
  153.  
  154.         if (request.getUserId() == null || request.getSkillId() == null) {
  155.             throw new IllegalArgumentException();
  156.         }
  157.  
  158.         Optional<User> user = userRepository.findById(request.getUserId());
  159.         Optional<Skill> skill = skillRepository.findById(request.getSkillId());
  160.  
  161.         if (!user.isPresent() || !skill.isPresent()) {
  162.             throw new NoSuchElementException();
  163.         }
  164.  
  165.         skillToUpdate = userSkillRepository.findBySkillAndUser(skill.get(), user.get());
  166.  
  167.         if (!skillToUpdate.isPresent()) {
  168.             throw new IllegalArgumentException(); // UserSkill does not exist
  169.         }
  170.         skillToUpdate = userSkillRepository.findById(skillToUpdate.get().getId());
  171.         skillToUpdate.get().setSkillLvl(request.getSkillLvl());
  172.         skillToUpdate.get().setSkillDesireLvl(request.getSkillDesireLvl());
  173.  
  174.         addCertificatesToRepositoryIfAny(request, skillToUpdate);
  175.         addTrainingsToRepositoryIfAny(request, skillToUpdate);
  176.  
  177.         userSkillRepository.save(skillToUpdate.get());
  178.         userSkillRepository.flush();
  179.  
  180.         //ADDING THE NEW CERTIFICATES AND TRAININGS
  181.         if (!request.getCertificates().isEmpty()) {
  182.             for (CertificateRequest certificateRequest : request.getCertificates()) {
  183.                 Certificate newCertificate = getCertificate(certificateRequest, skillToUpdate.get());
  184.                 certificateRepository.save(newCertificate);
  185.             }
  186.             certificateRepository.flush();
  187.         }
  188.  
  189.         if (!request.getTrainings().isEmpty()) {
  190.             for (TrainingRequest trainingRequest : request.getTrainings()) {
  191.                 Training newTraining = getTraining(trainingRequest, skillToUpdate.get());
  192.                 trainingRepository.save(newTraining);
  193.             }
  194.             trainingRepository.flush();
  195.         }
  196.  
  197.         return skillToUpdate.get();
  198.     }
  199.  
  200.     private void addTrainingsToRepositoryIfAny(UserSkillRequest request, Optional<UserSkill> skillToUpdate) {
  201.         if (!skillToUpdate.get().getTrainings().isEmpty()) {
  202.  
  203.             List<Training> intersaction = skillToUpdate.get().getTrainings().stream()
  204.                     .filter(os -> request.getCertificates().stream()                    // filter
  205.                             .anyMatch(ns ->                                             // compare both
  206.                                     os.getId() == ns.getId()))                          // id
  207.                     .collect(Collectors.toList());
  208.  
  209.             Iterator<Training> iterator = skillToUpdate.get().getTrainings().iterator();
  210.  
  211.             while (iterator.hasNext()) {
  212.                 Training training = iterator.next();
  213.  
  214.                 Training certificateFormIntersaction = intersaction.stream()
  215.                         .filter(certif -> certif.getId() == training.getId())
  216.                         .findFirst()
  217.                         .orElse(null);
  218.                 if (null == certificateFormIntersaction) {
  219.                     trainingRepository.deleteById(training.getId());
  220.                     iterator.remove();
  221.                 } else {
  222.                     training.setName(certificateFormIntersaction.getName());
  223.                     training.setDescription(certificateFormIntersaction.getDescription());
  224.                     training.setExpiryDate(certificateFormIntersaction.getExpiryDate());
  225.                     training.setCreationDate(certificateFormIntersaction.getExpiryDate());
  226.                     training.setUserSkill(certificateFormIntersaction.getUserSkill());
  227.  
  228.                     trainingRepository.save(training);
  229.                     request.getCertificates().removeIf(e -> e.getId() == training.getId());
  230.                 }
  231.                 trainingRepository.flush();
  232.             }
  233.         }
  234.     }
  235.  
  236.     private void addCertificatesToRepositoryIfAny(UserSkillRequest request, Optional<UserSkill> skillToUpdate) {
  237.         if (skillToUpdate.isPresent()) {
  238.  
  239.             if (!skillToUpdate.get().getCertificates().isEmpty()) {
  240.  
  241.                 List<Certificate> intersaction = skillToUpdate.get().getCertificates().stream()
  242.                         .filter(os -> request.getCertificates().stream()                    // filter
  243.                                 .anyMatch(ns ->                                             // compare both
  244.                                         os.getId() == ns.getId()))                          // id
  245.                         .collect(Collectors.toList());
  246.  
  247.                 Iterator<Certificate> iterator = skillToUpdate.get().getCertificates().iterator();
  248.                 while (iterator.hasNext()) {
  249.                     Certificate cert = iterator.next();
  250.                     Certificate certificateFormIntersaction = intersaction.stream()
  251.                             .filter(certif -> certif.getId() == cert.getId())
  252.                             .findFirst()
  253.                             .orElse(null);
  254.                     if (null == certificateFormIntersaction) {
  255.                         certificateRepository.delete(cert);
  256.                         iterator.remove();
  257.                     } else {
  258.                         Certificate certi = certificateRepository.findById(cert.getId()).get();
  259.  
  260.                         certi.setName(certificateFormIntersaction.getName());
  261.                         certi.setDescription(certificateFormIntersaction.getDescription());
  262.                         certi.setExpiryDate(certificateFormIntersaction.getExpiryDate());
  263.                         certi.setCreationDate(certificateFormIntersaction.getExpiryDate());
  264.                         certi.setUserSkill(certificateFormIntersaction.getUserSkill());
  265.  
  266.                         certificateRepository.save(certi);
  267.                         request.getCertificates().removeIf(e -> e.getId() == certi.getId());
  268.                     }
  269.                     certificateRepository.flush();
  270.                 }
  271.             }
  272.         }
  273.     }
  274.  
  275.     private Certificate getCertificate(CertificateRequest certificate, UserSkill userSkill) {
  276.  
  277.         Certificate currCert = new Certificate();
  278.  
  279.         currCert.setUserSkill(userSkill);
  280.         currCert.setCreationDate(DateFormatter.getDate(certificate.getCreationDate()));
  281.         currCert.setExpiryDate(DateFormatter.getDate(certificate.getExpiryDate()));
  282.         currCert.setDescription(certificate.getDescription());
  283.         currCert.setName(certificate.getName());
  284.  
  285.         return currCert;
  286.     }
  287.  
  288.     private Training getTraining(TrainingRequest training, UserSkill userSkill) {
  289.  
  290.         Training currTraining = new Training();
  291.  
  292.         currTraining.setUserSkill(userSkill);
  293.         currTraining.setCreationDate(DateFormatter.getDate(training.getCreationDate()));
  294.         currTraining.setExpiryDate(DateFormatter.getDate(training.getExpiryDate()));
  295.         currTraining.setDescription(training.getDescription());
  296.         currTraining.setName(training.getName());
  297.  
  298.         return currTraining;
  299.     }
  300.  
  301.     private CertificateRequest getCertificateRequest(Certificate certificate) {
  302.  
  303.         CertificateRequest result = new CertificateRequest();
  304.  
  305.         result.setId(certificate.getId());
  306.         result.setUserSkillId(certificate.getUserSkill().getId());
  307.         result.setCreationDate(DateFormatter.getStringDate(certificate.getCreationDate()));
  308.         result.setExpiryDate(DateFormatter.getStringDate(certificate.getExpiryDate()));
  309.         result.setDescription(certificate.getDescription());
  310.         result.setName(certificate.getName());
  311.  
  312.         return result;
  313.     }
  314.  
  315.     private TrainingRequest getTrainingRequest(Training training) {
  316.  
  317.         TrainingRequest result = new TrainingRequest();
  318.  
  319.         result.setId(training.getId());
  320.         result.setUserSkillId(training.getUserSkill().getId());
  321.         result.setCreationDate(DateFormatter.getStringDate(training.getCreationDate()));
  322.         result.setExpiryDate(DateFormatter.getStringDate(training.getExpiryDate()));
  323.         result.setDescription(training.getDescription());
  324.         result.setName(training.getName());
  325.  
  326.         return result;
  327.     }
  328.  
  329.     private List<UserSkillRequest> generateListUserSkillsResponse(List<UserSkill> userSkills) {
  330.  
  331.         List<UserSkillRequest> result = new LinkedList<>();
  332.  
  333.         for (UserSkill userSkill : userSkills) {
  334.             result.add(generateUserSkillsResponse(userSkill));
  335.         }
  336.  
  337.         return result;
  338.     }
  339.  
  340.     private UserSkillRequest generateUserSkillsResponse(UserSkill userSkill) {
  341.  
  342.         List<CertificateRequest> certificateRequests = new ArrayList<>();
  343.  
  344.         for (Certificate certificate : userSkill.getCertificates()) {
  345.             certificateRequests.add(getCertificateRequest(certificate));
  346.         }
  347.  
  348.         List<TrainingRequest> trainingRequests = new ArrayList<>();
  349.  
  350.         for (Training training : userSkill.getTrainings()) {
  351.             trainingRequests.add(getTrainingRequest(training));
  352.         }
  353.  
  354.         return new UserSkillRequest(userSkill.getId(), userSkill.getUser().getId(), userSkill.getSkill().getId(),
  355.                 userSkill.getSkillLvl(), userSkill.getSkillDesireLvl(), certificateRequests, trainingRequests);
  356.     }
  357. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement