package parkup.services; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import parkup.entities.ParkingSpace; import parkup.repositories.ParkingSpaceRepository; import javax.transaction.Transactional; import java.util.List; import java.util.Objects; import java.util.Optional; @Service public class ParkingSpaceService { private final ParkingSpaceRepository parkingSpaceRepository; @Autowired public ParkingSpaceService(ParkingSpaceRepository parkingSpaceRepository) { this.parkingSpaceRepository = parkingSpaceRepository; } public List getAllParkingSpaces() { return parkingSpaceRepository.findAll(); } public ParkingSpace findById(int parkingSpaceId) { Optional parkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId)); return parkingSpaceOpt.orElse(null); } public Optional addParkingSpace(ParkingSpace parkingSpace) { Optional parkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsName(parkingSpace.getPsName())); if (parkingSpaceOpt.isPresent()) { throw new IllegalStateException("Name already taken, try adding a ParkingZone with a different name"); } else { System.out.println(parkingSpace); parkingSpaceRepository.save(parkingSpace); } return parkingSpaceOpt; } @Transactional public ParkingSpace updateParkingSpace(int parkingSpaceId, String psName, boolean taken, boolean handicaped, float lat, float lng) { Optional ParkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId)); if (ParkingSpaceOpt.isPresent()) { ParkingSpace ParkingSpaceNov = parkingSpaceRepository.findByPsId(parkingSpaceId); if (psName != null && psName.length() > 1 && !Objects.equals(ParkingSpaceNov.getPsName(), psName)) { Optional parkingSpaceOpt1 = Optional.ofNullable(parkingSpaceRepository.findByPsName(psName)); if (parkingSpaceOpt1.isPresent()) { throw new IllegalStateException("There is already a ParkingSpace with the same name"); } ParkingSpaceNov.setPsName(psName); } if (!Objects.equals(ParkingSpaceNov.isTaken(), taken)) { ParkingSpaceNov.setTaken(taken); } if (!Objects.equals(ParkingSpaceNov.isHandicaped(), handicaped)) { ParkingSpaceNov.setHandicaped(handicaped); } if(lat!=0 && !Objects.equals(ParkingSpaceNov.getLat(), lat)){ ParkingSpaceNov.setLat(lat); } if(lng!=0 && !Objects.equals(ParkingSpaceNov.getLng(), lng)){ ParkingSpaceNov.setLng(lng); } return ParkingSpaceNov; }else{ throw new IllegalStateException("ParkingSpace does not exist"); } } @Transactional public Optional deleteParkingSpace(int parkingSpaceId) { Optional parkingSpaceOpt = Optional.ofNullable(parkingSpaceRepository.findByPsId(parkingSpaceId)); if (parkingSpaceOpt.isPresent()) { parkingSpaceRepository.deleteByPsId(parkingSpaceId); } else { throw new IllegalStateException("ParkingSpace doesn't exist, therefore can't be deleted"); } return parkingSpaceOpt; } }