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

Last change on this file since 80ddcae was 80ddcae, checked in by Tasevski2 <39170279+Tasevski2@…>, 2 years ago

Fixed small bugs

  • Property mode set to 100644
File size: 9.5 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 ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
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 }else{
135 parkingZoneNov.setParkingSpaces(new ArrayList<>());
136 }
137 if (!responsibleWorkers.isEmpty()) {
138
139 for(Integer workerId: getResponsibleWorkers(parkingZoneId).stream().map(WorkerDemo::getWorkerId).collect(Collectors.toList())){
140 workerRepository.findByWorkerId(workerId).getParkingZones().remove(parkingZone);
141 }
142 for (Integer workerId : responsibleWorkers.stream().map(WorkerDemo::getWorkerId).collect(Collectors.toList())) {
143 Worker workerToAdd = workerRepository.findByWorkerId(workerId);
144 if(workerToAdd !=null)
145 workerToAdd.getParkingZones().add(parkingZone);
146 }
147 }else{
148 workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).forEach(w->w.getParkingZones().remove(parkingZone));
149 }
150
151 setTransientVariables(parkingZoneNov);
152 return new ParkingZoneAdminView(parkingZoneNov,getResponsibleWorkers(parkingZoneId));
153 } else {
154 throw new IllegalStateException("There ParkingZone does not exist");
155 }
156 }
157
158
159 @Transactional
160 public Optional<ParkingZone> deleteParkingZone ( int parkingZoneId){
161 Optional<ParkingZone> parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId));
162 if (parkingZoneOpt.isPresent()) {
163 parkingZoneOpt.get().setParkingSpaces(null);
164 parkingZoneOpt.get().setParkingZoneLocation(null);
165 workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZoneOpt.get())).forEach(w->w.getParkingZones().remove(parkingZoneOpt.get()));
166 parkingZoneRepository.deleteByPzId(parkingZoneId);
167 } else {
168 throw new IllegalStateException("ParkingZone doesn't exist, therefore can't be deleted");
169 }
170 return parkingZoneOpt;
171 }
172
173 public int calculateTakenSpaces(int pzId){
174 ParkingZone parkingZone=parkingZoneRepository.findByPzId(pzId);
175 return (int)parkingZone.getParkingSpaces().stream().filter(ParkingSpace::isTaken).count();
176 }
177 public int calculateCapacity(int pzId){
178 ParkingZone parkingZone=parkingZoneRepository.findByPzId(pzId);
179 return parkingZone.getParkingSpaces().size();
180 }
181 public void setTransientVariables(ParkingZone pz){
182 pz.setCapacity(calculateCapacity(pz.getId()));
183 pz.setTakenSpaces(calculateTakenSpaces(pz.getId()));
184 pz.setResponsibleWorkers(getWorkers(pz.getId()));
185 }
186 public List<WorkerDemo> getResponsibleWorkers(int pzId){
187 ParkingZone parkingZone =parkingZoneRepository.findByPzId(pzId);
188 return workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).map(WorkerDemo::new).collect(Collectors.toList());
189 }
190 public List<String> getWorkers(int pzId){
191 ParkingZone parkingZone =parkingZoneRepository.findByPzId(pzId);
192 return workerRepository.findAll().stream().filter(w->w.getParkingZones().contains(parkingZone)).map(w->w.getFirstName() + " " + w.getLastName()).collect(Collectors.toList());
193
194 }
195 }
196
Note: See TracBrowser for help on using the repository browser.