GroupReviewMapper.java

package qwerty.chaekit.mapper;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import qwerty.chaekit.domain.group.review.GroupReview;
import qwerty.chaekit.domain.group.review.GroupReviewTagRelation;
import qwerty.chaekit.dto.group.review.GroupReviewFetchResponse;
import qwerty.chaekit.service.util.FileService;

@Component
@RequiredArgsConstructor
public class GroupReviewMapper {
    private final FileService fileService;
    
    public String convertToPublicImageURL(String imageKey) {
        return fileService.convertToPublicImageURL(imageKey);
    }
    
    public GroupReviewFetchResponse toFetchResponse(GroupReview review) {
        return GroupReviewFetchResponse.builder()
                .reviewId(review.getId())
                .groupId(review.getGroup().getId())
                .groupName(review.getGroup().getName())
                
                .activityId(review.getActivity().getId())
                .activityStartTime(review.getActivity().getEndTime())
                .activityEndTime(review.getActivity().getEndTime())
                
                .bookId(review.getActivity().getId())
                .bookTitle(review.getActivity().getBook().getTitle())
                .bookAuthor(review.getActivity().getBook().getAuthor())
                .bookCoverImageURL(convertToPublicImageURL(review.getActivity().getBook().getCoverImageKey()))
                
                .authorId(review.getAuthor().getId())
                .authorNickname(review.getAuthor().getNickname())
                .authorProfileImageURL(convertToPublicImageURL(review.getAuthor().getProfileImageKey()))
                .content(review.getContent())
                .tags(review.getTags()
                        .stream()
                        .map(GroupReviewTagRelation::getTag)
                        .toList())
                .createdAt(review.getCreatedAt().toLocalDate())
                .build();
    }
}