source: sources/app/src/main/java/parkup/services/WorkerService.java@ df4089c

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

updateParkingZone fixes

  • Property mode set to 100644
File size: 8.7 KB
Line 
1package parkup.services;
2
3import java.util.*;
4import java.util.stream.Collectors;
5import javax.transaction.Transactional;
6import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.security.core.userdetails.UserDetails;
8import org.springframework.security.core.userdetails.UserDetailsService;
9import org.springframework.security.core.userdetails.UsernameNotFoundException;
10import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
11import org.springframework.stereotype.Service;
12import parkup.data.WorkerDemoParkingZones;
13import parkup.data.enumarations.EmployeeStatus;
14import parkup.entities.ParkingZone;
15import parkup.entities.Worker;
16import parkup.repositories.ParkingZoneRepository;
17import parkup.repositories.WorkerRepository;
18import parkup.data.WorkerDemo;
19
20@Service
21public class WorkerService implements UserDetailsService {
22 private final WorkerRepository workerRepository;
23 private final ParkingZoneRepository parkingZoneRepository;
24 private final BCryptPasswordEncoder bCryptPasswordEncoder;
25
26 @Autowired
27 public WorkerService(WorkerRepository workerRepository, ParkingZoneRepository parkingZoneRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
28 this.workerRepository = workerRepository;
29 this.parkingZoneRepository = parkingZoneRepository;
30 this.bCryptPasswordEncoder = bCryptPasswordEncoder;
31 }
32
33 public List<WorkerDemo> getWorkers() {
34 return this.workerRepository.findAll().stream().map(WorkerDemo::new).collect(Collectors.toList());
35 }
36
37 public WorkerDemoParkingZones findById(int workerId) {
38 Worker worker = this.workerRepository.findByWorkerId(workerId);
39 WorkerDemoParkingZones workerToReturn = new WorkerDemoParkingZones(worker);
40 return workerToReturn;
41 }
42
43 public List<WorkerDemo> getAllVraboteniDemos() {
44 List<Worker> workers = this.workerRepository.findAll();
45 List<WorkerDemo> workerDemos = new ArrayList<>();
46 for (Worker w : workers){
47 WorkerDemo vd = new WorkerDemo(w);
48 workerDemos.add(vd);
49 }
50 return workerDemos;
51 }
52
53 public Optional<Worker> addWorker(String password, String confirmPass, boolean locked, String firstName, String lastName, String mobile, String email, EmployeeStatus status, List<String> parkingZones) {
54 Optional<Worker> workerOpt = this.workerRepository.findWorkerByEmail(email);
55 if (workerOpt.isPresent()){
56 throw new IllegalArgumentException("User with that mail already exists");
57 }
58 Worker workerToAdd =new Worker();
59 if (email != null && email.length() > 1 && email.contains("@") ) {
60 workerToAdd.setEmail(email);
61 } else {
62 throw new IllegalStateException("email not valid");
63 }
64 if(!password.isEmpty()&&password.equals(confirmPass)){
65 workerToAdd.setPassword(bCryptPasswordEncoder.encode(password));
66 }
67 workerToAdd.setLocked(locked);
68
69 if (firstName != null && firstName.length() > 1) {
70 workerToAdd.setFirstName(firstName);
71 }
72
73 if (lastName != null && lastName.length() > 1 ) {
74 workerToAdd.setLastName(lastName);
75 }
76
77 if (mobile != null && mobile.length() > 0 ) {
78 workerToAdd.setMobile(mobile);
79 }
80
81 workerToAdd.setStatus(status);
82
83 if(parkingZones!=null){
84 List<ParkingZone> parkingZonesAvailable =parkingZoneRepository.findAll();
85 List<ParkingZone> zonesToAdd= new ArrayList<>();
86 workerToAdd.setParkingZones(null);
87 for(String pzName:parkingZones){
88 for(ParkingZone pz :parkingZonesAvailable){
89 if(pzName.equals(pz.getPzName())) {
90 zonesToAdd.add(pz);
91// pz.getOdgovorniLica().add(vrabotenRepository.findByVrabotenId(vrabotenId));
92 }
93 }
94 }
95 workerToAdd.setParkingZones(zonesToAdd);
96 }
97 workerRepository.save(workerToAdd);
98 return Optional.of(workerToAdd);
99 }
100
101 @Transactional
102 public WorkerDemoParkingZones updateWorker(int workerId, String password, String confirmPass, boolean locked, String firstName, String lastName, String mobile, String email, EmployeeStatus status, List<String> parkingZones) {
103 Optional<Worker> workerOpt = Optional.ofNullable(this.workerRepository.findByWorkerId(workerId));
104 if (workerOpt.isPresent()) {
105
106 if (email != null && email.length() > 1 && email.contains("@") ) {
107 List<String> emails = workerRepository.findAll().stream().map(Worker::getEmail).collect(Collectors.toList());
108 for(String mailToCheck :emails)
109 if (email.equals(mailToCheck)&&workerOpt.get().getWorkerId()!=workerId) {
110 throw new IllegalStateException("email taken");
111 }
112 workerOpt.get().setEmail(email);
113 } else {
114 throw new IllegalStateException("email not valid");
115 }
116 if(!password.isEmpty()&&password.equals(confirmPass)){
117 workerOpt.get().setPassword(bCryptPasswordEncoder.encode(password));
118 }
119 workerOpt.get().setLocked(locked);
120
121 if (firstName != null && firstName.length() > 1 && !Objects.equals(workerOpt.get().getFirstName(), firstName)) {
122 workerOpt.get().setFirstName(firstName);
123 }
124
125 if (lastName != null && lastName.length() > 1 && !Objects.equals(workerOpt.get().getLastName(), lastName)) {
126 workerOpt.get().setLastName(lastName);
127 }
128
129 if (mobile != null && mobile.length() > 0 && !Objects.equals(workerOpt.get().getMobile(), mobile)) {
130 workerOpt.get().setMobile(mobile);
131 }
132
133// if (status != null && status.toString().length() > 0) {
134// if(Arrays.stream(EmployeeStatus.values()).toList().contains(EmployeeStatus.valueOf(status))){
135 workerOpt.get().setStatus(status);
136// }else{
137// throw new IllegalStateException("Please enter one of the following statuses: 'raboti', 'ne raboti', 'na odmor', 'na boleduvanje'");
138// }
139// }
140 if(parkingZones!=null){
141 List<ParkingZone> parkingZonesAvailable =parkingZoneRepository.findAll();
142 List<ParkingZone> zonesToAdd= new ArrayList<>();
143 workerOpt.get().setParkingZones(null);
144 for(String pzName:parkingZones){
145 for(ParkingZone pz :parkingZonesAvailable){
146 if(pzName.equals(pz.getPzName())) {
147 zonesToAdd.add(pz);
148// pz.getOdgovorniLica().add(vrabotenRepository.findByVrabotenId(workerId));
149 }
150 }
151 }
152 workerOpt.get().setParkingZones(zonesToAdd);
153 }
154// VrabotenDemoParkingZones zoneToReturn = new VrabotenDemoParkingZones(workerOpt.get());
155 return new WorkerDemoParkingZones(workerOpt.get());
156 }
157 else{
158 throw new IllegalStateException("Worker doesn't exist, therefore can't be updated");
159 }
160 }//za menjanje password da se implementira
161
162 @Transactional
163 public Optional<Worker> deleteWorker(int workerId) {
164 Optional<Worker> workerOpt = Optional.ofNullable(this.workerRepository.findByWorkerId(workerId));
165 if (workerOpt.isPresent()) {
166 this.workerRepository.deleteByWorkerId(workerId);
167 } else {
168 throw new IllegalStateException("Worker doesn't exist, therefore can't be deleted");
169 }
170 return workerOpt;
171 }
172
173 @Transactional
174 public void lockWorkerAcc(int workerId) {
175 Worker workerOpt = this.workerRepository.findByWorkerId(workerId);
176 if (workerOpt !=null) {
177 workerOpt.lockVraboten();
178 } else {
179 throw new IllegalStateException("Worker doesn't exist, therefore his account can't be locked/unlocked");
180 }
181 }
182
183 @Override
184 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
185 return workerRepository.findWorkerByEmail(email)
186 .orElseThrow(() ->
187 new UsernameNotFoundException("Email not found"));
188 }
189
190// @Transactional
191// public void setVrabotenStatus(int vrabotenId,String vrabotenStatus) {
192// Vraboten vraboten = vrabotenRepository.findByVrabotenId(vrabotenId);
193// if(vraboten!=null && value){
194// vraboten.setStatus(valuee);
195// }
196// else {
197// throw new IllegalStateException(String.format("Vraboten with id %d does not exist.",vrabotenId));
198// }
199// }
200}
Note: See TracBrowser for help on using the repository browser.