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

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

change in getParkingSpaces logic

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