Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package ddingdong.ddingdongBE.domain.feed.api;

import ddingdong.ddingdongBE.domain.feed.controller.dto.response.AdminClubFeedRankingResponse;
import ddingdong.ddingdongBE.domain.feed.controller.dto.response.AdminFeedRankingWinnerResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
Expand All @@ -22,16 +21,6 @@
@RequestMapping("/server/admin/feeds")
public interface AdminFeedApi {

@Operation(summary = "총동연 월별 1위 동아리 목록 조회 API")
@ApiResponse(responseCode = "200", description = "월별 1위 동아리 목록 조회 성공",
content = @Content(array = @ArraySchema(schema = @Schema(implementation = AdminFeedRankingWinnerResponse.class))))
@ResponseStatus(HttpStatus.OK)
@SecurityRequirement(name = "AccessToken")
@GetMapping("/ranking/last")
List<AdminFeedRankingWinnerResponse> getMonthlyWinners(
@RequestParam("year") @Min(value = 2000, message = "year는 2000 이상이어야 합니다.") @Max(value = 2100, message = "year는 2100 이하여야 합니다.") int year
);

@Operation(summary = "총동연 피드 랭킹 조회 API")
@ApiResponse(responseCode = "200", description = "동아리별 피드 랭킹 조회 성공",
content = @Content(array = @ArraySchema(schema = @Schema(implementation = AdminClubFeedRankingResponse.class))))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import ddingdong.ddingdongBE.domain.feed.api.AdminFeedApi;
import ddingdong.ddingdongBE.domain.feed.controller.dto.response.AdminClubFeedRankingResponse;
import ddingdong.ddingdongBE.domain.feed.controller.dto.response.AdminFeedRankingWinnerResponse;
import ddingdong.ddingdongBE.domain.feed.service.FeedRankingService;
import java.util.List;
import lombok.RequiredArgsConstructor;
Expand All @@ -16,13 +15,6 @@ public class AdminFeedController implements AdminFeedApi {

private final FeedRankingService feedRankingService;

@Override
public List<AdminFeedRankingWinnerResponse> getMonthlyWinners(int year) {
return feedRankingService.getMonthlyWinners(year).stream()
.map(AdminFeedRankingWinnerResponse::from)
.toList();
}

@Override
public List<AdminClubFeedRankingResponse> getClubFeedRanking(int year, int month) {
return AdminClubFeedRankingResponse.from(
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package ddingdong.ddingdongBE.domain.feed.repository;

import ddingdong.ddingdongBE.domain.feed.entity.FeedMonthlyRanking;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;

public interface FeedMonthlyRankingRepository extends JpaRepository<FeedMonthlyRanking, Long> {

boolean existsByTargetYearAndTargetMonth(int targetYear, int targetMonth);

List<FeedMonthlyRanking> findByTargetYearAndRankingOrderByTargetMonthAsc(int targetYear, int ranking);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@

import ddingdong.ddingdongBE.domain.feed.service.dto.query.ClubFeedRankingQuery;
import ddingdong.ddingdongBE.domain.feed.service.dto.query.ClubMonthlyStatusQuery;
import ddingdong.ddingdongBE.domain.feed.service.dto.query.FeedRankingWinnerQuery;
import java.util.List;

public interface FeedRankingService {

List<FeedRankingWinnerQuery> getMonthlyWinners(int year);

List<ClubFeedRankingQuery> getClubFeedRanking(int year, int month);

ClubMonthlyStatusQuery getClubMonthlyStatus(Long userId, int year, int month);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@

import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.club.service.ClubService;
import ddingdong.ddingdongBE.domain.feed.entity.FeedMonthlyRanking;
import ddingdong.ddingdongBE.domain.feed.repository.FeedMonthlyRankingRepository;
import ddingdong.ddingdongBE.domain.feed.repository.FeedRepository;
import ddingdong.ddingdongBE.domain.feed.repository.dto.MonthlyFeedRankingDto;
import ddingdong.ddingdongBE.domain.feed.service.dto.query.ClubFeedRankingQuery;
import ddingdong.ddingdongBE.domain.feed.service.dto.query.ClubMonthlyStatusQuery;
import ddingdong.ddingdongBE.domain.feed.service.dto.query.FeedRankingWinnerQuery;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
Expand All @@ -21,26 +18,14 @@
@Transactional(readOnly = true)
public class GeneralFeedRankingService implements FeedRankingService {

private static final int WINNER_RANKING = 1;
private static final int FEED_WEIGHT = 10;
private static final int VIEW_WEIGHT = 1;
private static final int LIKE_WEIGHT = 3;
private static final int COMMENT_WEIGHT = 5;

private final FeedMonthlyRankingRepository feedMonthlyRankingRepository;
private final FeedRepository feedRepository;
private final ClubService clubService;

@Override
public List<FeedRankingWinnerQuery> getMonthlyWinners(int year) {
List<FeedMonthlyRanking> rankings =
feedMonthlyRankingRepository.findByTargetYearAndRankingOrderByTargetMonthAsc(year, WINNER_RANKING);

return rankings.stream()
.map(FeedRankingWinnerQuery::from)
.toList();
}

@Override
public List<ClubFeedRankingQuery> getClubFeedRanking(int year, int month) {
List<MonthlyFeedRankingDto> rawRankings = feedRepository.findMonthlyRankingByClub(year, month);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,13 @@
import ddingdong.ddingdongBE.auth.controller.dto.response.SignInResponse;
import ddingdong.ddingdongBE.common.fixture.ClubFixture;
import ddingdong.ddingdongBE.common.fixture.FeedFixture;
import ddingdong.ddingdongBE.common.fixture.FeedMonthlyRankingFixture;
import ddingdong.ddingdongBE.common.fixture.UserFixture;
import ddingdong.ddingdongBE.common.support.NonTxTestContainerSupport;
import ddingdong.ddingdongBE.domain.club.entity.Club;
import ddingdong.ddingdongBE.domain.club.repository.ClubRepository;
import ddingdong.ddingdongBE.domain.feed.controller.dto.response.AdminClubFeedRankingResponse;
import ddingdong.ddingdongBE.domain.feed.controller.dto.response.AdminFeedRankingWinnerResponse;
import ddingdong.ddingdongBE.domain.feed.entity.Feed;
import ddingdong.ddingdongBE.domain.feed.repository.FeedLikeRepository;
import ddingdong.ddingdongBE.domain.feed.repository.FeedMonthlyRankingRepository;
import ddingdong.ddingdongBE.domain.feed.repository.FeedRepository;
import ddingdong.ddingdongBE.domain.user.entity.User;
import ddingdong.ddingdongBE.domain.user.repository.UserRepository;
Expand All @@ -42,9 +39,6 @@ class AdminFeedControllerE2ETest extends NonTxTestContainerSupport {
@Autowired
private UserRepository userRepository;

@Autowired
private FeedMonthlyRankingRepository feedMonthlyRankingRepository;

@Autowired
private ClubRepository clubRepository;

Expand All @@ -67,37 +61,9 @@ void setUp() {
User admin = userRepository.save(
UserFixture.createAdminUser(passwordEncoder.encode("1234")));

feedMonthlyRankingRepository.saveAll(List.of(
FeedMonthlyRankingFixture.createWinner(1L, "1월 우승 동아리", 2025, 1),
FeedMonthlyRankingFixture.createWinner(2L, "2월 우승 동아리", 2025, 2),
FeedMonthlyRankingFixture.createWinner(3L, "3월 우승 동아리", 2025, 3)
));

adminToken = getAuthToken(admin.getAuthId(), "1234");
}

@DisplayName("총동연 월별 1위 동아리 목록 조회 API - 성공")
@Test
void getMonthlyWinners_success() {
List<AdminFeedRankingWinnerResponse> response = given()
.contentType(ContentType.JSON)
.header("Authorization", "Bearer " + adminToken)
.queryParam("year", 2025)
.when()
.get("/server/admin/feeds/ranking/last")
.then()
.statusCode(200)
.extract()
.jsonPath()
.getList(".", AdminFeedRankingWinnerResponse.class);

assertThat(response).hasSize(3);
assertThat(response.get(0).clubName()).isEqualTo("1월 우승 동아리");
assertThat(response.get(0).targetMonth()).isEqualTo(1);
assertThat(response.get(2).clubName()).isEqualTo("3월 우승 동아리");
assertThat(response.get(2).targetMonth()).isEqualTo(3);
}

@DisplayName("총동연 피드 랭킹 조회 API - 성공: 점수 순으로 랭킹이 반환된다")
@Test
void getClubFeedRanking_success() {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package ddingdong.ddingdongBE.domain.feed.repository;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.SoftAssertions.assertSoftly;

import ddingdong.ddingdongBE.common.fixture.FeedMonthlyRankingFixture;
import ddingdong.ddingdongBE.common.support.DataJpaTestSupport;
import ddingdong.ddingdongBE.domain.feed.entity.FeedMonthlyRanking;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -27,47 +24,4 @@ void existsByTargetYearAndTargetMonth() {
assertThat(feedMonthlyRankingRepository.existsByTargetYearAndTargetMonth(2026, 1)).isTrue();
assertThat(feedMonthlyRankingRepository.existsByTargetYearAndTargetMonth(2026, 2)).isFalse();
}

@DisplayName("findByTargetYearAndRankingOrderByTargetMonthAsc - 해당 연도의 지정 순위만 월 오름차순으로 조회한다")
@Test
void findByTargetYearAndRankingOrderByTargetMonthAsc() {
// given
feedMonthlyRankingRepository.saveAll(List.of(
FeedMonthlyRankingFixture.createWinner(1L, "1월 1위", 2025, 1),
FeedMonthlyRankingFixture.createWithRanking(2L, "1월 2위", 2025, 1, 2),
FeedMonthlyRankingFixture.createWinner(3L, "3월 1위", 2025, 3),
FeedMonthlyRankingFixture.createWinner(4L, "2월 1위", 2025, 2),
FeedMonthlyRankingFixture.createWinner(5L, "다른 연도", 2024, 1)
));

// when
List<FeedMonthlyRanking> result =
feedMonthlyRankingRepository.findByTargetYearAndRankingOrderByTargetMonthAsc(2025, 1);

// then
assertThat(result).hasSize(3);
assertSoftly(softly -> {
softly.assertThat(result.get(0).getClubName()).isEqualTo("1월 1위");
softly.assertThat(result.get(0).getTargetMonth()).isEqualTo(1);
softly.assertThat(result.get(1).getClubName()).isEqualTo("2월 1위");
softly.assertThat(result.get(1).getTargetMonth()).isEqualTo(2);
softly.assertThat(result.get(2).getClubName()).isEqualTo("3월 1위");
softly.assertThat(result.get(2).getTargetMonth()).isEqualTo(3);
});
}

@DisplayName("findByTargetYearAndRankingOrderByTargetMonthAsc - 해당 연도에 데이터가 없으면 빈 리스트를 반환한다")
@Test
void findByTargetYearAndRankingOrderByTargetMonthAsc_emptyResult() {
// given
feedMonthlyRankingRepository.save(
FeedMonthlyRankingFixture.createWinner(1L, "2024년 동아리", 2024, 1));

// when
List<FeedMonthlyRanking> result =
feedMonthlyRankingRepository.findByTargetYearAndRankingOrderByTargetMonthAsc(2025, 1);

// then
assertThat(result).isEmpty();
}
}
Loading