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
RevLine 
[ce6ad22]1package parkup.services;
2
[97fbc67]3import java.time.LocalDateTime;
4import java.util.*;
[9ff45d6]5import java.util.stream.Collectors;
[ce6ad22]6import javax.transaction.Transactional;
7import org.springframework.beans.factory.annotation.Autowired;
[97fbc67]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;
[ce6ad22]12import org.springframework.stereotype.Service;
[97fbc67]13import parkup.configs.token.ConfirmationTokenW;
14import parkup.configs.token.ConfirmationTokenService;
[9ff45d6]15import parkup.data.enumarations.EmployeeStatus;
16import parkup.entities.ParkingZone;
[ce6ad22]17import parkup.entities.Vraboten;
[9ff45d6]18import parkup.repositories.ParkingZoneRepository;
[ce6ad22]19import parkup.repositories.VrabotenRepository;
[97fbc67]20import parkup.data.VrabotenDemo;
[ce6ad22]21
22@Service
[97fbc67]23public class VrabotenService implements UserDetailsService {
[ce6ad22]24 private final VrabotenRepository vrabotenRepository;
[9ff45d6]25 private final ParkingZoneRepository parkingZoneRepository;
[97fbc67]26 private final BCryptPasswordEncoder bCryptPasswordEncoder;
27 private final ConfirmationTokenService confirmationTokenService;
[ce6ad22]28
29 @Autowired
[9ff45d6]30 public VrabotenService(VrabotenRepository vrabotenRepository, ParkingZoneRepository parkingZoneRepository, BCryptPasswordEncoder bCryptPasswordEncoder, ConfirmationTokenService confirmationTokenService) {
[ce6ad22]31 this.vrabotenRepository = vrabotenRepository;
[9ff45d6]32 this.parkingZoneRepository = parkingZoneRepository;
[97fbc67]33 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
34 this.confirmationTokenService = confirmationTokenService;
[ce6ad22]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
[97fbc67]46 public List<VrabotenDemo> getAllVraboteniDemos() {
47 List<Vraboten> vraboteni = this.vrabotenRepository.findAll();
48 List<VrabotenDemo> vrabotenDemos = new ArrayList<>();
49 for (Vraboten v : vraboteni){
[9ff45d6]50 VrabotenDemo vd = new VrabotenDemo(v.getVrabotenId(),v.getFirstName(), v.getLastName(), v.getEmail());
[97fbc67]51 vrabotenDemos.add(vd);
52 }
53 return vrabotenDemos;
54 }
55
[9ff45d6]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);
[ce6ad22]64 } else {
[9ff45d6]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 }
[97fbc67]97 }
[9ff45d6]98 vrabotenToAdd.setParkingZones(zonesToAdd);
[ce6ad22]99 }
[9ff45d6]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;
[ce6ad22]124 }
125
126 @Transactional
[9ff45d6]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) {
[ce6ad22]128 Optional<Vraboten> vrabotenOpt = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
129 if (vrabotenOpt.isPresent()) {
[9ff45d6]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) {
[ce6ad22]135 throw new IllegalStateException("email taken");
136 }
[9ff45d6]137 vrabotenOpt.get().setEmail(email);
[97fbc67]138 } else {
139 throw new IllegalStateException("email not valid");
[ce6ad22]140 }
[9ff45d6]141 if(password.equals(confirmPass)){
142 vrabotenOpt.get().setPassword(bCryptPasswordEncoder.encode(password));
143 }
144 vrabotenOpt.get().setLocked(locked);
[ce6ad22]145
[9ff45d6]146 if (firstName != null && firstName.length() > 1 && !Objects.equals(vrabotenOpt.get().getFirstName(), firstName)) {
147 vrabotenOpt.get().setFirstName(firstName);
[ce6ad22]148 }
149
[9ff45d6]150 if (lastName != null && lastName.length() > 1 && !Objects.equals(vrabotenOpt.get().getLastName(), lastName)) {
151 vrabotenOpt.get().setLastName(lastName);
[ce6ad22]152 }
153
[9ff45d6]154 if (mobile != null && mobile.length() > 0 && !Objects.equals(vrabotenOpt.get().getMobile(), mobile)) {
155 vrabotenOpt.get().setMobile(mobile);
[ce6ad22]156 }
[97fbc67]157
[9ff45d6]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 }
[97fbc67]176 }
[9ff45d6]177 vrabotenOpt.get().setParkingZones(zonesToAdd);
[97fbc67]178 }
[9ff45d6]179 return vrabotenOpt.get();
[ce6ad22]180 }
[97fbc67]181 else{
182 throw new IllegalStateException("Vraboten doesn't exist, therefore can't be updated");
183 }
184 }//za menjanje password da se implementira
[ce6ad22]185
[97fbc67]186 @Transactional
187 public Optional<Vraboten> deleteVraboten(int vrabotenId) {
[ce6ad22]188 Optional<Vraboten> vrabotenOpt = Optional.ofNullable(this.vrabotenRepository.findByVrabotenId(vrabotenId));
189 if (vrabotenOpt.isPresent()) {
[97fbc67]190 this.confirmationTokenService.deleteByVraboten_VrabotenId(vrabotenId);
[ce6ad22]191 this.vrabotenRepository.deleteByVrabotenId(vrabotenId);
192 } else {
193 throw new IllegalStateException("Vraboten doesn't exist, therefore can't be deleted");
194 }
[97fbc67]195 return vrabotenOpt;
[ce6ad22]196 }
[97fbc67]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 }
[9ff45d6]206 }
[97fbc67]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
[9ff45d6]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// }
[ce6ad22]263}
Note: See TracBrowser for help on using the repository browser.