| 1 | package mk.ukim.finki.wp.db.service;
|
|---|
| 2 |
|
|---|
| 3 | import lombok.RequiredArgsConstructor;
|
|---|
| 4 | import mk.ukim.finki.wp.db.entity.SupportTicket;
|
|---|
| 5 | import mk.ukim.finki.wp.db.entity.user.Administrator;
|
|---|
| 6 | import mk.ukim.finki.wp.db.entity.user.User;
|
|---|
| 7 | import mk.ukim.finki.wp.db.entity.user.UserEntity;
|
|---|
| 8 | import mk.ukim.finki.wp.db.entity.user.enums.Role;
|
|---|
| 9 | import mk.ukim.finki.wp.db.repository.AdministratorRepository;
|
|---|
| 10 | import mk.ukim.finki.wp.db.repository.SupportTicketRepository;
|
|---|
| 11 | import mk.ukim.finki.wp.db.repository.UserEntityRepository;
|
|---|
| 12 | import mk.ukim.finki.wp.db.repository.UserRepository;
|
|---|
| 13 | import org.springframework.stereotype.Service;
|
|---|
| 14 |
|
|---|
| 15 | import java.time.LocalDateTime;
|
|---|
| 16 | import java.util.List;
|
|---|
| 17 | import java.util.Random;
|
|---|
| 18 |
|
|---|
| 19 | @Service
|
|---|
| 20 | @RequiredArgsConstructor
|
|---|
| 21 | public class SupportTicketService {
|
|---|
| 22 |
|
|---|
| 23 | private final SupportTicketRepository supportTicketRepository;
|
|---|
| 24 | private final UserRepository userRepository;
|
|---|
| 25 | private final UserEntityRepository userEntityRepository;
|
|---|
| 26 | private final AdministratorRepository administratorRepository;
|
|---|
| 27 |
|
|---|
| 28 | public List<SupportTicket> findAll(String email) {
|
|---|
| 29 | UserEntity userEntity = userEntityRepository.findByEmail(email).get();
|
|---|
| 30 |
|
|---|
| 31 | if(userEntity.getRole() == Role.ADMIN) {
|
|---|
| 32 | return findAllByAdmin(userEntity);
|
|---|
| 33 | } else {
|
|---|
| 34 | return findAllByUser(userEntity);
|
|---|
| 35 | }
|
|---|
| 36 | }
|
|---|
| 37 |
|
|---|
| 38 | public List<SupportTicket> findAllByUser(UserEntity userEntity) {
|
|---|
| 39 | User user = userRepository.findById(userEntity.getId()).get();
|
|---|
| 40 | return supportTicketRepository.findAllByUser(user);
|
|---|
| 41 | }
|
|---|
| 42 |
|
|---|
| 43 | public List<SupportTicket> findAllByAdmin(UserEntity userEntity) {
|
|---|
| 44 | Administrator admin = administratorRepository.findById(userEntity.getId()).get();
|
|---|
| 45 | return supportTicketRepository.findAllByAdmin(admin);
|
|---|
| 46 | }
|
|---|
| 47 |
|
|---|
| 48 | public void addSupportTicket(String email, String subject, String description) {
|
|---|
| 49 | UserEntity userEntity = userEntityRepository.findByEmail(email).get();
|
|---|
| 50 | User user = userRepository.findById(userEntity.getId()).get();
|
|---|
| 51 |
|
|---|
| 52 | List<Administrator> admins = administratorRepository.findAll();
|
|---|
| 53 |
|
|---|
| 54 | Random random = new Random();
|
|---|
| 55 | Administrator assignedAdmin = admins.get(random.nextInt(admins.size()));
|
|---|
| 56 |
|
|---|
| 57 | SupportTicket supportTicket = new SupportTicket();
|
|---|
| 58 | supportTicket.setUser(user);
|
|---|
| 59 | supportTicket.setAdmin(assignedAdmin);
|
|---|
| 60 | supportTicket.setSubject(subject);
|
|---|
| 61 | supportTicket.setDescription(description);
|
|---|
| 62 | supportTicket.setStatus("UNRESOLVED");
|
|---|
| 63 | supportTicket.setCreatedAt(LocalDateTime.now());
|
|---|
| 64 | supportTicketRepository.save(supportTicket);
|
|---|
| 65 | }
|
|---|
| 66 |
|
|---|
| 67 | public void resolveSupportTicket(Integer ticketId) {
|
|---|
| 68 | SupportTicket supportTicket = supportTicketRepository.findById(ticketId).get();
|
|---|
| 69 | supportTicket.setStatus("RESOLVED");
|
|---|
| 70 | supportTicketRepository.save(supportTicket);
|
|---|
| 71 | }
|
|---|
| 72 | }
|
|---|