-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: (#515) ranking 도메인 패키지로 변경
- Loading branch information
Showing
14 changed files
with
230 additions
and
108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
backend/src/main/java/com/votogether/domain/member/service/RankingBoard.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
backend/src/main/java/com/votogether/domain/ranking/controller/RankingController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.votogether.domain.ranking.controller; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.ranking.dto.response.RankingResponse; | ||
import com.votogether.domain.ranking.service.RankingService; | ||
import com.votogether.global.jwt.Auth; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@RequiredArgsConstructor | ||
@RestController | ||
public class RankingController implements RankingControllerDocs { | ||
|
||
private final RankingService rankingService; | ||
|
||
@GetMapping("members/me/ranking") | ||
public ResponseEntity<RankingResponse> getRanking(@Auth final Member member) { | ||
final RankingResponse response = rankingService.getRanking(member); | ||
return ResponseEntity.ok(response); | ||
} | ||
|
||
} |
17 changes: 17 additions & 0 deletions
17
backend/src/main/java/com/votogether/domain/ranking/controller/RankingControllerDocs.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.votogether.domain.ranking.controller; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.ranking.dto.response.RankingResponse; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.responses.ApiResponse; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import org.springframework.http.ResponseEntity; | ||
|
||
@Tag(name = "랭킹", description = "랭킹 API") | ||
public interface RankingControllerDocs { | ||
|
||
@Operation(summary = "랭킹 조회", description = "회원 랭킹 정보를 조회한다.") | ||
@ApiResponse(responseCode = "200", description = "회원 랭킹 정보 조회 성공") | ||
ResponseEntity<RankingResponse> getRanking(final Member member); | ||
|
||
} |
2 changes: 1 addition & 1 deletion
2
...main/member/entity/vo/ActivityRecord.java → ...domain/ranking/domain/ActivityRecord.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
.../member/dto/response/RankingResponse.java → ...ranking/dto/response/RankingResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
backend/src/main/java/com/votogether/domain/ranking/service/RankingService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package com.votogether.domain.ranking.service; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.member.repository.MemberRepository; | ||
import com.votogether.domain.member.service.RankingBoard; | ||
import com.votogether.domain.post.repository.PostRepository; | ||
import com.votogether.domain.ranking.domain.ActivityRecord; | ||
import com.votogether.domain.ranking.dto.response.RankingResponse; | ||
import com.votogether.domain.vote.repository.VoteRepository; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@RequiredArgsConstructor | ||
@Service | ||
public class RankingService { | ||
|
||
private final MemberRepository memberRepository; | ||
private final PostRepository postRepository; | ||
private final VoteRepository voteRepository; | ||
|
||
@Transactional(readOnly = true) | ||
public RankingResponse getRanking(final Member member) { | ||
final RankingBoard rankingBoard = getRankingBoard(); | ||
return new RankingResponse( | ||
rankingBoard.getRanking(member), | ||
member.getNickname(), | ||
rankingBoard.getActivityRecord(member).getPostCount(), | ||
rankingBoard.getActivityRecord(member).getVoteCount(), | ||
rankingBoard.getScore(member) | ||
); | ||
} | ||
|
||
private RankingBoard getRankingBoard() { | ||
final List<Member> members = memberRepository.findAll(); | ||
final List<Integer> postCounts = postRepository.findCountsByMembers(members); | ||
final List<Integer> voteCounts = voteRepository.findCountsByMembers(members); | ||
|
||
final Map<Member, ActivityRecord> passionBoard = new HashMap<>(); | ||
|
||
for (int i = 0; i < members.size(); i++) { | ||
passionBoard.put(members.get(i), new ActivityRecord(postCounts.get(i), voteCounts.get(i))); | ||
} | ||
|
||
return new RankingBoard(passionBoard); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
70 changes: 70 additions & 0 deletions
70
backend/src/test/java/com/votogether/domain/ranking/controller/RankingControllerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
package com.votogether.domain.ranking.controller; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.mockito.ArgumentMatchers.anyLong; | ||
import static org.mockito.ArgumentMatchers.anyString; | ||
import static org.mockito.BDDMockito.given; | ||
|
||
import com.votogether.domain.member.entity.Member; | ||
import com.votogether.domain.member.service.MemberService; | ||
import com.votogether.domain.ranking.dto.response.RankingResponse; | ||
import com.votogether.domain.ranking.service.RankingService; | ||
import com.votogether.global.jwt.TokenPayload; | ||
import com.votogether.global.jwt.TokenProcessor; | ||
import com.votogether.test.fixtures.MemberFixtures; | ||
import io.restassured.module.mockmvc.RestAssuredMockMvc; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; | ||
import org.springframework.boot.test.mock.mockito.MockBean; | ||
import org.springframework.http.HttpHeaders; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.web.context.WebApplicationContext; | ||
|
||
@WebMvcTest(RankingController.class) | ||
class RankingControllerTest { | ||
|
||
@MockBean | ||
RankingService rankingService; | ||
|
||
@MockBean | ||
MemberService memberService; | ||
|
||
@MockBean | ||
TokenProcessor tokenProcessor; | ||
|
||
@BeforeEach | ||
void setUp(final WebApplicationContext webApplicationContext) { | ||
RestAssuredMockMvc.standaloneSetup(new RankingController(rankingService)); | ||
RestAssuredMockMvc.webAppContextSetup(webApplicationContext); | ||
} | ||
|
||
@Test | ||
@DisplayName("회원의 랭킹 순위를 가져온다.") | ||
void getRanking() throws Exception { | ||
// given | ||
Member member = MemberFixtures.MALE_20.get(); | ||
RankingResponse response = new RankingResponse(3, "익명의손님1", 1, 1, 6); | ||
|
||
TokenPayload tokenPayload = new TokenPayload(1L, 1L, 1L); | ||
given(tokenProcessor.resolveToken(anyString())).willReturn("token"); | ||
given(tokenProcessor.parseToken(anyString())).willReturn(tokenPayload); | ||
given(memberService.findById(anyLong())).willReturn(member); | ||
|
||
given(rankingService.getRanking(member)).willReturn(response); | ||
|
||
// when, then | ||
RankingResponse result = RestAssuredMockMvc | ||
.given().log().all() | ||
.headers(HttpHeaders.AUTHORIZATION, "Bearer token") | ||
.when().get("/members/me/ranking") | ||
.then().log().all() | ||
.statusCode(HttpStatus.OK.value()) | ||
.extract() | ||
.as(RankingResponse.class); | ||
|
||
assertThat(result).isEqualTo(response); | ||
} | ||
|
||
} |
Oops, something went wrong.