| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package it.bgates.remotebe.service;
- import it.bgates.remotebe.entities.Distributor;
- import it.bgates.remotebe.entities.User;
- import it.bgates.remotebe.exception.PermissionDeniedException;
- import it.bgates.remotebe.exception.UserNotFoundException;
- import it.bgates.remotebe.repository.DistributorRepository;
- import it.bgates.remotebe.repository.UserRepository;
- import jakarta.persistence.EntityManager;
- import jakarta.persistence.TypedQuery;
- import lombok.RequiredArgsConstructor;
- import org.springframework.stereotype.Service;
- import java.security.Principal;
- import java.util.List;
- import java.util.Optional;
- @Service
- @RequiredArgsConstructor
- public class DistributorService extends BaseService {
- private final DistributorRepository distributorRepository;
- private final UserRepository userRepository;
- private final EntityManager entityManager;
- /***
- * returns the list of distributors accessible the currently logged user
- * If the user is an admin, returns all the distributors
- * If the user is a distributor, returns only itself
- * @param principal
- * @return
- */
- public List<Distributor> getDistributors(Principal principal) throws UserNotFoundException {
- getUserDetails(principal);
- Optional<User> user = userRepository.findByUsername(userDetails.getUsername());
- if (user.isEmpty()) {
- return List.of();
- }
- if (isSuperUser()) {
- return distributorRepository.findAllByOrderByName();
- }
- if (isDistributor()) {
- return List.of(user.get().getDistributor());
- }
- return List.of();
- }
- public Distributor save(Distributor distributor, Principal principal) throws UserNotFoundException, PermissionDeniedException {
- getUserDetails(principal);
- if (!isSuperUser() && distributor.getId() == null) {
- throw new PermissionDeniedException("Accesso negato");
- }
- return distributorRepository.save(distributor);
- }
- public Distributor getDistributorById(Integer id) {
- return distributorRepository.findById(id).orElse(null);
- }
- public List<Distributor> filter(String filter, Principal principal) throws UserNotFoundException {
- getUserDetails(principal);
- Optional<User> user = userRepository.findByUsername(userDetails.getUsername());
- if (user.isEmpty()) {
- return List.of();
- }
- StringBuilder filterBuilder = new StringBuilder();
- if (isDistributor()) {
- filterBuilder.append("WHERE d = :distributor");
- } else if (isSuperUser()) {
- filterBuilder.append("WHERE true");
- } else if (isUser()) {
- filterBuilder.append("WHERE false");
- }
- List<String> params = buildFilter(filterBuilder, filter, new String[] {
- "name",
- "vatNumber",
- "city"
- });
- String sql = "SELECT d FROM Distributor d " + filterBuilder.toString();
- TypedQuery<Distributor> query = entityManager.createQuery(sql, Distributor.class);
- for (int i = 0; i < params.size(); i++) {
- query.setParameter("param_" + i, params.get(i));
- }
- for (int i = 0; i < params.size(); i++) {
- query.setParameter("param_" + i, params.get(i));
- }
- if (isDistributor()) {
- query.setParameter("distributor", user.get().getDistributor());
- }
- List<Distributor> distributors = query.getResultList();
- return distributors;
- }
- }
|