diff --git a/src/main/java/com/ironhack/users_micro/UsersMicroApplication.java b/src/main/java/com/ironhack/users_micro/UsersMicroApplication.java index 47be7d2..ebd5466 100644 --- a/src/main/java/com/ironhack/users_micro/UsersMicroApplication.java +++ b/src/main/java/com/ironhack/users_micro/UsersMicroApplication.java @@ -2,10 +2,19 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.web.client.RestTemplate; @SpringBootApplication public class UsersMicroApplication { + @Bean + @LoadBalanced + public RestTemplate getRestTemplate(){ + return new RestTemplate(); + } + public static void main(String[] args) { SpringApplication.run(UsersMicroApplication.class, args); } diff --git a/src/main/java/com/ironhack/users_micro/controller/UserController.java b/src/main/java/com/ironhack/users_micro/controller/UserController.java index 0dd2e12..d0feda1 100644 --- a/src/main/java/com/ironhack/users_micro/controller/UserController.java +++ b/src/main/java/com/ironhack/users_micro/controller/UserController.java @@ -1,20 +1,32 @@ package com.ironhack.users_micro.controller; +import com.ironhack.users_micro.dto.AccountDto; import com.ironhack.users_micro.dto.UserPatchAccountDTO; import com.ironhack.users_micro.exception.UserNotFoundException; import com.ironhack.users_micro.model.User; +import com.ironhack.users_micro.repository.UserRepository; import com.ironhack.users_micro.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; import java.util.List; +import java.util.Optional; @RestController @RequestMapping("/api/user") public class UserController { + + @Autowired + private RestTemplate restTemplate; + private final UserService userService; + @Autowired + private UserRepository userRepository; + public UserController(UserService userService) { this.userService = userService; } @@ -26,12 +38,13 @@ public List getAllUsers() { @GetMapping("/{id}") public ResponseEntity getUserById(@PathVariable long id) { - try { + /*try { User foundUser = userService.getUserById(id); return new ResponseEntity<>(foundUser, HttpStatus.FOUND); } catch (UserNotFoundException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND); - } + }*/ + return userService.getUserById(id); } @PostMapping diff --git a/src/main/java/com/ironhack/users_micro/dto/AccountDto.java b/src/main/java/com/ironhack/users_micro/dto/AccountDto.java new file mode 100644 index 0000000..9ebeef7 --- /dev/null +++ b/src/main/java/com/ironhack/users_micro/dto/AccountDto.java @@ -0,0 +1,16 @@ +package com.ironhack.users_micro.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +import java.math.BigDecimal; +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AccountDto { + private Long id; + private String isbn; + private BigDecimal balance; +} diff --git a/src/main/java/com/ironhack/users_micro/dto/UserResponseDTO.java b/src/main/java/com/ironhack/users_micro/dto/UserResponseDTO.java new file mode 100644 index 0000000..eb47188 --- /dev/null +++ b/src/main/java/com/ironhack/users_micro/dto/UserResponseDTO.java @@ -0,0 +1,24 @@ +package com.ironhack.users_micro.dto; + +import com.ironhack.users_micro.model.User; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserResponseDTO { + + private Long id; + private String username; + private Long accountID; + private AccountDto account; + + public UserResponseDTO(User user, AccountDto account ) { + setId(user.getId()); + setUsername(user.getUsername()); + setAccountID(user.getAccountID()); + setAccount(account); + } +} diff --git a/src/main/java/com/ironhack/users_micro/service/UserService.java b/src/main/java/com/ironhack/users_micro/service/UserService.java index 35957ce..6cf3b58 100644 --- a/src/main/java/com/ironhack/users_micro/service/UserService.java +++ b/src/main/java/com/ironhack/users_micro/service/UserService.java @@ -1,11 +1,16 @@ package com.ironhack.users_micro.service; +import com.ironhack.users_micro.dto.AccountDto; +import com.ironhack.users_micro.dto.UserResponseDTO; import com.ironhack.users_micro.exception.UserNotFoundException; import com.ironhack.users_micro.model.User; import com.ironhack.users_micro.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.client.RestTemplate; import java.util.List; import java.util.Optional; @@ -14,20 +19,32 @@ public class UserService { private final UserRepository userRepository; + @Autowired + private RestTemplate restTemplate; + public UserService(UserRepository userRepository) { this.userRepository = userRepository; } - public User getUserById(long id){ - Optional optionalUser = userRepository.findById(id); + public ResponseEntity getUserById(Long id){ + Optional user = userRepository.findById(id); - if(optionalUser.isPresent()){ - return optionalUser.get(); - }else{ - throw new UserNotFoundException("The user was not found"); + if(user.isPresent()) { + AccountDto account = restTemplate.getForObject("http://accounts-micro/api/account/" + user.get().getAccountID(), AccountDto.class); + + System.out.println("La cuenta es: " + account); + + UserResponseDTO response = new UserResponseDTO(user.get(), account); + + return new ResponseEntity<>(response, HttpStatus.OK); + + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } + + public List getAllUsers() { return userRepository.findAll(); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 37c2359..ac13bd2 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,8 +1,9 @@ spring.application.name=users-micro spring.datasource.url=jdbc:mysql://localhost:3306/users_micro spring.datasource.username=root -spring.datasource.password=admin +spring.datasource.password=SQL1993? spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect spring.jpa.hibernate.ddl-auto=update -eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ \ No newline at end of file +eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ +server.port=8080 \ No newline at end of file