Ignore:
Timestamp:
12/24/21 23:31:23 (3 years ago)
Author:
andrejTavchioski <andrej.tavchioski@…>
Branches:
master
Children:
9dd526f
Parents:
8588fcb
Message:

Fixed some functionalities related to parkingSessions and parkingZones

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sources/app/src/main/java/parkup/services/ParkingSessionService.java

    r8588fcb r9ff45d6  
    44import org.springframework.stereotype.Service;
    55import parkup.data.Tablicka;
     6import parkup.data.enumarations.SessionStatus;
    67import parkup.entities.ParkingSession;
     8import parkup.entities.ParkingSpace;
     9import parkup.entities.ParkingZone;
    710import parkup.repositories.ParkingSessionRepository;
     11import parkup.repositories.ParkingSpaceRepository;
     12import parkup.repositories.ParkingZoneRepository;
     13import parkup.repositories.TablickaRepository;
    814
    915import javax.transaction.Transactional;
     16import java.time.Duration;
     17import java.time.LocalDateTime;
    1018import java.util.List;
    11 import java.util.Objects;
    1219import java.util.Optional;
     20import java.util.stream.Collectors;
    1321
    1422@Service
    1523public class ParkingSessionService {
    1624    private final ParkingSessionRepository parkingSessionRepository;
     25    private final ParkingZoneRepository parkingZoneRepository;
     26    private final ParkingSpaceRepository parkingSpaceRepository;
     27    private final TablickaRepository tablickaRepository;
    1728
    1829    @Autowired
    19     public ParkingSessionService(ParkingSessionRepository parkingSessionRepository) {
     30    public ParkingSessionService(ParkingSessionRepository parkingSessionRepository, ParkingZoneRepository parkingZoneRepository, ParkingSpaceRepository parkingSpaceRepository, TablickaRepository tablickaRepository) {
    2031        this.parkingSessionRepository = parkingSessionRepository;
     32        this.parkingZoneRepository = parkingZoneRepository;
     33        this.parkingSpaceRepository = parkingSpaceRepository;
     34        this.tablickaRepository = tablickaRepository;
    2135    }
    2236
     37    //TODO add getMethod for paid sessions or all sessions
     38
    2339    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());
    2544    }
    2645
     
    3049    }
    3150
    32     @Transactional
     51   /* @Transactional
    3352    public void updateParkingSession(int parkingSessionId, String timeStart, String timeEnd, Tablicka tablicka) {
    3453        Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
     
    4867            throw new IllegalStateException("The ParkingSession does not exist");
    4968        }
    50     }
    51 
     69    }*/
     70    @Transactional
    5271    public Optional<ParkingSession> deleteParkingSession(int parkingSessionId) {
    5372        Optional<ParkingSession> parkingSessionOpt = Optional.ofNullable(parkingSessionRepository.findByPssId(parkingSessionId));
    5473        if (parkingSessionOpt.isPresent()) {
     74            parkingSessionOpt.get().getParkingSpace().setTaken(false);
    5575            parkingSessionRepository.deleteByPssId(parkingSessionId);
    5676            return parkingSessionOpt;
     
    6080    }
    6181
    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));
    7088        }
     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;
    71181    }
    72182}
Note: See TracChangeset for help on using the changeset viewer.