source: sources/app/src/main/java/parkup/services/RegisteredUserService.java@ 8f153ca

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

fix

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