- Timestamp:
- 12/24/21 23:31:23 (3 years ago)
- Branches:
- master
- Children:
- 9dd526f
- Parents:
- 8588fcb
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sources/app/src/main/java/parkup/services/ParkingSessionService.java
r8588fcb r9ff45d6 4 4 import org.springframework.stereotype.Service; 5 5 import parkup.data.Tablicka; 6 import parkup.data.enumarations.SessionStatus; 6 7 import parkup.entities.ParkingSession; 8 import parkup.entities.ParkingSpace; 9 import parkup.entities.ParkingZone; 7 10 import parkup.repositories.ParkingSessionRepository; 11 import parkup.repositories.ParkingSpaceRepository; 12 import parkup.repositories.ParkingZoneRepository; 13 import parkup.repositories.TablickaRepository; 8 14 9 15 import javax.transaction.Transactional; 16 import java.time.Duration; 17 import java.time.LocalDateTime; 10 18 import java.util.List; 11 import java.util.Objects;12 19 import java.util.Optional; 20 import java.util.stream.Collectors; 13 21 14 22 @Service 15 23 public class ParkingSessionService { 16 24 private final ParkingSessionRepository parkingSessionRepository; 25 private final ParkingZoneRepository parkingZoneRepository; 26 private final ParkingSpaceRepository parkingSpaceRepository; 27 private final TablickaRepository tablickaRepository; 17 28 18 29 @Autowired 19 public ParkingSessionService(ParkingSessionRepository parkingSessionRepository ) {30 public ParkingSessionService(ParkingSessionRepository parkingSessionRepository, ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, TablickaRepository tablickaRepository) { 20 31 this.parkingSessionRepository = parkingSessionRepository; 32 this.parkingZoneRepository = parkingZoneRepository; 33 this.parkingSpaceRepository = parkingSpaceRepository; 34 this.tablickaRepository = tablickaRepository; 21 35 } 22 36 37 //TODO add getMethod for paid sessions or all sessions 38 23 39 public List<ParkingSession> getAllParkingSessions() { 24 return parkingSessionRepository.findAll(); 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()); 25 44 } 26 45 … … 30 49 } 31 50 32 @Transactional51 /* @Transactional 33 52 public void updateParkingSession(int parkingSessionId, String timeStart, String timeEnd, Tablicka tablicka) { 34 53 Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId)); … … 48 67 throw new IllegalStateException("The ParkingSession does not exist"); 49 68 } 50 } 51 69 }*/ 70 @Transactional 52 71 public Optional<ParkingSession> deleteParkingSession(int parkingSessionId) { 53 72 Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId)); 54 73 if (parkingSessionOpt.isPresent()) { 74 parkingSessionOpt.get().getParkingSpace().setTaken(false); 55 75 parkingSessionRepository.deleteByPssId(parkingSessionId); 56 76 return parkingSessionOpt; … … 60 80 } 61 81 62 public Optional<ParkingSession> addParkingSession(ParkingSession parkingSession) { 63 Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSession.getPssId())); 64 if (parkingSessionOpt.isPresent()) { 65 throw new IllegalStateException("ID already taken, ParkingSession cannot be added"); 66 } else { 67 System.out.println(parkingSession); 68 parkingSessionRepository.save(parkingSession); 69 return parkingSessionOpt; 82 @Transactional 83 public Optional<ParkingSession> startParkingSession(String tablica, int parkingZoneId) { 84 ParkingZone parkingZone = parkingZoneRepository.findByPzId(parkingZoneId); 85 Tablicka tablicka = tablickaRepository.findByTablica(tablica); 86 if(tablicka==null) { 87 tablickaRepository.save(new Tablicka(tablica)); 70 88 } 89 tablicka=tablickaRepository.findByTablica(tablica); 90 ParkingSession sessionToAdd = new ParkingSession(tablicka); 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; 71 181 } 72 182 }
Note:
See TracChangeset
for help on using the changeset viewer.