GroupMapper.java

package qwerty.chaekit.mapper;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import qwerty.chaekit.domain.group.ReadingGroup;
import qwerty.chaekit.domain.group.groupmember.GroupMember;
import qwerty.chaekit.domain.group.grouptag.GroupTag;
import qwerty.chaekit.dto.group.response.GroupFetchResponse;
import qwerty.chaekit.dto.group.response.GroupMemberResponse;
import qwerty.chaekit.service.util.FileService;

@Component
@RequiredArgsConstructor
public class GroupMapper {
    private final FileService fileService;

    public String convertToPublicImageURL(String imageKey) {
        return fileService.convertToPublicImageURL(imageKey);
    }

    /*
     * fetch required:
     *   - ReadingGroup.tags
     *   - ReadingGroup.groupMembers
     *   - ReadingGroup.groupLeader
     */
    public GroupFetchResponse toGroupFetchResponse(ReadingGroup group, Long userId) {
        return GroupFetchResponse.builder()
                .groupId(group.getId())
                .name(group.getName())
                .description(group.getDescription())
                .tags(group.getGroupTags().stream()
                        .map(GroupTag::getTagName)
                        .toList())
                .groupImageURL(convertToPublicImageURL(group.getGroupImageKey()))
                .myMemberShipStatus(group.getMemberShipStatus(userId))
                .leaderId(group.getGroupLeader().getId())
                .leaderNickname(group.getGroupLeader().getNickname())
                .leaderProfileImageURL(convertToPublicImageURL(group.getGroupLeader().getProfileImageKey()))
                .memberCount((int) group.memberCount())
                .isAutoApproval(group.isAutoApproval())
                .build();
    }

    /*
     * fetch required:
     *   - GroupMember.user
     *   - GroupMember.group
     */
    public GroupMemberResponse toGroupMemberResponse(GroupMember groupMember) {
        return GroupMemberResponse.builder()
                .userId(groupMember.getUser().getId())
                .nickname(groupMember.getUser().getNickname())
                .profileImageURL(convertToPublicImageURL(groupMember.getMember().getProfileImageKey()))
                .createdAt(groupMember.getCreatedAt())
                .approvedAt(groupMember.getApprovedAt())
                .build();
    }
}