From 4ec43078d3f7be4cf21c1fc4b79f7b0243347f8d Mon Sep 17 00:00:00 2001 From: dokyung-kang Date: Sun, 12 Jan 2025 01:57:35 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=89=B4=EC=8A=A4=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=20=EB=B3=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springboot/repository/NewsRepository.java | 3 +++ .../springboot/service/NewsService.java | 12 ++++++++++ .../web/controller/NewsController.java | 15 ++++++++++++ .../web/dto/response/NewsResponseDTO.java | 23 +++++++++++++++++++ 4 files changed, 53 insertions(+) diff --git a/src/main/java/banban/springboot/repository/NewsRepository.java b/src/main/java/banban/springboot/repository/NewsRepository.java index d55d98a..c3c1b04 100644 --- a/src/main/java/banban/springboot/repository/NewsRepository.java +++ b/src/main/java/banban/springboot/repository/NewsRepository.java @@ -1,14 +1,17 @@ package banban.springboot.repository; import banban.springboot.domain.entity.News; +import banban.springboot.domain.entity.TeamGroup; import banban.springboot.domain.enums.NewsCategories; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface NewsRepository extends JpaRepository { List findByIsBreakingNewsTrue(); // 속보 뉴스 조회 List findByNewsCategories(NewsCategories newsCategories); // 긍정/부정 뉴스 조회 + Optional findByTeamGroupAndId(TeamGroup teamGroup, Long newsId); } diff --git a/src/main/java/banban/springboot/service/NewsService.java b/src/main/java/banban/springboot/service/NewsService.java index 203c948..0daebdf 100644 --- a/src/main/java/banban/springboot/service/NewsService.java +++ b/src/main/java/banban/springboot/service/NewsService.java @@ -59,4 +59,16 @@ public News addNewsLike(Long newsId){ return newsRepository.save(existNews); } + + @Transactional + public NewsResponseDTO.NewsReadResponseDTO readNews(String groupKey, Long newsId) { + + TeamGroup teamGroup = groupRepository.findByGroupKey(groupKey) + .orElseThrow(() -> new GeneralException(ErrorStatus.TEAMGROUP_NOT_FOUND)); + + News news = newsRepository.findByTeamGroupAndId(teamGroup, newsId) + .orElseThrow(() -> new GeneralException(ErrorStatus.NEWS_NOT_EXIST_FOUND)); + + return NewsResponseDTO.NewsReadResponseDTO.from(news); + } } diff --git a/src/main/java/banban/springboot/web/controller/NewsController.java b/src/main/java/banban/springboot/web/controller/NewsController.java index f98d05a..4ef64dc 100644 --- a/src/main/java/banban/springboot/web/controller/NewsController.java +++ b/src/main/java/banban/springboot/web/controller/NewsController.java @@ -46,4 +46,19 @@ public ApiResponse updatePromotionProject(@PathVariable(name = "newsId") L return ApiResponse.onSuccess(null); } + + // 뉴스 상세 보기 + @GetMapping("/{groupKey}/news/{newsId}") + @Operation(summary = "뉴스 상세 보기 API",description = "뉴스 상세 보는 API입니다.") + @ApiResponses({ + @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "COMMON200",description = "OK, 성공"), + }) + @Parameters({ + @Parameter(name = "groupKey", description = "그룹키, path variable 입니다!"), + @Parameter(name = "newsId", description = "뉴스글의 ID, path variable 입니다!"), + }) + public ApiResponse createNews(@PathVariable("groupKey") String groupKey, @PathVariable("newsId") Long newsId) { + NewsResponseDTO.NewsReadResponseDTO news = newsService.readNews(groupKey, newsId); + return ApiResponse.onSuccess(news); + } } diff --git a/src/main/java/banban/springboot/web/dto/response/NewsResponseDTO.java b/src/main/java/banban/springboot/web/dto/response/NewsResponseDTO.java index f7a6849..ac081e0 100644 --- a/src/main/java/banban/springboot/web/dto/response/NewsResponseDTO.java +++ b/src/main/java/banban/springboot/web/dto/response/NewsResponseDTO.java @@ -30,4 +30,27 @@ public static NewsCreateResponseDTO from(News news) { .build(); } } + + @Getter + @Setter + @NoArgsConstructor + @Builder + @AllArgsConstructor + public static class NewsReadResponseDTO { + private Long newsId; + private String headline; + private String content; + private String username; + private boolean isBreakingNews; + + public static NewsReadResponseDTO from(News news) { + return NewsReadResponseDTO.builder() + .newsId(news.getId()) + .headline(news.getHeadline()) + .content(news.getContent()) + .username(news.getMember().getUsername()) + .isBreakingNews(news.isBreakingNews()) + .build(); + } + } }