DistributorService.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package it.bgates.remotebe.service;
  2. import it.bgates.remotebe.entities.Distributor;
  3. import it.bgates.remotebe.entities.User;
  4. import it.bgates.remotebe.exception.PermissionDeniedException;
  5. import it.bgates.remotebe.exception.UserNotFoundException;
  6. import it.bgates.remotebe.repository.DistributorRepository;
  7. import it.bgates.remotebe.repository.UserRepository;
  8. import jakarta.persistence.EntityManager;
  9. import jakarta.persistence.TypedQuery;
  10. import lombok.RequiredArgsConstructor;
  11. import org.springframework.stereotype.Service;
  12. import java.security.Principal;
  13. import java.util.List;
  14. import java.util.Optional;
  15. @Service
  16. @RequiredArgsConstructor
  17. public class DistributorService extends BaseService {
  18. private final DistributorRepository distributorRepository;
  19. private final UserRepository userRepository;
  20. private final EntityManager entityManager;
  21. /***
  22. * returns the list of distributors accessible the currently logged user
  23. * If the user is an admin, returns all the distributors
  24. * If the user is a distributor, returns only itself
  25. * @param principal
  26. * @return
  27. */
  28. public List<Distributor> getDistributors(Principal principal) throws UserNotFoundException {
  29. getUserDetails(principal);
  30. Optional<User> user = userRepository.findByUsername(userDetails.getUsername());
  31. if (user.isEmpty()) {
  32. return List.of();
  33. }
  34. if (isSuperUser()) {
  35. return distributorRepository.findAllByOrderByName();
  36. }
  37. if (isDistributor()) {
  38. return List.of(user.get().getDistributor());
  39. }
  40. return List.of();
  41. }
  42. public Distributor save(Distributor distributor, Principal principal) throws UserNotFoundException, PermissionDeniedException {
  43. getUserDetails(principal);
  44. if (!isSuperUser() && distributor.getId() == null) {
  45. throw new PermissionDeniedException("Accesso negato");
  46. }
  47. return distributorRepository.save(distributor);
  48. }
  49. public Distributor getDistributorById(Integer id) {
  50. return distributorRepository.findById(id).orElse(null);
  51. }
  52. public List<Distributor> filter(String filter, Principal principal) throws UserNotFoundException {
  53. getUserDetails(principal);
  54. Optional<User> user = userRepository.findByUsername(userDetails.getUsername());
  55. if (user.isEmpty()) {
  56. return List.of();
  57. }
  58. StringBuilder filterBuilder = new StringBuilder();
  59. if (isDistributor()) {
  60. filterBuilder.append("WHERE d = :distributor");
  61. } else if (isSuperUser()) {
  62. filterBuilder.append("WHERE true");
  63. } else if (isUser()) {
  64. filterBuilder.append("WHERE false");
  65. }
  66. List<String> params = buildFilter(filterBuilder, filter, new String[] {
  67. "name",
  68. "vatNumber",
  69. "city"
  70. });
  71. String sql = "SELECT d FROM Distributor d " + filterBuilder.toString();
  72. TypedQuery<Distributor> query = entityManager.createQuery(sql, Distributor.class);
  73. for (int i = 0; i < params.size(); i++) {
  74. query.setParameter("param_" + i, params.get(i));
  75. }
  76. for (int i = 0; i < params.size(); i++) {
  77. query.setParameter("param_" + i, params.get(i));
  78. }
  79. if (isDistributor()) {
  80. query.setParameter("distributor", user.get().getDistributor());
  81. }
  82. List<Distributor> distributors = query.getResultList();
  83. return distributors;
  84. }
  85. }