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
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
[0e407de]57 public RegisteredUser updateRegPark(int regParkId,String password, String name, String surname, String mobile, String email) {
[9dd526f]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 }
[52df867]69 if(!password.isEmpty()){
70 regParkNov.setPassword(bCryptPasswordEncoder.encode(password));
71 }
[74fb0dc]72 if (name != null && name.length() > 1 && !Objects.equals(regParkNov.getFirstName(), name)) {
73 regParkNov.setFirstName(name);
[ce6ad22]74 }
75
[74fb0dc]76 if (surname != null && surname.length() > 1 && !Objects.equals(regParkNov.getLastName(), surname)) {
77 regParkNov.setLastName(surname);
[ce6ad22]78 }
79
80 if (mobile != null && mobile.length() > 0 && !Objects.equals(regParkNov.getMobile(), mobile)) {
81 regParkNov.setMobile(mobile);
82 }
[97fbc67]83 return regParkNov;
84 }else{
85 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be updated");
[ce6ad22]86 }
87 }
88
[97fbc67]89 @Transactional
90 @Modifying
[9dd526f]91 public Optional<RegisteredUser> deleteRegPark(int regParkId) {
92 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
[ce6ad22]93 if (regPark.isPresent()) {
[97fbc67]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
[9dd526f]96 this.confirmationTokenService.deleteByRegisteredUser_RegParkId(regParkId);
97 this.registeredUserRepository.deleteByRegParkId(regParkId);
[ce6ad22]98 } else {
99 throw new IllegalStateException("RegistriranParkirac doesn't exist, therefore can't be deleted");
100 }
[97fbc67]101 return regPark;
[ce6ad22]102 }
103
[9dd526f]104 public RegisteredUser findById(int regParkId) {
105 Optional<RegisteredUser> regPark = Optional.ofNullable(this.registeredUserRepository.findByRegParkId(regParkId));
[ce6ad22]106 return regPark.orElse(null);
107 }
[97fbc67]108
109 @Override
110 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
[9dd526f]111 return registeredUserRepository.findRegisteredUserByEmail(email)
[97fbc67]112 .orElseThrow(() ->
113 new UsernameNotFoundException("Email not found"));
114
115 }
116
[9dd526f]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())
[97fbc67]124 .isPresent();
125 if(registriranParkiracExists){
126 throw new IllegalStateException("Email already taken");
127 }
128
129 String encodedPassword = bCryptPasswordEncoder
[9dd526f]130 .encode(registeredUser.getPassword());
[97fbc67]131
[9dd526f]132 registeredUser.setPassword(encodedPassword);
[97fbc67]133
[9dd526f]134 registeredUserRepository.save(registeredUser);
[97fbc67]135
136 String token = UUID.randomUUID().toString();
137 ConfirmationTokenRP confirmationTokenRP = new ConfirmationTokenRP(
138 token,
139 LocalDateTime.now(),
140 LocalDateTime.now().plusMinutes(15),
[9dd526f]141 registeredUser
[97fbc67]142 );
143
144 confirmationTokenService.saveConfirmationTokenRP(confirmationTokenRP);
145
146 return token;
147 }
148
149 public int enableRegistriranParkirac(String email) {
[9dd526f]150 return registeredUserRepository.enableRegisteredUser(email);
[97fbc67]151 }
[0e407de]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 }
[ce6ad22]165}
Note: See TracBrowser for help on using the repository browser.