source: sources/app/src/main/java/parkup/services/RegisteredUserService.java@ 0e407de

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

plates fix

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