본문 바로가기
개발

[개발] 총 포인트 조회

by 공덕뉸나 2024. 4. 17.

이번에는 사용자별로 보유한 총 포인트가 몇 포인트인지를 조회할 수 있는 기능을 구현 해보았다.

나는 간단한 쿼리는 Spring Data JPA를 사용하고 있고 좀 더 복잡한 쿼리는 Querydsl를 활용하여 구현하고 있다.

총 포인트를 조회하는 쿼리는 조건절도 필요하고 집계함수 sum을 사용하여 보여줄 것이기 때문에 Querydsl을 사용하였다.

 

PointHistoryRepoSupport

public GetTotalPointDto getTotalPoint(Long userId) {
        JPAQuery<GetTotalPointDto> query = jpaQueryFactory
                .select(Projections.bean(GetTotalPointDto.class,
                        qPointHistory.amount.sum().as("totalPoint"), qPointHistory.userId))
                .from(qPointHistory)
                .where(qPointHistory.userId.eq(userId));
        return query.fetchOne();
}

 

나는 totalPoint라는 이름으로 총 포인트를 보여주고 싶어서 alias를 사용하였다.

 

GetTotalPointDto

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetTotalPointDto {
    private Long totalPoint;
    private Long userId;
}

 

PointHistoryService

public GetTotalPointDto getPointTotal(Long userId) {
        return pointHistoryRepoSupport.getTotalPoint(userId);
}

 

총 포인트를 조회할 일이 많으면 여기에서 캐시를 적용해도 좋을 것 같다.

PointApi

@PreAuthorize("hasRole('ROLE_USER')")
@GetMapping("/total")
public ApiResult<GetTotalPointDto> getTotalPoint(@LoginUser CustomUserDetails customUserDetails) {
     return success(pointHistoryService.getPointTotal(customUserDetails.getUserId()));
 }

 

userId를 직접 받아오지 않아도 로그인된 사용자로부터 userId를 가져올 수 있도록 @LoginUser를 적용하였다.

 

구현을 완료하고 swagger로 확인해보면,

 

결과값이 제대로 나오는 것을 확인할 수 있었다.

 

이제 포인트 사용, 포인트 내역 조회, 포인트 만료 스케줄러 등 하나씩 차근차근 마저 구현해보도록 해야겠다.

 

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

[개발] 포인트 차감  (0) 2024.05.30
[개발] Maven 의존성 추가  (0) 2024.05.28
[개발] 포인트 적립 구현 - 2  (0) 2024.04.16
[개발] 포인트 적립 구현 - 1  (0) 2024.04.15
포인트 기능 요구사항 정리  (0) 2024.04.11