Skip to content

Commit

Permalink
충돌해결
Browse files Browse the repository at this point in the history
  • Loading branch information
bikooju committed Jan 11, 2025
2 parents f5727d6 + c43ce63 commit 3068299
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@

import banban.springboot.domain.entity.Member;
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.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface NewsRepository extends JpaRepository<News,Long> {
List<News> findByIsBreakingNewsTrue(); // 속보 뉴스 조회
List<News> findByNewsCategories(NewsCategories newsCategories); // 긍정/부정 뉴스 조회
Optional<News> findByTeamGroupAndId(TeamGroup teamGroup, Long newsId);
Optional<News> findByTeamGroupAndMemberAndId(TeamGroup teamGroup, Member member, Long newsId);
// 뉴스 작성자 목록 중복 제거 후 반환
@Query("SELECT DISTINCT n.member FROM News n WHERE n.member.teamGroup.groupKey = :groupKey")
List<Member> findDistinctMembersByGroupKey(@Param("groupKey") String groupKey);
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/banban/springboot/service/NewsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,32 @@ 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);
}

@Transactional
public Void removeNews(String groupKey, Long memberId, Long newsId) {

TeamGroup teamGroup = groupRepository.findByGroupKey(groupKey)
.orElseThrow(() -> new GeneralException(ErrorStatus.TEAMGROUP_NOT_FOUND));

Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND));

News news = newsRepository.findByTeamGroupAndMemberAndId(teamGroup, member, newsId)
.orElseThrow(() -> new GeneralException(ErrorStatus.NEWS_NOT_EXIST_FOUND));

newsRepository.deleteById(news.getId());

return null;
}
}
31 changes: 31 additions & 0 deletions src/main/java/banban/springboot/web/controller/NewsController.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,35 @@ public ApiResponse<Void> 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<NewsResponseDTO.NewsReadResponseDTO> createNews(@PathVariable("groupKey") String groupKey, @PathVariable("newsId") Long newsId) {
NewsResponseDTO.NewsReadResponseDTO news = newsService.readNews(groupKey, newsId);
return ApiResponse.onSuccess(news);
}

// 내가 작성한 뉴스 삭제
@DeleteMapping("/{groupKey}/users/news/{memberId}/{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 = "memberId", description = "사용자의 ID, path variable 입니다!"),
@Parameter(name = "newsId", description = "뉴스글의 ID, path variable 입니다!"),
})
public ApiResponse<Void> deleteNews(@PathVariable("groupKey") String groupKey, @PathVariable("memberId") Long memberId, @PathVariable("newsId") Long newsId) {
newsService.removeNews(groupKey, memberId, newsId);
return ApiResponse.onSuccess(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
}

0 comments on commit 3068299

Please sign in to comment.