Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package project.flipnote.bookmark.service;

import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;
import project.flipnote.bookmark.entity.BookmarkTargetType;
import project.flipnote.bookmark.repository.BookmarkRepository;

@Service
@RequiredArgsConstructor
public class BookmarkReader {
private final BookmarkRepository bookmarkRepository;

/**
* 즐겨찾기를 했는지 여부를 조회합니다.
*
* @param userId 즐겨찾기를 했는지 확인할 회원 ID
* @param targetType 즐겨찾기 대상의 타입
* @param targetId 즐겨찾기 대상의 ID
* @return 타겟을 즐겨찾기 했으면 true, 아니면 false
* @author 윤정환
*/
public boolean isBookmarked(Long userId, BookmarkTargetType targetType, Long targetId) {
return bookmarkRepository.existsByTargetTypeAndUserIdAndTargetId(targetType, userId, targetId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ public record CardSetDetailResponse(
String imageUrl,
Long imageRefId,
boolean publicVisible,
boolean liked,
boolean bookmarked,

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
LocalDateTime createdAt,
Expand All @@ -23,7 +25,7 @@ public record CardSetDetailResponse(
LocalDateTime modifiedAt
) {

public static CardSetDetailResponse from(CardSet cardSet, Long imageRefId) {
public static CardSetDetailResponse from(CardSet cardSet, boolean liked, boolean bookmarked, Long imageRefId) {
return new CardSetDetailResponse(
cardSet.getId(),
cardSet.getGroup().getId(),
Expand All @@ -33,6 +35,8 @@ public static CardSetDetailResponse from(CardSet cardSet, Long imageRefId) {
cardSet.getImageUrl(),
imageRefId,
cardSet.getPublicVisible(),
liked,
bookmarked,
cardSet.getCreatedAt(),
cardSet.getModifiedAt()
);
Expand Down
22 changes: 16 additions & 6 deletions src/main/java/project/flipnote/cardset/service/CardSetService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package project.flipnote.cardset.service;

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

import org.springframework.beans.factory.annotation.Value;
Expand All @@ -11,6 +10,9 @@

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import project.flipnote.bookmark.entity.BookmarkTargetType;
import project.flipnote.bookmark.service.BookmarkReader;
import project.flipnote.bookmark.service.BookmarkService;
import project.flipnote.cardset.entity.CardSet;
import project.flipnote.cardset.entity.CardSetManager;
import project.flipnote.cardset.entity.CardSetMetadata;
Expand Down Expand Up @@ -40,6 +42,8 @@
import project.flipnote.image.entity.ReferenceType;
import project.flipnote.image.service.ImageRefService;
import project.flipnote.image.service.ImageService;
import project.flipnote.like.entity.LikeTargetType;
import project.flipnote.like.service.LikeReader;
import project.flipnote.user.entity.UserProfile;
import project.flipnote.user.entity.UserStatus;
import project.flipnote.user.exception.UserErrorCode;
Expand All @@ -61,6 +65,8 @@ public class CardSetService {
private final ImageService imageService;
private final ImageRefService imageRefService;
private final GroupService groupService;
private final LikeReader likeReader;
private final BookmarkReader bookmarkReader;

@Value("${image.default.cardSet}")
private String defaultCardSetImage;
Expand Down Expand Up @@ -116,7 +122,7 @@ public CreateCardSetResponse createCardSet(Long groupId, AuthPrinciple authPrinc

cardSetRepository.save(cardSet);

if(req.imageRefId()!=null) {
if (req.imageRefId() != null) {
// 이미지 활성화
imageService.changeUrlStatus(req.imageRefId(), REFERENCE_TYPE, cardSet.getId());
}
Expand Down Expand Up @@ -147,7 +153,7 @@ public CreateCardSetResponse createCardSet(Long groupId, AuthPrinciple authPrinc
public PagingResponse<CardSetSummaryResponse> getCardSets(CardSetSearchRequest req) {
// TODO: Projection 튜닝 필요
Page<CardSetInfo> cardSetPage = cardSetRepository.searchByNameContainingAndCategory(
req.getKeyword(), Category.from(req.getCategory()), req.getPageRequest()
req.getKeyword(), Category.from(req.getCategory()), req.getPageRequest()
);

Page<CardSetSummaryResponse> res = cardSetPage.map(CardSetSummaryResponse::from);
Expand All @@ -169,13 +175,14 @@ public CardSetDetailResponse getCardSet(Long userId, Long groupId, Long cardSetI

cardSetPolicyService.validateCardSetViewable(cardSet, userId);

Optional<ImageRef> imageRef = imageRefService.findByTypeAndReferenceId(REFERENCE_TYPE, cardSetId);
boolean liked = likeReader.isLiked(userId, LikeTargetType.CARD_SET, cardSetId);
boolean bookmarked = bookmarkReader.isBookmarked(userId, BookmarkTargetType.CARD_SET, cardSetId);

Long imageRefId = imageRefService.findByTypeAndReferenceId(REFERENCE_TYPE, cardSetId)
.map(ImageRef::getId)
.orElse(null);

return CardSetDetailResponse.from(cardSet, imageRefId);
return CardSetDetailResponse.from(cardSet, liked, bookmarked, imageRefId);
}

/**
Expand All @@ -201,7 +208,10 @@ public CardSetDetailResponse updateCardSet(Long userId, Long groupId, Long cardS

cardSetRepository.saveAndFlush(cardSet);

return CardSetDetailResponse.from(cardSet, imageMeta.imageRefId());
boolean liked = likeReader.isLiked(userId, LikeTargetType.CARD_SET, cardSetId);
boolean bookmarked = bookmarkReader.isBookmarked(userId, BookmarkTargetType.CARD_SET, cardSetId);

return CardSetDetailResponse.from(cardSet, liked, bookmarked, imageMeta.imageRefId());
}

/**
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/project/flipnote/like/service/LikeReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,18 @@ public Like findByTargetAndUserId(LikeTargetType targetType, Long targetId, Long
return likeRepository.findByTargetTypeAndTargetIdAndUserId(targetType, targetId, userId)
.orElseThrow(() -> new BizException(LikeErrorCode.LIKE_NOT_FOUND));
}


/**
* 좋아요 누른 여부를 조회합니다.
*
* @param userId 좋아요를 눌렀는지 확인할 회원 ID
* @param targetType 좋아요 대상의 타입
* @param targetId 좋아요 대상의 ID
* @return 타겟을 좋아요 눌렀으면 true, 아니면 false
* @author 윤정환
*/
public boolean isLiked(Long userId, LikeTargetType targetType, Long targetId) {
return likeRepository.existsByTargetTypeAndTargetIdAndUserId(targetType, targetId, userId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
import project.flipnote.like.entity.Like;
import project.flipnote.like.entity.LikeTargetType;
import project.flipnote.like.exception.LikeErrorCode;
import project.flipnote.like.model.response.LikeResponse;
import project.flipnote.like.model.request.LikeSearchRequest;
import project.flipnote.like.model.response.LikeResponse;
import project.flipnote.like.model.response.LikeTargetResponse;
import project.flipnote.like.repository.LikeRepository;

Expand Down
Loading