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
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
37
38
39
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
53
54
55 @AdminsOnly
56 public void removeBan(@BanExists int banId){
57 genericRepository.remove(genericRepository.findById(Ban.class, banId));
58 }
59
60
61
62
63
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 }