지난 번에 포인트 만료 기능까지 구현했으니 오늘은 나의 포인트 내역 조회 기능을 구현해보려고 한다.
이 코드는 비교적 간단하다.
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 |