source: sources/app/src/main/java/parkup/services/ParkingSpaceService.java@ 9dd526f

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

backend refactoring

  • Property mode set to 100644
File size: 4.0 KB
Line 
1package parkup.services;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Service;
5import parkup.entities.ParkingSpace;
6import parkup.entities.ParkingZone;
7import parkup.repositories.ParkingSpaceRepository;
8import parkup.repositories.ParkingZoneRepository;
9
10import javax.transaction.Transactional;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.stream.Collectors;
15
16@Service
17public class ParkingSpaceService {
18 private final ParkingSpaceRepository parkingSpaceRepository;
19 private final ParkingZoneRepository parkingZoneRepository;
20
21 @Autowired
22 public ParkingSpaceService(ParkingSpaceRepository parkingSpaceRepository, ParkingZoneRepository parkingZoneRepository) {
23 this.parkingSpaceRepository = parkingSpaceRepository;
24 this.parkingZoneRepository = parkingZoneRepository;
25 }
26
27 public List<ParkingSpace> getAllParkingSpaces() {
28 return parkingSpaceRepository.findAll();
29 }
30
31 public ParkingSpace findById(int parkingSpaceId) {
32 Optional<ParkingSpace> parkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId));
33 return parkingSpaceOpt.orElse(null);
34 }
35
36 public Optional<ParkingSpace> addParkingSpace(ParkingSpace parkingSpace,int parkingZoneId) {
37 List<String> names = parkingZoneRepository.findByPzId(parkingZoneId).getParkingSpaces().stream().map(ParkingSpace::getPsName).collect(Collectors.toList());
38 if (names.contains(parkingSpace.getPsName())) {
39 throw new IllegalStateException("Name already taken, try adding a ParkingSpace with a different name");
40 } else {
41 System.out.println(parkingSpace);
42 parkingSpaceRepository.save(parkingSpace);
43 }
44 return Optional.of(parkingSpace);
45 }
46
47 @Transactional
48 public ParkingSpace updateParkingSpace(int parkingSpaceId, String psName, boolean taken, float lat, float lng) {
49 Optional<ParkingSpace> ParkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId));
50 if (ParkingSpaceOpt.isPresent()) {
51 ParkingSpace parkingSpaceNew = parkingSpaceRepository.findByPsId(parkingSpaceId);
52 if (psName != null && psName.length() > 1 && !Objects.equals(parkingSpaceNew.getPsName(), psName)) {
53 Optional<ParkingSpace> parkingSpaceOpt1 = Optional.ofNullable(parkingSpaceRepository.findByPsName(psName));
54 if (parkingSpaceOpt1.isPresent()) {
55 throw new IllegalStateException("There is already a ParkingSpace with the same name");
56 }
57
58 parkingSpaceNew.setPsName(psName);
59 }
60
61 if (!Objects.equals(parkingSpaceNew.isTaken(), taken)) {
62 parkingSpaceNew.setTaken(taken);
63 }
64
65
66 if(lat!=0 && !Objects.equals(parkingSpaceNew.getLat(), lat)){
67 parkingSpaceNew.setLat(lat);
68 }
69
70 if(lng!=0 && !Objects.equals(parkingSpaceNew.getLng(), lng)){
71 parkingSpaceNew.setLng(lng);
72 }
73 return parkingSpaceNew;
74 }else{
75 throw new IllegalStateException("ParkingSpace does not exist");
76 }
77 }
78
79 @Transactional
80 public Optional<ParkingSpace> deleteParkingSpace(int parkingSpaceId) {
81 Optional<ParkingSpace> parkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId));
82 if (parkingSpaceOpt.isPresent()) {
83 for(ParkingZone pz: parkingZoneRepository.findAll()){
84 pz.getParkingSpaces().remove(parkingSpaceOpt.get());
85 parkingZoneRepository.save(pz);
86 }
87 parkingSpaceRepository.deleteByPsId(parkingSpaceId);
88 } else {
89 throw new IllegalStateException("ParkingSpace doesn't exist, therefore can't be deleted");
90 }
91 return parkingSpaceOpt;
92 }
93 public long getNumberOfTakenSpaces(){
94 return parkingSpaceRepository.findAll().stream().filter(ParkingSpace::isTaken).count();
95 }
96}
Note: See TracBrowser for help on using the repository browser.