BanService.java
package usecase.user;
import model.entity.Ban;
import model.entity.User;
import model.repository.GenericRepository;
import model.validation.BanExists;
import model.validation.UserExists;
import usecase.auth.AdminsOnly;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.validation.constraints.Future;
import javax.validation.constraints.NotNull;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
/**
* Classe che fornisce i servizi relativi ai ban.
*/
@ApplicationScoped
@Transactional
public class BanService {
private GenericRepository genericRepository;
protected BanService(){}
@Inject
protected BanService(GenericRepository genericRepository){
this.genericRepository = genericRepository;
}
/**
* Aggiunge un ban dato l'id di un utente.
* @param date data di fine ban
* @param userId identificativo utente
* @return entità ban aggiunta
*/
@AdminsOnly
public int addBan(@NotNull @Future Instant date, @UserExists int userId) {
Ban ban = new Ban();
ban.setEndTime(date);
User user = new User();
user.setId(userId);
ban.setUser(user);
return genericRepository.insert(ban).getId();
}
/**
* Rimuove un ban dato il suo id
* @param banId identificativo del ban
*/
@AdminsOnly
public void removeBan(@BanExists int banId){
genericRepository.remove(genericRepository.findById(Ban.class, banId));
}
/**
* Ritorna la lista dei ban di un utente
* @param userId identificativo utente
* @return lista dei ban relativi all'utente
*/
@AdminsOnly
public List<BanDTO> retrieveUserBan(@UserExists int userId){
User user = genericRepository.findById(User.class, userId);
List<BanDTO> bans = new ArrayList<>();
List<Ban> temp = user.getBans();
for(Ban b : temp){
BanDTO ban = new BanDTO(b.getId(), b.getEndTime(), b.getUser().getId());
bans.add(ban);
}
return bans;
}
}