source: sources/app/src/main/java/parkup/services/ParkingZoneService.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.4 KB
Line 
1package parkup.services;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Service;
5import parkup.data.ParkingZoneAdminView;
6import parkup.data.ParkingZoneLocation;
7import parkup.data.WorkerDemo;
8import parkup.entities.ParkingSpace;
9import parkup.entities.ParkingZone;
10import parkup.entities.Worker;
11import parkup.repositories.ParkingSessionRepository;
12import parkup.repositories.ParkingSpaceRepository;
13import parkup.repositories.ParkingZoneRepository;
14import parkup.repositories.WorkerRepository;
15
16import javax.transaction.Transactional;
17import java.util.ArrayList;
18import java.util.List;
19import java.util.Objects;
20import java.util.Optional;
21import java.util.stream.Collectors;
22
23@Service
24public class ParkingZoneService {
25 private final ParkingZoneRepository parkingZoneRepository;
26 private final ParkingSpaceRepository parkingSpaceRepository;
27 private final WorkerRepository workerRepository;
28 private final ParkingSessionRepository parkingSessionRepository;
29
30 @Autowired
31 public ParkingZoneService(ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, WorkerRepository workerRepository, ParkingSessionRepository parkingSessionRepository) {
32 this.parkingZoneRepository = parkingZoneRepository;
33 this.parkingSpaceRepository = parkingSpaceRepository;
34 this.parkingSessionRepository = parkingSessionRepository;
35 this.workerRepository = workerRepository;
36 }
37
38 public List<ParkingZone> getAllParkingZones() {
39 List<ParkingZone> parkingZones= parkingZoneRepository.findAll();
40 for(ParkingZone pz:parkingZones){
41 setTransientVariables(pz);
42 }
43 return parkingZones;
44 }
45
46 public ParkingZoneAdminView findById(int parkingZoneId) {
47 Optional<ParkingZone> parkingZone = Optional.ofNullable(this.parkingZoneRepository.findByPzId(parkingZoneId));
48 if (!parkingZone.isPresent()) {
49 throw new IllegalStateException("ParkingZone does not exist");
50 }
51 setTransientVariables(parkingZone.get());
52 return new ParkingZoneAdminView(parkingZone.get(),getResponsibleWorkers(parkingZoneId));
53 }
54
55 public List<String> getAllParkingZoneNames() {
56 List<ParkingZone> parkingZones = this.parkingZoneRepository.findAll();
57 List<String> parkingZonesNames = new ArrayList<>();
58 for (ParkingZone pz : parkingZones) {
59 parkingZonesNames.add(pz.getPzName());
60 }
61 return parkingZonesNames;
62 }
63
64 public Optional<ParkingZone> addParkingZone(ParkingZone parkingZone) { //zavisno vo koj grad ili opstina i napravi proverki pred dodavanje, implementiraj u naredna faza
65 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzName(parkingZone.getPzName()));
66 if (parkingZoneOpt.isPresent()) {
67 throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name");
68 } else {
69 System.out.println(parkingZone);
70 parkingZoneRepository.save(parkingZone);
71 }
72 return parkingZoneOpt;
73 }
74
75 public ParkingZone addParkingZoneNameOnly(String name) {
76 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzName(name));
77 if (parkingZoneOpt.isPresent()) {
78 throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name");
79 } else {
80 ParkingZone parkingZone = new ParkingZone(name.trim());
81 parkingZoneRepository.save(parkingZone);
82 return parkingZone;
83 }
84 }
85
86 //TODO proveri dali ima odgovorni i dokolku ima dali postojat vo bazata
87 @Transactional
88 public ParkingZoneAdminView updateParkingZone(int parkingZoneId, String pzName, int price,
89 String location, int from, int to, String color,
90 List<ParkingSpace> parkingSpaces, ParkingZoneLocation parkingZoneLocation, List<WorkerDemo> responsibleWorkers) {
91
92 //TODO prati niza od objekti ParkingSpaces i prati objekt ParkingZoneLocation
93
94 ParkingZone parkingZoneNov = parkingZoneRepository.findByPzId(parkingZoneId);
95 if (parkingZoneNov!=null) {
96 if (pzName != null && pzName.length() > 1) { ;
97 if (parkingZoneNov.getPzName().equals(pzName)&&parkingZoneNov.getId()!=parkingZoneId) {
98 throw new IllegalStateException("There is already a ParkingZone with the same name");
99 }
100
101 parkingZoneNov.setPzName(pzName);
102 }
103
104 if (price != 0 && !Objects.equals(parkingZoneNov.getPrice(), price)) {
105 parkingZoneNov.setPrice(price);
106 }
107
108 if (location != null && location.length() > 0 && !Objects.equals(parkingZoneNov.getAddress(), location)) {
109 parkingZoneNov.setAddress(location);
110 }
111
112 if (from != 0 && !Objects.equals(parkingZoneNov.getFrom(), from)) {
113 parkingZoneNov.setFrom(from);
114 }
115
116 if (to != 0 && !Objects.equals(parkingZoneNov.getTo(), to)) {
117 parkingZoneNov.setTo(to);
118 }
119
120 if (color != null && color.length() > 0 && !Objects.equals(parkingZoneNov.getColor(), color)) {
121 parkingZoneNov.setColor(color);
122 }
123
124 if (parkingZoneLocation != null) {
125 parkingZoneNov.setParkingZoneLocation(parkingZoneLocation);
126 }
127
128 if (!parkingSpaces.isEmpty()) {
129 List<String> psNamesInZone=parkingZoneNov.getParkingSpaces().stream().map(ParkingSpace::getPsName).collect(Collectors.toList());
130 List<ParkingSpace> psToAdd=parkingSpaces.stream().filter(ps->!psNamesInZone.contains(ps.getPsName())).collect(Collectors.toList());
131 for(ParkingSpace ps:psToAdd){
132 parkingZoneNov.getParkingSpaces().add(ps);
133 }
134 }
135 if (!responsibleWorkers.isEmpty()) {
136 ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
137 for (Integer workerId : responsibleWorkers.stream().map(WorkerDemo::getWorkerId).collect(Collectors.toList())) {
138 Worker workerToAdd = workerRepository.findByWorkerId(workerId);
139 if(workerToAdd !=null)
140 workerToAdd.getParkingZones().add(parkingZone);
141 }
142 }
143
144 setTransientVariables(parkingZoneNov);
145 return new ParkingZoneAdminView(parkingZoneNov,getResponsibleWorkers(parkingZoneId));
146 } else {
147 throw new IllegalStateException("There ParkingZone does not exist");
148 }
149 }
150
151
152 @Transactional
153 public Optional<ParkingZone> deleteParkingZone ( int parkingZoneId){
154 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId));
155 if (parkingZoneOpt.isPresent()) {
156 parkingZoneOpt.get().setParkingSpaces(null);
157 parkingZoneOpt.get().setParkingZoneLocation(null);
158 parkingZoneRepository.deleteByPzId(parkingZoneId);
159 } else {
160 throw new IllegalStateException("ParkingZone doesn't exist, therefore can't be deleted");
161 }
162 return parkingZoneOpt;
163 }
164
165 public int calculateTakenSpaces(int pzId){
166 ParkingZone parkingZone=parkingZoneRepository.findByPzId(pzId);
167 return (int)parkingZone.getParkingSpaces().stream().filter(ParkingSpace::isTaken).count();
168 }
169 public int calculateCapacity(int pzId){
170 ParkingZone parkingZone=parkingZoneRepository.findByPzId(pzId);
171 return parkingZone.getParkingSpaces().size();
172 }
173 public void setTransientVariables(ParkingZone pz){
174 pz.setCapacity(calculateCapacity(pz.getId()));
175 pz.setTakenSpaces(calculateTakenSpaces(pz.getId()));
176 }
177 public List<WorkerDemo> getResponsibleWorkers(int pzId){
178 ParkingZone parkingZone =parkingZoneRepository.findByPzId(pzId);
179 return workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).map(WorkerDemo::new).collect(Collectors.toList());
180 }
181 }
182
Note: See TracBrowser for help on using the repository browser.