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

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

backend refactoring

  • Property mode set to 100644
File size: 6.7 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.data.jpa.repository.Modifying;
11import org.springframework.security.core.userdetails.UserDetails;
12import org.springframework.security.core.userdetails.UserDetailsService;
13import org.springframework.security.core.userdetails.UsernameNotFoundException;
14import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
15import org.springframework.stereotype.Service;
16import parkup.configs.email.EmailValidator;
17import parkup.configs.token.ConfirmationTokenRP;
18import parkup.configs.token.ConfirmationTokenService;
19import parkup.data.Plate;
20import parkup.entities.RegisteredUser;
21import parkup.repositories.RegisteredUserRepository;
22
23@Service
24public class RegisteredUserService implements UserDetailsService {
25 private final RegisteredUserRepository registeredUserRepository;
26 private final BCryptPasswordEncoder bCryptPasswordEncoder;
27 private final ConfirmationTokenService confirmationTokenService;
28 private final EmailValidator emailValidator;
29 @Autowired
30 public RegisteredUserService(RegisteredUserRepository registeredUserRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService, EmailValidator emailValidator) {
31 this.registeredUserRepository = registeredUserRepository;
32 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
33 this.confirmationTokenService = confirmationTokenService;
34 this.emailValidator = emailValidator;
35 }
36
37 public List<RegisteredUser> getRegPark() {
38 return this.registeredUserRepository.findAll();
39 }
40
41 public Optional<RegisteredUser> addRegPark(RegisteredUser regPark) {
42 Optional<RegisteredUser> regParkOpt = this.registeredUserRepository.findRegisteredUserByEmail(regPark.getEmail());
43 if (regParkOpt.isPresent()) {
44 throw new IllegalStateException("Email already taken, try adding a registriranParkirac with a different valid email address");
45 } else {
46 if (regPark.getEmail() != null && regPark.getEmail().length() > 1 && regPark.getEmail().contains("@")) {
47 this.registeredUserRepository.save(regPark);
48 }
49 else {
50 throw new IllegalStateException("email not valid");
51 }
52 }
53 return regParkOpt;
54 }
55
56 @Transactional
57 public RegisteredUser updateRegPark(int regParkId, String name, String surname, String mobile, String email, List<Plate> regTablicki) {
58 Optional<RegisteredUser> regParkOpt = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
59 if (regParkOpt.isPresent()) {
60 RegisteredUser regParkNov = this.registeredUserRepository.findByRegParkId(regParkId);
61 if (email != null && email.length() > 1 && email.contains("@") && !Objects.equals(regParkNov.getEmail(), email)) {
62 Optional<RegisteredUser> userOpt1 = this.registeredUserRepository.findRegisteredUserByEmail(email);
63 if (userOpt1.isPresent()) {
64 throw new IllegalStateException("email taken");
65 }
66
67 regParkNov.setEmail(email);
68 }
69
70 if (name != null && name.length() > 1 && !Objects.equals(regParkNov.getName(), name)) {
71 regParkNov.setName(name);
72 }
73
74 if (surname != null && surname.length() > 1 && !Objects.equals(regParkNov.getSurname(), surname)) {
75 regParkNov.setSurname(surname);
76 }
77
78 if (mobile != null && mobile.length() > 0 && !Objects.equals(regParkNov.getMobile(), mobile)) {
79 regParkNov.setMobile(mobile);
80 }
81 regParkNov.setPlates(regTablicki);
82 return regParkNov;
83 }else{
84 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be updated");
85 }
86 }
87
88 @Transactional
89 @Modifying
90 public Optional<RegisteredUser> deleteRegPark(int regParkId) {
91 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
92 if (regPark.isPresent()) {
93 //TODO da povikamo metod od ConfirmationTokenService za brisenje na ConfirmationTokenRP *DONE
94 //TODO da se izbrisat tablicki i da ne se dupliraat istite tablicki pri update ili add na nov registriranParkirac
95 this.confirmationTokenService.deleteByRegisteredUser_RegParkId(regParkId);
96 this.registeredUserRepository.deleteByRegParkId(regParkId);
97 } else {
98 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be deleted");
99 }
100 return regPark;
101 }
102
103 public RegisteredUser findById(int regParkId) {
104 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
105 return regPark.orElse(null);
106 }
107
108 @Override
109 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
110 return registeredUserRepository.findRegisteredUserByEmail(email)
111 .orElseThrow(() ->
112 new UsernameNotFoundException("Email not found"));
113
114 }
115
116 public String signUpRegistriranParkirac(RegisteredUser registeredUser){
117 if (registeredUser.getEmail() == null || registeredUser.getEmail().isEmpty())
118 throw new IllegalArgumentException("Empty email");
119 if (!emailValidator.test(registeredUser.getEmail()))
120 throw new IllegalArgumentException("Invalid email");
121 boolean registriranParkiracExists = registeredUserRepository
122 .findRegisteredUserByEmail(registeredUser.getEmail())
123 .isPresent();
124 if(registriranParkiracExists){
125 throw new IllegalStateException("Email already taken");
126 }
127
128 String encodedPassword = bCryptPasswordEncoder
129 .encode(registeredUser.getPassword());
130
131 registeredUser.setPassword(encodedPassword);
132
133 registeredUserRepository.save(registeredUser);
134
135 String token = UUID.randomUUID().toString();
136 ConfirmationTokenRP confirmationTokenRP = new ConfirmationTokenRP(
137 token,
138 LocalDateTime.now(),
139 LocalDateTime.now().plusMinutes(15),
140 registeredUser
141 );
142
143 confirmationTokenService.saveConfirmationTokenRP(confirmationTokenRP);
144
145 return token;
146 }
147
148 public int enableRegistriranParkirac(String email) {
149 return registeredUserRepository.enableRegisteredUser(email);
150 }
151}
Note: See TracBrowser for help on using the repository browser.