Skip to content

Commit

Permalink
Merge pull request #109 from nhnacademy-be5-T3Team/feature/point_details
Browse files Browse the repository at this point in the history
feat: #89 회원 식별 로직 추가
  • Loading branch information
hydrationn authored May 16, 2024
2 parents f49dea5 + 735e96b commit 7fd3e65
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.t3t.frontserver.pointdetail.adaptor;

import com.t3t.frontserver.common.exception.ApiDataFetchException;
import com.t3t.frontserver.model.response.BaseResponse;
import com.t3t.frontserver.pointdetail.client.UserPointDetailApiClient;
import com.t3t.frontserver.pointdetail.model.response.PointDetailResponse;
import feign.FeignException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Objects;

/**
* 포인트 상세 정보를 가져오는 adaptor class
* 외부 시스템으로부터 사용자의 포인트 상세 내역을 가져오는 역할
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class UserPointDetailAdaptor {
private final UserPointDetailApiClient userPointDetailApiClient;

/**
* 사용자 ID와 포인트 상세 유형을 기반으로 포인트 상세 정보 조회
* @param memberId 회원 ID
* @param pointDetailType 조회할 포인트 타입(사용/적립), null이면 전체 내역 조회
* @return 조건에 맞는 포인트 상세 내역 리스트를 반환. 조회된 정보가 없거나, 요청 처리 중 오류가 발생한 경우 null 반환.
* @throws ApiDataFetchException 외부 시스템으로부터 데이터를 가져오는 과정에서 오류가 발생한 경우 예외 발생
* @author hydrationn(박수화)
*/
public List<PointDetailResponse> getPointDetailByPointDetailType(Long memberId, String pointDetailType) {
try {
ResponseEntity<BaseResponse<List<PointDetailResponse>>> response = userPointDetailApiClient.getPointDetailByPointDetailType(memberId, pointDetailType);
if (response.getStatusCode() == HttpStatus.OK) {
return Objects.requireNonNull(response.getBody()).getData();
}
return null;
} catch (FeignException e) {
log.error(e.getMessage());
throw new ApiDataFetchException();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ public interface UserPointDetailApiClient {

/**
* 회원의 포인트 타입에 따른 포인트 사용/적립 내역 조회 API 호출
* @param memberId 회원 ID
* @param pointDetailType 조회할 포인트 타입(사용/적립)
* @author hydrationn(박수화)
*/
@GetMapping("/t3t/bookstore/mypage/point-details")
public ResponseEntity<BaseResponse<List<PointDetailResponse>>> getPointDetailByPointDetailType(@RequestParam(name = "pointDetailType", required = false) String pointDetailType);
@GetMapping("/t3t/bookstore/member/{memberId}/point-details")
ResponseEntity<BaseResponse<List<PointDetailResponse>>> getPointDetailByPointDetailType(@PathVariable("memberId") Long memberId,
@RequestParam(name = "pointDetailType", required = false) String pointDetailType);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.t3t.frontserver.model.response.BaseResponse;
import com.t3t.frontserver.pointdetail.client.UserPointDetailApiClient;
import com.t3t.frontserver.pointdetail.model.response.PointDetailResponse;
import com.t3t.frontserver.pointdetail.service.UserPointDetailService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
Expand All @@ -18,11 +19,12 @@
@Controller
@RequiredArgsConstructor
public class UserPointDetailController {
private final UserPointDetailApiClient userPointDetailApiClient;
private final UserPointDetailService userPointDetailService;

/**
* 회원 포인트 사용/적립 내역 페이지 뷰 반환
* @return 포인트 사용/적립 내역 뷰
* 회원 포인트 전체/사용/적립 내역 페이지 뷰 반환
* @param pointDetailType 조회할 포인트 타입(사용/적립)
* @return 포인트 전체/사용/적립 내역 뷰
* @author hydrationn(박수화)
*/
@GetMapping("/mypage/point-details")
Expand All @@ -33,20 +35,9 @@ public String pointDetailView(Model model, @Valid @RequestParam(value = "pointDe
return "redirect:/login";
}

ResponseEntity<BaseResponse<List<PointDetailResponse>>> response = userPointDetailApiClient.getPointDetailByPointDetailType(pointDetailType); // 모든 내역을 가져오는 API 호출
Long memberId = SecurityContextUtils.getMemberId();

List<PointDetailResponse> pointDetails;

if (pointDetailType == null) {
// parameter가 null인 경우 모든 내역 반환
pointDetails = Objects.requireNonNull(response.getBody()).getData();
} else {
// pointDetailType(used, saved)에 해당하는 내역만 반환
pointDetails = Objects.requireNonNull(response.getBody()).getData()
.stream()
.filter(pointDetail -> pointDetail.getPointDetailType().equals(pointDetailType))
.collect(Collectors.toList());
}
List<PointDetailResponse> pointDetails = userPointDetailService.getPointDetailByPointDetailType(memberId, pointDetailType); // 모든 내역을 가져오는 API 호출

model.addAttribute("pointDetails", pointDetails);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.t3t.frontserver.pointdetail.service;

import com.t3t.frontserver.pointdetail.adaptor.UserPointDetailAdaptor;
import com.t3t.frontserver.pointdetail.model.response.PointDetailResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* 사용자의 포인트 상세 정보를 관리하는 서비스
* 외부 시스템으로부터 사용자의 포인트 상세 정보를 조회하는 기능 제공
*/
@Service
@RequiredArgsConstructor
public class UserPointDetailService {
private final UserPointDetailAdaptor userPointDetailAdaptor;

/**
* 회원 ID와 포인트 상세 유형을 기반으로 포인트 상세 내역 조회
* @param memberId 회원 ID
* @param pointDetailType 조회할 포인트 타입(사용/적립)
* @return 해당 조건에 맞는 포인트 상세 정보 리스트를 반환.
* 외부 시스템으로부터 정보를 성공적으로 조회하면 그에 대한 결과를, 그렇지 않으면 null을 반환.
* @author hydrationn(박수화)
*/
public List<PointDetailResponse> getPointDetailByPointDetailType(Long memberId, String pointDetailType) {
return userPointDetailAdaptor.getPointDetailByPointDetailType(memberId, pointDetailType);
}
}

0 comments on commit 7fd3e65

Please sign in to comment.