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
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;
[ce6ad22]8import javax.transaction.Transactional;
9import org.springframework.beans.factory.annotation.Autowired;
[97fbc67]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;
[ce6ad22]15import org.springframework.stereotype.Service;
[97fbc67]16import parkup.configs.email.EmailValidator;
17import parkup.configs.token.ConfirmationTokenRP;
18import parkup.configs.token.ConfirmationTokenService;
[9dd526f]19import parkup.data.Plate;
20import parkup.entities.RegisteredUser;
21import parkup.repositories.RegisteredUserRepository;
[ce6ad22]22
23@Service
[9dd526f]24public class RegisteredUserService implements UserDetailsService {
25 private final RegisteredUserRepository registeredUserRepository;
[97fbc67]26 private final BCryptPasswordEncoder bCryptPasswordEncoder;
27 private final ConfirmationTokenService confirmationTokenService;
[9dd526f]28 private final EmailValidator emailValidator;
[ce6ad22]29 @Autowired
[9dd526f]30 public RegisteredUserService(RegisteredUserRepository registeredUserRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService, EmailValidator emailValidator) {
31 this.registeredUserRepository = registeredUserRepository;
[97fbc67]32 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
33 this.confirmationTokenService = confirmationTokenService;
[9dd526f]34 this.emailValidator = emailValidator;
[ce6ad22]35 }
36
[9dd526f]37 public List<RegisteredUser> getRegPark() {
38 return this.registeredUserRepository.findAll();
[ce6ad22]39 }
40
[9dd526f]41 public Optional<RegisteredUser> addRegPark(RegisteredUser regPark) {
42 Optional<RegisteredUser> regParkOpt = this.registeredUserRepository.findRegisteredUserByEmail(regPark.getEmail());
[ce6ad22]43 if (regParkOpt.isPresent()) {
44 throw new IllegalStateException("Email already taken, try adding a registriranParkirac with a different valid email address");
45 } else {
[97fbc67]46 if (regPark.getEmail() != null && regPark.getEmail().length() > 1 && regPark.getEmail().contains("@")) {
[9dd526f]47 this.registeredUserRepository.save(regPark);
[97fbc67]48 }
49 else {
50 throw new IllegalStateException("email not valid");
51 }
[ce6ad22]52 }
[97fbc67]53 return regParkOpt;
[ce6ad22]54 }
55
56 @Transactional
[9dd526f]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));
[ce6ad22]59 if (regParkOpt.isPresent()) {
[9dd526f]60 RegisteredUser regParkNov = this.registeredUserRepository.findByRegParkId(regParkId);
[ce6ad22]61 if (email != null && email.length() > 1 && email.contains("@") && !Objects.equals(regParkNov.getEmail(), email)) {
[9dd526f]62 Optional<RegisteredUser> userOpt1 = this.registeredUserRepository.findRegisteredUserByEmail(email);
[ce6ad22]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 }
[9dd526f]81 regParkNov.setPlates(regTablicki);
[97fbc67]82 return regParkNov;
83 }else{
84 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be updated");
[ce6ad22]85 }
86 }
87
[97fbc67]88 @Transactional
89 @Modifying
[9dd526f]90 public Optional<RegisteredUser> deleteRegPark(int regParkId) {
91 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
[ce6ad22]92 if (regPark.isPresent()) {
[97fbc67]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
[9dd526f]95 this.confirmationTokenService.deleteByRegisteredUser_RegParkId(regParkId);
96 this.registeredUserRepository.deleteByRegParkId(regParkId);
[ce6ad22]97 } else {
98 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be deleted");
99 }
[97fbc67]100 return regPark;
[ce6ad22]101 }
102
[9dd526f]103 public RegisteredUser findById(int regParkId) {
104 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
[ce6ad22]105 return regPark.orElse(null);
106 }
[97fbc67]107
108 @Override
109 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
[9dd526f]110 return registeredUserRepository.findRegisteredUserByEmail(email)
[97fbc67]111 .orElseThrow(() ->
112 new UsernameNotFoundException("Email not found"));
113
114 }
115
[9dd526f]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())
[97fbc67]123 .isPresent();
124 if(registriranParkiracExists){
125 throw new IllegalStateException("Email already taken");
126 }
127
128 String encodedPassword = bCryptPasswordEncoder
[9dd526f]129 .encode(registeredUser.getPassword());
[97fbc67]130
[9dd526f]131 registeredUser.setPassword(encodedPassword);
[97fbc67]132
[9dd526f]133 registeredUserRepository.save(registeredUser);
[97fbc67]134
135 String token = UUID.randomUUID().toString();
136 ConfirmationTokenRP confirmationTokenRP = new ConfirmationTokenRP(
137 token,
138 LocalDateTime.now(),
139 LocalDateTime.now().plusMinutes(15),
[9dd526f]140 registeredUser
[97fbc67]141 );
142
143 confirmationTokenService.saveConfirmationTokenRP(confirmationTokenRP);
144
145 return token;
146 }
147
148 public int enableRegistriranParkirac(String email) {
[9dd526f]149 return registeredUserRepository.enableRegisteredUser(email);
[97fbc67]150 }
[ce6ad22]151}
Note: See TracBrowser for help on using the repository browser.