diff --git a/src/main/java/banban/springboot/repository/NewsRepository.java b/src/main/java/banban/springboot/repository/NewsRepository.java index e375197..f054ac7 100644 --- a/src/main/java/banban/springboot/repository/NewsRepository.java +++ b/src/main/java/banban/springboot/repository/NewsRepository.java @@ -21,5 +21,11 @@ public interface NewsRepository extends JpaRepository { // 뉴스 작성자 목록 중복 제거 후 반환 @Query("SELECT DISTINCT n.member FROM News n WHERE n.member.teamGroup.groupKey = :groupKey") List findDistinctMembersByGroupKey(@Param("groupKey") String groupKey); + + // 특정 그룹의 속보 뉴스 조회 + List findByTeamGroupAndIsBreakingNewsTrue(TeamGroup teamGroup); + + // 특정 그룹의 일반 뉴스 조회 + List findByTeamGroupAndIsBreakingNewsFalse(TeamGroup teamGroup); } diff --git a/src/main/java/banban/springboot/service/NewsService.java b/src/main/java/banban/springboot/service/NewsService.java index a527811..7b43cf1 100644 --- a/src/main/java/banban/springboot/service/NewsService.java +++ b/src/main/java/banban/springboot/service/NewsService.java @@ -15,6 +15,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor @Transactional(readOnly = true) @@ -87,4 +89,39 @@ public Void removeNews(String groupKey, Long memberId, Long newsId) { return null; } + + /** + * 특정 그룹의 속보 뉴스 목록 조회 + */ + public List getBreakingNewsByGroupKey(String groupKey) { + //그룹 조회 + TeamGroup teamGroup = groupRepository.findByGroupKey(groupKey) + .orElseThrow(() -> new RuntimeException("그룹키가 없습니다.")); + + //속보 뉴스 조회 + List breakingNewsList = newsRepository.findByTeamGroupAndIsBreakingNewsTrue(teamGroup); + + // News -> NewReadResponseDTO 변환 + return breakingNewsList.stream() + .map(NewsResponseDTO.NewsReadResponseDTO::from) + .toList(); + } + + + /** + * 특정 그룹의 일반 뉴스 목록 조회 + */ + public List getRegularNewsByGroupKey(String groupKey) { + //그룹 조회 + TeamGroup teamGroup = groupRepository.findByGroupKey(groupKey) + .orElseThrow(() -> new RuntimeException("그룹키가 없습니다.")); + + //일반 뉴스 조회 + List regularNewsList = newsRepository.findByTeamGroupAndIsBreakingNewsFalse(teamGroup); + + // News -> NewReadResponseDTO 변환 + return regularNewsList.stream() + .map(NewsResponseDTO.NewsReadResponseDTO::from) + .toList(); + } } diff --git a/src/main/java/banban/springboot/web/controller/NewsController.java b/src/main/java/banban/springboot/web/controller/NewsController.java index 3451982..30a6c9d 100644 --- a/src/main/java/banban/springboot/web/controller/NewsController.java +++ b/src/main/java/banban/springboot/web/controller/NewsController.java @@ -16,6 +16,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; + @Tag(name = "뉴스") @RestController @RequiredArgsConstructor @@ -77,4 +79,24 @@ public ApiResponse deleteNews(@PathVariable("groupKey") String groupKey, @ newsService.removeNews(groupKey, memberId, newsId); return ApiResponse.onSuccess(null); } + + /** + * 특정 그룹의 속보 뉴스 목록 조회 API + */ + @GetMapping("/{groupKey}/breaking") + public ApiResponse> getBreakingNewsByGroupKey( + @PathVariable("groupKey") String groupKey) { + List breakingNews = newsService.getBreakingNewsByGroupKey(groupKey); + return ApiResponse.onSuccess(breakingNews); + } + + /** + * 특정 그룹의 일반 뉴스 목록 조회 API + */ + @GetMapping("/{groupKey}/regular") + public ApiResponse> getRegularNewsByGroupKey( + @PathVariable("groupKey") String groupKey) { + List regularNews = newsService.getRegularNewsByGroupKey(groupKey); + return ApiResponse.onSuccess(regularNews); + } } diff --git a/src/main/java/banban/springboot/web/dto/request/BreakingNewsRequestDTO.java b/src/main/java/banban/springboot/web/dto/request/BreakingNewsRequestDTO.java deleted file mode 100644 index 44674c8..0000000 --- a/src/main/java/banban/springboot/web/dto/request/BreakingNewsRequestDTO.java +++ /dev/null @@ -1,5 +0,0 @@ -package banban.springboot.web.dto.request; - -public class BreakingNewsRequestDTO { - -} diff --git a/src/main/java/banban/springboot/web/dto/request/NormalNewsRequestDTO.java b/src/main/java/banban/springboot/web/dto/request/NormalNewsRequestDTO.java deleted file mode 100644 index 4f87b4e..0000000 --- a/src/main/java/banban/springboot/web/dto/request/NormalNewsRequestDTO.java +++ /dev/null @@ -1,4 +0,0 @@ -package banban.springboot.web.dto.request; - -public class NormalNewsRequestDTO { -} diff --git a/src/main/java/banban/springboot/web/dto/response/BreakingNewsResponseDTO.java b/src/main/java/banban/springboot/web/dto/response/BreakingNewsResponseDTO.java deleted file mode 100644 index 93696e8..0000000 --- a/src/main/java/banban/springboot/web/dto/response/BreakingNewsResponseDTO.java +++ /dev/null @@ -1,4 +0,0 @@ -package banban.springboot.web.dto.response; - -public class BreakingNewsResponseDTO { -} diff --git a/src/main/java/banban/springboot/web/dto/response/NormalNewsResponseDTO.java b/src/main/java/banban/springboot/web/dto/response/NormalNewsResponseDTO.java deleted file mode 100644 index 9f4d947..0000000 --- a/src/main/java/banban/springboot/web/dto/response/NormalNewsResponseDTO.java +++ /dev/null @@ -1,4 +0,0 @@ -package banban.springboot.web.dto.response; - -public class NormalNewsResponseDTO { -}