source: sources/app/src/main/java/parkup/services/RegisteredUserService.java@ 3b17c69

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

fix

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