View Javadoc
1   package usecase.user;
2   
3   import model.entity.Ban;
4   import model.entity.User;
5   import model.repository.GenericRepository;
6   import model.validation.BanExists;
7   import model.validation.UserExists;
8   import usecase.auth.AdminsOnly;
9   
10  import javax.enterprise.context.ApplicationScoped;
11  import javax.inject.Inject;
12  import javax.transaction.Transactional;
13  import javax.validation.constraints.Future;
14  import javax.validation.constraints.NotNull;
15  import java.time.Instant;
16  import java.util.ArrayList;
17  import java.util.List;
18  
19  /**
20   * Classe che fornisce i servizi relativi ai ban.
21   */
22  @ApplicationScoped
23  @Transactional
24  public class BanService {
25      private GenericRepository genericRepository;
26  
27      protected BanService(){}
28  
29      @Inject
30      protected BanService(GenericRepository genericRepository){
31          this.genericRepository = genericRepository;
32      }
33  
34  
35      /**
36       * Aggiunge un ban dato l'id di un utente.
37       * @param date data di fine ban
38       * @param userId identificativo utente
39       * @return entità ban aggiunta
40       */
41      @AdminsOnly
42      public int addBan(@NotNull @Future Instant date, @UserExists int userId) {
43          Ban ban = new Ban();
44          ban.setEndTime(date);
45          User user = new User();
46          user.setId(userId);
47          ban.setUser(user);
48          return genericRepository.insert(ban).getId();
49      }
50  
51      /**
52       * Rimuove un ban dato il suo id
53       * @param banId identificativo del ban
54       */
55      @AdminsOnly
56      public void removeBan(@BanExists int banId){
57          genericRepository.remove(genericRepository.findById(Ban.class, banId));
58      }
59  
60      /**
61       * Ritorna la lista dei ban di un utente
62       * @param userId identificativo utente
63       * @return lista dei ban relativi all'utente
64       */
65      @AdminsOnly
66      public List<BanDTO> retrieveUserBan(@UserExists int userId){
67          User user = genericRepository.findById(User.class, userId);
68          List<BanDTO> bans = new ArrayList<>();
69          List<Ban> temp = user.getBans();
70  
71          for(Ban b : temp){
72              BanDTO ban = new BanDTO(b.getId(), b.getEndTime(), b.getUser().getId());
73              bans.add(ban);
74          }
75          return bans;
76      }
77  }