Skip to content

Commit bebf237

Browse files
authored
fix : bug (#324)
1 parent 7e32f1e commit bebf237

File tree

5 files changed

+59
-38
lines changed

5 files changed

+59
-38
lines changed

src/main/java/com/back/domain/cocktail/comment/repository/CocktailCommentRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.back.domain.cocktail.comment.repository;
22

33
import com.back.domain.cocktail.comment.entity.CocktailComment;
4+
import com.back.domain.cocktail.entity.Cocktail;
45
import com.back.domain.post.comment.enums.CommentStatus;
56
import org.springframework.data.jpa.repository.JpaRepository;
67
import org.springframework.stereotype.Repository;
@@ -19,4 +20,6 @@ List<CocktailComment> findTop10ByCocktailIdAndStatusInAndIdLessThanOrderByIdDesc
1920
);
2021

2122
boolean existsByCocktailIdAndUserIdAndStatusNot(Long cocktailId, Long id, CommentStatus status);
23+
24+
Long countByCocktail(Cocktail cocktail);
2225
}

src/main/java/com/back/domain/cocktail/comment/service/CocktailCommentService.java

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import com.back.domain.cocktail.repository.CocktailRepository;
1010
import com.back.domain.post.comment.enums.CommentStatus;
1111
import com.back.domain.user.entity.User;
12-
import com.back.global.exception.UnauthorizedException;
1312
import com.back.global.rq.Rq;
1413
import lombok.RequiredArgsConstructor;
1514
import org.springframework.stereotype.Service;
@@ -56,31 +55,29 @@ public CocktailCommentResponseDto createCocktailComment(Long cocktailId, Cocktai
5655
// 칵테일 댓글 다건 조회 로직 (무한스크롤)
5756
@Transactional(readOnly = true)
5857
public List<CocktailCommentResponseDto> getCocktailComments(Long cocktailId, Long lastId) {
59-
User actor = rq.getActor(); // 서비스에서 호출 가능
58+
User actor = rq.getActor(); // 로그인 사용자 (null일 수 있음)
59+
Long currentUserId = (actor != null) ? actor.getId() : null;
6060

61-
if (actor == null) {
62-
throw new UnauthorizedException("로그인이 필요합니다.");
63-
}
64-
Long currentUserId = actor.getId();
6561
List<CocktailComment> comments;
6662

6763
if (lastId == null) {
68-
comments = cocktailCommentRepository
69-
.findTop10ByCocktailIdAndStatusInOrderByIdDesc(cocktailId, List.of(CommentStatus.PUBLIC, CommentStatus.PRIVATE)
70-
);
64+
comments = cocktailCommentRepository.findTop10ByCocktailIdAndStatusInOrderByIdDesc(
65+
cocktailId,
66+
List.of(CommentStatus.PUBLIC, CommentStatus.PRIVATE)
67+
);
7168
} else {
72-
comments = cocktailCommentRepository
73-
.findTop10ByCocktailIdAndStatusInAndIdLessThanOrderByIdDesc(cocktailId, List.of(CommentStatus.PUBLIC, CommentStatus.PRIVATE),
74-
lastId);
69+
comments = cocktailCommentRepository.findTop10ByCocktailIdAndStatusInAndIdLessThanOrderByIdDesc(
70+
cocktailId,
71+
List.of(CommentStatus.PUBLIC, CommentStatus.PRIVATE),
72+
lastId
73+
);
7574
}
7675

7776
return comments.stream()
78-
.filter(comment ->{
79-
if(comment.getStatus() == CommentStatus.PUBLIC) return true;
80-
if(comment.getStatus() == CommentStatus.PRIVATE) {
81-
return comment.getUser().getId().equals(currentUserId);
82-
}
83-
return false;
77+
.filter(comment -> {
78+
if (comment.getStatus() == CommentStatus.PUBLIC) return true;
79+
// PRIVATE 댓글은 로그인한 본인만
80+
return currentUserId != null && comment.getUser().getId().equals(currentUserId);
8481
})
8582
.map(CocktailCommentResponseDto::new)
8683
.toList();
Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package com.back.domain.cocktail.dto;
22

3-
import com.back.domain.cocktail.entity.Cocktail;
4-
53
public record CocktailSummaryResponseDto(
64
Long cocktailId,
75
String cocktailName,
86
String cocktailNameKo,
97
String cocktailImgUrl,
10-
String alcoholStrength // Enum 대신 String
8+
String alcoholStrength,
9+
Long keepCount,
10+
Long commentCount
1111
) {
12-
public CocktailSummaryResponseDto(Cocktail cocktail) {
13-
this(
14-
cocktail.getId(),
15-
cocktail.getCocktailName(),
16-
cocktail.getCocktailNameKo(),
17-
cocktail.getCocktailImgUrl(),
18-
cocktail.getAlcoholStrength().getDescription() // 설명으로 변환
19-
);
12+
13+
//5개 필드만 사용하는 경우 (keepCount, commentCount 기본값 0)
14+
15+
public CocktailSummaryResponseDto(Long cocktailId,
16+
String cocktailName,
17+
String cocktailNameKo,
18+
String cocktailImgUrl,
19+
String alcoholStrength) {
20+
this(cocktailId, cocktailName, cocktailNameKo, cocktailImgUrl, alcoholStrength, 0L, 0L);
2021
}
2122
}

src/main/java/com/back/domain/cocktail/service/CocktailService.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.back.domain.cocktail.service;
22

3+
import com.back.domain.cocktail.comment.repository.CocktailCommentRepository;
34
import com.back.domain.cocktail.dto.CocktailDetailResponseDto;
45
import com.back.domain.cocktail.dto.CocktailSearchRequestDto;
56
import com.back.domain.cocktail.dto.CocktailSearchResponseDto;
@@ -9,6 +10,8 @@
910
import com.back.domain.cocktail.enums.AlcoholStrength;
1011
import com.back.domain.cocktail.enums.CocktailType;
1112
import com.back.domain.cocktail.repository.CocktailRepository;
13+
import com.back.domain.mybar.enums.KeepStatus;
14+
import com.back.domain.mybar.repository.MyBarRepository;
1215
import lombok.RequiredArgsConstructor;
1316
import org.springframework.data.domain.Page;
1417
import org.springframework.data.domain.PageRequest;
@@ -27,6 +30,9 @@
2730
public class CocktailService {
2831

2932
private final CocktailRepository cocktailRepository;
33+
private final MyBarRepository myBarRepository;
34+
private final CocktailCommentRepository cocktailCommentRepository;
35+
3036

3137
private static final int DEFAULT_SIZE = 20;
3238

@@ -64,13 +70,23 @@ public List<CocktailSummaryResponseDto> getCocktails(Long lastValue, Long lastId
6470
}
6571

6672
return cocktails.stream()
67-
.map(c -> new CocktailSummaryResponseDto(
68-
c.getId(),
69-
c.getCocktailName(),
70-
c.getCocktailNameKo(),
71-
c.getCocktailImgUrl(),
72-
c.getAlcoholStrength().getDescription()
73-
))
73+
.map(c -> {
74+
// 해당 칵테일의 ACTIVE Keep 수
75+
Long keepCount = myBarRepository.countByCocktailAndStatus(c, KeepStatus.ACTIVE);
76+
77+
// 해당 칵테일 댓글 수
78+
Long commentCount = cocktailCommentRepository.countByCocktail(c);
79+
80+
return new CocktailSummaryResponseDto(
81+
c.getId(),
82+
c.getCocktailName(),
83+
c.getCocktailNameKo(),
84+
c.getCocktailImgUrl(),
85+
c.getAlcoholStrength().getDescription(),
86+
keepCount,
87+
commentCount
88+
);
89+
})
7490
.collect(Collectors.toList());
7591
}
7692

src/main/java/com/back/domain/mybar/repository/MyBarRepository.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.back.domain.mybar.repository;
22

3+
import com.back.domain.cocktail.entity.Cocktail;
34
import com.back.domain.mybar.entity.MyBar;
45
import com.back.domain.mybar.enums.KeepStatus;
56
import org.springframework.data.domain.Page;
@@ -9,9 +10,9 @@
910
import org.springframework.data.jpa.repository.Query;
1011
import org.springframework.stereotype.Repository;
1112

12-
import java.util.Optional;
13-
import java.util.List;
1413
import java.time.LocalDateTime;
14+
import java.util.List;
15+
import java.util.Optional;
1516

1617
@Repository
1718
public interface MyBarRepository extends JpaRepository<MyBar, Long> {
@@ -56,4 +57,7 @@ public interface MyBarRepository extends JpaRepository<MyBar, Long> {
5657
and m.status = 'ACTIVE'
5758
""")
5859
int softDeleteByUserAndCocktail(Long userId, Long cocktailId);
60+
61+
// 특정 칵테일의 ACTIVE Keep 개수
62+
Long countByCocktailAndStatus(Cocktail cocktail, KeepStatus status);
5963
}

0 commit comments

Comments
 (0)