Gamification

portal2moon·2020년 11월 8일
0

social multiplication의 두 번째 마이크로서비스인 게임화 마이크로서비스 gamification 에 대해.

User의 Stat을 관리하는 Controller 입니다. User의 Stat이란, User가 쌓은 총 Score나 유저가 획득한 Badge에 관한 것 입니다. GameService를 생성자를 통한 의존성 주입을 하고 있습니다.

메소드는 GetMapping이 되어있는 getStatsForUser로 user의 아이디를 받아 Service의 retrieveStatsForUser를 호출하고 마칩니다.

LeaderBoard 의 row들을 반환하는 Controller입니다. GetMapping이 되어있는 메서드는 리더보드를 반환합니다.

Client

위 객체는 곱셈마이크로서비스의 MultiplicationResultAttempt 엔티티에서 Id와 필드를 축소시켜 만든 객체이다. RestTemplate으로 클라이언트처럼 요청을 보내 MultiplicationResultAttempt 를 얻어올 것이지만 위 객체로는 필드가 다르기 때문에 아무런 설정없이 Json 객체를 Deserialize 할 수 없다.

위 코드는 서비스코드에서 일부분을 따온 것이다. attemptClient는 RestTemplate을 정의한 빈이다. retrieveMultiplicationResultAttempt() 메서드의 반환값으로 위의 객체를 받는 모습을 볼 수 있다.

어떻게 필드가 다른데 Json객체를 Deserialize 할 수 있는지 확인해 보자.

JsonNode 를 생성해서 생성하려는 객체 필드를 node.get을 해서 원하는 속성을 뽑아낸다. json객체에서 user 의 alias 나 multiplication 객체의 factorA 나 factorB를 가져오는 등 원하는 필드만 추출 할 수 있다.

Repository

Social Multiplication 마이크로서비스의 repository 와 조금 다른 모습의 repository이다. @Query 안의 쿼리문은 JPQL로 JPA에서 메소드 이름 조합으로만으로 원하는 작업을 할 수 없을 때, 더 정교하게 작업하기 위해 필요한 것이다. JPQL은 테이블을 대상으로 하는 쿼리문이 아니라 엔티티를 대상으로 한 쿼리문이다.

profile
아예 안쓰는것보단.. 조금이라도 써 놓는 것이 도움이 될것같아 만든 벨로그입니다

0개의 댓글