diff --git a/cars4you/pom.xml b/cars4you/pom.xml index e68d680..e3222ec 100644 --- a/cars4you/pom.xml +++ b/cars4you/pom.xml @@ -49,6 +49,12 @@ provided + + com.vladmihalcea + hibernate-types-52 + 2.8.0 + + diff --git a/cars4you/src/main/java/com/cars/car4you/api/CarsController.java b/cars4you/src/main/java/com/cars/car4you/api/CarsController.java index 792f6b4..350d500 100644 --- a/cars4you/src/main/java/com/cars/car4you/api/CarsController.java +++ b/cars4you/src/main/java/com/cars/car4you/api/CarsController.java @@ -1,6 +1,8 @@ package com.cars.car4you.api; import com.cars.car4you.model.Car; +import com.cars.car4you.model.CarDetails; +import com.cars.car4you.repository.CarDetailRepository; import com.cars.car4you.repository.CarRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -16,6 +18,9 @@ public class CarsController { @Autowired private CarRepository carRepository; + @Autowired + private CarDetailRepository carDetailRepository; + @GetMapping("/{id}") public Car findOne(@PathVariable Long id) { diff --git a/cars4you/src/main/java/com/cars/car4you/dto/CarDto.java b/cars4you/src/main/java/com/cars/car4you/dto/CarDto.java new file mode 100644 index 0000000..4fee402 --- /dev/null +++ b/cars4you/src/main/java/com/cars/car4you/dto/CarDto.java @@ -0,0 +1,4 @@ +package com.cars.car4you.dto; + +public class CarDto { +} diff --git a/cars4you/src/main/java/com/cars/car4you/model/Car.java b/cars4you/src/main/java/com/cars/car4you/model/Car.java index 7bd064a..2930dc7 100644 --- a/cars4you/src/main/java/com/cars/car4you/model/Car.java +++ b/cars4you/src/main/java/com/cars/car4you/model/Car.java @@ -2,14 +2,19 @@ package com.cars.car4you.model; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; +import javax.persistence.*; @Entity @Data public class Car { + @ManyToOne +// @JoinTable(name = "car_details") + private CarDetails carDetails; + + @Column(nullable = false, unique = false, insertable = false, updatable = false) + private long car_details_id; + @Id private long id; diff --git a/cars4you/src/main/java/com/cars/car4you/model/CarDetails.java b/cars4you/src/main/java/com/cars/car4you/model/CarDetails.java index 35b0a64..9a71e83 100644 --- a/cars4you/src/main/java/com/cars/car4you/model/CarDetails.java +++ b/cars4you/src/main/java/com/cars/car4you/model/CarDetails.java @@ -1,10 +1,53 @@ package com.cars.car4you.model; +import com.vladmihalcea.hibernate.type.array.StringArrayType; import lombok.Data; +import org.hibernate.annotations.Type; +import org.hibernate.annotations.TypeDef; +import org.hibernate.annotations.TypeDefs; -import javax.persistence.Entity; +import javax.persistence.*; +import java.util.List; @Entity @Data +@Table(name = "car_details") +@TypeDefs(@TypeDef(name = "string-array", typeClass = StringArrayType.class)) public class CarDetails { + +// @OneToMany(mappedBy = "car_details_id") +// private List cars; + + @Id + private Long id; + + @Column(nullable = false, unique = false) + private String brand; + + @Column(nullable = false, unique = false) + private String model; + + @Column(nullable = false, unique = false) + private String version; + + @Column(nullable = true, unique = false) + private Long price_from; + + @Column(nullable = true, unique = false) + private Long price_to; + + @Column(nullable = true, unique = false) + private Double average; + + @Type(type = "string-array" ) + @Column(name = "car_pros") + private String[] car_pros; + + @Type(type = "string-array" ) + @Column(name = "car_cons") + private String[] car_cons; + + @Column(nullable = true, unique = false) + private Double rating; + } diff --git a/cars4you/src/main/java/com/cars/car4you/repository/CarDetailRepository.java b/cars4you/src/main/java/com/cars/car4you/repository/CarDetailRepository.java new file mode 100644 index 0000000..0e624af --- /dev/null +++ b/cars4you/src/main/java/com/cars/car4you/repository/CarDetailRepository.java @@ -0,0 +1,14 @@ +package com.cars.car4you.repository; + +import com.cars.car4you.model.Car; +import com.cars.car4you.model.CarDetails; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CarDetailRepository extends CrudRepository { + List findByModel(String model); + +} diff --git a/cars4you/src/main/java/com/cars/car4you/repository/CarRepositoryImpl.java b/cars4you/src/main/java/com/cars/car4you/repository/CarRepositoryImpl.java index f6b8cee..c234110 100644 --- a/cars4you/src/main/java/com/cars/car4you/repository/CarRepositoryImpl.java +++ b/cars4you/src/main/java/com/cars/car4you/repository/CarRepositoryImpl.java @@ -1,9 +1,6 @@ package com.cars.car4you.repository; -import com.cars.car4you.model.Car; -import com.cars.car4you.model.CarType; -import com.cars.car4you.model.DriveType; -import com.cars.car4you.model.FuelType; +import com.cars.car4you.model.*; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; @@ -12,7 +9,6 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import javax.script.ScriptEngine; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -26,11 +22,12 @@ public class CarRepositoryImpl implements CustomCarRepository { @Override public List findByCriterion(int maxPrice, int maxYearsOld, int seats, CarType carType, - ArrayList fuelTypes, - String transmission, int enginePower, DriveType drivetype) { + String fuelType, + String transmission, int enginePower, String driveType) { CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery cq = criteriaBuilder.createQuery(Car.class); + Root car = cq.from(Car.class); List predicates = new ArrayList<>(); @@ -42,6 +39,11 @@ public class CarRepositoryImpl implements CustomCarRepository { predicates.add(criteriaBuilder.greaterThanOrEqualTo(car.get("year"),localDateTime.getYear() - maxYearsOld)); + predicates.add(criteriaBuilder.greaterThanOrEqualTo(car.get("engine_power"), enginePower)); + predicates.add(criteriaBuilder.like(car.get("transmission"), "%" + transmission + "%")); + predicates.add(criteriaBuilder.like(car.get("fuel"), "%" + fuelType + "%")); + predicates.add(criteriaBuilder.like(car.get("drivetype"), "%" + fuelType + "%")); + cq.where(predicates.toArray(new Predicate[0])); return em.createQuery(cq).getResultList(); diff --git a/cars4you/src/main/java/com/cars/car4you/repository/CustomCarRepository.java b/cars4you/src/main/java/com/cars/car4you/repository/CustomCarRepository.java index 76d7d18..823410e 100644 --- a/cars4you/src/main/java/com/cars/car4you/repository/CustomCarRepository.java +++ b/cars4you/src/main/java/com/cars/car4you/repository/CustomCarRepository.java @@ -2,16 +2,15 @@ package com.cars.car4you.repository; import com.cars.car4you.model.Car; import com.cars.car4you.model.CarType; -import com.cars.car4you.model.DriveType; -import com.cars.car4you.model.FuelType; +import org.springframework.stereotype.Repository; -import java.util.ArrayList; import java.util.List; +@Repository public interface CustomCarRepository { List findByCriterion(int maxPrice, int maxYearsOld, int seats, CarType carType, - ArrayList fuelTypes, - String transmission, int enginePower, DriveType drivetype); + String fuelTypes, + String transmission, int enginePower, String drivetype); }