source: sources/app/src/main/java/parkup/services/RegisteredUserService.java@ 2b65789

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

test

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