package parkup.services; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import parkup.entities.Administrator; import parkup.entities.ParkingZone; import parkup.repositories.ParkingZoneRepository; import javax.transaction.Transactional; import java.util.List; import java.util.Objects; import java.util.Optional; @Service public class ParkingZoneService { private final ParkingZoneRepository parkingZoneRepository; @Autowired public ParkingZoneService(ParkingZoneRepository parkingZoneRepository) { this.parkingZoneRepository = parkingZoneRepository; } public List getAllParkingZones() { return parkingZoneRepository.findAll(); } public ParkingZone findById(int parkingZoneId) { Optional parkingZone = Optional.ofNullable(this.parkingZoneRepository.findByPzId(parkingZoneId)); return parkingZone.orElse(null); } public void addParkingZone(ParkingZone parkingZone) { //zavisno vo koj grad ili opstina i napravi proverki pred dodavanje, implementiraj u naredna faza Optional parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzName(parkingZone.getPzName())); if (parkingZoneOpt.isPresent()) { throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name"); } else { System.out.println(parkingZone); parkingZoneRepository.save(parkingZone); } } @Transactional public void updateParkingZone(int parkingZoneId, String pzName, int price, int capacity, String workHours, String location) { Optional parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId)); if (parkingZoneOpt.isPresent()) { ParkingZone parkingZoneNov = parkingZoneRepository.findByPzId(parkingZoneId); if (pzName != null && pzName.length() > 1 && !Objects.equals(parkingZoneNov.getPzName(), pzName)) { Optional parkingZoneOpt1 = Optional.ofNullable(parkingZoneRepository.findByPzName(pzName)); if (parkingZoneOpt1.isPresent()) { throw new IllegalStateException("There is already a ParkingZone with the same name"); } parkingZoneNov.setPzName(pzName); } if (price != 0 && !Objects.equals(parkingZoneNov.getPrice(), price)) { parkingZoneNov.setPrice(price); } if (capacity != 0 && !Objects.equals(parkingZoneNov.getCapacity(), capacity)) { parkingZoneNov.setCapacity(capacity); } if (workHours != null && workHours.length() > 0 && !Objects.equals(parkingZoneNov.getWorkHours(), workHours)) { parkingZoneNov.setWorkHours(workHours); } if (location != null && location.length() > 0 && !Objects.equals(parkingZoneNov.getLocation(), location)) { parkingZoneNov.setLocation(location); } } } public void deleteParkingZone(int parkingZoneId) { Optional parkingZoneOpt = Optional.ofNullable(parkingZoneRepository.findByPzId(parkingZoneId)); if (parkingZoneOpt.isPresent()) { parkingZoneRepository.deleteByPzId(parkingZoneId); } else { throw new IllegalStateException("ParkingZone doesn't exist, therefore can't be deleted"); } } }