본문 바로가기
개발

[개발] 내 포인트 내역 조회

by 공덕뉸나 2024. 6. 4.

지난 번에 포인트 만료 기능까지 구현했으니 오늘은 나의 포인트 내역 조회 기능을 구현해보려고 한다.

이 코드는 비교적 간단하다.

 

JPA를 사용하여 간단하게 리스트를 추출할 수 있다.

 

PointHistoryRepo

public interface PointHistoryRepo extends JpaRepository<PointHistory, Long> {
    List<PointHistory> findAllByUserIdOrderByCreatedDateDesc(Long userId);
}

 

createdDate를 기준으로 내림차순하여 userId를 가지고 PointHistory의 모든 필드들을 가져오는 것이다.

 

PointHistoryService

public List<GetMyPointHistoryResponse> getMyPointList(Long userId) {
        List<PointHistory> list = pointHistoryRepo.findAllByUserIdOrderByCreatedDateDesc(userId);

        return list.stream().map(o -> GetMyPointHistoryResponse.builder()
                .pointHistoryId(o.getPointHistoryId())
                .pointHistoryType(o.getPointHistoryType())
                .pointStat(o.getPointStat())
                .amount(o.getAmount())
                .endDt(o.getEndDt())
                .remarks(o.getRemarks())
                .createdDate(o.getCreatedDate())
                .build()
        ).collect(Collectors.toList());
    }

 

리스트를 추출한 후에는 DTO로 받아올 것이기 때문에 map을 사용하여 변환해준다.

 

GetMyPointHistoryResponse

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetMyPointHistoryResponse {
    private Long pointHistoryId;
    private Long amount;
    private LocalDateTime createdDate;
    private LocalDateTime endDt;
    private PointHistoryType pointHistoryType;
    private PointStat pointStat;
    private String remarks;
}

 

Response DTO에는 PointHistory의 필드들을 담았다.

 

PointApi

@PreAuthorize("hasRole('ROLE_USER')")
    @GetMapping("/my")
    public ApiResult<List<GetMyPointHistoryResponse>> getMyPointHistory(@LoginUser CustomUserDetails customUserDetails) {
        return success(pointHistoryService.getMyPointList(customUserDetails.getUserId()));
    }

 

파라미터로 userId가 필요한데 이는 로그인된 유저의 아이디값을 받아오도록 초기에 구현해두었기 때문에 @LoginUser를 사용하여 로그인된 사용자 정보를 얻어왔다.

 

여기까지 하고 swagger로 포인트 내역을 잘 불러오는지 테스트 해보니

 

{
  "success": true,
  "response": [
    {
      "pointHistoryId": 14,
      "amount": -1,
      "createdDate": "2024-06-03T15:55:22.01615",
      "endDt": null,
      "pointHistoryType": null,
      "pointStat": "EXPIRATION",
      "remarks": "만료소멸"
    },
    {
      "pointHistoryId": 9,
      "amount": 3,
      "createdDate": "2024-06-03T15:33:59.24067",
      "endDt": "2024-08-03T15:33:59",
      "pointHistoryType": "REGISTRATION",
      "pointStat": "ACCUMULATE",
      "remarks": "게시글 등록 적립"
    },
    {
      "pointHistoryId": 8,
      "amount": 3,
      "createdDate": "2024-06-03T15:33:29.948527",
      "endDt": "2024-08-03T15:33:29",
      "pointHistoryType": "REGISTRATION",
      "pointStat": "ACCUMULATE",
      "remarks": "게시글 등록 적립"
    },
    {
      "pointHistoryId": 3,
      "amount": -3,
      "createdDate": "2024-05-13T15:09:27.476",
      "endDt": null,
      "pointHistoryType": "MODIFY",
      "pointStat": "USE",
      "remarks": "게시글 수정"
    },
    {
      "pointHistoryId": 4,
      "amount": -2,
      "createdDate": "2024-05-13T15:09:27.476",
      "endDt": null,
      "pointHistoryType": "DELETE",
      "pointStat": "USE",
      "remarks": "게시글 삭제"
    },
    {
      "pointHistoryId": 5,
      "amount": 3,
      "createdDate": "2024-05-13T15:09:27.476",
      "endDt": "2024-05-15T11:11:35",
      "pointHistoryType": "REGISTRATION",
      "pointStat": "ACCUMULATE",
      "remarks": "게시글 등록 적립"
    },
    {
      "pointHistoryId": 6,
      "amount": -3,
      "createdDate": "2024-05-13T15:09:27.476",
      "endDt": null,
      "pointHistoryType": "MODIFY",
      "pointStat": "USE",
      "remarks": "게시글 수정"
    },
    {
      "pointHistoryId": 2,
      "amount": 3,
      "createdDate": "2024-04-15T11:13:13.498278",
      "endDt": "2024-05-15T11:11:35",
      "pointHistoryType": "REGISTRATION",
      "pointStat": "ACCUMULATE",
      "remarks": "게시글 등록 적립"
    },
    {
      "pointHistoryId": 1,
      "amount": 3,
      "createdDate": "2024-04-15T11:11:35.515951",
      "endDt": "2024-05-15T11:11:35",
      "pointHistoryType": "REGISTRATION",
      "pointStat": "ACCUMULATE",
      "remarks": "게시글 등록 적립"
    }
  ],
  "error": null
}

 

이렇게 createdDate를 기준으로 내림차순 정렬로 잘 불러오는 것을 확인할 수 있었다.

 

다음에는 관리자용으로 검색 기능을 넣어서 사용자들의 포인트 내역을 조회할 수 있도록 구현해봐야겠다.

 

'개발' 카테고리의 다른 글

[개발] 사이드 프로젝트 시작  (1) 2024.10.10
[에러] swagger로 테스트 시 LocalDateTime typeMisMatch  (0) 2024.06.26
[개발] 포인트 만료  (1) 2024.06.03
[개발] 포인트 차감  (0) 2024.05.30
[개발] Maven 의존성 추가  (0) 2024.05.28