source: sources/app/src/main/java/parkup/services/VrabotenService.java@ 9ff45d6

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

Fixed some functionalities related to parkingSessions and parkingZones

  • Property mode set to 100644
File size: 11.1 KB
Line 
1package parkup.services;
2
3import java.time.LocalDateTime;
4import java.util.*;
5import java.util.stream.Collectors;
6import javax.transaction.Transactional;
7import org.springframework.beans.factory.annotation.Autowired;
8import org.springframework.security.core.userdetails.UserDetails;
9import org.springframework.security.core.userdetails.UserDetailsService;
10import org.springframework.security.core.userdetails.UsernameNotFoundException;
11import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
12import org.springframework.stereotype.Service;
13import parkup.configs.token.ConfirmationTokenW;
14import parkup.configs.token.ConfirmationTokenService;
15import parkup.data.enumarations.EmployeeStatus;
16import parkup.entities.ParkingZone;
17import parkup.entities.Vraboten;
18import parkup.repositories.ParkingZoneRepository;
19import parkup.repositories.VrabotenRepository;
20import parkup.data.VrabotenDemo;
21
22@Service
23public class VrabotenService implements UserDetailsService {
24 private final VrabotenRepository vrabotenRepository;
25 private final ParkingZoneRepository parkingZoneRepository;
26 private final BCryptPasswordEncoder bCryptPasswordEncoder;
27 private final ConfirmationTokenService confirmationTokenService;
28
29 @Autowired
30 public VrabotenService(VrabotenRepository vrabotenRepository, ParkingZoneRepository parkingZoneRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
31 this.vrabotenRepository = vrabotenRepository;
32 this.parkingZoneRepository = parkingZoneRepository;
33 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
34 this.confirmationTokenService = confirmationTokenService;
35 }
36
37 public List<Vraboten> getVraboteni() {
38 return this.vrabotenRepository.findAll();
39 }
40
41 public Vraboten findById(int vrabotenId) {
42 Optional<Vraboten> vraboten = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
43 return vraboten.orElse(null);
44 }
45
46 public List<VrabotenDemo> getAllVraboteniDemos() {
47 List<Vraboten> vraboteni = this.vrabotenRepository.findAll();
48 List<VrabotenDemo> vrabotenDemos = new ArrayList<>();
49 for (Vraboten v : vraboteni){
50 VrabotenDemo vd = new VrabotenDemo(v.getVrabotenId(),v.getFirstName(), v.getLastName(), v.getEmail());
51 vrabotenDemos.add(vd);
52 }
53 return vrabotenDemos;
54 }
55
56 public Optional<Vraboten> addVraboten(String password,String confirmPass,boolean locked, String firstName, String lastName, String mobile, String email, EmployeeStatus status,List<String> parkingZones) {
57 Optional<Vraboten> vrabotenOpt = this.vrabotenRepository.findVrabotenByEmail(email);
58 if (vrabotenOpt.isPresent()){
59 throw new IllegalArgumentException("User with that mail already exists");
60 }
61 Vraboten vrabotenToAdd=new Vraboten();
62 if (email != null && email.length() > 1 && email.contains("@") ) {
63 vrabotenToAdd.setEmail(email);
64 } else {
65 throw new IllegalStateException("email not valid");
66 }
67 if(password.equals(confirmPass)){
68 vrabotenToAdd.setPassword(bCryptPasswordEncoder.encode(password));
69 }
70 vrabotenToAdd.setLocked(locked);
71
72 if (firstName != null && firstName.length() > 1) {
73 vrabotenToAdd.setFirstName(firstName);
74 }
75
76 if (lastName != null && lastName.length() > 1 ) {
77 vrabotenToAdd.setLastName(lastName);
78 }
79
80 if (mobile != null && mobile.length() > 0 ) {
81 vrabotenToAdd.setMobile(mobile);
82 }
83
84 vrabotenToAdd.setStatus(status);
85
86 if(parkingZones!=null){
87 List<ParkingZone> parkingZonesAvailable =parkingZoneRepository.findAll();
88 List<ParkingZone> zonesToAdd= new ArrayList<>();
89 vrabotenToAdd.setParkingZones(null);
90 for(String pzName:parkingZones){
91 for(ParkingZone pz :parkingZonesAvailable){
92 if(pzName.equals(pz.getPzName())) {
93 zonesToAdd.add(pz);
94// pz.getOdgovorniLica().add(vrabotenRepository.findByVrabotenId(vrabotenId));
95 }
96 }
97 }
98 vrabotenToAdd.setParkingZones(zonesToAdd);
99 }
100 String token = UUID.randomUUID().toString();
101 ConfirmationTokenW confirmationTokenW = new ConfirmationTokenW(
102 token,
103 LocalDateTime.now(),
104 LocalDateTime.now().plusMinutes(15),
105 vrabotenToAdd
106 );
107
108 confirmationTokenService.saveConfirmationTokenW(confirmationTokenW);
109
110 return Optional.of(vrabotenToAdd);
111// Optional<Vraboten> vrabotenOpt = this.vrabotenRepository.findVrabotenByEmail(vraboten.getEmail());
112// if (vrabotenOpt.isPresent()) {
113// throw new IllegalStateException("Email already taken, try adding a vraboten with a different valid email address");
114// } else {
115// if (vraboten.getEmail() != null && vraboten.getEmail().length() > 1 && vraboten.getEmail().contains("@")) {
116// //System.out.println(vraboten);
117// this.vrabotenRepository.save(vraboten);
118// }
119// else{
120// throw new IllegalStateException("email not valid");
121// }
122// }
123// return vrabotenOpt;
124 }
125
126 @Transactional
127 public Vraboten updateVraboten(int vrabotenId,String password,String confirmPass,boolean locked, String firstName, String lastName, String mobile, String email, EmployeeStatus status,List<String> parkingZones) {
128 Optional<Vraboten> vrabotenOpt = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
129 if (vrabotenOpt.isPresent()) {
130
131 if (email != null && email.length() > 1 && email.contains("@") ) {
132 List<String> emails = vrabotenRepository.findAll().stream().map(Vraboten::getEmail).collect(Collectors.toList());
133 for(String mailToCheck :emails)
134 if (email.equals(mailToCheck)&&vrabotenOpt.get().getVrabotenId()!=vrabotenId) {
135 throw new IllegalStateException("email taken");
136 }
137 vrabotenOpt.get().setEmail(email);
138 } else {
139 throw new IllegalStateException("email not valid");
140 }
141 if(password.equals(confirmPass)){
142 vrabotenOpt.get().setPassword(bCryptPasswordEncoder.encode(password));
143 }
144 vrabotenOpt.get().setLocked(locked);
145
146 if (firstName != null && firstName.length() > 1 && !Objects.equals(vrabotenOpt.get().getFirstName(), firstName)) {
147 vrabotenOpt.get().setFirstName(firstName);
148 }
149
150 if (lastName != null && lastName.length() > 1 && !Objects.equals(vrabotenOpt.get().getLastName(), lastName)) {
151 vrabotenOpt.get().setLastName(lastName);
152 }
153
154 if (mobile != null && mobile.length() > 0 && !Objects.equals(vrabotenOpt.get().getMobile(), mobile)) {
155 vrabotenOpt.get().setMobile(mobile);
156 }
157
158// if (status != null && status.toString().length() > 0) {
159// if(Arrays.stream(EmployeeStatus.values()).toList().contains(EmployeeStatus.valueOf(status))){
160 vrabotenOpt.get().setStatus(status);
161// }else{
162// throw new IllegalStateException("Please enter one of the following statuses: 'raboti', 'ne raboti', 'na odmor', 'na boleduvanje'");
163// }
164// }
165 if(parkingZones!=null){
166 List<ParkingZone> parkingZonesAvailable =parkingZoneRepository.findAll();
167 List<ParkingZone> zonesToAdd= new ArrayList<>();
168 vrabotenOpt.get().setParkingZones(null);
169 for(String pzName:parkingZones){
170 for(ParkingZone pz :parkingZonesAvailable){
171 if(pzName.equals(pz.getPzName())) {
172 zonesToAdd.add(pz);
173// pz.getOdgovorniLica().add(vrabotenRepository.findByVrabotenId(vrabotenId));
174 }
175 }
176 }
177 vrabotenOpt.get().setParkingZones(zonesToAdd);
178 }
179 return vrabotenOpt.get();
180 }
181 else{
182 throw new IllegalStateException("Vraboten doesn't exist, therefore can't be updated");
183 }
184 }//za menjanje password da se implementira
185
186 @Transactional
187 public Optional<Vraboten> deleteVraboten(int vrabotenId) {
188 Optional<Vraboten> vrabotenOpt = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
189 if (vrabotenOpt.isPresent()) {
190 this.confirmationTokenService.deleteByVraboten_VrabotenId(vrabotenId);
191 this.vrabotenRepository.deleteByVrabotenId(vrabotenId);
192 } else {
193 throw new IllegalStateException("Vraboten doesn't exist, therefore can't be deleted");
194 }
195 return vrabotenOpt;
196 }
197
198 @Transactional
199 public void lockVrabotenAcc(int vrabotenId) {
200 Vraboten vrabotenOpt = this.vrabotenRepository.findByVrabotenId(vrabotenId);
201 if (vrabotenOpt!=null) {
202 vrabotenOpt.lockVraboten();
203 } else {
204 throw new IllegalStateException("Vraboten doesn't exist, therefore his account can't be locked/unlocked");
205 }
206 }
207
208 @Override
209 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
210 return vrabotenRepository.findVrabotenByEmail(email)
211 .orElseThrow(() ->
212 new UsernameNotFoundException("Email not found"));
213 }
214 public String signUpVraboten(Vraboten vraboten){
215 boolean vrabotenExists = vrabotenRepository
216 .findVrabotenByEmail(vraboten.getEmail())
217 .isPresent();
218 if(vrabotenExists){
219 // TODO check if attributes are the same and
220 // TODO if email not confirmed send confirmation email
221
222 throw new IllegalStateException("Email already taken");
223 }
224
225 String encodedPassword = bCryptPasswordEncoder
226 .encode(vraboten.getPassword());
227
228 vraboten.setPassword(encodedPassword);
229
230 vrabotenRepository.save(vraboten);
231
232 // TODO: Send confirmation token
233
234 String token = UUID.randomUUID().toString();
235 ConfirmationTokenW confirmationTokenW = new ConfirmationTokenW(
236 token,
237 LocalDateTime.now(),
238 LocalDateTime.now().plusMinutes(15),
239 vraboten
240 );
241
242 confirmationTokenService.saveConfirmationTokenW(confirmationTokenW);
243
244 // TODO: SEND EMAIL
245
246 return token;
247 }
248
249 public int enableVraboten(String email) {
250 return vrabotenRepository.enableVraboten(email);
251 }
252
253// @Transactional
254// public void setVrabotenStatus(int vrabotenId,String vrabotenStatus) {
255// Vraboten vraboten = vrabotenRepository.findByVrabotenId(vrabotenId);
256// if(vraboten!=null && value){
257// vraboten.setStatus(valuee);
258// }
259// else {
260// throw new IllegalStateException(String.format("Vraboten with id %d does not exist.",vrabotenId));
261// }
262// }
263}
Note: See TracBrowser for help on using the repository browser.