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

Last change on this file since ce6ad22 was ce6ad22, checked in by DavidTrajkovski <davidtrajkovski11@…>, 3 years ago

v1 initial prototype

  • Property mode set to 100644
File size: 6.0 KB
Line 
1package parkup.services;
2
3import java.time.LocalDateTime;
4import java.util.List;
5import java.util.Objects;
6import java.util.Optional;
7import java.util.UUID;
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.ConfirmationToken;
17import parkup.configs.token.ConfirmationTokenService;
18import parkup.entities.Administrator;
19import parkup.repositories.AdministratorRepository;
20
21@Service
22public class AdministratorService implements UserDetailsService {
23 private final AdministratorRepository administratorRepository;
24 private final BCryptPasswordEncoder bCryptPasswordEncoder;
25 private final ConfirmationTokenService confirmationTokenService;
26 private EmailValidator emailValidator;
27
28 @Autowired
29 public AdministratorService(AdministratorRepository administratorRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
30 this.administratorRepository = administratorRepository;
31 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
32 this.confirmationTokenService = confirmationTokenService;
33 }
34
35 public List<Administrator> getAllAdministrators() {
36 return this.administratorRepository.findAll();
37 }
38
39 public Administrator findById(int administratorId) {
40 Optional<Administrator> administrator = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
41 return administrator.orElse(null);
42 }
43
44 public void addAdministrator(Administrator administrator) {
45 Optional<Administrator> administratorOpt = this.administratorRepository.findAdministratorByEmail(administrator.getEmail());
46 if (administratorOpt.isPresent()) {
47 throw new IllegalStateException("Email already taken, try adding an administrator with a different valid email address");
48 } else {
49 System.out.println(administrator);
50 this.administratorRepository.save(administrator);
51 }
52 }
53
54 @Transactional
55 public void updateAdministrator(int administratorId, String firstName, String lastName, String mobile, String email) {
56 Optional<Administrator> administratorOpt = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
57 if (administratorOpt.isPresent()) {
58 Administrator administratorNov = this.administratorRepository.findByAdministratorId(administratorId);
59 if (email != null && email.length() > 1 && email.contains("@") && !Objects.equals(administratorNov.getEmail(), email)) {
60 Optional<Administrator> userOpt1 = this.administratorRepository.findAdministratorByEmail(email);
61 if (userOpt1.isPresent()) {
62 throw new IllegalStateException("email taken");
63 }
64
65 administratorNov.setEmail(email);
66 }
67
68 if (firstName != null && firstName.length() > 1 && !Objects.equals(administratorNov.getFirstName(), firstName)) {
69 administratorNov.setFirstName(firstName);
70 }
71
72 if (lastName != null && lastName.length() > 1 && !Objects.equals(administratorNov.getLastName(), lastName)) {
73 administratorNov.setLastName(lastName);
74 }
75
76 if (mobile != null && mobile.length() > 0 && !Objects.equals(administratorNov.getMobile(), mobile)) {
77 administratorNov.setMobile(mobile);
78 }
79 }
80 }
81
82 public void deleteAdministrator(int administratorId) {
83 Optional<Administrator> administratorOpt = Optional.ofNullable(this.administratorRepository.findByAdministratorId(administratorId));
84 if (administratorOpt.isPresent()) {
85 this.administratorRepository.deleteByAdministratorId(administratorId);
86 } else {
87 throw new IllegalStateException("Administrator doesn't exist, therefore can't be deleted");
88 }
89 }
90
91 @Override
92 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
93 return administratorRepository.findAdministratorByEmail(email)
94 .orElseThrow(() ->
95 new UsernameNotFoundException("Email not found"));
96
97 }
98
99 //public String register(RegistrationRequest request) {
100 // boolean isValidEmail = emailValidator.test(request.getEmail());
101 // if (!isValidEmail){
102 // throw new IllegalStateException("Email not valid");
103 // }
104 // return "it works";
105 //}
106
107 public String signUpAdministrator(Administrator administrator){
108 boolean administratorExists = administratorRepository
109 .findAdministratorByEmail(administrator.getEmail())
110 .isPresent();
111 if(administratorExists){
112 // TODO check if attributes are the same and
113 // TODO if email not confirmed send confirmation email
114
115 throw new IllegalStateException("Email already taken");
116 }
117
118 String encodedPassword = bCryptPasswordEncoder
119 .encode(administrator.getPassword());
120
121 administrator.setPassword(encodedPassword);
122
123 administratorRepository.save(administrator);
124
125 // TODO: Send confirmation token
126
127 String token = UUID.randomUUID().toString();
128 ConfirmationToken confirmationToken = new ConfirmationToken(
129 token,
130 LocalDateTime.now(),
131 LocalDateTime.now().plusMinutes(15),
132 administrator
133 );
134
135 confirmationTokenService.saveConfirmationToken(confirmationToken);
136
137 // TODO: SEND EMAIL
138
139 return token;
140 }
141
142 public int enableAdministrator(String email) {
143 return administratorRepository.enableAdministrator(email);
144 }
145}
Note: See TracBrowser for help on using the repository browser.