diff --git a/bike-service/src/main/java/com/example/bikeservice/controller/BikeController.java b/bike-service/src/main/java/com/example/bikeservice/controller/BikeController.java index d1a0ad0..a90f2f8 100644 --- a/bike-service/src/main/java/com/example/bikeservice/controller/BikeController.java +++ b/bike-service/src/main/java/com/example/bikeservice/controller/BikeController.java @@ -51,10 +51,6 @@ public class BikeController { public ResponseEntity> getByUserId(@PathVariable("userId") int userId) { List bikes = bikeService.findByUserId(userId); - if (bikes.isEmpty()) { - return ResponseEntity.noContent().build(); - } else { - return ResponseEntity.ok(bikes); - } + return ResponseEntity.ok(bikes); } } diff --git a/car-service/src/main/java/com/example/carservice/controller/CarController.java b/car-service/src/main/java/com/example/carservice/controller/CarController.java index 2b9e9ea..96b7549 100644 --- a/car-service/src/main/java/com/example/carservice/controller/CarController.java +++ b/car-service/src/main/java/com/example/carservice/controller/CarController.java @@ -51,10 +51,6 @@ public class CarController { public ResponseEntity> getByUserId(@PathVariable("userId") int userId) { List cars = carService.findByUserId(userId); - if (cars.isEmpty()) { - return ResponseEntity.noContent().build(); - } else { - return ResponseEntity.ok(cars); - } + return ResponseEntity.ok(cars); } } diff --git a/user-service/pom.xml b/user-service/pom.xml index 1b6071b..06bb051 100644 --- a/user-service/pom.xml +++ b/user-service/pom.xml @@ -25,6 +25,11 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.cloud + spring-cloud-starter-openfeign + 3.1.4 + com.h2database @@ -42,6 +47,17 @@ test + + + + org.springframework.cloud + spring-cloud-dependencies + 2021.0.4 + pom + import + + + diff --git a/user-service/src/main/java/com/example/userservice/UserServiceApplication.java b/user-service/src/main/java/com/example/userservice/UserServiceApplication.java index 5b80922..1d16693 100644 --- a/user-service/src/main/java/com/example/userservice/UserServiceApplication.java +++ b/user-service/src/main/java/com/example/userservice/UserServiceApplication.java @@ -2,8 +2,10 @@ package com.example.userservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication +@EnableFeignClients public class UserServiceApplication { public static void main(String[] args) { diff --git a/user-service/src/main/java/com/example/userservice/controller/UserController.java b/user-service/src/main/java/com/example/userservice/controller/UserController.java index 0c7d753..feece86 100644 --- a/user-service/src/main/java/com/example/userservice/controller/UserController.java +++ b/user-service/src/main/java/com/example/userservice/controller/UserController.java @@ -1,6 +1,8 @@ package com.example.userservice.controller; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -71,4 +73,34 @@ public class UserController { return ResponseEntity.ok(userService.getBikes(userId)); } } + + @PostMapping("/savecar/{userId}") + public ResponseEntity saveCar(@PathVariable("userId") int userId, @RequestBody Car car) { + User user = userService.getUserById(userId); + + if (user == null) { + return ResponseEntity.notFound().build(); + } else { + return ResponseEntity.ok(userService.saveCar(car, userId)); + } + + } + + @PostMapping("/savebike/{userId}") + public ResponseEntity saveBike(@PathVariable("userId") int userId, @RequestBody Bike bike) { + User user = userService.getUserById(userId); + + if (user == null) { + return ResponseEntity.notFound().build(); + } else { + return ResponseEntity.ok(userService.saveBike(bike, userId)); + } + } + + @GetMapping("/getAll/{userId}") + public ResponseEntity> getAllVehicules(@PathVariable("userId") int userId) { + Map result = userService.getUserAndVehicules(userId); + return ResponseEntity.ok(result); + + } } diff --git a/user-service/src/main/java/com/example/userservice/feignclients/BikeFeignClient.java b/user-service/src/main/java/com/example/userservice/feignclients/BikeFeignClient.java new file mode 100644 index 0000000..0ab4ad4 --- /dev/null +++ b/user-service/src/main/java/com/example/userservice/feignclients/BikeFeignClient.java @@ -0,0 +1,21 @@ +package com.example.userservice.feignclients; + +import java.util.List; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.example.userservice.model.Bike; + +@FeignClient(name = "bike-service", url = "http://localhost:8003/bikes") +public interface BikeFeignClient { + @PostMapping + Bike save(@RequestBody Bike bike); + + @GetMapping("/byuser/{userId}") + List getBikes(@PathVariable("userId") int userId); +} diff --git a/user-service/src/main/java/com/example/userservice/feignclients/CarFeignClient.java b/user-service/src/main/java/com/example/userservice/feignclients/CarFeignClient.java new file mode 100644 index 0000000..4c0671d --- /dev/null +++ b/user-service/src/main/java/com/example/userservice/feignclients/CarFeignClient.java @@ -0,0 +1,21 @@ +package com.example.userservice.feignclients; + +import java.util.List; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.example.userservice.model.Car; + +@FeignClient(name = "car-service", url = "http://localhost:8002/cars") +public interface CarFeignClient { + @PostMapping + Car save(@RequestBody Car car); + + @GetMapping("/byuser/{userId}") + List getCars(@PathVariable("userId") int userId); +} diff --git a/user-service/src/main/java/com/example/userservice/model/Bike.java b/user-service/src/main/java/com/example/userservice/model/Bike.java index 10b3ca6..9898f3e 100644 --- a/user-service/src/main/java/com/example/userservice/model/Bike.java +++ b/user-service/src/main/java/com/example/userservice/model/Bike.java @@ -10,4 +10,5 @@ import lombok.NoArgsConstructor; public class Bike { private String brand; private String model; + private int userId; } diff --git a/user-service/src/main/java/com/example/userservice/model/Car.java b/user-service/src/main/java/com/example/userservice/model/Car.java index b15ccfc..f337655 100644 --- a/user-service/src/main/java/com/example/userservice/model/Car.java +++ b/user-service/src/main/java/com/example/userservice/model/Car.java @@ -10,4 +10,5 @@ import lombok.NoArgsConstructor; public class Car { private String brand; private String model; + private int userId; } diff --git a/user-service/src/main/java/com/example/userservice/service/UserService.java b/user-service/src/main/java/com/example/userservice/service/UserService.java index 847074e..1ae9056 100644 --- a/user-service/src/main/java/com/example/userservice/service/UserService.java +++ b/user-service/src/main/java/com/example/userservice/service/UserService.java @@ -1,12 +1,16 @@ package com.example.userservice.service; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import com.example.userservice.entity.User; +import com.example.userservice.feignclients.BikeFeignClient; +import com.example.userservice.feignclients.CarFeignClient; import com.example.userservice.model.Bike; import com.example.userservice.model.Car; import com.example.userservice.repository.UserRepository; @@ -17,6 +21,10 @@ public class UserService { UserRepository userRepository; @Autowired RestTemplate restTemplate; + @Autowired + CarFeignClient carFeignClient; + @Autowired + BikeFeignClient bikeFeignClient; public List getAll() { return userRepository.findAll(); @@ -37,4 +45,38 @@ public class UserService { public List getBikes(int userId) { return restTemplate.getForObject("http://localhost:8003/bikes/byuser/" + userId, List.class); } + + public Car saveCar(Car car, int userId) { + car.setUserId(userId); + return carFeignClient.save(car); + } + + public Bike saveBike(Bike bike, int userId) { + bike.setUserId(userId); + return bikeFeignClient.save(bike); + } + + public Map getUserAndVehicules(int userId) { + Map result = new HashMap<>(); + User user = userRepository.findById(userId).orElse(null); + if (user == null) { + result.put("Mensaje", "No existe el usuario"); + return result; + } + result.put("User", user); + List cars = carFeignClient.getCars(userId); + if (cars.isEmpty()) { + result.put("Cars", "Este usuario no tiene coches"); + } else { + result.put("Cars", cars); + } + List bikes = bikeFeignClient.getBikes(userId); + if (cars.isEmpty()) { + result.put("Bikes", "Este usuario no tiene motos"); + } else { + result.put("Bikes", bikes); + } + + return result; + } }