source: sources/app/src/main/java/parkup/services/AdministratorService.java@ 80ddcae

Last change on this file since 80ddcae was 98f448a, checked in by andrejTavchioski <andrej.tavchioski@…>, 2 years ago

parkingZone and parkingSession services fix

  • Property mode set to 100644
File size: 5.1 KB
Line 
1package parkup.services;
2
3import java.util.List;
4import java.util.Objects;
5import java.util.Optional;
6import java.util.UUID;
7import java.util.stream.Collectors;
8import javax.transaction.Transactional;
9import org.springframework.beans.factory.annotation.Autowired;
10import org.springframework.security.core.userdetails.UserDetails;
11import org.springframework.security.core.userdetails.UserDetailsService;
12import org.springframework.security.core.userdetails.UsernameNotFoundException;
13import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
14import org.springframework.stereotype.Service;
15import parkup.configs.email.EmailValidator;
16import parkup.configs.token.ConfirmationTokenService;
17import parkup.entities.Administrator;
18import parkup.repositories.AdministratorRepository;
19
20@Service
21public class AdministratorService implements UserDetailsService {
22 private final AdministratorRepository administratorRepository;
23 private final BCryptPasswordEncoder bCryptPasswordEncoder;
24
25
26 @Autowired
27 public AdministratorService(AdministratorRepository administratorRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
28 this.administratorRepository = administratorRepository;
29 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
30 }
31
32 public List<Administrator> getAllAdministrators() {
33 return this.administratorRepository.findAll();
34 }
35
36 public Administrator findById(int administratorId) {
37 Optional<Administrator> administrator = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
38 return administrator.orElse(null);
39 }
40
41 public Optional<Administrator> addAdministrator(Administrator administrator) {
42 Optional<Administrator> administratorOpt = this.administratorRepository.findAdministratorByEmail(administrator.getEmail());
43 if (administratorOpt.isPresent()) {
44 throw new IllegalStateException("Email already taken, try adding an administrator with a different valid email address");
45 } else {
46 if (administrator.getEmail() != null && administrator.getEmail().length() > 1 && administrator.getEmail().contains("@")) {
47 administrator.setPassword(bCryptPasswordEncoder.encode(administrator.getPassword()));
48 this.administratorRepository.save(administrator);
49 }
50 else {
51 throw new IllegalStateException("email not valid");
52 }
53 }
54 return administratorOpt;
55 }
56
57 @Transactional
58 public Administrator updateAdministrator(int administratorId, String firstName, String lastName, String mobile, String email) {
59 Optional<Administrator> administratorOpt = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
60 if (administratorOpt.isPresent()) {
61 Administrator administratorNov = this.administratorRepository.findByAdministratorId(administratorId);
62 if (email != null && email.length() > 1 && email.contains("@")) {
63 List<String> emails = administratorRepository.findAll().stream().map(Administrator::getEmail).collect(Collectors.toList());
64 for(String mailToCheck :emails)
65 if (email.equals(mailToCheck) && administratorNov.getAdministratorId()!=administratorId) {
66 throw new IllegalStateException("email taken");
67 }
68 }else{
69 throw new IllegalStateException("email not valid");
70 }
71
72 if (firstName != null && firstName.length() > 1 && !Objects.equals(administratorNov.getFirstName(), firstName)) {
73 administratorNov.setFirstName(firstName);
74 }
75
76 if (lastName != null && lastName.length() > 1 && !Objects.equals(administratorNov.getLastName(), lastName)) {
77 administratorNov.setLastName(lastName);
78 }
79
80 if (mobile != null && mobile.length() > 0 && !Objects.equals(administratorNov.getMobile(), mobile)) {
81 administratorNov.setMobile(mobile);
82 }
83 return administratorNov;
84 }
85 else {
86 throw new IllegalStateException("Administrator doesn't exist, therefore can't be updated");
87 }
88
89 }
90
91 public Optional<Administrator> deleteAdministrator(int administratorId) {
92 Optional<Administrator> administratorOpt = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
93 if (administratorOpt.isPresent()) {
94 this.administratorRepository.deleteByAdministratorId(administratorId);
95 } else {
96 throw new IllegalStateException("Administrator doesn't exist, therefore can't be deleted");
97 }
98 return administratorOpt;
99 }
100
101 @Override
102 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
103 return administratorRepository.findAdministratorByEmail(email)
104 .orElseThrow(() ->
105 new UsernameNotFoundException("Email not found"));
106
107 }
108
109 public int enableAdministrator(String email) {
110 return administratorRepository.enableAdministrator(email);
111 }
112}
Note: See TracBrowser for help on using the repository browser.