From a545b8649faf7fe3722e6cffd03c4b911c8d9846 Mon Sep 17 00:00:00 2001 From: dong2ast Date: Sat, 16 Nov 2024 11:53:37 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20grouppray=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EC=8B=9C=20querydsl=EC=9D=84=20=ED=86=B5=ED=95=B4=20dto=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/grouppray/GroupPrayResponseDto.java | 7 ++-- .../repository/GroupMemberRepository.java | 7 +--- .../group/repository/GroupPrayRepository.java | 6 ++-- .../querydsl/GroupPrayRepositoryCustom.java | 9 +++++ .../querydsl/GroupPrayRepositoryImpl.java | 34 +++++++++++++++++++ .../group/service/GroupMemberService.java | 4 +-- .../domain/group/service/GroupPrayFacade.java | 18 +++------- .../group/service/GroupPrayService.java | 9 +++-- 8 files changed, 65 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryCustom.java create mode 100644 src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryImpl.java diff --git a/src/main/java/com/uspray/uspray/domain/group/dto/grouppray/GroupPrayResponseDto.java b/src/main/java/com/uspray/uspray/domain/group/dto/grouppray/GroupPrayResponseDto.java index d03b7c78..f8840391 100644 --- a/src/main/java/com/uspray/uspray/domain/group/dto/grouppray/GroupPrayResponseDto.java +++ b/src/main/java/com/uspray/uspray/domain/group/dto/grouppray/GroupPrayResponseDto.java @@ -1,7 +1,7 @@ package com.uspray.uspray.domain.group.dto.grouppray; +import com.querydsl.core.annotations.QueryProjection; import com.uspray.uspray.domain.group.model.GroupPray; -import com.uspray.uspray.domain.member.model.Member; import com.uspray.uspray.domain.group.model.ScrapAndHeart; import io.swagger.v3.oas.annotations.media.Schema; import java.time.LocalDate; @@ -28,11 +28,12 @@ public class GroupPrayResponseDto { private LocalDate createdAt; @Builder - public GroupPrayResponseDto(GroupPray groupPray, Member member, ScrapAndHeart scrapAndHeart) { + @QueryProjection + public GroupPrayResponseDto(GroupPray groupPray, Long memberId, ScrapAndHeart scrapAndHeart) { this.groupPrayId = groupPray.getId(); this.content = groupPray.getContent(); this.authorName = groupPray.getAuthor().getName(); - setIsOwner(groupPray.getAuthor().getId(), member.getId()); + setIsOwner(groupPray.getAuthor().getId(), memberId); setSC(scrapAndHeart); this.createdAt = LocalDate.from(groupPray.getCreatedAt()); } diff --git a/src/main/java/com/uspray/uspray/domain/group/repository/GroupMemberRepository.java b/src/main/java/com/uspray/uspray/domain/group/repository/GroupMemberRepository.java index 0d19b42c..298a32be 100644 --- a/src/main/java/com/uspray/uspray/domain/group/repository/GroupMemberRepository.java +++ b/src/main/java/com/uspray/uspray/domain/group/repository/GroupMemberRepository.java @@ -13,16 +13,11 @@ public interface GroupMemberRepository extends JpaRepository boolean existsByGroupAndMember(Group group, Member member); - Optional findByGroupAndMember(Group group, Member member); - Optional findByGroupIdAndMemberId(Long groupId, Long memberId); void deleteAllByGroup(Group group); - default GroupMember getGroupMemberByGroupAndMember(Group group, Member member) { - return this.findByGroupAndMember(group, member).orElseThrow( - () -> new NotFoundException(ErrorStatus.NOT_FOUND_GROUP_MEMBER_EXCEPTION)); - } + GroupMember findByGroup_GroupIdAndMember(Long groupId, Member member); default GroupMember getGroupMemberByGroupIdAndMemberId(Long groupId, Long memberId) { return this.findByGroupIdAndMemberId(groupId, memberId).orElseThrow( diff --git a/src/main/java/com/uspray/uspray/domain/group/repository/GroupPrayRepository.java b/src/main/java/com/uspray/uspray/domain/group/repository/GroupPrayRepository.java index b022ac1e..f5ea1b24 100644 --- a/src/main/java/com/uspray/uspray/domain/group/repository/GroupPrayRepository.java +++ b/src/main/java/com/uspray/uspray/domain/group/repository/GroupPrayRepository.java @@ -2,6 +2,7 @@ import com.uspray.uspray.domain.group.model.Group; import com.uspray.uspray.domain.group.model.GroupPray; +import com.uspray.uspray.domain.group.repository.querydsl.GroupPrayRepositoryCustom; import com.uspray.uspray.global.exception.ErrorStatus; import com.uspray.uspray.global.exception.model.NotFoundException; import java.util.List; @@ -10,10 +11,11 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -public interface GroupPrayRepository extends JpaRepository { +public interface GroupPrayRepository extends JpaRepository, + GroupPrayRepositoryCustom { @EntityGraph(attributePaths = {"author"}) - List findGroupPraysByGroup(Group group); + List findByGroup_GroupId(Long groupid); @Query("select g.originPray.id from GroupPray g left join g.originPray left join g.group where g.group.id = :groupId") List getOriginPrayIdByGroupId(@Param("groupId") Long groupId); diff --git a/src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryCustom.java b/src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryCustom.java new file mode 100644 index 00000000..7ff5cce3 --- /dev/null +++ b/src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryCustom.java @@ -0,0 +1,9 @@ +package com.uspray.uspray.domain.group.repository.querydsl; + +import com.uspray.uspray.domain.group.dto.grouppray.GroupPrayResponseDto; +import java.util.List; + +public interface GroupPrayRepositoryCustom{ + + List findGroupPray(Long groupId, Long memberId); +} diff --git a/src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryImpl.java b/src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryImpl.java new file mode 100644 index 00000000..448df594 --- /dev/null +++ b/src/main/java/com/uspray/uspray/domain/group/repository/querydsl/GroupPrayRepositoryImpl.java @@ -0,0 +1,34 @@ +package com.uspray.uspray.domain.group.repository.querydsl; + +import static com.uspray.uspray.domain.group.model.QGroupPray.groupPray; +import static com.uspray.uspray.domain.group.model.QScrapAndHeart.scrapAndHeart; + +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.jpa.impl.JPAQueryFactory; +import com.uspray.uspray.domain.group.dto.grouppray.GroupPrayResponseDto; +import com.uspray.uspray.domain.group.dto.grouppray.QGroupPrayResponseDto; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class GroupPrayRepositoryImpl implements GroupPrayRepositoryCustom { + + private final JPAQueryFactory queryFactory; + + @Override + public List findGroupPray(Long groupId, Long memberId) { + return queryFactory + .select(new QGroupPrayResponseDto( + groupPray, + Expressions.constant(memberId), + scrapAndHeart + )) + .from(groupPray) + .where(groupPray.group.id.eq(groupId)) + .leftJoin(groupPray.scrapAndHeart, scrapAndHeart) + .on(scrapAndHeart.member.id.eq(memberId)) + .fetch(); + } +} diff --git a/src/main/java/com/uspray/uspray/domain/group/service/GroupMemberService.java b/src/main/java/com/uspray/uspray/domain/group/service/GroupMemberService.java index 5f56bfce..d8b4d66f 100644 --- a/src/main/java/com/uspray/uspray/domain/group/service/GroupMemberService.java +++ b/src/main/java/com/uspray/uspray/domain/group/service/GroupMemberService.java @@ -37,8 +37,8 @@ public void deleteAllByGroup(Group group) { groupMemberRepository.deleteAllByGroup(group); } - public GroupMember getGroupMemberByGroupAndMember(Group group, Member member) { - return groupMemberRepository.getGroupMemberByGroupAndMember(group, member); + public GroupMember getGroupMemberByGroupAndMember(Long groupId, Member member) { + return groupMemberRepository.findByGroup_GroupIdAndMember(groupId, member); } } diff --git a/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayFacade.java b/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayFacade.java index 86caa23e..7ad5f0c1 100644 --- a/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayFacade.java +++ b/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayFacade.java @@ -24,7 +24,6 @@ import com.uspray.uspray.global.push.service.FCMNotificationService; import java.io.IOException; import java.time.LocalDate; -import java.util.ArrayList; import java.util.Base64; import java.util.Comparator; import java.util.List; @@ -121,23 +120,14 @@ public void createGroupPray(GroupPrayRequestDto groupPrayRequestDto, String user public GroupPrayRappingDto getGroupPray(Long groupId, String userId) { Member member = memberService.findMemberByUserId(userId); - Group group = groupService.getGroupById(groupId); - List groupPrays = groupPrayService.findGroupPraysByGroup(group); + List groupPrays = groupPrayService.findGroupPraysByGroup(groupId); Long count = scrapAndHeartService.countHeart(groupPrays); - List groupPrayList = new ArrayList<>(); - for (GroupPray groupPray : groupPrays) { - ScrapAndHeart scrapAndHeart = scrapAndHeartService.findScrapAndHeartByGroupPrayAndMember( - groupPray, member).orElse(null); - groupPrayList.add(GroupPrayResponseDto.builder() - .groupPray(groupPray) - .member(member) - .scrapAndHeart(scrapAndHeart) - .build()); - } + List groupPrayList = groupPrayService.getGroupPrayDto(groupId, + member.getId()); - GroupMember groupMember = groupMemberService.getGroupMemberByGroupAndMember(group, member); + GroupMember groupMember = groupMemberService.getGroupMemberByGroupAndMember(groupId, member); return new GroupPrayRappingDto(count, groupMember.getNotificationAgree(), makeSortedTreeMap(groupPrayList)); diff --git a/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayService.java b/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayService.java index da5c0655..2c916e5d 100644 --- a/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayService.java +++ b/src/main/java/com/uspray/uspray/domain/group/service/GroupPrayService.java @@ -1,5 +1,6 @@ package com.uspray.uspray.domain.group.service; +import com.uspray.uspray.domain.group.dto.grouppray.GroupPrayResponseDto; import com.uspray.uspray.domain.group.model.Group; import com.uspray.uspray.domain.group.model.GroupPray; import com.uspray.uspray.domain.group.repository.GroupPrayRepository; @@ -38,8 +39,12 @@ public List getOriginPrayIdsByGroupId(Long groupId) { return groupPrayRepository.getOriginPrayIdByGroupId(groupId); } - public List findGroupPraysByGroup(Group group) { - return groupPrayRepository.findGroupPraysByGroup(group); + public List findGroupPraysByGroup(Long groupId) { + return groupPrayRepository.findByGroup_GroupId(groupId); + } + + public List getGroupPrayDto(Long groupId, Long memberId) { + return groupPrayRepository.findGroupPray(groupId, memberId); } }