source: sources/app/src/main/java/parkup/services/RegisteredUserService.java@ 52df867

Last change on this file since 52df867 was 52df867, checked in by andrejTavchioski <andrej.tavchioski@…>, 2 years ago

added new method to check users

  • Property mode set to 100644
File size: 6.8 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 password, 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 if(!password.isEmpty()){
70 regParkNov.setPassword(bCryptPasswordEncoder.encode(password));
71 }
72 if (name != null && name.length() > 1 && !Objects.equals(regParkNov.getFirstName(), name)) {
73 regParkNov.setFirstName(name);
74 }
75
76 if (surname != null && surname.length() > 1 && !Objects.equals(regParkNov.getLastName(), surname)) {
77 regParkNov.setLastName(surname);
78 }
79
80 if (mobile != null && mobile.length() > 0 && !Objects.equals(regParkNov.getMobile(), mobile)) {
81 regParkNov.setMobile(mobile);
82 }
83 regParkNov.setPlates(regTablicki);
84 return regParkNov;
85 }else{
86 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be updated");
87 }
88 }
89
90 @Transactional
91 @Modifying
92 public Optional<RegisteredUser> deleteRegPark(int regParkId) {
93 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
94 if (regPark.isPresent()) {
95 //TODO da povikamo metod od ConfirmationTokenService za brisenje na ConfirmationTokenRP *DONE
96 //TODO da se izbrisat tablicki i da ne se dupliraat istite tablicki pri update ili add na nov registriranParkirac
97 this.confirmationTokenService.deleteByRegisteredUser_RegParkId(regParkId);
98 this.registeredUserRepository.deleteByRegParkId(regParkId);
99 } else {
100 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be deleted");
101 }
102 return regPark;
103 }
104
105 public RegisteredUser findById(int regParkId) {
106 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
107 return regPark.orElse(null);
108 }
109
110 @Override
111 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
112 return registeredUserRepository.findRegisteredUserByEmail(email)
113 .orElseThrow(() ->
114 new UsernameNotFoundException("Email not found"));
115
116 }
117
118 public String signUpRegistriranParkirac(RegisteredUser registeredUser){
119 if (registeredUser.getEmail() == null || registeredUser.getEmail().isEmpty())
120 throw new IllegalArgumentException("Empty email");
121 if (!emailValidator.test(registeredUser.getEmail()))
122 throw new IllegalArgumentException("Invalid email");
123 boolean registriranParkiracExists = registeredUserRepository
124 .findRegisteredUserByEmail(registeredUser.getEmail())
125 .isPresent();
126 if(registriranParkiracExists){
127 throw new IllegalStateException("Email already taken");
128 }
129
130 String encodedPassword = bCryptPasswordEncoder
131 .encode(registeredUser.getPassword());
132
133 registeredUser.setPassword(encodedPassword);
134
135 registeredUserRepository.save(registeredUser);
136
137 String token = UUID.randomUUID().toString();
138 ConfirmationTokenRP confirmationTokenRP = new ConfirmationTokenRP(
139 token,
140 LocalDateTime.now(),
141 LocalDateTime.now().plusMinutes(15),
142 registeredUser
143 );
144
145 confirmationTokenService.saveConfirmationTokenRP(confirmationTokenRP);
146
147 return token;
148 }
149
150 public int enableRegistriranParkirac(String email) {
151 return registeredUserRepository.enableRegisteredUser(email);
152 }
153}
Note: See TracBrowser for help on using the repository browser.