001package usecase.user; 002 003import model.entity.Ban; 004import model.entity.User; 005import model.repository.GenericRepository; 006import model.validation.BanExists; 007import model.validation.UserExists; 008import usecase.auth.AdminsOnly; 009 010import javax.enterprise.context.ApplicationScoped; 011import javax.inject.Inject; 012import javax.transaction.Transactional; 013import javax.validation.constraints.Future; 014import javax.validation.constraints.NotNull; 015import java.time.Instant; 016import java.util.ArrayList; 017import java.util.List; 018 019/** 020 * Classe che fornisce i servizi relativi ai ban. 021 */ 022@ApplicationScoped 023@Transactional 024public class BanService { 025 private GenericRepository genericRepository; 026 027 protected BanService(){} 028 029 @Inject 030 protected BanService(GenericRepository genericRepository){ 031 this.genericRepository = genericRepository; 032 } 033 034 035 /** 036 * Aggiunge un ban dato l'id di un utente. 037 * @param date data di fine ban 038 * @param userId identificativo utente 039 * @return entità ban aggiunta 040 */ 041 @AdminsOnly 042 public int addBan(@NotNull @Future Instant date, @UserExists int userId) { 043 Ban ban = new Ban(); 044 ban.setEndTime(date); 045 User user = new User(); 046 user.setId(userId); 047 ban.setUser(user); 048 return genericRepository.insert(ban).getId(); 049 } 050 051 /** 052 * Rimuove un ban dato il suo id 053 * @param banId identificativo del ban 054 */ 055 @AdminsOnly 056 public void removeBan(@BanExists int banId){ 057 genericRepository.remove(genericRepository.findById(Ban.class, banId)); 058 } 059 060 /** 061 * Ritorna la lista dei ban di un utente 062 * @param userId identificativo utente 063 * @return lista dei ban relativi all'utente 064 */ 065 @AdminsOnly 066 public List<BanDTO> retrieveUserBan(@UserExists int userId){ 067 User user = genericRepository.findById(User.class, userId); 068 List<BanDTO> bans = new ArrayList<>(); 069 List<Ban> temp = user.getBans(); 070 071 for(Ban b : temp){ 072 BanDTO ban = new BanDTO(b.getId(), b.getEndTime(), b.getUser().getId()); 073 bans.add(ban); 074 } 075 return bans; 076 } 077}