Skip to content

Commit 6fd011a

Browse files
authored
Feat : 좋아요 상태 추가 (#344)
1 parent 5dd26e4 commit 6fd011a

File tree

3 files changed

+54
-3
lines changed

3 files changed

+54
-3
lines changed

back/src/main/java/com/back/domain/news/like/service/NewsLikeService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,10 @@ public long getLikeCount(Long newsId) {
3333
.orElseThrow(() -> new ServiceException("404", "해당 뉴스를 찾을 수 없습니다."));
3434
return newsLikeRepository.countByNews(news);
3535
}
36+
37+
public boolean hasUserLikedNews(Member member, Long newsId) {
38+
News news = newsRepository.findById(newsId)
39+
.orElseThrow(() -> new ServiceException("404", "해당 뉴스를 찾을 수 없습니다."));
40+
return newsLikeRepository.findByMemberAndNews(member, news).isPresent();
41+
}
3642
}

back/src/main/java/com/back/domain/news/news/controller/NewsController.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,19 @@ public RsData<NewsCreateResponse> createNews(@RequestBody NewsCreateRequest requ
4343

4444
@GetMapping("{newsId}")
4545
@Operation(summary = "뉴스 단건 조회", description = "특정 ID의 뉴스를 읽어옵니다.")
46-
public RsData<NewsGetResponse> getNews(@PathVariable("newsId") Long newsId) {
46+
public RsData<NewsGetWithLikeResponse> getNews(@PathVariable("newsId") Long newsId) {
47+
Member member = rq.getActorFromDb().get();
48+
if (member == null) {
49+
return new RsData<>("401", "로그인 후 이용해주세요.", null);
50+
}
51+
if (member.getRole() != Member.Role.ADMIN) {
52+
return new RsData<>("403", "권한이 없습니다.", null);
53+
}
54+
boolean hasUserLikedNews = newsLikeService.hasUserLikedNews(member, newsId);
55+
4756
News news = newsService.getNewsById(newsId);
4857
newsService.incrementViews(news);
49-
NewsGetResponse response = new NewsGetResponse(news);
58+
NewsGetWithLikeResponse response = new NewsGetWithLikeResponse(news, hasUserLikedNews);
5059
return new RsData<>("200", "뉴스 읽어오기 완료", response);
5160
}
5261

@@ -55,6 +64,13 @@ public RsData<NewsGetResponse> getNews(@PathVariable("newsId") Long newsId) {
5564
public RsData<List<NewsGetResponse>> getNewsList(
5665
@RequestParam(defaultValue = "0") int page,
5766
@RequestParam(defaultValue = "10") int size) {
67+
Member member = rq.getActorFromDb().get();
68+
if (member == null) {
69+
return new RsData<>("401", "로그인 후 이용해주세요.", null);
70+
}
71+
if (member.getRole() != Member.Role.ADMIN) {
72+
return new RsData<>("403", "권한이 없습니다.", null);
73+
}
5874

5975
Page<News> newsPage = newsService.getNewsByPage(page, size);
6076

@@ -106,7 +122,7 @@ public RsData<NewsUpdateResponse> modifyNews(@PathVariable("newsId") Long newsId
106122
@Operation(summary = "뉴스 삭제", description = "특정 ID의 뉴스를 삭제합니다. ADMIN 사용자만 접근할 수 있습니다.")
107123
public RsData<?> deleteNews(@PathVariable("newsId") Long newsId) {
108124
Member member = rq.getActorFromDb().get();
109-
if (member == null){
125+
if (member == null) {
110126
return new RsData<>("401", "로그인 후 이용해주세요.", null);
111127
}
112128
if (member.getRole() != Member.Role.ADMIN) {
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.back.domain.news.news.dto;
2+
3+
import com.back.domain.news.news.entity.News;
4+
5+
import java.time.LocalDateTime;
6+
7+
public record NewsGetWithLikeResponse(
8+
Long id,
9+
String title,
10+
String videoUuid,
11+
String content,
12+
String authorId,
13+
boolean userLikeStatus,
14+
LocalDateTime createdAt,
15+
LocalDateTime updatedAt
16+
) {
17+
public NewsGetWithLikeResponse(News news, boolean userLikeStatus) {
18+
this(
19+
news.getId(),
20+
news.getTitle(),
21+
news.getVideo().getUuid(),
22+
news.getContent(),
23+
news.getMember().getName(),
24+
userLikeStatus,
25+
news.getCreateDate(),
26+
news.getModifyDate()
27+
);
28+
}
29+
}

0 commit comments

Comments
 (0)