source: sources/app/src/main/java/parkup/services/ParkingZoneService.java@ b519b38

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

fix

  • Property mode set to 100644
File size: 10.5 KB
RevLine 
[ce6ad22]1package parkup.services;
2
3import org.springframework.beans.factory.annotation.Autowired;
[c71fa06]4import org.springframework.security.core.Authentication;
[ce6ad22]5import org.springframework.stereotype.Service;
[c71fa06]6import parkup.ParkUpApplication;
[df4089c]7import parkup.data.ParkingZoneAdminView;
[97fbc67]8import parkup.data.ParkingZoneLocation;
[df4089c]9import parkup.data.WorkerDemo;
[97fbc67]10import parkup.entities.ParkingSpace;
[ce6ad22]11import parkup.entities.ParkingZone;
[9dd526f]12import parkup.entities.Worker;
[9ff45d6]13import parkup.repositories.ParkingSessionRepository;
14import parkup.repositories.ParkingSpaceRepository;
[ce6ad22]15import parkup.repositories.ParkingZoneRepository;
[9dd526f]16import parkup.repositories.WorkerRepository;
[c71fa06]17import static parkup.ParkUpApplication.getToken;
[ce6ad22]18import javax.transaction.Transactional;
[ad4da86]19import java.util.*;
[df4089c]20import java.util.stream.Collectors;
[ce6ad22]21
22@Service
23public class ParkingZoneService {
24 private final ParkingZoneRepository parkingZoneRepository;
[9ff45d6]25 private final ParkingSpaceRepository parkingSpaceRepository;
[9dd526f]26 private final WorkerRepository workerRepository;
[9ff45d6]27 private final ParkingSessionRepository parkingSessionRepository;
[ce6ad22]28
29 @Autowired
[9dd526f]30 public ParkingZoneService(ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, WorkerRepository workerRepository, ParkingSessionRepository parkingSessionRepository) {
[ce6ad22]31 this.parkingZoneRepository = parkingZoneRepository;
[9ff45d6]32 this.parkingSpaceRepository = parkingSpaceRepository;
33 this.parkingSessionRepository = parkingSessionRepository;
[9dd526f]34 this.workerRepository = workerRepository;
[ce6ad22]35 }
36
37 public List<ParkingZone> getAllParkingZones() {
[c71fa06]38 Authentication user = getToken();
39 String role =user.getAuthorities().stream().findFirst().get().getAuthority();
40 String email = user.getName();
41 List<ParkingZone> parkingZones;
42 if(role.equals("ROLE_REG_USER"))
43 parkingZones= parkingZoneRepository.findAll();
44 else if(role.equals("ROLE_WORKER")){
45 Worker loggedInWorker = workerRepository.findWorkerByEmail(email).orElseThrow(null);
46 parkingZones= parkingZoneRepository.findAll().stream().filter(pz->loggedInWorker.getParkingZones().contains(pz)).collect(Collectors.toList());
47 }else if(role.equals("ROLE_ADMIN"))
48 parkingZones= parkingZoneRepository.findAll();
49 else
50 parkingZones=parkingZoneRepository.findAll();
[9dd526f]51 for(ParkingZone pz:parkingZones){
[df4089c]52 setTransientVariables(pz);
[9dd526f]53 }
54 return parkingZones;
[ce6ad22]55 }
56
[df4089c]57 public ParkingZoneAdminView findById(int parkingZoneId) {
[ce6ad22]58 Optional<ParkingZone> parkingZone = Optional.ofNullable(this.parkingZoneRepository.findByPzId(parkingZoneId));
[9dd526f]59 if (!parkingZone.isPresent()) {
60 throw new IllegalStateException("ParkingZone does not exist");
61 }
[df4089c]62 setTransientVariables(parkingZone.get());
63 return new ParkingZoneAdminView(parkingZone.get(),getResponsibleWorkers(parkingZoneId));
[ce6ad22]64 }
65
[97fbc67]66 public List<String> getAllParkingZoneNames() {
67 List<ParkingZone> parkingZones = this.parkingZoneRepository.findAll();
68 List<String> parkingZonesNames = new ArrayList<>();
[9ff45d6]69 for (ParkingZone pz : parkingZones) {
[97fbc67]70 parkingZonesNames.add(pz.getPzName());
71 }
72 return parkingZonesNames;
73 }
74
75 public Optional<ParkingZone> addParkingZone(ParkingZone parkingZone) { //zavisno vo koj grad ili opstina i napravi proverki pred dodavanje, implementiraj u naredna faza
[ce6ad22]76 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzName(parkingZone.getPzName()));
77 if (parkingZoneOpt.isPresent()) {
78 throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name");
79 } else {
80 System.out.println(parkingZone);
81 parkingZoneRepository.save(parkingZone);
82 }
[97fbc67]83 return parkingZoneOpt;
[ce6ad22]84 }
85
[97fbc67]86 public ParkingZone addParkingZoneNameOnly(String name) {
87 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzName(name));
88 if (parkingZoneOpt.isPresent()) {
89 throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name");
90 } else {
91 ParkingZone parkingZone = new ParkingZone(name.trim());
92 parkingZoneRepository.save(parkingZone);
93 return parkingZone;
94 }
95 }
96
97 //TODO proveri dali ima odgovorni i dokolku ima dali postojat vo bazata
[ce6ad22]98 @Transactional
[df4089c]99 public ParkingZoneAdminView updateParkingZone(int parkingZoneId, String pzName, int price,
[97fbc67]100 String location, int from, int to, String color,
[df4089c]101 List<ParkingSpace> parkingSpaces, ParkingZoneLocation parkingZoneLocation, List<WorkerDemo> responsibleWorkers) {
[9ff45d6]102
103 //TODO prati niza od objekti ParkingSpaces i prati objekt ParkingZoneLocation
[ad4da86]104 ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
[ce6ad22]105 ParkingZone parkingZoneNov = parkingZoneRepository.findByPzId(parkingZoneId);
[9ff45d6]106 if (parkingZoneNov!=null) {
[ad4da86]107 if (pzName != null && pzName.length() > 1) {
[9ff45d6]108 if (parkingZoneNov.getPzName().equals(pzName)&&parkingZoneNov.getId()!=parkingZoneId) {
109 throw new IllegalStateException("There is already a ParkingZone with the same name");
110 }
111
112 parkingZoneNov.setPzName(pzName);
[ce6ad22]113 }
114
[9ff45d6]115 if (price != 0 && !Objects.equals(parkingZoneNov.getPrice(), price)) {
116 parkingZoneNov.setPrice(price);
117 }
[ce6ad22]118
[9ff45d6]119 if (location != null && location.length() > 0 && !Objects.equals(parkingZoneNov.getAddress(), location)) {
120 parkingZoneNov.setAddress(location);
121 }
[ce6ad22]122
[9ff45d6]123 if (from != 0 && !Objects.equals(parkingZoneNov.getFrom(), from)) {
124 parkingZoneNov.setFrom(from);
125 }
[ce6ad22]126
[9ff45d6]127 if (to != 0 && !Objects.equals(parkingZoneNov.getTo(), to)) {
128 parkingZoneNov.setTo(to);
129 }
[97fbc67]130
[9ff45d6]131 if (color != null && color.length() > 0 && !Objects.equals(parkingZoneNov.getColor(), color)) {
132 parkingZoneNov.setColor(color);
133 }
[97fbc67]134
[9ff45d6]135 if (parkingZoneLocation != null) {
136 parkingZoneNov.setParkingZoneLocation(parkingZoneLocation);
137 }
[97fbc67]138
[9ff45d6]139 if (!parkingSpaces.isEmpty()) {
[ad4da86]140 List<ParkingSpace> spacesToDelete = parkingZoneNov.getParkingSpaces();
141 parkingZoneNov.setParkingSpaces(null);
142 parkingSpaceRepository.deleteAll(spacesToDelete);
143 parkingZoneNov.setParkingSpaces(parkingSpaces);
144 }
145 else{
[80ddcae]146 parkingZoneNov.setParkingSpaces(new ArrayList<>());
[9ff45d6]147 }
[df4089c]148 if (!responsibleWorkers.isEmpty()) {
[98f448a]149
150 for(Integer workerId: getResponsibleWorkers(parkingZoneId).stream().map(WorkerDemo::getWorkerId).collect(Collectors.toList())){
151 workerRepository.findByWorkerId(workerId).getParkingZones().remove(parkingZone);
152 }
[df4089c]153 for (Integer workerId : responsibleWorkers.stream().map(WorkerDemo::getWorkerId).collect(Collectors.toList())) {
154 Worker workerToAdd = workerRepository.findByWorkerId(workerId);
[9dd526f]155 if(workerToAdd !=null)
156 workerToAdd.getParkingZones().add(parkingZone);
[9ff45d6]157 }
[98f448a]158 }else{
159 workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).forEach(w->w.getParkingZones().remove(parkingZone));
[9ff45d6]160 }
[97fbc67]161
[df4089c]162 setTransientVariables(parkingZoneNov);
163 return new ParkingZoneAdminView(parkingZoneNov,getResponsibleWorkers(parkingZoneId));
[9ff45d6]164 } else {
165 throw new IllegalStateException("There ParkingZone does not exist");
[97fbc67]166 }
[9ff45d6]167 }
[97fbc67]168
169
[9ff45d6]170 @Transactional
171 public Optional<ParkingZone> deleteParkingZone ( int parkingZoneId){
172 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId));
173 if (parkingZoneOpt.isPresent()) {
[df4089c]174 parkingZoneOpt.get().setParkingSpaces(null);
175 parkingZoneOpt.get().setParkingZoneLocation(null);
[98f448a]176 workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZoneOpt.get())).forEach(w->w.getParkingZones().remove(parkingZoneOpt.get()));
[9ff45d6]177 parkingZoneRepository.deleteByPzId(parkingZoneId);
178 } else {
179 throw new IllegalStateException("ParkingZone doesn't exist, therefore can't be deleted");
180 }
181 return parkingZoneOpt;
[ce6ad22]182 }
[9dd526f]183
184 public int calculateTakenSpaces(int pzId){
185 ParkingZone parkingZone=parkingZoneRepository.findByPzId(pzId);
186 return (int)parkingZone.getParkingSpaces().stream().filter(ParkingSpace::isTaken).count();
187 }
188 public int calculateCapacity(int pzId){
189 ParkingZone parkingZone=parkingZoneRepository.findByPzId(pzId);
190 return parkingZone.getParkingSpaces().size();
191 }
[df4089c]192 public void setTransientVariables(ParkingZone pz){
193 pz.setCapacity(calculateCapacity(pz.getId()));
194 pz.setTakenSpaces(calculateTakenSpaces(pz.getId()));
[80ddcae]195 pz.setResponsibleWorkers(getWorkers(pz.getId()));
[df4089c]196 }
197 public List<WorkerDemo> getResponsibleWorkers(int pzId){
198 ParkingZone parkingZone =parkingZoneRepository.findByPzId(pzId);
199 return workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).map(WorkerDemo::new).collect(Collectors.toList());
[9dd526f]200 }
[80ddcae]201 public List<String> getWorkers(int pzId){
202 ParkingZone parkingZone =parkingZoneRepository.findByPzId(pzId);
203 return workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).map(w->w.getFirstName() + " " + w.getLastName()).collect(Collectors.toList());
204
205 }
[0ad69c1]206
207 public ParkingZone getParkingZoneByName(String parkingZoneName){
[c52cdbb]208 ParkingZone parkingZone=parkingZoneRepository.findByPzName(parkingZoneName);
209 if(parkingZone==null)
210 throw new IllegalStateException("No such parking zone exists");
211 setTransientVariables(parkingZone);
212 return parkingZone;
[0ad69c1]213 }
[ce6ad22]214 }
215
Note: See TracBrowser for help on using the repository browser.