ユーザークエリー


🔨APIゲートウェイの追加
server:
  port: 8000

eureka: #eureka 세팅은 현재 사용 안함
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

spring:
  application:  #gateway service 이름
    name: apigateway-service
  cloud:
    gateway:  #gateway 설정
      default-filters:
        - name : GlobalFilter #Global Filter로 지정된 java 파일 이름
          args:
            baseMessage: Spring Cloud Gateway Global Filter
            preLogger: true
            postLogger: true
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/users/**
          filters:
            - CustomFilter
以前使用していたapi gatewayでは、ymlを変更するだけで使用できます
@RestController
@RequestMapping("/user-service")
@RequiredArgsConstructor
public class UserController {

    ...
}
コントローラも変更されます

gatewayでリクエストが正常に動作していることを確認できます.
🔨ユーザー・クエリー・サービスの作成
ResponseOrderの作成
@Data
public class ResponseOrder {
    private String productId;
    private Integer qty;
    private Integer unitPrice;
    private Integer totalPrice;
    private LocalDateTime createdAt;
    private String orderId;
}
まずuserに受注を追加するために作成します
ResponseUserの変更
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)  //반환 데이터 중 null 들어가는 것을 방지
public class ResponseUser {
    private String email;
    private String name;
    private String userId;

    private List<ResponseOrder> orders;
}
userデータへの受注の追加
Userdtoの変更
@Data
public class UserDto {
    private String email;
    private String name;
    private String pwd;
    private String userId;
    private LocalDateTime createAt;
    private String encryptedPwd;
    private List<ResponseOrder> orders;
}
dtoに追加
コントローラの変更
@RestController
@RequestMapping("/user-service")
@RequiredArgsConstructor
public class UserController {

    ...

    @GetMapping("/users")
    public ResponseEntity<List<ResponseUser>> getUsers(){
        Iterable<UserEntity> userList = userService.getUserByAll();
        List<ResponseUser> result = new ArrayList<>();
        userList.forEach(v -> {
            result.add(new ModelMapper().map(v,ResponseUser.class));
        });

        return ResponseEntity.ok().body(result);
    }

    @GetMapping("/users/{userId}")
    public ResponseEntity<ResponseUser> getUser(@PathVariable("userId") String userId){
        UserDto userDto = userService.getUserByUserId(userId);
        ResponseUser responseUser = new ModelMapper().map(userDto, ResponseUser.class);
        return ResponseEntity.ok().body(responseUser);
    }
}
コントローラにurlを2つ追加
サービスの変更
public interface UserService {
    ResponseUser createUser(UserDto userDto);
    UserDto getUserByUserId(String userId);
    Iterable<UserEntity> getUserByAll();
}
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService{
    ...

    @Override
    public UserDto getUserByUserId(String userId) {
        UserEntity userEntity = userRepository.findByUserId(userId);
        if(userEntity == null) throw new UsernameNotFoundException("user name not found!");
        UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
        List<ResponseOrder> orderList = new ArrayList<>();
        userDto.setOrders(orderList);
        return userDto;
    }

    @Override
    public Iterable<UserEntity> getUserByAll() {
        return userRepository.findAll();
    }
}
ユーザーレポートの変更
public interface UserRepository extends CrudRepository<UserEntity, Long> {
    UserEntity findByUserId(String userId);
}
サービスからロードされたfindの追加
結果


まず2つのアカウントを登録します.

すべての検索機能

1人のプレイヤーを検索する機能が正常に動作していることを確認できます.