회원별 상품 API 구현

금은체리·2023년 11월 18일
1

Spring

목록 보기
38/49

상품과 회원의 관계

  1. 상품 등록 시 누구의 상품인지 등록 필요
    • 관심 상품 등록시, 등록을 요청한 "회원 정보"추가가 필요
  2. 상품과 회원의 관계를 생각해봄

    상품 : 회원 = N : 1

  • 즉, 한명의 회원은 다수의 상품을 가질 수 있음
    • My 셀렉샵의 상품은 검색 API를 사용하여 검색한 상품을 관심 상품으로 등록하는 것이기 때문에 만약 같은 상품이 검색되어 여러 회원에게 등록 되더라도 서비스 상에서는 다른 상품으로 인지됨
  1. 연관관계의 방향을 선택
    • 회원 객체에서 상품 객체를 조회하는 경우가 없기 때문에 상품과 회원을 N : 1 단방향 연관관계로 설정
      • Product
       @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(name = "user_id", nullable = false)
       private User user;

상품 등록 및 조회 구현

  • Controller에서 로그인 회원 정보를 받아 Servic로 전달
// 관심 상품 등록하기
@PostMapping("/products")
public ProductResponseDto createProduct(@RequestBody ProductRequestDto requestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
    // 응답 보내기
    return productService.createProduct(requestDto, userDetails.getUser());
}

// 관심 상품 조회하기
@GetMapping("/products")
public List<ProductResponseDto> getProducts(@AuthenticationPrincipal UserDetailsImpl userDetails) {
    // 응답 보내기
    return productService.getProducts(userDetails.getUser());
}
  • Service에서 회원별 상품 등록 및 조회 구현
public ProductResponseDto createProduct(ProductRequestDto requestDto, User user) {
    Product product = productRepository.save(new Product(requestDto, user));
    return new ProductResponseDto(product);
}

public List<ProductResponseDto> getProducts(User user) {
    List<Product> productList = productRepository.findALlByUser(user);
    List<ProductResponseDto> responseDtoList = new ArrayList<>();

    for (Product product : productList) {
        responseDtoList.add(new ProductResponseDto(product));
    }
    return responseDtoList;
}
  • Repository에 회원별 상품을 조회하는 메서드 추가
public interface ProductRepository extends JpaRepository<Product, Long> {
    List<Product> findALlByUser(User user);
}
  • Admin 계정 모든 상품 조회 기능 추가

    • ProductController
    // 관리자 조회
    @GetMapping("/admin/products")
    public List<ProductResponseDto> getAllProducts() {
        return productService.getAllProducts();
    }
    • ProductService
    public List<ProductResponseDto> getAllProducts() {
        List<Product> productList = productRepository.findAll();
        List<ProductResponseDto> responseDtoList = new ArrayList<>();
    
        for (Product product : productList) {
            responseDtoList.add(new ProductResponseDto(product));
        }
        return responseDtoList;
    }
profile
전 체리 알러지가 있어요!

0개의 댓글