source: sources/app/src/main/java/parkup/services/ParkingSessionService.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: 8.6 KB
Line 
1package parkup.services;
2
3import org.springframework.beans.factory.annotation.Autowired;
4import org.springframework.stereotype.Service;
5import parkup.data.Plate;
6import parkup.data.enumarations.SessionStatus;
7import parkup.entities.ParkingSession;
8import parkup.entities.ParkingSpace;
9import parkup.entities.ParkingZone;
10import parkup.repositories.ParkingSessionRepository;
11import parkup.repositories.ParkingSpaceRepository;
12import parkup.repositories.ParkingZoneRepository;
13import parkup.repositories.PlateRepository;
14
15import javax.transaction.Transactional;
16import java.time.Duration;
17import java.time.LocalDateTime;
18import java.util.List;
19import java.util.Optional;
20import java.util.stream.Collectors;
21
22@Service
23public class ParkingSessionService {
24 private final ParkingSessionRepository parkingSessionRepository;
25 private final ParkingZoneRepository parkingZoneRepository;
26 private final ParkingSpaceRepository parkingSpaceRepository;
27 private final PlateRepository plateRepository;
28
29 @Autowired
30 public ParkingSessionService(ParkingSessionRepository parkingSessionRepository, ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, PlateRepository plateRepository) {
31 this.parkingSessionRepository = parkingSessionRepository;
32 this.parkingZoneRepository = parkingZoneRepository;
33 this.parkingSpaceRepository = parkingSpaceRepository;
34 this.plateRepository = plateRepository;
35 }
36
37 //TODO add getMethod for paid sessions or all sessions
38
39 public List<ParkingSession> getAllParkingSessions() {
40 //Get all sessions that arent paid
41 return parkingSessionRepository.findAll().stream()
42 .filter(s->!s.getStatus().equals(SessionStatus.ENDED_PAID))
43 .collect(Collectors.toList());
44 }
45
46 public ParkingSession findById(int parkingSessionId) {
47 Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
48 return parkingSessionOpt.orElse(null);
49 }
50
51 /* @Transactional
52 public void updateParkingSession(int parkingSessionId, String timeStart, String timeEnd, Tablicka tablicka) {
53 Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
54 if (parkingSessionOpt.isPresent()) {
55 ParkingSession parkingSessionNov = parkingSessionRepository.findByPssId(parkingSessionId);
56
57 if(!parkingSessionNov.getTimeStart().equals(timeStart) && !parkingSessionNov.getTimeStart().equals(timeEnd))
58 parkingSessionNov.setTimeStart(timeStart);
59
60 if(!parkingSessionNov.getTimeEnd().equals(timeEnd) && !parkingSessionNov.getTimeEnd().equals(timeStart))
61 parkingSessionNov.setTimeEnd(timeEnd);
62
63 if(tablicka!=null && !Objects.equals(parkingSessionNov.getTablica(),tablicka)){
64 parkingSessionNov.setTablica(tablicka);
65 }
66 }else{
67 throw new IllegalStateException("The ParkingSession does not exist");
68 }
69 }*/
70 @Transactional
71 public Optional<ParkingSession> deleteParkingSession(int parkingSessionId) {
72 Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
73 if (parkingSessionOpt.isPresent()) {
74 parkingSessionOpt.get().getParkingSpace().setTaken(false);
75 parkingSessionRepository.deleteByPssId(parkingSessionId);
76 return parkingSessionOpt;
77 } else {
78 throw new IllegalStateException("ParkingSpace doesn't exist, therefore can't be deleted");
79 }
80 }
81
82 @Transactional
83 public Optional<ParkingSession> startParkingSession(String tablica, int parkingZoneId) {
84 ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
85 Plate plate = plateRepository.findByPlate(tablica);
86 if(plate ==null) {
87 plateRepository.save(new Plate(tablica));
88 }
89 plate = plateRepository.findByPlate(tablica);
90 ParkingSession sessionToAdd = new ParkingSession(plate);
91 sessionToAdd.setParkingZone(parkingZone);
92 parkingSessionRepository.save(sessionToAdd);
93 return Optional.of(sessionToAdd);
94
95 }
96
97// public void executePayment(int id){
98// ParkingSession session = parkingSessionRepository.findByPssId(id);
99// if(session==null){
100// throw new IllegalStateException("No such session exists");
101// }
102// else if(session.getStatus()== SessionStatus.ENDED_UNPAID){
103// throw new IllegalStateException("Cannot execute payment on an ended session");
104// }
105// session.setStatus(SessionStatus.ENDED_PAID);
106// }
107
108 public int calculatePayment(int id){
109 ParkingSession session = parkingSessionRepository.findByPssId(id);
110 if(session==null){
111 throw new IllegalStateException("No such session exists");
112 }
113 else if(session.getStatus()== SessionStatus.ENDED_UNPAID){
114 throw new IllegalStateException("Cannot calculate payment on an ended session");
115 }
116 int price = session.getParkingZone().getPrice();
117 return (int) (Math.ceil(Duration.between(session.getTimeEnd(),session.getTimeStart()).toMinutes()/60.0)*price);
118 }
119 @Transactional
120 public ParkingSession verifyParkingSession(int id,String parkingSpaceName,int parkingZoneId){
121 ParkingSession parkingSession = parkingSessionRepository.findByPssId(id);
122 ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId);
123 if(parkingSession==null){
124 throw new IllegalStateException("No such session exists");
125 }
126 else if(parkingSession.getStatus()==SessionStatus.STARTED_VERIFIED){
127 throw new IllegalStateException("The session you are trying to verify has already been verified");
128 }
129// else if(parkingSession.getStatus()!=SessionStatus.STARTED_)
130 if(!parkingZone.getParkingSpaces().contains(parkingSpaceRepository.findByPsName(parkingSpaceName))){
131 throw new IllegalStateException("Ivalid parking space inserted. Type in a new parking space or let the admin know that they should add the parking space to this zone");
132 }
133 parkingSession.setStatus(SessionStatus.STARTED_VERIFIED);
134 ParkingSpace parkingSpace = parkingZoneRepository.findByPzId(parkingZoneId).getParkingSpaces().stream().filter(ps->ps.getPsName().equals(parkingSpaceName)).findFirst().get();
135 parkingSpace.setTaken(true);
136 parkingSession.setParkingSpace(parkingSpace);
137 return parkingSession;
138 }
139 @Transactional
140 public ParkingSession endParkingSession(int id){
141 ParkingSession parkingSession = parkingSessionRepository.findByPssId(id);
142 if(parkingSession==null){
143 throw new IllegalStateException("No such session exists");
144 }
145 else if(parkingSession.getStatus()==SessionStatus.ENDED_UNPAID){
146 throw new IllegalStateException("The session you are trying to end has already been ended");
147 }
148 parkingSession.setStatus(SessionStatus.ENDED_UNPAID);
149 parkingSession.setTimeEnd(LocalDateTime.now());
150 return parkingSession;
151 }
152 @Transactional
153 public boolean payParkingSession(int id,String date){
154 ParkingSession parkingSession = parkingSessionRepository.findByPssId(id);
155 String expMonthString=date.split("/")[0];
156 String expYearString=date.split("/")[1];
157 if(expMonthString.startsWith("0"))
158 expMonthString=expYearString.substring(1);
159 if(expYearString.startsWith("0"))
160 expYearString=expYearString.substring(1);
161 int expMonth=Integer.parseInt(expMonthString);
162 int expYear=Integer.parseInt(expYearString);
163 int month = LocalDateTime.now().getMonth().getValue();
164 int year = LocalDateTime.now().getYear()%100;
165 if(year>expYear){
166 throw new IllegalStateException("Your card has expired or the date that you have entered is incorrect");
167 }
168 else if(year==expYear){
169 if(month>=expMonth)
170 throw new IllegalStateException("Your card has expired or the date that you have entered is incorrect");
171 }
172 if(parkingSession==null){
173 throw new IllegalStateException("No such session exists");
174 }
175 else if(parkingSession.getStatus()==SessionStatus.ENDED_PAID){
176 throw new IllegalStateException("The session has already been paid for");
177 }
178 parkingSession.setStatus(SessionStatus.ENDED_PAID);
179 parkingSession.getParkingSpace().setTaken(false);
180 return true;
181 }
182}
Note: See TracBrowser for help on using the repository browser.